From 056c73b0e86e76faa08b627c0cebfa244a7b399a Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 10 七月 2025 15:48:24 +0800
Subject: [PATCH] ss
---
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