Skip to content

Commit 59a9087

Browse files
authored
feat(table): 添加和支持动态删除和插入数据 (#1152)
1 parent 3b6b4f7 commit 59a9087

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

src/components/Table/src/BasicTable.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@
141141
getRawDataSource,
142142
setTableData,
143143
updateTableDataRecord,
144+
deleteTableDataRecord,
145+
insertTableDataRecord,
144146
findTableDataRecord,
145147
fetch,
146148
getRowKey,
@@ -279,6 +281,8 @@
279281
setPagination,
280282
setTableData,
281283
updateTableDataRecord,
284+
deleteTableDataRecord,
285+
insertTableDataRecord,
282286
findTableDataRecord,
283287
redoHeight,
284288
setSelectedRowKeys,

src/components/Table/src/hooks/useDataSource.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,31 @@ export function useDataSource(
160160
}
161161
}
162162

163+
function deleteTableDataRecord(record: Recordable | Recordable[]): Recordable | undefined {
164+
if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
165+
const records = !Array.isArray(record) ? [record] : record;
166+
const recordIndex = records
167+
.map((item) => dataSourceRef.value.findIndex((s) => s.key === item.key)) // 取序号
168+
.filter((item) => item !== undefined)
169+
.sort((a, b) => b - a); // 从大到小排序
170+
for (const index of recordIndex) {
171+
unref(dataSourceRef).splice(index, 1);
172+
unref(propsRef).dataSource?.splice(index, 1);
173+
}
174+
setPagination({
175+
total: unref(propsRef).dataSource?.length,
176+
});
177+
return unref(propsRef).dataSource;
178+
}
179+
180+
function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined {
181+
if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
182+
index = index ?? dataSourceRef.value?.length;
183+
unref(dataSourceRef).splice(index, 0, record);
184+
unref(propsRef).dataSource?.splice(index, 0, record);
185+
return unref(propsRef).dataSource;
186+
}
187+
163188
function findTableDataRecord(rowKey: string | number) {
164189
if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
165190

@@ -314,6 +339,8 @@ export function useDataSource(
314339
reload,
315340
updateTableData,
316341
updateTableDataRecord,
342+
deleteTableDataRecord,
343+
insertTableDataRecord,
317344
findTableDataRecord,
318345
handleTableChange,
319346
};

src/components/Table/src/hooks/useTable.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ export function useTable(tableProps?: Props): [
122122
updateTableData: (index: number, key: string, value: any) => {
123123
return getTableInstance().updateTableData(index, key, value);
124124
},
125+
deleteTableDataRecord: (record: Recordable | Recordable[]) => {
126+
return getTableInstance().deleteTableDataRecord(record);
127+
},
128+
insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => {
129+
return getTableInstance().insertTableDataRecord(record, index);
130+
},
125131
updateTableDataRecord: (rowKey: string | number, record: Recordable) => {
126132
return getTableInstance().updateTableDataRecord(rowKey, record);
127133
},

src/components/Table/src/types/table.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ export interface TableActionType {
9595
setPagination: (info: Partial<PaginationProps>) => void;
9696
setTableData: <T = Recordable>(values: T[]) => void;
9797
updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void;
98+
deleteTableDataRecord: (record: Recordable | Recordable[]) => Recordable | void;
99+
insertTableDataRecord: (record: Recordable, index?: number) => Recordable | void;
98100
findTableDataRecord: (rowKey: string | number) => Recordable | void;
99101
getColumns: (opt?: GetColumnsParams) => BasicColumn[];
100102
setColumns: (columns: BasicColumn[] | string[]) => void;

0 commit comments

Comments
 (0)