1
+ <template >
2
+ <a-card :bordered =" false" >
3
+ <div >
4
+ <a-form layout =" horizontal" >
5
+ <div :class =" advanced ? null : 'fold'" >
6
+ <a-row :gutter =" 48" >
7
+ <a-col :md =" 8" :sm =" 24" >
8
+ <a-form-item
9
+ label =" 名称"
10
+ :labelCol =" {span: 5}"
11
+ :wrapperCol =" {span: 18, offset: 1}"
12
+ >
13
+ <a-input placeholder =" 请输入" />
14
+ </a-form-item >
15
+ </a-col >
16
+ <a-col :md =" 8" :sm =" 24" >
17
+ <a-form-item
18
+ label =" 状态"
19
+ :labelCol =" {span: 5}"
20
+ :wrapperCol =" {span: 18, offset: 1}"
21
+ >
22
+ <a-select placeholder =" 请选择" >
23
+ <a-select-option value =" 1" >正常</a-select-option >
24
+ <a-select-option value =" 2" >禁用</a-select-option >
25
+ </a-select >
26
+ </a-form-item >
27
+ </a-col >
28
+
29
+ <span style =" margin-top : 3px ;" >
30
+ <a-button type =" primary" >查询</a-button >
31
+ <a-button style =" margin-left : 8px " >重置</a-button >
32
+ </span >
33
+ </a-row >
34
+
35
+ </div >
36
+ </a-form >
37
+ </div >
38
+
39
+ <s-table
40
+ size =" default"
41
+ :columns =" columns"
42
+ :data =" loadData"
43
+ >
44
+
45
+ <span slot =" actions" slot-scope =" text, record" >
46
+ <a-tag v-for =" (action, index) in record.actionList" :key =" index" >{{ action.describe }}</a-tag >
47
+ </span >
48
+
49
+ <span slot =" status" slot-scope =" text" >
50
+ {{ text | statusFilter }}
51
+ </span >
52
+
53
+ <span slot =" action" slot-scope =" text, record" >
54
+ <a @click =" handleEdit(record)" >编辑</a >
55
+ <a-divider type =" vertical" />
56
+ <a-dropdown >
57
+ <a class =" ant-dropdown-link" >
58
+ 更多 <a-icon type =" down" />
59
+ </a >
60
+ <a-menu slot =" overlay" >
61
+ <a-menu-item >
62
+ <a href =" javascript:;" >详情</a >
63
+ </a-menu-item >
64
+ <a-menu-item >
65
+ <a href =" javascript:;" >禁用</a >
66
+ </a-menu-item >
67
+ <a-menu-item >
68
+ <a href =" javascript:;" >删除</a >
69
+ </a-menu-item >
70
+ </a-menu >
71
+ </a-dropdown >
72
+ </span >
73
+ </s-table >
74
+
75
+ <a-modal
76
+ title =" 操作"
77
+ :width =" 800"
78
+ v-model =" visible"
79
+ @ok =" handleOk"
80
+ >
81
+ <a-form :autoFormCreate =" (form)=>{this.form = form}" >
82
+
83
+ <a-form-item
84
+ :labelCol =" labelCol"
85
+ :wrapperCol =" wrapperCol"
86
+ label =' 唯一识别码'
87
+ hasFeedback
88
+ validateStatus =' success'
89
+ >
90
+ <a-input placeholder =' 唯一识别码' v-model =" mdl.id" id =' no' disabled =" disabled" />
91
+ </a-form-item >
92
+
93
+ <a-form-item
94
+ :labelCol =" labelCol"
95
+ :wrapperCol =" wrapperCol"
96
+ label =' 权限名称'
97
+ hasFeedback
98
+ validateStatus =' success'
99
+ >
100
+ <a-input placeholder =' 起一个名字' v-model =" mdl.name" id =' permission_name' />
101
+ </a-form-item >
102
+
103
+ <a-form-item
104
+ :labelCol =" labelCol"
105
+ :wrapperCol =" wrapperCol"
106
+ label =' 状态'
107
+ hasFeedback
108
+ validateStatus =' warning'
109
+ >
110
+ <a-select v-model =" mdl.status" >
111
+ <a-select-option value =' 1' >正常</a-select-option >
112
+ <a-select-option value =' 2' >禁用</a-select-option >
113
+ </a-select >
114
+ </a-form-item >
115
+
116
+ <a-form-item
117
+ :labelCol =" labelCol"
118
+ :wrapperCol =" wrapperCol"
119
+ label =' 描述'
120
+ hasFeedback
121
+ >
122
+ <a-textarea :rows =" 5" v-model =" mdl.describe" placeholder =" ..." id =' describe' />
123
+ </a-form-item >
124
+
125
+ <a-divider />
126
+
127
+ <a-form-item
128
+ :labelCol =" labelCol"
129
+ :wrapperCol =" wrapperCol"
130
+ label =' 赋予权限'
131
+ hasFeedback
132
+ >
133
+ <a-select
134
+ style =" width : 100% "
135
+ mode =" multiple"
136
+ v-model =" mdl.actions"
137
+ :allowClear =" true"
138
+ >
139
+ <a-select-option v-for =" (action, index) in permissionList" :key =" index" :value =" action.value" >{{ action.label }}</a-select-option >
140
+ </a-select >
141
+ </a-form-item >
142
+
143
+ </a-form >
144
+ </a-modal >
145
+
146
+ </a-card >
147
+ </template >
148
+
149
+ <script >
150
+ import STable from ' @/components/table/'
151
+
152
+ export default {
153
+ name: " TableList" ,
154
+ components: {
155
+ STable
156
+ },
157
+ data () {
158
+ return {
159
+ description: ' 列表使用场景:后台管理中的权限管理以及角色管理,可用于基于 RBAC 设计的角色权限控制,颗粒度细到每一个操作类型。' ,
160
+
161
+ visible: false ,
162
+ labelCol: {
163
+ xs: { span: 24 },
164
+ sm: { span: 5 },
165
+ },
166
+ wrapperCol: {
167
+ xs: { span: 24 },
168
+ sm: { span: 16 },
169
+ },
170
+ form: null ,
171
+ mdl: {},
172
+
173
+ // 高级搜索 展开/关闭
174
+ advanced: false ,
175
+ // 查询参数
176
+ queryParam: {},
177
+ // 表头
178
+ columns: [
179
+ {
180
+ title: ' 唯一识别码' ,
181
+ dataIndex: ' id'
182
+ },
183
+ {
184
+ title: ' 权限名称' ,
185
+ dataIndex: ' name' ,
186
+ },
187
+ {
188
+ title: ' 可操作权限' ,
189
+ dataIndex: ' actions' ,
190
+ scopedSlots: { customRender: ' actions' },
191
+ },
192
+ {
193
+ title: ' 状态' ,
194
+ dataIndex: ' status' ,
195
+ scopedSlots: { customRender: ' status' },
196
+ },
197
+ {
198
+ title: ' 操作' ,
199
+ width: ' 150px' ,
200
+ dataIndex: ' action' ,
201
+ scopedSlots: { customRender: ' action' },
202
+ }
203
+ ],
204
+ // 向后端拉取可以用的操作列表
205
+ permissionList: null ,
206
+ // 加载数据方法 必须为 Promise 对象
207
+ loadData : parameter => {
208
+ return this .$http .get (' /permission' , {
209
+ params: Object .assign (parameter, this .queryParam )
210
+ }).then (res => {
211
+ let result = res .result
212
+ result .data .map (permission => {
213
+ permission .actionList = JSON .parse (permission .actionData )
214
+ return permission
215
+ })
216
+ return result
217
+ })
218
+ },
219
+
220
+ selectedRowKeys: [],
221
+ selectedRows: []
222
+ }
223
+ },
224
+ filters: {
225
+ statusFilter (status ) {
226
+ const statusMap = {
227
+ 1 : ' 正常' ,
228
+ 2 : ' 禁用'
229
+ }
230
+ return statusMap[status]
231
+ }
232
+ },
233
+ created () {
234
+ this .loadPermissionList ()
235
+ },
236
+ methods: {
237
+ loadPermissionList () {
238
+ // permissionList
239
+ new Promise ((resolve => {
240
+ const data = [
241
+ { label: ' 新增' , value: ' add' , defaultChecked: false },
242
+ { label: ' 查询' , value: ' get' , defaultChecked: false },
243
+ { label: ' 修改' , value: ' update' , defaultChecked: false },
244
+ { label: ' 列表' , value: ' query' , defaultChecked: false },
245
+ { label: ' 删除' , value: ' delete' , defaultChecked: false },
246
+ { label: ' 导入' , value: ' import' , defaultChecked: false },
247
+ { label: ' 导出' , value: ' export' , defaultChecked: false }
248
+ ]
249
+ setTimeout (resolve (data), 1500 )
250
+ })).then (res => {
251
+ this .permissionList = res
252
+ })
253
+ },
254
+ handleEdit (record ) {
255
+ this .mdl = Object .assign ({}, record)
256
+ console .log (this .mdl )
257
+ this .visible = true
258
+ },
259
+ handleOk () {
260
+
261
+ },
262
+ onChange (selectedRowKeys , selectedRows ) {
263
+ this .selectedRowKeys = selectedRowKeys
264
+ this .selectedRows = selectedRows
265
+ },
266
+ toggleAdvanced () {
267
+ this .advanced = ! this .advanced
268
+ },
269
+ },
270
+ watch: {
271
+ /*
272
+ 'selectedRows': function (selectedRows) {
273
+ this.needTotalList = this.needTotalList.map(item => {
274
+ return {
275
+ ...item,
276
+ total: selectedRows.reduce( (sum, val) => {
277
+ return sum + val[item.dataIndex]
278
+ }, 0)
279
+ }
280
+ })
281
+ }
282
+ */
283
+ }
284
+ }
285
+ </script >
0 commit comments