diff --git a/web/src/utils/columnPermission.ts b/web/src/utils/columnPermission.ts index 7ef06de0ba44a26f93a4a4b709697964ff3b4863..adff4e1fef8c539e3dba8e6fe8e79a5f26439e73 100644 --- a/web/src/utils/columnPermission.ts +++ b/web/src/utils/columnPermission.ts @@ -22,7 +22,7 @@ export const handleColumnPermission = async (func: Function, crudOptions: any,ex } } const columns = crudOptions.columns; - const excludeColumns = ['_index','id', 'create_datetime', 'update_datetime'].concat(excludeColumn) + const excludeColumns = ['checked','_index','id', 'create_datetime', 'update_datetime'].concat(excludeColumn) for (let col in columns) { for (let item of res.data) { if (excludeColumns.includes(item.field_name)) { diff --git a/web/src/views/system/menu/components/MenuButtonCom/api.ts b/web/src/views/system/menu/components/MenuButtonCom/api.ts index d91f920b5bbbb0d7ff96bf5ba86d1fd04418f5a9..612c49d2121e8638cd286b372c68c606671057cf 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/api.ts +++ b/web/src/views/system/menu/components/MenuButtonCom/api.ts @@ -48,3 +48,10 @@ export function BatchAdd(obj: AddReq) { }); } +export function BatchDelete(keys: any) { + return request({ + url: apiPrefix + 'multiple_delete/', + method: 'delete', + data: { keys }, + }); +} diff --git a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx index 908cf2a97582582d4ceed75b235af1c68e024a3b..79675fba30975199db2fc467e36ccfa9e1e27a44 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/crud.tsx +++ b/web/src/views/system/menu/components/MenuButtonCom/crud.tsx @@ -4,6 +4,8 @@ import {auth} from '/@/utils/authFunction' import {request} from '/@/utils/service'; import { successNotification } from '/@/utils/message'; import { ElMessage } from 'element-plus'; +import { nextTick, ref } from 'vue'; +import XEUtils from 'xe-utils'; //此处为crudOptions配置 export const createCrudOptions = function ({crudExpose, context}: CreateCrudOptionsProps): CreateCrudOptionsRet { const pageRequest = async () => { @@ -22,7 +24,42 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti const addRequest = async ({form}: AddReq) => { return await api.AddObj({...form, ...{menu: context!.selectOptions.value.id}}); }; + // 记录选中的行 + const selectedRows = ref([]); + + const onSelectionChange = (changed: any) => { + const tableData = crudExpose.getTableData(); + const unChanged = tableData.filter((row: any) => !changed.includes(row)); + // 添加已选择的行 + XEUtils.arrayEach(changed, (item: any) => { + const ids = XEUtils.pluck(selectedRows.value, 'id'); + if (!ids.includes(item.id)) { + selectedRows.value = XEUtils.union(selectedRows.value, [item]); + } + }); + // 剔除未选择的行 + XEUtils.arrayEach(unChanged, (unItem: any) => { + selectedRows.value = XEUtils.remove(selectedRows.value, (item: any) => item.id !== unItem.id); + }); + }; + const toggleRowSelection = () => { + // 多选后,回显默认勾选 + const tableRef = crudExpose.getBaseTableRef(); + const tableData = crudExpose.getTableData(); + const selected = XEUtils.filter(tableData, (item: any) => { + const ids = XEUtils.pluck(selectedRows.value, 'id'); + return ids.includes(item.id); + }); + + nextTick(() => { + XEUtils.arrayEach(selected, (item) => { + tableRef.toggleRowSelection(item, true); + }); + }); + }; + return { + selectedRows, crudOptions: { pagination:{ show:false @@ -84,6 +121,11 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti editRequest, delRequest, }, + table: { + rowKey: 'id', //设置你的主键id, 默认rowKey=id + onSelectionChange, + onRefreshed: () => toggleRowSelection(), + }, form: { col: {span: 24}, labelWidth: '100px', @@ -93,6 +135,16 @@ export const createCrudOptions = function ({crudExpose, context}: CreateCrudOpti }, }, columns: { + $checked: { + title: '选择', + form: { show: false }, + column: { + type: 'selection', + align: 'center', + width: '70px', + columnSetDisabled: true, //禁止在列设置中选择 + }, + }, _index: { title: '序号', form: {show: false}, diff --git a/web/src/views/system/menu/components/MenuButtonCom/index.vue b/web/src/views/system/menu/components/MenuButtonCom/index.vue index 9dddaf9453492946029c2a30ad91d2f00ab04ed4..ec55e358a7b8ff81b746a52693060af8627f5206 100644 --- a/web/src/views/system/menu/components/MenuButtonCom/index.vue +++ b/web/src/views/system/menu/components/MenuButtonCom/index.vue @@ -1,19 +1,72 @@ diff --git a/web/src/views/system/menu/index.vue b/web/src/views/system/menu/index.vue index 0637a3fe74daa0acff451f1dac15cc5f850da890..ca544a1b3d51c367edf5f78de69db9c3a6bd2205 100644 --- a/web/src/views/system/menu/index.vue +++ b/web/src/views/system/menu/index.vue @@ -16,12 +16,12 @@ -
+
-
+