From be050fe89112d99e4fe43296454116ce51f52abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cyiyousong=E2=80=9D?= <鈥測ousong_yi@foxmail.com鈥�> Date: Thu, 20 Feb 2025 09:14:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/src/pages/basicset/deploy/Index.vue | 50 ++++ .../src/pages/basicset/deploy/Statement.vue | 276 ++++++++++++++++++ .../src/pages/basicset/deploy/deploy.vue | 31 +- .../basicset/deploy/modal/AddStatement.vue | 51 +++- base-manager-ui/admin/src/router/config.js | 21 +- 5 files changed, 396 insertions(+), 33 deletions(-) create mode 100644 base-manager-ui/admin/src/pages/basicset/deploy/Index.vue create mode 100644 base-manager-ui/admin/src/pages/basicset/deploy/Statement.vue diff --git a/base-manager-ui/admin/src/pages/basicset/deploy/Index.vue b/base-manager-ui/admin/src/pages/basicset/deploy/Index.vue new file mode 100644 index 00000000..c2cb6bbc --- /dev/null +++ b/base-manager-ui/admin/src/pages/basicset/deploy/Index.vue @@ -0,0 +1,50 @@ +<template> + <div class="page flex flexc"> + <a-tabs :activeKey="activeKey" @change="changeRouter"> + <a-tab-pane key="/deploy/manage"> + <span slot="tab"> + <a-icon type="folder-add" /> + 妯″潡绠$悊 + </span> + </a-tab-pane> + <a-tab-pane key="/deploy/statement"> + <span slot="tab"> + <a-icon type="project" /> + 鎶ヨ〃绠$悊 + </span> + </a-tab-pane> + </a-tabs> + <div class="out-box flex1"> + <router-view></router-view> + </div> + </div> +</template> + +<script> +export default { + computed: { + activeKey() { + return this.$route.path; + }, + }, + methods: { + changeRouter(path) { + this.$router.push(path); + }, + }, +}; +</script> + +<style lang="less" scoped> +.page { + width: 100%; + height: 100%; + .out-box { + padding: 0px 15px 15px 15px; + overflow-y: auto; + } + /deep/.ant-tabs-nav-container { + border-bottom: 1px solid #f0f0f0 !important; + } +} +</style> diff --git a/base-manager-ui/admin/src/pages/basicset/deploy/Statement.vue b/base-manager-ui/admin/src/pages/basicset/deploy/Statement.vue new file mode 100644 index 00000000..0d479d39 --- /dev/null +++ b/base-manager-ui/admin/src/pages/basicset/deploy/Statement.vue @@ -0,0 +1,276 @@ +<template> + <div> + <div class="flex aic jcb mb20"> + <div> + <a-space> + <a-button type="primary" @click="handleAdd"> 鏂板 </a-button> + <a-button type="danger" @click="handleDelAll"> 鎵归噺鍒犻櫎 </a-button> + </a-space> + </div> + <a-space> + <a-select optionFilterProp="label" v-model="censusType"> + <a-select-option value=""> 鍏ㄩ儴绫诲瀷 </a-select-option> + <a-select-option + v-for="(v, key) in dict.censusType" + :key="key" + :value="Number(key)" + > + {{ v }} + </a-select-option> + </a-select> + <a-space> + <a-input + placeholder="璇疯緭鍏ユ姤琛ㄥ悕绉版悳绱�" + v-model="censusName" + allowClear + /> + <a-button type="primary" @click="onSearch">鎼滅储</a-button> + <a-button @click="resetSearch">閲嶇疆</a-button> + </a-space> + + <!-- + <a-input-search + style="width: 300px" + placeholder="璇疯緭鍏ユ姤琛ㄥ悕绉版悳绱�" + enter-button="鎼滅储" + v-model="censusName" + allowClear + @search="onSearch" + /> --> + </a-space> + </div> + <!-- 琛ㄦ牸 --> + <div class="table-content"> + <y-table + :columns="columns" + :data="tableData" + :pageSize.sync="size" + :page.sync="page" + :total="total" + :loading="loading" + :scroll="{ y: 560 }" + :row-selection="{ + selectedRowKeys: selectedRowKeys, + onChange: onSelectChange, + }" + @changePagination="getStatementList" + > + <!-- 搴忓彿 --> + <span slot="index" slot-scope="{ index }">{{ + (page - 1) * size + index + 1 + }}</span> + <!-- 鎵€灞炴ā鍧� --> + <template slot="model" slot-scope="{ record }"> + {{ filterModel(record.modelId) }} + </template> + <!-- 缁熻绫诲瀷 --> + <template slot="censusType" slot-scope="{ record }"> + {{ dict.censusType[record.censusType] }} + </template> + <!-- 鏄惁寮€鏀� --> + <template slot="status" slot-scope="{ record }"> + <a-tag color="blue" v-if="record.status === 1"> 鏄� </a-tag> + <a-tag color="red" v-else> 鍚� </a-tag> + </template> + <!-- 鎿嶄綔 --> + <template slot="action" slot-scope="{ record }"> + <a-space size="middle"> + <a href="javascript:;" class="primary" @click="handleEdit(record)" + >缂栬緫</a + > + <a href="javascript:;" class="delete" @click="handleDel(record.id)" + >鍒犻櫎</a + > + </a-space> + </template> + </y-table> + </div> + <!-- 鏂板鎶ヨ〃 --> + <AddStatement + :addStatementVisile.sync="addStatementVisile" + :title="title" + :dict="dict" + ref="AddStatement" + :modelList="modelData" + @addSuccess="getStatementList" + ></AddStatement> + </div> +</template> + +<script> +import { + getStatementList, + delStatement, + modelList, +} from "@/services/basicsetFun"; +import AddStatement from "./modal/AddStatement.vue"; +import YTable from "@/components/YTable.vue"; +const columns = [ + { + title: "搴忓彿", + dataIndex: "index", + width: "65px", + scopedSlots: { + customRender: "index", + }, + }, + { + title: "鎶ヨ〃鍚嶇О", + dataIndex: "censusName", + }, + { + title: "鎵€灞炴ā鍧�", + scopedSlots: { customRender: "model" }, + }, + { + title: "缁熻绫诲瀷", + width: "160px", + scopedSlots: { customRender: "censusType" }, + }, + { + title: "璁块棶璺敱", + dataIndex: "censusUrl", + }, + { + title: "鏄惁寮€鏀�", + width: "150px", + scopedSlots: { customRender: "status" }, + }, + { + title: "鎿嶄綔", + width: "120px", + scopedSlots: { customRender: "action" }, + }, +]; +export default { + components: { + AddStatement, + YTable, + }, + data() { + return { + columns, + loading: false, + censusType: "", + total: 0, + size: 10, + page: 1, + modelData: [], + selectedRowKeys: [], + tableData: [], + addStatementVisile: false, + title: "鏂板", + censusName: "", + dict: {}, // 瀛楀吀 + }; + }, + + created() { + this.modelList(); + this.getStatementList(); + }, + methods: { + // 鑾峰彇妯″潡 + async modelList() { + let res = await modelList({ + page: 1, + size: -1, + }); + if (res.data.code == 1) { + let { data } = res.data.data; + this.modelData = data; + } + }, + // 鑾峰彇鎶ヨ〃鍒楄〃 + async getStatementList() { + this.loading = true; + let res = await getStatementList({ + page: this.page, + size: this.size, + censusType: this.censusType, + censusName: `%${this.censusName}%`, + }); + this.loading = false; + if (res.data.code == 1) { + let { dict, data, total } = res.data.data; + if (!data.length && this.page > 1) { + this.page -= 1; + this.getStatementList(); + } + this.tableData = data; + this.total = total; + this.dict = dict; + } + }, + handleAdd() { + this.title = "鏂板鎶ヨ〃"; + this.addStatementVisile = true; + this.$refs.AddStatement.onAdd(this.modelInfo); + }, + handleDelAll() { + if (!this.selectedRowKeys.length) { + this.$message.warning("璇峰厛鍕鹃€夋暟鎹�"); + return; + } + let ids = this.selectedRowKeys.join(","); + this.handleDel(ids); + }, + + // 鎼滅储 + onSearch() { + this.page = 1; + this.selectedRowKeys = []; + this.getStatementList(); + }, + resetSearch() { + this.page = 1; + this.selectedRowKeys = []; + this.censusType = ""; + this.censusName = ""; + this.getStatementList(); + }, + // 缂栬緫 + handleEdit(row) { + this.title = "缂栬緫鎶ヨ〃"; + this.addStatementVisile = true; + this.$refs.AddStatement.onEdit(row); + }, + // 鍒犻櫎 + handleDel(id) { + let _this = this; + this.$confirm({ + title: "绯荤粺鎻愮ず", + content: "鍒犻櫎涓嶅彲鎭㈠锛岀‘瀹氳鍒犻櫎鍚楋紵", + okText: "纭畾", + okType: "danger", + cancelText: "鍙栨秷", + centered: true, + icon: "exclamation-circle", + maskClosable: true, + async onOk() { + let res = await delStatement({ id }); + let { code, msg } = res.data; + if (code === 1) { + _this.$message.success(msg); + _this.selectedRowKeys = []; + _this.getStatementList(); + } + }, + }); + }, + // 閫変腑 + onSelectChange(keys) { + this.selectedRowKeys = keys; + }, + + filterModel(modelId) { + let curModel = this.modelData.find((item) => item.id === modelId); + if (curModel) { + return curModel.modelName; + } + }, + }, +}; +</script> + +<style lang="less" scoped></style> diff --git a/base-manager-ui/admin/src/pages/basicset/deploy/deploy.vue b/base-manager-ui/admin/src/pages/basicset/deploy/deploy.vue index 435b0680..87317e5d 100644 --- a/base-manager-ui/admin/src/pages/basicset/deploy/deploy.vue +++ b/base-manager-ui/admin/src/pages/basicset/deploy/deploy.vue @@ -1,7 +1,6 @@ <template> <div class="deploy flex flexc"> - <TabHeader label="閮ㄧ讲鏉垮潡绠$悊"></TabHeader> - <div class="pd15 flex1 auto-scroll-y"> + <div class="flex1 auto-scroll-y"> <div class="control pdr6"> <div> <a-button type="primary" style="margin-right: 10px" @click="handleAdd" @@ -54,29 +53,24 @@ </div> <span v-else>--</span> </template> + <!-- 绫诲瀷 --> + <template slot="type" slot-scope="{ record }"> + {{ dict.type[record.type] }} + </template> <!-- 鍒涘缓鏃堕棿 --> <template slot="createTime" slot-scope="{ record }"> {{ record.createTime | dateFormat }} </template> <!-- 鎿嶄綔 --> <template slot="action" slot-scope="{ record }"> - <a-space> - <span - href="javascript:;" - class="primary pointer" - @click="statementManage(record)" + <a-space size="middle"> + <!-- <span class="primary pointer" @click="statementManage(record)" >閰嶇疆鎶ヨ〃</span - > - <span - href="javascript:;" - class="primary pointer" - @click="handleEdit(record)" + > --> + <span class="primary pointer" @click="handleEdit(record)" >缂栬緫</span > - <span - href="javascript:;" - class="delete pointer" - @click="handleDel(record.id)" + <span class="delete pointer" @click="handleDel(record.id)" >鍒犻櫎</span > </a-space> @@ -196,7 +190,6 @@ <script> import { modelList, addMode, delMode } from "@/services/basicsetFun"; import StatementManage from "./components/StatementManage.vue"; -import TabHeader from "@/components/TabHeader"; import YTable from "@/components/YTable.vue"; import YUpload from "@/components/YUpload.vue"; const columns = [ @@ -234,6 +227,7 @@ const columns = [ }, { title: "绫诲瀷", + width: "8%", scopedSlots: { customRender: "type" }, }, { @@ -248,14 +242,13 @@ const columns = [ }, { title: "鎿嶄綔", - width: "180px", + width: "120px", scopedSlots: { customRender: "action" }, }, ]; export default { components: { StatementManage, - TabHeader, YTable, YUpload, }, diff --git a/base-manager-ui/admin/src/pages/basicset/deploy/modal/AddStatement.vue b/base-manager-ui/admin/src/pages/basicset/deploy/modal/AddStatement.vue index 58eb340c..9ed9a25c 100644 --- a/base-manager-ui/admin/src/pages/basicset/deploy/modal/AddStatement.vue +++ b/base-manager-ui/admin/src/pages/basicset/deploy/modal/AddStatement.vue @@ -19,8 +19,23 @@ :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }" > - <a-form-model-item label="鎵€灞炴ā鍧�"> - <a-input disabled :value="modelInfo.modelName" /> + <a-form-model-item label="鎵€灞炴ā鍧�" prop="modelId"> + <a-select + show-search + allowClear + optionFilterProp="label" + v-model="formData.modelId" + placeholder="璇烽€夋嫨妯″潡" + > + <a-select-option + v-for="v in modelList" + :key="v.id" + :value="v.id" + :label="v.modelName" + > + {{ v.modelName }} + </a-select-option> + </a-select> </a-form-model-item> <a-form-model-item label="鎶ヨ〃鍚嶇О" prop="censusName"> <a-input v-model="formData.censusName" placeholder="璇疯緭鍏ユ姤琛ㄥ悕绉�" /> @@ -32,7 +47,11 @@ /> </a-form-model-item> <a-form-model-item label="缁熻绫诲瀷" prop="censusType"> - <a-select v-model="formData.censusType" placeholder="璇烽€夋嫨缁熻绫诲瀷"> + <a-select + allowClear + v-model="formData.censusType" + placeholder="璇烽€夋嫨缁熻绫诲瀷" + > <a-select-option v-for="(v, key) in dict.censusType" :key="key" @@ -56,37 +75,46 @@ import YSwitch from "@/components/yswitch/YSwitch.vue"; export default { props: { title: { - require: true, + required: true, type: String, default: "", }, addStatementVisile: { type: Boolean, - require: true, + required: true, default: false, }, dict: { type: Object, - require: true, + required: true, default: () => { return {}; }, }, + modelList: { + type: Array, + required: true, + default: () => { + return []; + }, + }, }, components: { YSwitch, }, data() { return { - modelInfo: {}, formData: { - modelId: "", // 妯″潡id + modelId: undefined, // 妯″潡id censusName: "", // 鎶ヨ〃鍚嶇О censusUrl: "", // 鎶ヨ〃璁块棶璺敱 censusType: undefined, // 缁熻绫诲瀷 status: 1, // 鐘舵€侊紙0锛氫负寮€閫氾紝1锛氬紑閫氾級 }, rules: { + modelId: [ + { required: true, message: "璇疯緭鍏ユ墍灞炴ā鍧�", trigger: "change" }, + ], censusName: [ { required: true, message: "璇疯緭鍏ユ姤琛ㄥ悕绉�", trigger: "blur" }, ], @@ -111,16 +139,13 @@ export default { }, methods: { // 鏂板 - onAdd(modelInfo) { + onAdd() { Object.assign(this.formData, this.$options.data().formData); this.formData.id && this.$delete(this.formData, "id"); - this.modelInfo = modelInfo; - this.formData.modelId = modelInfo.id; }, // 缂栬緫 - onEdit(data, modelInfo) { + onEdit(data) { this.$nextTick(() => { - this.modelInfo = modelInfo; this.formData = { ...data }; }); }, diff --git a/base-manager-ui/admin/src/router/config.js b/base-manager-ui/admin/src/router/config.js index 3927f8b7..51068b35 100644 --- a/base-manager-ui/admin/src/router/config.js +++ b/base-manager-ui/admin/src/router/config.js @@ -148,7 +148,26 @@ const options = { icon: "appstore", roles: ["admin"], }, - component: () => import("@/pages/basicset/deploy/deploy"), + component: () => import("@/pages/basicset/deploy/Index"), + redirect: "/deploy/manage", + children: [ + { + path: "manage", + name: "妯″潡绠$悊", + component: () => import("@/pages/basicset/deploy/deploy"), + meta: { + invisible: true, + }, + }, + { + path: "statement", + name: "鎶ヨ〃绠$悊", + meta: { + invisible: true, + }, + component: () => import("@/pages/basicset/deploy/Statement"), + }, + ], }, { -- 2.24.3