Commit 59a90877287a289f746eec97d12c2d3a1d5476b0

Authored by frezs
Committed by GitHub
1 parent 3b6b4f73

feat(table): 添加和支持动态删除和插入数据 (#1152)

src/components/Table/src/BasicTable.vue
@@ -141,6 +141,8 @@ @@ -141,6 +141,8 @@
141 getRawDataSource, 141 getRawDataSource,
142 setTableData, 142 setTableData,
143 updateTableDataRecord, 143 updateTableDataRecord,
  144 + deleteTableDataRecord,
  145 + insertTableDataRecord,
144 findTableDataRecord, 146 findTableDataRecord,
145 fetch, 147 fetch,
146 getRowKey, 148 getRowKey,
@@ -279,6 +281,8 @@ @@ -279,6 +281,8 @@
279 setPagination, 281 setPagination,
280 setTableData, 282 setTableData,
281 updateTableDataRecord, 283 updateTableDataRecord,
  284 + deleteTableDataRecord,
  285 + insertTableDataRecord,
282 findTableDataRecord, 286 findTableDataRecord,
283 redoHeight, 287 redoHeight,
284 setSelectedRowKeys, 288 setSelectedRowKeys,
src/components/Table/src/hooks/useDataSource.ts
@@ -160,6 +160,31 @@ export function useDataSource( @@ -160,6 +160,31 @@ export function useDataSource(
160 } 160 }
161 } 161 }
162 162
  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 +
163 function findTableDataRecord(rowKey: string | number) { 188 function findTableDataRecord(rowKey: string | number) {
164 if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; 189 if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
165 190
@@ -314,6 +339,8 @@ export function useDataSource( @@ -314,6 +339,8 @@ export function useDataSource(
314 reload, 339 reload,
315 updateTableData, 340 updateTableData,
316 updateTableDataRecord, 341 updateTableDataRecord,
  342 + deleteTableDataRecord,
  343 + insertTableDataRecord,
317 findTableDataRecord, 344 findTableDataRecord,
318 handleTableChange, 345 handleTableChange,
319 }; 346 };
src/components/Table/src/hooks/useTable.ts
@@ -122,6 +122,12 @@ export function useTable(tableProps?: Props): [ @@ -122,6 +122,12 @@ export function useTable(tableProps?: Props): [
122 updateTableData: (index: number, key: string, value: any) => { 122 updateTableData: (index: number, key: string, value: any) => {
123 return getTableInstance().updateTableData(index, key, value); 123 return getTableInstance().updateTableData(index, key, value);
124 }, 124 },
  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 + },
125 updateTableDataRecord: (rowKey: string | number, record: Recordable) => { 131 updateTableDataRecord: (rowKey: string | number, record: Recordable) => {
126 return getTableInstance().updateTableDataRecord(rowKey, record); 132 return getTableInstance().updateTableDataRecord(rowKey, record);
127 }, 133 },
src/components/Table/src/types/table.ts
@@ -95,6 +95,8 @@ export interface TableActionType { @@ -95,6 +95,8 @@ export interface TableActionType {
95 setPagination: (info: Partial<PaginationProps>) => void; 95 setPagination: (info: Partial<PaginationProps>) => void;
96 setTableData: <T = Recordable>(values: T[]) => void; 96 setTableData: <T = Recordable>(values: T[]) => void;
97 updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void; 97 updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void;
  98 + deleteTableDataRecord: (record: Recordable | Recordable[]) => Recordable | void;
  99 + insertTableDataRecord: (record: Recordable, index?: number) => Recordable | void;
98 findTableDataRecord: (rowKey: string | number) => Recordable | void; 100 findTableDataRecord: (rowKey: string | number) => Recordable | void;
99 getColumns: (opt?: GetColumnsParams) => BasicColumn[]; 101 getColumns: (opt?: GetColumnsParams) => BasicColumn[];
100 setColumns: (columns: BasicColumn[] | string[]) => void; 102 setColumns: (columns: BasicColumn[] | string[]) => void;