|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<template>
<a-drawer
:title="title"
:maskClosable="true"
width=650
placement="right"
:closable="true"
@close="close"
:visible="visible"
style="overflow: auto;padding-bottom: 53px;">
<a-form>
<a-form-item label='所拥有的权限'>
<a-tree
checkable
@check="onCheck"
:checkedKeys="checkedKeys"
:treeData="treeData"
@expand="onExpand"
@select="onTreeNodeSelect"
:selectedKeys="selectedKeys"
:expandedKeys="expandedKeysss"
:checkStrictly="checkStrictly">
<span slot="hasDatarule" slot-scope="{slotTitle,ruleFlag}">
{{ slotTitle }}<a-icon v-if="ruleFlag" type="align-left" style="margin-left:5px;color: red;"></a-icon>
</span>
</a-tree>
</a-form-item>
</a-form>
<div class="drawer-bootom-button">
<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>
|
|
42
|
树操作
|
|
43
|
<a-icon type="up" />
|
|
44
45
46
47
48
|
</a-button>
</a-dropdown>
<a-popconfirm title="确定放弃编辑?" @confirm="close" okText="确定" cancelText="取消">
<a-button style="margin-right: .8rem">取消</a-button>
</a-popconfirm>
|
|
49
50
|
<a-button @click="handleSubmit(false)" type="primary" :loading="loading" ghost style="margin-right: 0.8rem">仅保存
</a-button>
|
|
51
52
53
54
55
56
57
58
59
|
<a-button @click="handleSubmit(true)" type="primary" :loading="loading">保存并关闭</a-button>
</div>
<role-datarule-modal ref="datarule"></role-datarule-modal>
</a-drawer>
</template>
<script>
|
|
60
|
import { queryRolePermission, queryTreeListForRole, saveRolePermission } from '@/api/api'
|
|
61
|
import RoleDataruleModal from './RoleDataruleModal.vue'
|
|
62
|
|
|
63
|
export default {
|
|
64
|
name: 'RoleModal',
|
|
65
66
67
68
69
|
components: {
RoleDataruleModal
},
data() {
return {
|
|
70
|
roleId: '',
|
|
71
72
73
74
75
76
77
|
treeData: [],
defaultCheckedKeys: [],
checkedKeys: [],
expandedKeysss: [],
allTreeKeys: [],
autoExpandParent: true,
checkStrictly: true,
|
|
78
|
title: '角色权限配置',
|
|
79
80
81
82
83
84
85
86
87
88
89
|
visible: false,
loading: false,
selectedKeys: []
}
},
methods: {
onTreeNodeSelect(id) {
if (id && id.length > 0) {
this.selectedKeys = id
}
this.$refs.datarule.show(this.selectedKeys[0], this.roleId)
|
|
90
|
},
|
|
91
92
|
onCheck(o) {
if (this.checkStrictly) {
|
|
93
|
this.checkedKeys = o.checked
|
|
94
95
|
} else {
this.checkedKeys = o
|
|
96
97
|
}
},
|
|
98
99
|
show(roleId) {
this.roleId = roleId
|
|
100
|
this.visible = true
|
|
101
102
103
|
},
close() {
this.reset()
|
|
104
105
|
this.$emit('close')
this.visible = false
|
|
106
107
|
},
onExpand(expandedKeys) {
|
|
108
|
this.expandedKeysss = expandedKeys
|
|
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
this.autoExpandParent = false
},
reset() {
this.expandedKeysss = []
this.checkedKeys = []
this.defaultCheckedKeys = []
this.loading = false
},
expandAll() {
this.expandedKeysss = this.allTreeKeys
},
closeAll() {
this.expandedKeysss = []
},
checkALL() {
this.checkedKeys = this.allTreeKeys
},
cancelCheckALL() {
//this.checkedKeys = this.defaultCheckedKeys
this.checkedKeys = []
},
switchCheckStrictly(v) {
|
|
131
|
if (v === 1) {
|
|
132
|
this.checkStrictly = false
|
|
133
|
} else if (v === 2) {
|
|
134
|
this.checkStrictly = true
|
|
135
136
|
}
},
|
|
137
138
139
140
|
handleCancel() {
this.close()
},
handleSubmit(exit) {
|
|
141
|
let that = this
|
|
142
143
|
let params = {
roleId: that.roleId,
|
|
144
145
146
147
|
permissionIds: that.checkedKeys.join(','),
lastpermissionIds: that.defaultCheckedKeys.join(',')
}
that.loading = true
|
|
148
149
|
saveRolePermission(params).then((res) => {
if (res.success) {
|
|
150
151
|
that.$message.success(res.message)
that.loading = false
|
|
152
153
154
155
|
if (exit) {
that.close()
}
} else {
|
|
156
157
|
that.$message.error(res.message)
that.loading = false
|
|
158
159
160
161
|
if (exit) {
that.close()
}
}
|
|
162
|
this.loadData()
|
|
163
164
165
166
167
168
|
})
},
loadData() {
queryTreeListForRole().then((res) => {
this.treeData = res.result.treeList
this.allTreeKeys = res.result.ids
|
|
169
170
171
172
|
queryRolePermission({ roleId: this.roleId }).then((res) => {
this.checkedKeys = [...res.result]
this.defaultCheckedKeys = [...res.result]
//this.expandedKeysss = this.allTreeKeys 注释为了加载数据后,控件不展开
|
|
173
174
175
176
|
})
})
}
},
|
|
177
|
watch: {
|
|
178
|
visible() {
|
|
179
|
if (this.visible) {
|
|
180
|
this.loadData()
|
|
181
182
183
|
}
}
}
|
|
184
|
}
|
|
185
186
187
|
</script>
<style lang="less" scoped>
|
|
188
189
190
191
192
193
194
195
196
197
198
|
.drawer-bootom-button {
position: absolute;
bottom: 0;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
|
|
199
200
|
</style>
|