linkis-web-next/src/pages/basedataManagement/errorCode/index.vue (154 lines of code) (raw):

<!-- ~ Licensed to the Apache Software Foundation (ASF) under one or more ~ contributor license agreements. See the NOTICE file distributed with ~ this work for additional information regarding copyright ownership. ~ The ASF licenses this file to You under the Apache License, Version 2.0 ~ (the "License"); you may not use this file except in compliance with ~ the License. You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <template> <FForm layout="inline" :span="4"> <FFormItem :label="t('message.linkis.basedataManagement.searchLabel')" :props="t('message.linkis.basedataManagement.searchLabel')" > <FInput v-model="searchName" :placeholder="t('message.linkis.basedataManagement.errorCode.searchPlaceholder')" /> </FFormItem> <FFormItem> <div class="btns"> <FButton type="primary" @click="() => { search() }"> {{ t('message.linkis.find') }} </FButton> <FButton type="info" @click="handleAdd"> {{ t('message.common.add') }} </FButton> </div> </FFormItem> </FForm> <f-table :data="dataList" class="table" :rowKey="(row: Record<string, number | string>) => row.id" :emptyText="t('message.linkis.noDataText')" > <template v-for="col in tableColumns" :key="col.label"> <f-table-column v-if="col.formatter" :prop="col.prop" :label="col.label" :formatter="col.formatter" /> <f-table-column v-else :prop="col.prop" :label="col.label" :action="col.action" /> </template> </f-table> <FPagination class="pagination" show-size-changer show-total :total-count="totalSize" v-model:currentPage="currentPage" @change="handleChangePagination" :pageSizeOption="[10, 20, 30, 50, 100]" v-model:pageSize="pageSize" /> <Modal ref="modalRef" :handleInitialization="handleInitialization" /> </template> <script lang="ts" setup> import api from "@/service/api"; import { FMessage, FModal } from "@fesjs/fes-design"; import { onMounted, reactive, ref } from "vue"; import Modal from "./modal.vue"; import { useI18n } from "vue-i18n"; const { t } = useI18n(); const modalRef = ref(); const searchName = ref(""); const dataList = ref(); const currentPage = ref(1); const pageSize = ref(10); const totalSize = ref(0); const handleAdd = () => { modalRef.value?.open(); }; const handleEdit = (error: any) => { modalRef.value?.open(error); }; const handleDelete = (error: any) => { FModal.confirm({ title: t("message.linkis.modal.modalTitle"), content: t('message.linkis.modal.modalDeleteRecord'), onOk: () => { api.fetch(`/basedata-manager/error-code/${error.id}`, "delete").then(() => { FMessage.success(t("message.linkis.basedataManagement.modal.modalDeleteSuccess")); search(); }).catch((err: any) => { window.console.error(err); }); } }); }; const tableColumns = reactive<{ prop?: string, label: string, action?: any, formatter?: any }[]>([ { prop: "id", label: "ID", }, { prop: "errorCode", label: t("message.linkis.basedataManagement.errorCode.errorCode"), }, { prop: "errorDesc", label: t("message.linkis.basedataManagement.errorCode.errorDesc"), }, { prop: "errorRegex", label: t("message.linkis.basedataManagement.errorCode.errorRegex"), }, { label: `\u00A0\u00A0\u00A0\u00A0${t('message.linkis.columns.control.title')}`, action: [ { label: t('message.linkis.edit'), func: (access: any) => { handleEdit(access); }, }, { label: t('message.common.delete'), func: (access: any) => { handleDelete(access); }, }, ] }, ]); const search = (currentPage = 1) => { api.fetch("/basedata-manager/error-code", { searchName: searchName.value, currentPage, pageSize: pageSize.value, }, "get").then((res: any) => { dataList.value = [...res.list.list] || []; totalSize.value = res.list.total; }); }; const handleChangePagination = () => { search(currentPage.value); }; const handleInitialization = () => { search(); }; onMounted(() => { handleInitialization(); }); </script> <style lang="less" scoped> .btns { display: flex; gap: 12px; } .pagination { display: flex; justify-content: flex-end; margin-top: 16px; } </style>