一:效果图如下:
二:实现过程
(2-1)通过角色id获取须要要数据
因为我这个性能是角色调配权限,所有这里是通过角色id获取已调配的权限菜单以及全副菜单
而后在获取到树结构的菜单数据
代码如下:
/** * 调配权限按钮 */ permissions(row) { this.permissionsConfirmLoading = true getRoleTree(row.roleId) .then(res => { // 获取以后用户角色调配菜单的id data例如:[1002, 1003, 1004, 1213, 1214, 1000, 1001] this.checkedKeys = res.data.data.checkedMenuId // 获取菜单的全副id data例如[1002, 1003, 1004, 1213, 1214, 1000, 1001] this.allMenuIds = res.data.data.menuIds // 这一步是预防用户不点击节点选项间接保留 this.menuIds = res.data.data.checkedMenuId.join(',') return getMenuTree() }) .then(response => { this.treeData = response.data.data this.roleId = row.roleId this.permissionsConfirmLoading = false this.permissionsModalVisible = true }) }
(2-2)页面的配置
代码如下:
<a-modal :visible="permissionsModalVisible" title="调配权限" :width="740" @cancel="permissionsModalVisible = false" > <a-spin :spinning="permissionsConfirmLoading"> <a-tree ref="roleTree" :checked-keys="checkedKeys" :selected-keys="selectedKeys" checkable :check-strictly="checkStrictly" :expanded-keys="expandedKeys" :tree-data="treeData" :replace-fields="{ key:'id' }" @check="onChangePermissionsTree" @select="onTreeNodeSelect" @expand="onExpand" /> </a-spin> <template slot="footer"> <a-dropdown style="float: left" :trigger="['click']" placement="topCenter"> <a-menu slot="overlay"> <a-menu-item key="1" @click="switchCheckStrictly(1)"> 父子关联 </a-menu-item> <a-menu-item key="2" @click="switchCheckStrictly(2)"> 勾销关联 </a-menu-item> <a-menu-item key="3" @click="checkALL"> 全副勾选 </a-menu-item> <a-menu-item key="4" @click="cancelCheckALL"> 勾销全选 </a-menu-item> <a-menu-item key="5" @click="expandAll"> 开展所有 </a-menu-item> <a-menu-item key="6" @click="closeAll"> 合并所有 </a-menu-item> </a-menu> <a-button> 树操作 <a-icon type="up" /> </a-button> </a-dropdown> <a-button @click="permissionsModalVisible = false"> cancal </a-button> <a-button type="primary" @click="permissionsModalSubmit"> ok </a-button> </template> </a-modal>
(2-3)对应的办法
代码如下:
// 是否设置树组件父子关联 switchCheckStrictly(v) { if (v === 1) { this.checkStrictly = false } else if (v === 2) { this.checkStrictly = true } }, // 是否设置树组件全副勾选 checkALL() { this.checkedKeys = this.allMenuIds }, // 是否设置树组件勾销全副勾选 cancelCheckALL() { this.checkedKeys = [] }, // 树组件全副开展 expandAll() { this.expandedKeys = this.allMenuIds }, // 树组件全副闭合 closeAll() { this.expandedKeys = [] }, // 树组件开展触发 onExpand(expandedKeys) { this.expandedKeys = expandedKeys }, // 点击树节点触发 onTreeNodeSelect(id) { if (id && id.length > 0) { this.selectedKeys = id } }, // 点击复选框,获取曾经选中的复选项id+半选id onChangePermissionsTree(node, event) { if (this.checkStrictly) { this.checkedKeys = node.checked } else { this.checkedKeys = node } },
(2-4)最初的保留
// 更新权限 permissionsModalSubmit() { updPermissions(this.roleId, this.checkedKeys.join(',')).then(res => { if (res.data.data) { // resetRouter() store.dispatch('GenerateRoutes') // 刷新菜单 // store.dispatch('GetInfo') // 刷新用户权限 this.permissionsModalVisible = false return this.$message.success('保留胜利!') } else { return this.$message.error('保留失败!') } }) },
最初data的数据(懒的一个一个找进去,自行取须要的)
roleId: '', checkStrictly: true, autoExpandParent: true, loading: false, roleModalTitle: '', roleModalType: 0, roleModalVisible: false, permissionsModalVisible: false, roleConfirmLoading: false, permissionsConfirmLoading: false, formItemLayout: { labelCol: { xs: { span: 24 }, sm: { span: 5 } }, wrapperCol: { xs: { span: 24 }, sm: { span: 13 } } }, // 自定义分页 pagination: { total: 0, defaultPageSize: 10, showTotal: total => `共 ${total} 条数据`, showSizeChanger: true, pageSizeOptions: ['5', '10', '15', '20'], onShowSizeChange: (current, size) => (this.queryParam.size = size), onChange: (page, pageSize) => this.onPageChange(page) }, queryParam: { current: 1, size: 10, roleName: '' }, form: this.$form.createForm(this, 'form'), treeData: [], allMenuIds: [], checkedKeys: [], selectedKeys: [], expandedKeys: [],