From 7d05c69630d066c0992368423f90e440e3638f91 Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期日, 29 九月 2024 11:01:51 +0800 Subject: [PATCH] 整合代码 --- Source/UBCS-WEB/src/views/integration/systemInfo.vue | 266 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 230 insertions(+), 36 deletions(-) diff --git a/Source/UBCS-WEB/src/views/integration/systemInfo.vue b/Source/UBCS-WEB/src/views/integration/systemInfo.vue index 7cd24b1..90d9aac 100644 --- a/Source/UBCS-WEB/src/views/integration/systemInfo.vue +++ b/Source/UBCS-WEB/src/views/integration/systemInfo.vue @@ -1,13 +1,16 @@ <template> <basic-container> - <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :search.sync="search" :table-loading="loading" + <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :permission="permissionList" + :search.sync="search" + :table-loading="loading" @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit" @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage" @selection-change="selectionChange" @row-click="handleRowClick"> <template slot="menuLeft"> <!-- <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇� </el-button> --> - <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄� + <el-button v-if="permissionList.delBtn" icon="el-icon-delete" size="small" type="danger" + @click="handleDeleteByIds">鍒� 闄� </el-button> </template> <template slot="search" slot-scope="{row,size}"> @@ -19,42 +22,63 @@ :size="size" clearable style="width:300px;margin-left: 10px;" @clear="handleClear" @keyup.enter.native="handleEnter"></el-input> </template> - <template #menu="{row,index,size}"> - <el-button type="text" icon="el-icon-menu" size="small" @click="classifyHandler">鍒嗙被鎺堟潈</el-button> - + <template v-if="permissionList.empower" #menu="{row,index,size}"> + <el-button icon="el-icon-menu" size="small" type="text" @click="classifyHandler(row)">鍒嗙被鎺堟潈</el-button> </template> + + </avue-crud> - <el-dialog :visible.sync="dialogVisible" append-to-body title="鍒嗙被鎺堟潈"> + <el-dialog :visible.sync="dialogVisible" append-to-body class="avue-dialog avue-dialog--top" title="鍒嗙被鎺堟潈" + top="-50px"> <el-row> - <el-col :span="14"> + <el-col :span="10"> <avue-tree ref="tree" - :option="TreeOption" - :data="TreeData" v-model="TreeForm" + :data="TreeData" + :option="TreeOption" @check-change="checkChange"> </avue-tree> </el-col> </el-row> + + <div slot="footer" class="dialog-footer" style="height: 50px;line-height: 50px"> + <el-button icon="el-icon-plus" size="small" type="primary" @click="empower">鎺� 鏉�</el-button> + <el-button icon="el-icon-close" size="small" type="danger" @click="resetting">閲� 缃�</el-button> + </div> </el-dialog> </basic-container> </template> <script> -import {getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel} from '@/api/integration/sysInfo.js' +import { + getSysInfoList, + sysInfoAdd, + sysInfoEdit, + sysInfoDel, + sysInfoTree, + batchAddSave +} from '@/api/integration/sysInfo.js' +import {mapGetters} from "vuex"; export default { data() { return { - TreeOption:{ - defaultExpandAll: true, + checkAll: {}, + ParentList: [], + ParentRemoveList: [], + //閬垮厤缂撳瓨 + reload: Math.random(), + TreeLoading: false, + TreeOption: { + defaultExpandAll: false, multiple: true, - addBtn:false, - filter:false + addBtn: false, + filter: false }, - TreeData:[], - TreeForm:{}, + TreeData: [], + TreeForm: {}, loading: false, - dialogVisible:false, + dialogVisible: false, page: { currentPage: 1, pageSize: 10, @@ -71,8 +95,25 @@ search: {}, delIds: [], data: [], - option: { + + } + }, + created() { + }, + computed: { + ...mapGetters(["permission"]), + permissionList() { + return { + addBtn: this.vaildData(this.permission.systemInfo.systemInfo_add, false), + editBtn: this.vaildData(this.permission.systemInfo.systemInfo_edit, false), + delBtn: this.vaildData(this.permission.systemInfo.systemInfo_delete, false), + empower: this.vaildData(this.permission.systemInfo.systemInfo_empower, false), + } + }, + option() { + return { height: "auto", + calcHeight: 20, tip: false, border: true, align: 'center', @@ -115,22 +156,174 @@ type: 'textarea' } ] - }, + } } }, methods: { + //閲嶇疆 + resetting() { + this.$refs.tree.setCheckedKeys([]) + // console.log(this.ParentList) + }, + empower() { + batchAddSave(this.checkAll.oid, this.checkAll.id, this.ParentList).then(res => { + // console.log(res.data) + if (res.data.code === 200) { + this.$message.success(res.data.msg) + this.dialogVisible = false; + } + }) + }, //鍒嗙被鎺堟潈澶氶�夊洖璋� - checkChange(){ - + checkChange(row, checked) { + if (checked) { + this.addAllChildren(row.children); + this.addToParentList(row); + // 鍕鹃�夎鏃跺皢鎵�鏈夎妭鐐规坊鍔犲埌ParentList涓� + } else { + this.removeAllChildren(row.children); + this.removeFromParentList(row); + // 鍙栨秷鍕鹃�夊皢鎵�鏈夎妭鐐规坊鍔犱粠ParentList涓Щ闄� + } + // console.table(this.ParentList); + }, + //瀛愯妭鐐规坊鍔� + addAllChildren(children) { + for (let child of children) { + this.addToParentList(child); + // 灏嗗瓙鑺傜偣娣诲姞鍒� ParentList 涓� + if (child.children && child.children.length > 0) { + this.addAllChildren(child.children); + } + } + }, + //瀛愯妭鐐圭Щ闄� + removeAllChildren(children) { + for (let child of children) { + this.removeFromParentList(child); + // 灏嗗瓙鑺傜偣浠� ParentList 涓Щ闄� + if (child.children && child.children.length > 0) { + this.removeAllChildren(child.children); + } + } + }, + //褰撳墠鐖惰妭鐐规坊鍔� + addToParentList(item) { + const classifyOid = item.attributes.classifyOid; + if (!this.isClassifyOidExists(classifyOid)) { + const record = { + oid: item.oid, + classifyId: item.attributes.classifyId, + classifyOid: classifyOid, + }; + this.ParentList.push(record); + } + }, + //褰撳墠鐖惰妭鐐圭Щ闄� + removeFromParentList(item) { + const classifyOid = item.attributes.classifyOid; + if (this.isClassifyOidExists(classifyOid)) { + const index = this.findIndexByClassifyOid(classifyOid); + if (index !== -1) { + this.ParentList.splice(index, 1); + } + } + }, + //鍒ら噸-ParentList + isClassifyOidExists(classifyOid) { + return this.ParentList.some(item => item.classifyOid === classifyOid); + }, + //鏌ユ壘index浣嶇疆 + findIndexByClassifyOid(classifyOid) { + return this.ParentList.findIndex(item => item.classifyOid === classifyOid); }, //鍒嗙被鎺堟潈 - classifyHandler(){ - this.dialogVisible=true; + classifyHandler(row) { + this.loading = true; + this.checkAll = row + sysInfoTree({systemOid: row.oid, systemId: row.id}).then(res => { + let List = []; + let value = 0; + let NumberList = []; + + function traverse(obj, parent) { + //閲嶆柊鏋勫缓涓�娆¢�変腑褰撳墠row鐨勬暟鎹� + const record = { + label: obj.text, + oid: obj.oid, + attributes: { + classifyId: obj.attributes.classifyId, + classifyOid: obj.attributes.classifyOid, + selected: obj.attributes.selected + }, + classParentOid: obj.parentId, + value: value, + children: [] + }; + //褰撳墠宸查�夋嫨鏁版嵁鍥炲~ + if (record.attributes.selected == 'true') { + NumberList.push(record.value); + } + if (parent) { + const stingChild = parent.children.find(child => child.label === record.label); + if (stingChild) { + record.value = stingChild.value; // 浣跨敤宸插瓨鍦ㄧ殑瀛愯妭鐐圭殑value鍊� + } else { + parent.children.push(record); + value++; + } + } else { + const stingRecord = List.find(item => item.label === record.label); + if (stingRecord) { + record.value = stingRecord.value; // 浣跨敤宸插瓨鍦ㄧ殑椤跺眰鑺傜偣鐨剉alue鍊� + } else { + List.push(record); + value++; + } + } + if (obj.children && obj.children.length > 0) { + for (let child of obj.children) { + traverse(child, record); + } + } + } + + for (let item of res.data) { + traverse(item, null); + } + // console.log('list', List); + this.TreeData = List; + // this.ModifyProperties(this.TreeData, 'text', 'label'); + // 鏍规嵁this.TreeData鐨勯暱搴﹁绠楀欢杩熸椂闂� + const delayTime = this.TreeData.length * 1; + setTimeout(() => { + this.loading = false; + this.reload = Math.random(); + this.dialogVisible = true; + + this.$nextTick(() => { + if (this.$refs.tree) { + this.$refs.tree.setCheckedKeys(NumberList); + } + }); + }, delayTime); + }); + }, + //瀹氫箟涓�涓慨鏀规暟鎹睘鎬у悕鐨勬柟娉� + ModifyProperties(obj, oldName, newName) { + for (let key in obj) { + if (key === oldName) { + obj[newName] = obj[key]; + delete obj[key]; + } + if (typeof obj[key] === 'object') { + this.ModifyProperties(obj[key], oldName, newName); + } + } }, async getDataList() { this.loading = true; - console.log(this.search); - const { pageSize, currentPage } = this.page; + const {pageSize, currentPage} = this.page; const conditions = {}; if (Object.keys(this.search).length > 0) { for (const key in this.search) { @@ -141,7 +334,7 @@ } const response = await getSysInfoList(pageSize, currentPage, conditions); if (response.status === 200) { - console.log(response); + // console.log(response); this.loading = false; const data = response.data.data; this.data = data.records; @@ -160,6 +353,7 @@ message: '鏂板鏁版嵁鎴愬姛锛�' }) done(row) + await this.getDataList(); // this.$refs.crud.refreshTable() // this.getDataList() } @@ -180,6 +374,7 @@ }) done(row) } + await this.getDataList(); } catch { loading() } @@ -210,12 +405,12 @@ }).then(async () => { const response = await sysInfoDel(param) if (response.status === 200) { - console.log(response) + // console.log(response) this.$message({ type: 'success', message: '鍒犻櫎鎴愬姛!' }); - this.getDataList() + await this.getDataList() } }) }, @@ -232,9 +427,7 @@ }, // enter鎼滅储 handleEnter() { - if (this.search[this.selectValue] === '') return - else this.getDataList() - + this.getDataList() }, // 杈撳叆妗嗘竻绌� handleClear() { @@ -257,19 +450,20 @@ }, // 澶氶�� selectionChange(list) { - console.log(list) let newData = list.map(item => { const {oid} = item return oid }) this.delIds = {oids: newData.toString()} - console.log(this.delIds) + // console.log(this.delIds) }, } } </script> <style lang="scss" scoped> -::v-deep(.avue-crud .el-select) { - width: 100px !important; -} + ::v-deep{ + .avue-crud .el-select { + width: 100px !important; + } + } </style> -- Gitblit v1.9.3