From cb78b4fbcd31bbee7ed7882c7b5f6f660f20c511 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 20 十月 2025 09:56:19 +0800
Subject: [PATCH] 最新版本541200007
---
admin/src/components/system/role/PermissionConfigWindow.vue | 97 +++++++++++++++++++++++++-----------------------
1 files changed, 51 insertions(+), 46 deletions(-)
diff --git a/admin/src/components/system/role/PermissionConfigWindow.vue b/admin/src/components/system/role/PermissionConfigWindow.vue
index 17476a0..468b73d 100644
--- a/admin/src/components/system/role/PermissionConfigWindow.vue
+++ b/admin/src/components/system/role/PermissionConfigWindow.vue
@@ -1,32 +1,31 @@
<template>
<GlobalWindow
+ class="permission-config-dialog"
:visible.sync="visible"
:confirm-working="isWorking"
- width="582px"
- title="閰嶇疆瑙掕壊鏉冮檺"
+ width="576px"
+ 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
- :filter-method="filterPermissions"
- :titles="['鏈巿鏉冩潈闄�', '宸叉巿鏉冩潈闄�']"
- :props="{
- key: 'id',
- label: 'name'
- }"
- :data="permissions">
- </el-transfer>
+ <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 },
@@ -44,24 +43,18 @@
},
methods: {
/**
- * @role 瑙掕壊瀵硅薄
+ * 鎵撳紑绐楀彛
+ *
+ * @param role 鐩爣瑙掕壊
*/
open (role) {
- if (this.$refs.permissionTransfer) {
- this.$refs.permissionTransfer.clearQuery('left')
- this.$refs.permissionTransfer.clearQuery('right')
- }
- fetchAll()
+ 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
@@ -70,17 +63,22 @@
this.$tip.apiFailed(e)
})
},
- // 纭閫夋嫨鏉冮檺
+ /**
+ * 纭閫夋嫨鏉冮檺
+ */
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)
@@ -89,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)
+ }
}
}
}
@@ -106,18 +123,6 @@
font-style: normal;
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;
}
}
}
--
Gitblit v1.9.3