¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="menuSettings_box"> |
| | | <!-- è§è²ï¼åä½ --> |
| | | <div |
| | | class="menuSettings_tree" |
| | | style="margin-left: 10px; width: calc(50% - 172px)" |
| | | > |
| | | <My-bread |
| | | :list="[ |
| | | `${$t('operatManage.operatManage')}`, |
| | | `${$t('operatManage.RoleMenuAuthorization')}`, |
| | | ]" |
| | | ></My-bread> |
| | | |
| | | <el-divider /> |
| | | <el-form ref="form" :model="selFrom"> |
| | | <el-form-item label="åä½"> |
| | | <el-select |
| | | ref="multiSelect" |
| | | style="width: 300px" |
| | | v-model="selFrom.name" |
| | | placeholder="è¯·éæ©åä½åç§°..." |
| | | @change="chooseCustom" |
| | | > |
| | | <el-option |
| | | :value="selectTree" |
| | | class="setstyle" |
| | | style="overflow: auto; height: 200px" |
| | | disabled |
| | | > |
| | | <el-tree |
| | | :data="depList" |
| | | :props="defaultProps" |
| | | :check-on-click-node="true" |
| | | :check-strictly="true" |
| | | node-key="id" |
| | | ref="treeForm" |
| | | @node-click="addAdminHandleNodeClick" |
| | | > |
| | | </el-tree> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div style="height: 75%"> |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%" |
| | | @row-click="singleElection" |
| | | highlight-current-row |
| | | height="85%" |
| | | :header-cell-style="{ |
| | | background: 'transparent', |
| | | }" |
| | | > |
| | | <el-table-column align="center" width="55"> |
| | | <template slot-scope="scope"> |
| | | <!-- å¯ä»¥æå¨çä¿®æ¹labelçå¼ï¼ä»èæ§å¶éæ©åªä¸é¡¹ --> |
| | | <el-radio |
| | | class="radio" |
| | | v-model="templateSelection" |
| | | :label="scope.row.id" |
| | | > </el-radio |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="id" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.name')" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div style="margin-top: 20px; text-align: center" class="pagination_box"> |
| | | <el-pagination |
| | | @size-change="dephandleSizeChange" |
| | | @current-change="dephandleCurrentChange" |
| | | :current-page="roleDepListData.pageIndex" |
| | | :page-sizes="[10, 20, 30, 40]" |
| | | :page-size="roleDepListData.pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="roleDepCount" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- èå表 --> |
| | | <div |
| | | class="menuSettings_tree" |
| | | style="margin-left: 10px; width: calc(50% - 172px)" |
| | | > |
| | | <div |
| | | style=" |
| | | font-size: 14px; |
| | | color: #606266; |
| | | line-height: 1; |
| | | cursor: text; |
| | | position: relative; |
| | | top: 5px; |
| | | margin-left: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | " |
| | | > |
| | | <span> |
| | | {{ |
| | | $t('operatManage.UserRoleAuthorizationObj.PermissionTable') |
| | | }}</span |
| | | > |
| | | </div> |
| | | <el-divider /> |
| | | <div class="menuTreeBox"> |
| | | <el-tree |
| | | :data="menuList" |
| | | :props="defaultMenuProps" |
| | | :show-checkbox="true" |
| | | :check-on-click-node="true" |
| | | :check-strictly="true" |
| | | node-key="id" |
| | | @check="menuTreeCheck" |
| | | ref="treeForm" |
| | | > |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="menuSettings"> |
| | | <!-- <div class="title_box"> |
| | | <h4>详ç»ä¿¡æ¯</h4> |
| | | </div> --> |
| | | <div |
| | | style=" |
| | | font-size: 14px; |
| | | color: #606266; |
| | | line-height: 1; |
| | | cursor: text; |
| | | position: relative; |
| | | top: 5px; |
| | | margin-left: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | " |
| | | > |
| | | <span> |
| | | {{ |
| | | $t('operatManage.UserRoleAuthorizationObj.PermissionTable') |
| | | }}</span |
| | | > |
| | | <div class="btn" style="margin-left: auto"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-circle-plus-outline" |
| | | size="small" |
| | | @click="adduser" |
| | | :disabled="menuid == null ? true : false" |
| | | >{{ $t('operatManage.UserRoleAuthorizationObj.Added') }}</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | icon="el-icon-delete" |
| | | size="small" |
| | | @click="deletesUser" |
| | | :disabled="menuid == null ? true : false" |
| | | >{{ $t('operatManage.UserRoleAuthorizationObj.delete') }}</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | <el-divider class="divider" /> |
| | | |
| | | <el-table |
| | | :data="menuTableData" |
| | | stripe |
| | | style="width: 100%" |
| | | height="85%" |
| | | @selection-change="handleSelectionChange" |
| | | :header-cell-style="{ |
| | | background: 'transparent', |
| | | }" |
| | | > |
| | | <el-table-column type="selection" width="55"> </el-table-column> |
| | | <el-table-column |
| | | prop="id" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.name')" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div style="margin-top: 20px; text-align: center" class="pagination_box"> |
| | | <el-pagination |
| | | @size-change="authhandleSizeChange" |
| | | @current-change="authhandleCurrentChange" |
| | | :current-page="rolMenuListData.pageIndex" |
| | | :page-sizes="[10, 20, 30, 40]" |
| | | :page-size="rolMenuListData.pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="roleMenuCount" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog |
| | | :title="$t('operatManage.UserRoleAuthorizationObj.Added')" |
| | | :visible.sync="dialogTableVisible" |
| | | > |
| | | <el-table |
| | | :data="gridData" |
| | | height="40vh" |
| | | @selection-change="addhandleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"> </el-table-column> |
| | | <el-table-column |
| | | prop="id" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.serialNumber')" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | :label="$t('operatManage.UserRoleAuthorizationObj.name')" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | <div style="margin-top: 20px; text-align: center" class="pagination_box"> |
| | | <el-pagination |
| | | @size-change="addhandleSizeChange" |
| | | @current-change="addhandleCurrentChange" |
| | | :current-page="addlistData.pageIndex" |
| | | :page-sizes="[10, 20, 30, 40]" |
| | | :page-size="addlistData.pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="addcount" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogTableVisible = false">{{ |
| | | $t('dataManage.dictionaryManageObj.cancel') |
| | | }}</el-button> |
| | | <el-button type="primary" @click="addConfirm">{{ |
| | | $t('dataManage.dictionaryManageObj.confirm') |
| | | }}</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import MyBread from '../../components/MyBread.vue'; |
| | | import { |
| | | queryDepTree, |
| | | select_Role_ByPageAndCount, |
| | | selectMenuRecursive, |
| | | roleMenuAuthelectByPageForRole, |
| | | menuAuthSelectByPageForRole, |
| | | roleMenuAuthInserts, |
| | | roleMenuAuthDeletes, |
| | | } from '../../api/api'; |
| | | export default { |
| | | //importå¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { |
| | | MyBread, |
| | | }, |
| | | |
| | | data() { |
| | | return { |
| | | dialogTableVisible: false, |
| | | selFrom: { name: '' }, |
| | | selectTree: '', |
| | | depList: [], //elæ æ°æ® |
| | | defaultProps: { |
| | | children: 'children', |
| | | label: 'name', |
| | | }, //æ ç»å®å¯¹è±¡ |
| | | defaultMenuProps: { |
| | | children: 'children', |
| | | label: 'cnName', |
| | | }, //èå表ç»å®æé |
| | | depid: null, //åä½ID |
| | | roleDepListData: { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | }, |
| | | rolMenuListData: { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | }, |
| | | addlistData: { pageIndex: 1, pageSize: 10 }, |
| | | addcount: 0, |
| | | roleDepCount: 0, |
| | | roleMenuCount: 0, |
| | | roleDepCheckList: [], |
| | | |
| | | tableData: [], //è§è²å表 |
| | | templateSelection: '', |
| | | menuList: [], |
| | | roleid: null, |
| | | menuid: null, |
| | | menuTableData: [], |
| | | gridData: [], |
| | | addmultipleSelection: [], |
| | | usermultipleSelection: [], |
| | | }; |
| | | }, |
| | | methods: { |
| | | async getDepTree() { |
| | | //è·åç®å½æ æå¤§IDï¼æ°å»ºèç¹ä½¿ç¨ |
| | | const data = await queryDepTree(); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('请æ±å使¥é'); |
| | | } |
| | | this.depList = this.treeData(data.result); |
| | | }, |
| | | async getMenuTree() { |
| | | const data = await selectMenuRecursive({ name: '管éåºç¡å¤§æ°æ®å¹³å°' }); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('请æ±å使¥é'); |
| | | } |
| | | |
| | | this.menuList = this.treeData(data.result); |
| | | }, |
| | | treeData(source) { |
| | | let cloneData = JSON.parse(JSON.stringify(source)); // å¯¹æºæ°æ®æ·±åº¦å
é |
| | | return cloneData.filter((father) => { |
| | | // å¾ªç¯ææé¡¹ |
| | | let branchArr = cloneData.filter((child) => father.id == child.pid); // 对æ¯IDï¼åå«ä¸ä¸çº§èåï¼å¹¶è¿åæ°æ® |
| | | branchArr.length > 0 ? (father.children = branchArr) : ''; // ç»ç¶çº§æ·»å ä¸ä¸ªchildren屿§ï¼å¹¶èµå¼ |
| | | return father.pid == 0; // è¿åä¸çº§èå |
| | | }); |
| | | }, |
| | | //æ éä¸èç¹ |
| | | addAdminHandleNodeClick(e) { |
| | | this.roleDepCheckList = []; |
| | | this.templateSelection = ''; |
| | | this.depid = e.id; |
| | | this.selFrom.name = e.name; |
| | | this.selectTree = e.name; |
| | | this.getRoleDep(); |
| | | this.getMenuTree(); |
| | | }, |
| | | menuTreeCheck(node, list) { |
| | | if (list.checkedNodes.length > 0) { |
| | | this.rolMenuListData.menuid = node.id; |
| | | this.menuid = node.id; |
| | | this.rolMenuListData.roleid = this.roleid; |
| | | this.getRoleMenu(); |
| | | } else { |
| | | this.menuid = null; |
| | | } |
| | | }, |
| | | async getRoleMenu() { |
| | | const data = await roleMenuAuthelectByPageForRole(this.rolMenuListData); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('è§è²èå请æ±é误'); |
| | | } |
| | | this.menuTableData = data.result; |
| | | this.roleMenuCount = data.count; |
| | | }, |
| | | async getRoleDep() { |
| | | this.roleDepListData.depid = this.depid; |
| | | const data = await select_Role_ByPageAndCount(this.roleDepListData); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('ç¨æ·è§è²è¯·æ±é误'); |
| | | } |
| | | this.tableData = data.result; |
| | | this.roleDepCount = data.count; |
| | | }, |
| | | async getadduserList() { |
| | | this.addlistData.roleid = this.roleid; |
| | | this.addlistData.menuid = this.menuid; |
| | | const data = await menuAuthSelectByPageForRole(this.addlistData); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('èåæéå表请æ±é误'); |
| | | } |
| | | this.gridData = data.result; |
| | | this.addcount = data.count; |
| | | }, |
| | | singleElection(row) { |
| | | this.templateSelection = row.id; |
| | | this.roleid = row.id; |
| | | this.roleDepCheckList = this.tableData.filter( |
| | | (item) => item.id === row.id |
| | | ); |
| | | }, |
| | | //䏿æ¡éä¸åèªå¨å
³é |
| | | chooseCustom() { |
| | | setTimeout(() => { |
| | | this.$refs.multiSelect.blur(); |
| | | }, 50); |
| | | }, |
| | | dephandleSizeChange() { |
| | | this.roleDepListData.pageSize = val; |
| | | this.getDepTree(); |
| | | }, |
| | | dephandleCurrentChange() { |
| | | this.roleDepListData.pageIndex = val; |
| | | this.getDepTree(); |
| | | }, |
| | | authhandleSizeChange() { |
| | | this.roleDepListData.pageSize = val; |
| | | this.getRoleMenu(); |
| | | }, |
| | | authhandleCurrentChange() { |
| | | this.roleDepListData.pageIndex = val; |
| | | this.getRoleMenu(); |
| | | }, |
| | | // æ°å¢ç¨æ·è¡¨å页 |
| | | addhandleSizeChange(val) { |
| | | this.addlistData.pageSize = val; |
| | | this.getadduserList(); |
| | | }, |
| | | // æ°å¢ç¨æ·è¡¨å页 |
| | | addhandleCurrentChange(val) { |
| | | this.addlistData.pageIndex = val; |
| | | this.getadduserList(); |
| | | }, |
| | | addhandleSelectionChange(val) { |
| | | this.addmultipleSelection = val; |
| | | }, |
| | | handleSelectionChange(val) { |
| | | this.usermultipleSelection = val; |
| | | }, |
| | | adduser() { |
| | | this.dialogTableVisible = true; |
| | | this.getadduserList(); |
| | | }, |
| | | async deletesUser() { |
| | | let arr = []; |
| | | this.usermultipleSelection.forEach((e) => { |
| | | arr.push(e.id); |
| | | }); |
| | | const data = await roleMenuAuthDeletes({ ids: arr.toString() }); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('å é¤å¤±è´¥'); |
| | | } |
| | | this.$message({ |
| | | message: 'å 餿å', |
| | | type: 'success', |
| | | }); |
| | | this.getRoleMenu(); |
| | | }, |
| | | addConfirm() { |
| | | this.$confirm('ç¡®å®æ¯å¦æ°å¢', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | }) |
| | | .then(async () => { |
| | | let arr = []; |
| | | this.addmultipleSelection.forEach((e) => { |
| | | arr.push({ menuAuthId: e.id, roleid: this.roleid }); |
| | | }); |
| | | const data = await roleMenuAuthInserts(arr); |
| | | if (data.code !== 200) { |
| | | return this.$message.error('æ°å¢å¤±è´¥'); |
| | | } |
| | | |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æ°å¢æå!', |
| | | }); |
| | | this.dialogTableVisible = false; |
| | | this.getRoleMenu(); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getDepTree(); |
| | | this.getMenuTree(); |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="less" scoped> |
| | | //@import url(); å¼å
¥å
Œ
±cssç±» |
| | | .menuSettings_box { |
| | | // background: rgb(240, 242, 245); |
| | | border-radius: 10px; |
| | | height: 100%; |
| | | padding: 10px; |
| | | box-sizing: border-box; |
| | | display: flex; |
| | | .menuSettings_tree { |
| | | position: relative; |
| | | width: 344px; |
| | | height: 100%; |
| | | background: rgb(240, 242, 245); |
| | | padding: 20px; |
| | | border-radius: 10px; |
| | | box-sizing: border-box; |
| | | overflow: auto; |
| | | .saveBtn { |
| | | position: absolute; |
| | | left: 250px; |
| | | top: 23px; |
| | | } |
| | | .menuTreeBox { |
| | | height: 90%; |
| | | overflow: auto; |
| | | .el-tree { |
| | | background: transparent; |
| | | font-size: 15px; |
| | | font-family: Microsoft YaHei; |
| | | font-weight: 400; |
| | | color: #000000; |
| | | // /deep/ .el-tree-node__label { |
| | | // font-size: 18px; |
| | | // } |
| | | /deep/ .el-tree-node { |
| | | padding-top: 10px; |
| | | // padding-bottom: 10px; |
| | | } |
| | | /deep/ .el-tree-node:focus > .el-tree-node__content { |
| | | background-color: #b9b9b9; |
| | | } |
| | | /deep/ .el-tree-node__content:hover { |
| | | background-color: rgb(153, 153, 153); |
| | | } |
| | | .btnBox { |
| | | margin-left: 5px; |
| | | .el-button + .el-button { |
| | | margin-left: 5px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .menuSettings { |
| | | width: calc(50% - 172px); |
| | | border-radius: 10px; |
| | | background: rgb(240, 242, 245); |
| | | margin-left: 10px; |
| | | height: 100%; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | .title_box { |
| | | background: #fff; |
| | | padding: 10px; |
| | | margin-bottom: 24px; |
| | | display: flex; |
| | | border-radius: 10px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | box-sizing: border-box; |
| | | } |
| | | } |
| | | .table_box { |
| | | padding: 10px; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | border: 1px solid rgb(202, 201, 204); |
| | | overflow: auto; |
| | | height: 85%; |
| | | } |
| | | .divider { |
| | | margin-top: 8px; |
| | | } |
| | | } |
| | | .el-table, |
| | | .el-table /deep/ .el-table__expanded-cell { |
| | | background-color: transparent; |
| | | } |
| | | |
| | | .el-table /deep/ th, |
| | | .el-table /deep/ tr { |
| | | background-color: transparent; |
| | | } |
| | | </style> |