ebc

menu-authorization.vue 11KB

    <template> <div class="authorization-container"> <div class="left-container"> <div class="title"> <div>角色列表</div> </div> <div class="table-content"> <t-table :data="table.data" highlight-current-row @current-change="handleCurrentChange"> <t-table-column prop="name" label="角色名称"></t-table-column> <t-table-column prop="number" label="角色编码"></t-table-column> </t-table> <t-pager :total="table.pager.total" :current.sync="table.pager.currentPage" :page-size.sync="table.pager.size" class="px-24 pt-16 float-right" show-elevator @on-size-change="onSizeChange" @on-change="onPagerChange"> </t-pager> </div> </div> <div class="transfer-container"> <t-transfer ref="transfer" :data="dataTable" :target-keys="targetKeys" :selected-keys="targetKeysTable" :operations="['← 绑定','解绑 →']" :titles="['已关联菜单','可关联菜单']" @change="changeTransfer" > <div slot="listBodyLeft" slot-scope="tableLeft"> <t-tree ref="leftTree" :multiple="true" :with-ancestors="true" :with-descendants="true" :node-data="tableLeft.data" @select="changeLeftTree" ></t-tree> </div> <div slot="listBodyRight" slot-scope="tableRight"> <t-tree ref="rightTree" :multiple="true" :with-ancestors="true" :with-descendants="true" :node-data="tableRight.data" @select="changeRightTree" ></t-tree> </div> </t-transfer> </div> </div> </template> <script> import './menu-authorization.scss' export default { data() { return { table: { data: [ { name: '超级管理员', number: 'superadmin' }, { name: '超级管理员', number: 'superadmin' }, { name: '超级管理员', number: 'superadmin' } ], pager: { currentPage: 1, size: 10, total: 0 } }, dataTable: [ { key: '1', label: '地图监控', title: '地图监控', id: '1' }, { key: '2', label: '智能报警', title: '智能报警', value: 'node_2', id: '2' }, { key: '3', label: '统计报表', title: '统计报表', value: 'node_5', id: '3' }, { key: '4', label: '轨迹分析', title: '轨迹分析', value: 'node_3', id: '4', pid: '3' }, { key: '5', label: '作业考勤', title: '作业考勤', value: 'node_4', id: '5', pid: '3' }, { key: '6', label: '系统管理', title: '系统管理', id: '6' }, { key: '7', label: '终端管理', title: '终端管理', id: '7', pid: '6' }, { key: '8', label: '地图标记', title: '地图标记', pid: '3', id: '8' } ], targetKeysTable: [], targetKeys: [], copyData: [], removeData: [] } }, methods: { handleCurrentChange(val) { this.currentRow = val }, changeTransfer(targetKeys, direction, moveKeys) { console.log('change', targetKeys, direction, moveKeys) if (this.copyData.length > 0) { // this.dataTable = this.dataTable.concat(this.copyData) // this.targetKeysTable.push(this.copyData.id) this.copyData.forEach(element => { this.dataTable.splice(element.index, 0, element) }) this.copyData = [] } if (this.removeData.length > 0) { console.log(this.removeData) this.removeData.forEach(element => { this.dataTable.splice(element.index, 1) }) this.removeData = [] } console.log(this.targetKeysTable) }, changeLeftTree(ids) { console.log(ids) var transferId = [] ids.forEach(id => { console.log(this.isContained(ids, this.$refs.leftTree.getNodeStateById(id).children)) if (this.$refs.leftTree.getNodeStateById(id).children && this.isContained(ids, this.$refs.leftTree.getNodeStateById(id).children)) { // 修改子节点的pid var includeFlag = true this.$refs.leftTree.getNodeStateById(id).children.forEach(elementChild => { // 不含在选中的ids if (ids.indexOf(elementChild) === -1) { includeFlag = false this.dataTable.forEach(elementChildTable => { if (elementChildTable.id === elementChild) { if (elementChildTable.pid.indexOf('copy') === -1) { elementChildTable.pid = 'copy' + elementChildTable.pid } } }) } else { this.dataTable.forEach(elementChildTable => { if (elementChildTable.id === elementChild) { if (elementChildTable.pid.indexOf('copy') !== -1) { elementChildTable.pid = elementChildTable.pid.slice(4) } } }) } }) if (id.indexOf('copy') === -1) { var flag = false this.copyData.forEach(element => { if (element.id === 'copy' + id) { flag = true } }) if (!flag) { var dataIndex = 0 this.dataTable.forEach((e, index) => { if (e.id === id) { dataIndex = index } }) this.copyData.push({ key: 'copy' + id, label: this.$refs.leftTree.getNodeStateById(id).label, title: this.$refs.leftTree.getNodeStateById(id).title, id: 'copy' + id, index: dataIndex }) } if (includeFlag) { var includeIndex = 0 this.dataTable.forEach((e, index) => { if (e.id === id) { includeIndex = index } }) this.removeData.push({ key: id, label: this.$refs.leftTree.getNodeStateById(id).label, title: this.$refs.leftTree.getNodeStateById(id).title, id: id, index: includeIndex }) } } else { if (includeFlag) { var includeIndex = 0 this.dataTable.forEach((e, index) => { if (e.id === id) { includeIndex = index } }) this.removeData.push({ key: id, label: this.$refs.leftTree.getNodeStateById(id).label, title: this.$refs.leftTree.getNodeStateById(id).title, id: id, index: includeIndex }) } } } if (id.indexOf('copy') === -1) { transferId.push(id) } else { console.log(this.$refs.leftTree.getNodeStateById(id).children) if (!this.$refs.leftTree.getNodeStateById(id).children) { console.log(123213, id) } } }) console.log(transferId) this.targetKeysTable = transferId }, changeRightTree(ids) { console.log(ids) var transferId = [] ids.forEach(id => { console.log(this.$refs.rightTree.getNodeStateById(id)) if (this.$refs.rightTree.getNodeStateById(id).children && this.isContained(ids, this.$refs.rightTree.getNodeStateById(id).children)) { // 修改子节点的pid var includeFlag = true this.$refs.rightTree.getNodeStateById(id).children.forEach(elementChild => { // 不含在选中的ids if (ids.indexOf(elementChild) === -1) { includeFlag = false // this.dataTable.forEach(elementChildTable => { // if (elementChildTable.id === elementChild) { // if (elementChildTable.pid.indexOf('copy') === -1) { // elementChildTable.pid = 'copy' + elementChildTable.pid // } // } // }) } else { // this.dataTable.forEach(elementChildTable => { // if (elementChildTable.id === elementChild) { // if (elementChildTable.pid.indexOf('copy') !== -1) { // elementChildTable.pid = elementChildTable.pid.slice(4) // } // } // }) this.dataTable.forEach(elementChildTable => { if (elementChildTable.id === elementChild) { if (elementChildTable.pid.indexOf('copy') === -1) { elementChildTable.pid = 'copy' + elementChildTable.pid } } }) } }) if (includeFlag) { transferId.push(id) var includeIndex = 0 this.dataTable.forEach((e, index) => { if (e.id === id) { includeIndex = index } }) this.removeData.push({ key: id, label: this.$refs.rightTree.getNodeStateById(id).label, title: this.$refs.rightTree.getNodeStateById(id).title, id: id, index: includeIndex }) } else { var dataIndex = 0 this.dataTable.forEach((e, index) => { if (e.id === id) { dataIndex = index } }) this.copyData.push({ key: 'copy' + id, label: this.$refs.rightTree.getNodeStateById(id).label, title: this.$refs.rightTree.getNodeStateById(id).title, id: 'copy' + id, index: dataIndex }) } } else { transferId.push(id) } if (id.indexOf('copy') === -1) { // transferId.push(id) } else { console.log(this.$refs.rightTree.getNodeStateById(id).children) if (!this.$refs.rightTree.getNodeStateById(id).children) { console.log(123213, id) } } }) console.log(transferId) this.targetKeysTable = transferId }, onPagerChange(page) { }, onSizeChange(number) { }, isContained (a, b) { if (!(a instanceof Array) || !(b instanceof Array)) return false // if (a.length < b.length) return false var aStr = a.toString() for (var i = 0, len = b.length; i < len; i++) { if (aStr.indexOf(b[i]) !== -1) return true } return false } } } </script>