From 38e344e41c5d8b13ae278a9a0acb5444828f9efc Mon Sep 17 00:00:00 2001 From: xuyiming Date: Mon, 8 Jun 2020 15:35:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90=E5=A4=9A?= =?UTF-8?q?=E9=80=89=E7=BB=84=E4=BB=B6=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/css/index.css | 9 + src/components/menu-permission.vue | 282 ++++++++++++++++++++--------- src/pages/authority/addroles.vue | 231 +++++++++++++++-------- 3 files changed, 356 insertions(+), 166 deletions(-) diff --git a/src/assets/css/index.css b/src/assets/css/index.css index aebd520..977d6ce 100644 --- a/src/assets/css/index.css +++ b/src/assets/css/index.css @@ -582,4 +582,13 @@ width: 620px!important; font-size: 14px; color: #dde4ff; margin: 0 20px; +} + +.apass_checkbox .el-checkbox__input.is-checked .el-checkbox__inner, +.apass_checkbox .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #626de9; + border-color: #515fe7; +} +.apass_checkbox .el-checkbox__input.is-checked + .el-checkbox__label { + color: #58617a; } \ No newline at end of file diff --git a/src/components/menu-permission.vue b/src/components/menu-permission.vue index d1e4bd8..a2e1b22 100644 --- a/src/components/menu-permission.vue +++ b/src/components/menu-permission.vue @@ -1,36 +1,126 @@ @@ -41,86 +131,104 @@ export default { event: "change-permissions", }, props: { - permissions: { - type: Object, - default: {}, - }, data: { type: Array, default: () => [], }, }, - data: () => ({ - selectAllInfo: {}, - }), - watch: { - permissions: { - handler() { - this.upSelectAllInfo(); - }, - deep: true, - }, - }, methods: { - selectPermission(values) { - this.$emit("change-permissions", this.permissions); - }, - upSelectAllInfo() { - this.data.forEach((item) => { - let values = this.permissions[item.prop]; - let datas = this.data.find((v) => v.prop === item.prop).children; - let selectAllFlag = true; + selectedItem( + selected_item, + p_item = null, // 父元素 + gp_item = null, // 祖父元素 + ggp_item = null // 曾祖父元素 + ) { + let selected = !(selected_item.selected || false); + + this.traverse(selected_item, (v) => { + this.$set(v, "selected", selected); + }); + + if (p_item) { + let selectedAll = true; - datas.forEach((v) => { - selectAllFlag = selectAllFlag && values.indexOf(v.value) > -1; + p_item.children.forEach((item) => { + selectedAll = selectedAll && item.selected; }); - this.selectAllInfo[item.prop] = selectAllFlag; - }); - }, - selectAll(prop) { - let newValues = { ...this.permissions }; + this.$set(p_item, "selected", selectedAll); + } - this.selectAllInfo[prop] = !this.selectAllInfo[prop]; + if (gp_item) { + let selectedAll = true; - if (this.selectAllInfo[prop]) { - newValues[prop] = this.data - .find((item) => item.prop === prop) - .children.map((item) => item.value); - } else { - newValues[prop] = []; + gp_item.children.forEach((item) => { + selectedAll = selectedAll && item.selected; + }); + + this.$set(gp_item, "selected", selectedAll); + } + + if (ggp_item) { + let selectedAll = true; + + ggp_item.children.forEach((item) => { + selectedAll = selectedAll && item.selected; + }); + + this.$set(ggp_item, "selected", selectedAll); + } + + this.$emit("change", this.data); + }, + traverse(obj, cb) { + cb(obj); + + if (obj.children && obj.children.length) { + obj.children.forEach((item) => { + this.traverse(item, cb); + }); } - this.$emit("change-permissions", newValues); }, }, - mounted() { - this.upSelectAllInfo(); - }, + mounted() {}, }; - - diff --git a/src/pages/authority/addroles.vue b/src/pages/authority/addroles.vue index 5f9eb01..bf42119 100644 --- a/src/pages/authority/addroles.vue +++ b/src/pages/authority/addroles.vue @@ -51,9 +51,8 @@ style="margin-bottom:100px;margin-top:20px;" > @@ -77,126 +76,200 @@ export default { date: "", }, now_user: 2, //0:普通用户,1:组织管理员,2:超级管理员 - permission: { - value1: [11, 13], - value2: [], - value3: [31, 32, 33], - value4: [], - value5: [], - }, permissionData: [ { name: "权限管理1", - prop: "value1", + selected: false, + value: 1, children: [ { - name: "权限管理1", + name: "权限管理1-1", + selected: false, value: 11, + children: [ + { + name: "权限管理1-1-1", + selected: false, + value: 111, + children: [ + { + name: "权限管理1-1-1-1", + selected: false, + value: 1111, + }, + { + name: "权限管理1-1-1-2", + selected: false, + value: 1112, + }, + { + name: "权限管理1-1-1-3", + selected: false, + value: 1113, + }, + ], + }, + ], }, { - name: "权限管理2", + name: "权限管理1-2", + selected: false, value: 12, - }, - { - name: "权限管理3", - value: 13, + children: [ + { + name: "权限管理1-2-1", + selected: false, + value: 121, + children: [ + { + name: "权限管理1-2-1-1", + selected: false, + value: 1211, + }, + { + name: "权限管理1-2-1-2", + selected: false, + value: 1212, + }, + { + name: "权限管理1-2-1-3", + selected: false, + value: 1213, + }, + ], + }, + ], }, ], }, { name: "权限管理2", - prop: "value2", + selected: false, + value: 2, children: [ { - name: "权限管理1", + name: "权限管理2-1", + selected: false, value: 21, + children: [ + { + name: "权限管理2-1-1", + selected: false, + value: 211, + children: [ + { + name: "权限管理2-1-1-1", + selected: false, + value: 2111, + }, + { + name: "权限管理2-1-1-2", + selected: false, + value: 2112, + }, + { + name: "权限管理2-1-1-3", + selected: false, + value: 2113, + }, + ], + }, + ], }, { - name: "权限管理2", + name: "权限管理2-2", + selected: false, value: 22, - }, - { - name: "权限管理3", - value: 23, - }, - { - name: "权限管理4", - value: 24, - }, - { - name: "权限管理5", - value: 25, - }, - { - name: "权限管理6", - value: 26, - }, - { - name: "权限管理7", - value: 27, - }, - { - name: "权限管理8", - value: 28, - }, - { - name: "权限管理9", - value: 29, + children: [ + { + name: "权限管理2-2-1", + selected: false, + value: 221, + children: [ + { + name: "权限管理2-2-1-1", + selected: false, + value: 2211, + }, + { + name: "权限管理2-2-1-2", + selected: false, + value: 2212, + }, + { + name: "权限管理2-2-1-3", + selected: false, + value: 2213, + }, + ], + }, + ], }, ], }, { name: "权限管理3", - prop: "value3", + selected: false, + value: 3, children: [ { - name: "权限管理1", + name: "权限管理3-1", + selected: false, value: 31, + children: [ + { + name: "权限管理3-1-1", + selected: false, + value: 311, + children: [ + { + name: "权限管理3-1-1-1", + selected: false, + value: 3111, + }, + { + name: "权限管理3-1-1-2", + selected: false, + value: 3112, + }, + { + name: "权限管理3-1-1-3", + selected: false, + value: 3113, + }, + ], + }, + ], }, { - name: "权限管理2", + name: "权限管理3-2", + selected: false, value: 32, - }, - { - name: "权限管理3", - value: 33, + children: [ + { + name: "权限管理3-2-1", + selected: false, + value: 321, + }, + ], }, ], }, { name: "权限管理4", - prop: "value4", + selected: false, + value: 4, children: [ { - name: "权限管理1", + name: "权限管理4-1", + selected: false, value: 41, }, { - name: "权限管理2", + name: "权限管理4-2", + selected: false, value: 42, }, - { - name: "权限管理4", - value: 43, - }, - ], - }, - { - name: "权限管理5", - prop: "value5", - children: [ - { - name: "权限管理1", - value: 51, - }, - { - name: "权限管理2", - value: 52, - }, - { - name: "权限管理5", - value: 53, - }, ], }, ], -- 2.26.0