Skip to content

Commit 57bc03c

Browse files
Merge pull request kailong321200875#484 from lt5227/master
refactor: button permissions in the menu to support editing.
2 parents 7e9c4a6 + 2d3c1eb commit 57bc03c

File tree

2 files changed

+96
-10
lines changed

2 files changed

+96
-10
lines changed

mock/menu/index.mock.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ export default [
4141
title: '分析页',
4242
permissionList: [
4343
{
44+
id: 1,
4445
label: '新增',
4546
value: 'add'
4647
},
4748
{
49+
id: 2,
4850
label: '编辑',
4951
value: 'edit'
5052
}
@@ -66,14 +68,17 @@ export default [
6668
title: '工作台',
6769
permissionList: [
6870
{
71+
id: 1,
6972
label: '新增',
7073
value: 'add'
7174
},
7275
{
76+
id: 2,
7377
label: '编辑',
7478
value: 'edit'
7579
},
7680
{
81+
id: 3,
7782
label: '删除',
7883
value: 'delete'
7984
}
@@ -229,18 +234,22 @@ export default [
229234
title: '综合示例-弹窗',
230235
permissionList: [
231236
{
237+
id: 1,
232238
label: '新增',
233239
value: 'add'
234240
},
235241
{
242+
id: 2,
236243
label: '编辑',
237244
value: 'edit'
238245
},
239246
{
247+
id: 3,
240248
label: '删除',
241249
value: 'delete'
242250
},
243251
{
252+
id: 4,
244253
label: '查看',
245254
value: 'view'
246255
}
@@ -260,18 +269,22 @@ export default [
260269
title: '综合示例-页面',
261270
permissionList: [
262271
{
272+
id: 1,
263273
label: '新增',
264-
value: 'edit'
274+
value: 'add'
265275
},
266276
{
277+
id: 2,
267278
label: '编辑',
268279
value: 'edit'
269280
},
270281
{
282+
id: 3,
271283
label: '删除',
272284
value: 'delete'
273285
},
274286
{
287+
id: 4,
275288
label: '查看',
276289
value: 'view'
277290
}

src/views/Authorization/Menu/components/Write.vue

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { PropType, reactive, watch, ref, unref } from 'vue'
55
import { useValidator } from '@/hooks/web/useValidator'
66
import { useI18n } from '@/hooks/web/useI18n'
77
import { getMenuListApi } from '@/api/menu'
8-
import { ElTag } from 'element-plus'
8+
import { ElButton, ElInput, ElPopconfirm, ElTable, ElTableColumn, ElTag } from 'element-plus'
99
import AddButtonPermission from './AddButtonPermission.vue'
1010
import { BaseButton } from '@/components/Button'
1111
import { cloneDeep } from 'lodash-es'
@@ -29,7 +29,23 @@ const handleClose = async (tag: any) => {
2929
})
3030
}
3131
32+
const handleEdit = async (row: any) => {
33+
// 深拷贝当前行数据到编辑行
34+
permissionEditingRow.value = { ...row }
35+
}
36+
37+
const handleSave = async () => {
38+
const formData = await getFormData()
39+
const index = formData?.permissionList?.findIndex((x) => x.id === permissionEditingRow.value.id)
40+
if (index !== -1) {
41+
formData.permissionList[index] = { ...permissionEditingRow.value }
42+
permissionEditingRow.value = null // 重置编辑状态
43+
}
44+
}
45+
3246
const showDrawer = ref(false)
47+
// 存储正在编辑的行的数据
48+
const permissionEditingRow = ref<any>(null)
3349
3450
const formSchema = reactive<FormSchema[]>([
3551
{
@@ -196,16 +212,73 @@ const formSchema = reactive<FormSchema[]>([
196212
slots: {
197213
default: (data: any) => (
198214
<>
199-
{data?.permissionList?.map((v) => {
200-
return (
201-
<ElTag class="mr-1" key={v.value} closable onClose={() => handleClose(v)}>
202-
{v.label}
203-
</ElTag>
204-
)
205-
})}
206-
<BaseButton type="primary" size="small" onClick={() => (showDrawer.value = true)}>
215+
<BaseButton
216+
class="m-t-5px"
217+
type="primary"
218+
size="small"
219+
onClick={() => (showDrawer.value = true)}
220+
>
207221
添加权限
208222
</BaseButton>
223+
<ElTable data={data?.permissionList}>
224+
<ElTableColumn type="index" prop="id" />
225+
<ElTableColumn
226+
prop="value"
227+
label="Value"
228+
v-slots={{
229+
default: ({ row }: any) =>
230+
permissionEditingRow.value && permissionEditingRow.value.id === row.id ? (
231+
<ElInput v-model={permissionEditingRow.value.value} size="small" />
232+
) : (
233+
<span>{row.value}</span>
234+
)
235+
}}
236+
/>
237+
<ElTableColumn
238+
prop="label"
239+
label="Label"
240+
v-slots={{
241+
default: ({ row }: any) =>
242+
permissionEditingRow.value && permissionEditingRow.value.id === row.id ? (
243+
<ElInput v-model={permissionEditingRow.value.label} size="small" />
244+
) : (
245+
<ElTag class="mr-1" key={row.value}>
246+
{row.label}
247+
</ElTag>
248+
)
249+
}}
250+
/>
251+
<ElTableColumn
252+
label="Operations"
253+
width="180"
254+
v-slots={{
255+
default: ({ row }: any) =>
256+
permissionEditingRow.value && permissionEditingRow.value.id === row.id ? (
257+
<ElButton size="small" type="primary" onClick={handleSave}>
258+
确定
259+
</ElButton>
260+
) : (
261+
<>
262+
<ElButton size="small" type="primary" onClick={() => handleEdit(row)}>
263+
编辑
264+
</ElButton>
265+
<ElPopconfirm
266+
title="Are you sure to delete this?"
267+
onConfirm={() => handleClose(row)}
268+
>
269+
{{
270+
reference: () => (
271+
<ElButton size="small" type="danger">
272+
删除
273+
</ElButton>
274+
)
275+
}}
276+
</ElPopconfirm>
277+
</>
278+
)
279+
}}
280+
/>
281+
</ElTable>
209282
</>
210283
)
211284
}

0 commit comments

Comments
 (0)