From 456a661488ad46cff9d184828bc4ec4b50ee73ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E6=9C=A8?= Date: Thu, 14 Oct 2021 14:59:12 +0800 Subject: [PATCH] fix(table): `deleteTableDataRecord` not work --- CHANGELOG.zh_CN.md | 2 + .../Table/src/hooks/useDataSource.ts | 38 ++++++++++++++----- src/components/Table/src/hooks/useTable.ts | 4 +- src/components/Table/src/types/table.ts | 2 +- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 2abc2600..dac4fa4a 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -12,12 +12,14 @@ - 修复`useTable`与`BasicTable`实例的`reload`方法`await`表现不一致的问题 - 修复`clickToRowSelect`会无视行选择框 disabled 状态的问题 - 修复`BasicTable`在某些情况下,分页会被重置的问题 + - 修改 `deleteTableDataRecord` 方法 - **BasicModal** - 修复点击遮罩、按下`Esc`键都不能关闭`Modal`的问题 - 修复点击关闭按钮、最大化按钮旁边的空白区域也会导致`Modal`关闭的问题 - **BasicTree** 修复节点插槽不起作用的问题 - **CodeEditor** 修复可能会造成的`Build`失败的问题 - **BasicForm** 修复自定义 FormItem 组件的内容宽度可能超出范围的问题 +- **ApiTreeSelect** 修复`params`变化未能触发重新请求 api 数据的问题 - **其它** - 修复多标签在某些情况下关闭页签不会跳转路由的问题 - 修复部分组件可能会造成热更新异常的问题 diff --git a/src/components/Table/src/hooks/useDataSource.ts b/src/components/Table/src/hooks/useDataSource.ts index 5aa73a9e..0ea0d5ee 100644 --- a/src/components/Table/src/hooks/useDataSource.ts +++ b/src/components/Table/src/hooks/useDataSource.ts @@ -160,21 +160,39 @@ export function useDataSource( } } - function deleteTableDataRecord(record: Recordable | Recordable[]): Recordable | undefined { + function deleteTableDataRecord(rowKey: string | number | string[] | number[]) { if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; - const records = !Array.isArray(record) ? [record] : record; - const recordIndex = records - .map((item) => dataSourceRef.value.findIndex((s) => s.key === item.key)) // 取序号 - .filter((item) => item !== undefined) - .sort((a, b) => b - a); // 从大到小排序 - for (const index of recordIndex) { - unref(dataSourceRef).splice(index, 1); - unref(propsRef).dataSource?.splice(index, 1); + const rowKeyName = unref(getRowKey); + if (!rowKeyName) return; + const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey; + for (const key of rowKeys) { + let index: number | undefined = dataSourceRef.value.findIndex((row) => { + let targetKeyName: string; + if (typeof rowKeyName === 'function') { + targetKeyName = rowKeyName(row); + } else { + targetKeyName = rowKeyName as string; + } + return row[targetKeyName] === key; + }); + if (index >= 0) { + dataSourceRef.value.splice(index, 1); + } + index = unref(propsRef).dataSource?.findIndex((row) => { + let targetKeyName: string; + if (typeof rowKeyName === 'function') { + targetKeyName = rowKeyName(row); + } else { + targetKeyName = rowKeyName as string; + } + return row[targetKeyName] === key; + }); + if (typeof index !== 'undefined' && index !== -1) + unref(propsRef).dataSource?.splice(index, 1); } setPagination({ total: unref(propsRef).dataSource?.length, }); - return unref(propsRef).dataSource; } function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined { diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts index 2104e687..d6058932 100644 --- a/src/components/Table/src/hooks/useTable.ts +++ b/src/components/Table/src/hooks/useTable.ts @@ -122,8 +122,8 @@ export function useTable(tableProps?: Props): [ updateTableData: (index: number, key: string, value: any) => { return getTableInstance().updateTableData(index, key, value); }, - deleteTableDataRecord: (record: Recordable | Recordable[]) => { - return getTableInstance().deleteTableDataRecord(record); + deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => { + return getTableInstance().deleteTableDataRecord(rowKey); }, insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => { return getTableInstance().insertTableDataRecord(record, index); diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts index f9df66cf..88f530ce 100644 --- a/src/components/Table/src/types/table.ts +++ b/src/components/Table/src/types/table.ts @@ -95,7 +95,7 @@ export interface TableActionType { setPagination: (info: Partial) => void; setTableData: (values: T[]) => void; updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void; - deleteTableDataRecord: (record: Recordable | Recordable[]) => Recordable | void; + deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => void; insertTableDataRecord: (record: Recordable, index?: number) => Recordable | void; findTableDataRecord: (rowKey: string | number) => Recordable | void; getColumns: (opt?: GetColumnsParams) => BasicColumn[];