From 9057e04efad1b7d61c77a72e5c37a504d0aee935 Mon Sep 17 00:00:00 2001 From: doum <doum> Date: 星期五, 26 九月 2025 09:24:03 +0800 Subject: [PATCH] H5静态化 --- admin/src/components/system/role/PermissionConfigWindow.vue | 127 ++++++++++++++++++++---------------------- 1 files changed, 60 insertions(+), 67 deletions(-) diff --git a/admin/src/components/system/role/PermissionConfigWindow.vue b/admin/src/components/system/role/PermissionConfigWindow.vue index 4a08fbf..468b73d 100644 --- a/admin/src/components/system/role/PermissionConfigWindow.vue +++ b/admin/src/components/system/role/PermissionConfigWindow.vue @@ -1,24 +1,35 @@ <template> - <GlobalWindow :visible.sync="visible" :confirm-working="isWorking" width="80%" title="閰嶇疆瑙掕壊鏉冮檺" @confirm="confirm"> - <p class="tip" v-if="role != null">涓鸿鑹� <em>{{ role.name }}</em> 閰嶇疆鏉冮檺</p> - <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛氭潈闄愰厤缃悗闇�閲嶆柊鐧诲綍鍚庣敓鏁�</p> - <el-transfer ref="permissionTransfer" v-model="selectedIds" filterable class="transfer" - :filter-method="filterPermissions" :titles="['鏈巿鏉冩潈闄�', '宸叉巿鏉冩潈闄�']" :props="{ - key: 'id', - label: 'name' - }" :data="permissions"> - </el-transfer> + <GlobalWindow + class="permission-config-dialog" + :visible.sync="visible" + :confirm-working="isWorking" + width="576px" + title="鎺堟潈鏉冮檺" + @confirm="confirm" + > + <p class="tip" v-if="role != null">涓鸿鑹� <em>{{role.name}}</em> 閰嶇疆鏉冮檺</p> + <el-tree + ref="tree" + :data="permissions" + show-checkbox + node-key="id" + default-expand-all + :default-checked-keys="selectedIds" + :expand-on-click-node="false" + :check-on-click-node="true" + :props="{children: 'children',label: 'name'}"> + </el-tree> </GlobalWindow> </template> <script> import GlobalWindow from '@/components/common/GlobalWindow' import { createRolePermission } from '@/api/system/role' -import { fetchAll } from '@/api/system/permission' +import { fetchTree } from '@/api/system/permission' export default { name: 'PermissionConfigWindow', components: { GlobalWindow }, - data() { + data () { return { visible: false, isWorking: false, @@ -32,24 +43,18 @@ }, methods: { /** - * @role 瑙掕壊瀵硅薄 + * 鎵撳紑绐楀彛 + * + * @param role 鐩爣瑙掕壊 */ - open(role) { - if (this.$refs.permissionTransfer) { - this.$refs.permissionTransfer.clearQuery('left') - this.$refs.permissionTransfer.clearQuery('right') - } - fetchAll() + open (role) { + fetchTree() .then(records => { this.role = role this.permissions = records // 濡傛灉涓哄浐瀹氳鑹诧紝鍒欏浐瀹氭潈闄愪笉鍙洿鏀� if (this.role.fixed) { - for (const perm of this.permissions) { - if (perm.fixed) { - perm.disabled = true - } - } + this.__handleFixedPermissions(this.permissions) } this.selectedIds = role.permissions.map(r => r.id) this.visible = true @@ -58,17 +63,22 @@ this.$tip.apiFailed(e) }) }, - // 纭閫夋嫨鏉冮檺 - confirm() { + /** + * 纭閫夋嫨鏉冮檺 + */ + confirm () { + const selectedPermissions = this.$refs.tree.getCheckedNodes(false, true).filter(item => item.type !== 'module').map(item => item.id) this.isWorking = true createRolePermission({ roleId: this.role.id, - permissionIds: this.selectedIds + permissionIds: selectedPermissions }) .then(() => { - this.$tip.apiSuccess('鏉冮檺閰嶇疆鎴愬姛锛岀敤鎴烽噸鏂扮櫥褰曞悗鐢熸晥') this.visible = false this.$emit('success') + setTimeout(() => { + this.$dialog.attentionConfirm('鏉冮檺閰嶇疆鎴愬姛锛岀敤鎴烽渶閲嶆柊鐧诲綍鍚庣敓鏁�').then(() => {}) + }, 300) }) .catch(e => { this.$tip.apiFailed(e) @@ -77,10 +87,29 @@ this.isWorking = false }) }, - // 鎼滅储鏉冮檺 - filterPermissions(query, item) { - const lowerCaseQuery = query.toLowerCase() - return item.code.toLowerCase().indexOf(lowerCaseQuery) > -1 || item.name.toLowerCase().indexOf(lowerCaseQuery) > -1 + /** + * 澶勭悊鍥哄畾鏉冮檺 + * + * @param permissions 鏉冮檺鍒楄〃 + * @param module 鎵�灞炴ā鍧� + * @private + */ + __handleFixedPermissions (permissions, module) { + if (permissions == null) { + return + } + for (const permission of permissions) { + if (permission.type !== 'module') { + if (permission.fixed) { + permission.disabled = true + if (module != null) { + module.disabled = true + } + } + continue + } + this.__handleFixedPermissions(permission.children, permission) + } } } } @@ -88,7 +117,6 @@ <style scoped lang="scss"> @import "@/assets/style/variables.scss"; - .global-window { .tip { em { @@ -96,41 +124,6 @@ color: $primary-color; font-weight: bold; } - } - - .tip-warn { - margin: 4px 0 12px 0; - font-size: 12px; - color: #999; - - i { - color: orange; - margin-right: 4px; - font-size: 14px; - position: relative; - top: 1px; - } - } -} - -.transfer { - height: 600px; - width: 100%; - display: flex; - justify-content: center; - align-items: center; - - ::v-deep .el-transfer-panel { - flex: 1; - height: 100%; - } - - ::v-deep .el-transfer-panel__body { - height: 500px; - } - - ::v-deep .el-transfer-panel__list.is-filterable { - height: 480px; } } </style> -- Gitblit v1.9.3