fast-element-plus 2.0.19 → 2.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -20
- package/CONTRIBUTING.md +3 -4
- package/README.md +80 -27
- package/README.zh.md +66 -27
- package/dist/component.d.ts +110 -110
- package/dist/components/avatar/src/avatar.d.ts +26 -26
- package/dist/components/avatar/src/avatar.mjs +10 -10
- package/dist/components/avatar/src/avatar.mjs.map +1 -1
- package/dist/components/button/src/button.d.ts +32 -27
- package/dist/components/button/src/button.mjs +57 -36
- package/dist/components/button/src/button.mjs.map +1 -1
- package/dist/components/carNumber/src/carNumber.d.ts +8 -8
- package/dist/components/carNumber/src/carNumber.mjs +5 -5
- package/dist/components/carNumber/src/carNumber.mjs.map +1 -1
- package/dist/components/contextMenu/src/contextMenu.d.ts +6 -6
- package/dist/components/contextMenu/src/contextMenu.mjs +5 -5
- package/dist/components/contextMenu/src/contextMenu.mjs.map +1 -1
- package/dist/components/contextMenu/src/contextMenu.type.d.ts +7 -7
- package/dist/components/dialog/src/dialog.d.ts +74 -74
- package/dist/components/dialog/src/dialog.mjs +31 -31
- package/dist/components/dialog/src/dialog.mjs.map +1 -1
- package/dist/components/drawer/src/drawer.d.ts +57 -57
- package/dist/components/drawer/src/drawer.mjs +24 -24
- package/dist/components/drawer/src/drawer.mjs.map +1 -1
- package/dist/components/form/src/form.d.ts +30 -30
- package/dist/components/form/src/form.mjs +16 -16
- package/dist/components/form/src/form.mjs.map +1 -1
- package/dist/components/form/src/formItem.d.ts +30 -30
- package/dist/components/form/src/formItem.mjs +13 -13
- package/dist/components/form/src/formItem.mjs.map +1 -1
- package/dist/components/formItemTip/src/formItemTip.d.ts +9 -9
- package/dist/components/formItemTip/src/formItemTip.mjs +3 -3
- package/dist/components/formItemTip/src/formItemTip.mjs.map +1 -1
- package/dist/components/icon/src/icon.d.ts +10 -10
- package/dist/components/icon/src/icon.mjs +4 -4
- package/dist/components/icon/src/icon.mjs.map +1 -1
- package/dist/components/iconSelector/src/iconSelector.d.ts +6 -6
- package/dist/components/iconSelector/src/iconSelector.mjs +4 -4
- package/dist/components/iconSelector/src/iconSelector.mjs.map +1 -1
- package/dist/components/image/src/image.d.ts +36 -36
- package/dist/components/image/src/image.mjs +11 -11
- package/dist/components/image/src/image.mjs.map +1 -1
- package/dist/components/inputDialogPage/src/inputDialogPage.d.ts +37 -37
- package/dist/components/inputDialogPage/src/inputDialogPage.mjs +16 -16
- package/dist/components/inputDialogPage/src/inputDialogPage.mjs.map +1 -1
- package/dist/components/layoutGrid/src/layoutGrid.d.ts +12 -12
- package/dist/components/layoutGrid/src/layoutGrid.mjs +6 -6
- package/dist/components/layoutGrid/src/layoutGrid.mjs.map +1 -1
- package/dist/components/layoutGrid/src/layoutGridItem.d.ts +18 -18
- package/dist/components/layoutGrid/src/layoutGridItem.mjs +8 -8
- package/dist/components/layoutGrid/src/layoutGridItem.mjs.map +1 -1
- package/dist/components/select/src/select.d.ts +88 -88
- package/dist/components/select/src/select.mjs +28 -28
- package/dist/components/select/src/select.mjs.map +1 -1
- package/dist/components/select/src/selectOption.d.ts +13 -13
- package/dist/components/select/src/selectOption.mjs +6 -6
- package/dist/components/select/src/selectOption.mjs.map +1 -1
- package/dist/components/selectPage/src/selectPage.d.ts +78 -84
- package/dist/components/selectPage/src/selectPage.mjs +49 -35
- package/dist/components/selectPage/src/selectPage.mjs.map +1 -1
- package/dist/components/selectV2/index.mjs +2 -1
- package/dist/components/selectV2/index.mjs.map +1 -1
- package/dist/components/selectV2/src/selectV2.d.ts +160 -851
- package/dist/components/selectV2/src/selectV2.mjs +30 -338
- package/dist/components/selectV2/src/selectV2.mjs.map +1 -1
- package/dist/components/table/index.mjs +3 -2
- package/dist/components/table/index.mjs.map +1 -1
- package/dist/components/table/src/page.type.d.ts +1 -1
- package/dist/components/table/src/table.d.ts +211 -744
- package/dist/components/table/src/table.mjs +111 -307
- package/dist/components/table/src/table.mjs.map +1 -1
- package/dist/components/table/src/table.state.d.ts +3 -3
- package/dist/components/table/src/table.type.d.ts +1 -9
- package/dist/components/table/src/table.type.mjs.map +1 -1
- package/dist/components/table/src/tableColumn.d.ts +102 -399
- package/dist/components/table/src/tableColumn.mjs +28 -185
- package/dist/components/table/src/tableColumn.mjs.map +1 -1
- package/dist/components/table/src/tableColumnSettingDialog.d.ts +4 -4
- package/dist/components/table/src/tableColumnSettingDialog.mjs +3 -3
- package/dist/components/table/src/tableColumnSettingDialog.mjs.map +1 -1
- package/dist/components/table/src/tablePagination.d.ts +4 -4
- package/dist/components/table/src/tablePagination.mjs +3 -3
- package/dist/components/table/src/tablePagination.mjs.map +1 -1
- package/dist/components/table/src/tableSearchForm.d.ts +12 -12
- package/dist/components/table/src/tableSearchForm.mjs +6 -6
- package/dist/components/table/src/tableSearchForm.mjs.map +1 -1
- package/dist/components/table/src/tableSearchFormItem.d.ts +4 -4
- package/dist/components/table/src/tableSearchFormItem.mjs +2 -2
- package/dist/components/table/src/tableSearchFormItem.mjs.map +1 -1
- package/dist/components/table/src/useTable.d.ts +1 -0
- package/dist/components/table/src/useTable.mjs +109 -65
- package/dist/components/table/src/useTable.mjs.map +1 -1
- package/dist/components/table/utils/table.d.ts +4 -4
- package/dist/components/table/utils/table.mjs +4 -4
- package/dist/components/table/utils/table.mjs.map +1 -1
- package/dist/components/tree/src/tree.d.ts +86 -86
- package/dist/components/tree/src/tree.mjs +46 -46
- package/dist/components/tree/src/tree.mjs.map +1 -1
- package/dist/components/treeSelect/src/treeSelect.d.ts +144 -150
- package/dist/components/treeSelect/src/treeSelect.mjs +55 -55
- package/dist/components/treeSelect/src/treeSelect.mjs.map +1 -1
- package/dist/components/upload/src/upload.d.ts +36 -36
- package/dist/components/upload/src/upload.mjs +17 -17
- package/dist/components/upload/src/upload.mjs.map +1 -1
- package/dist/components/uploadImage/src/uploadImage.d.ts +47 -47
- package/dist/components/uploadImage/src/uploadImage.mjs +23 -23
- package/dist/components/uploadImage/src/uploadImage.mjs.map +1 -1
- package/dist/components/uploadImages/src/uploadImages.d.ts +41 -41
- package/dist/components/uploadImages/src/uploadImages.mjs +21 -21
- package/dist/components/uploadImages/src/uploadImages.mjs.map +1 -1
- package/dist/directives/click-debounce/index.mjs +19 -11
- package/dist/directives/click-debounce/index.mjs.map +1 -1
- package/dist/directives/click-throttle/index.d.ts +4 -2
- package/dist/directives/click-throttle/index.mjs +21 -11
- package/dist/directives/click-throttle/index.mjs.map +1 -1
- package/dist/index.global.min.js +3 -3
- package/dist/index.global.min.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/internal/props.d.ts +685 -0
- package/dist/internal/props.mjs +683 -0
- package/dist/internal/props.mjs.map +1 -0
- package/dist/utils/loading-tasks.d.ts +5 -0
- package/dist/utils/loading-tasks.mjs +32 -0
- package/dist/utils/loading-tasks.mjs.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.mjs +1 -1
- package/dist/version.mjs.map +1 -1
- package/package.json +5 -10
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { debounce } from "../../../utils/async/index.mjs";
|
|
2
2
|
import { callOptionalFunction } from "../../../utils/vue/func.mjs";
|
|
3
|
+
import { createLoadingTasks } from "../../../utils/loading-tasks.mjs";
|
|
3
4
|
import { tableUtil } from "../utils/table.mjs";
|
|
4
5
|
import { getTableDefaultSlots } from "./table.type.mjs";
|
|
5
|
-
import { computed, nextTick, provide, reactive, shallowRef, watch } from "vue";
|
|
6
|
+
import { computed, nextTick, onBeforeUnmount, provide, reactive, shallowRef, watch } from "vue";
|
|
6
7
|
import { dayjs, useGlobalSize } from "element-plus";
|
|
7
8
|
//#region src/components/table/src/useTable.ts
|
|
8
9
|
/** FaTable 状态的依赖注入键。 */
|
|
@@ -109,16 +110,30 @@ const useTable = (props, slots, emit) => {
|
|
|
109
110
|
autoColumnWidth: []
|
|
110
111
|
});
|
|
111
112
|
let requestVersion = 0;
|
|
113
|
+
let widthVersion = 0;
|
|
114
|
+
let disposed = false;
|
|
115
|
+
let releaseRequest;
|
|
116
|
+
let releaseWidth;
|
|
117
|
+
let releaseManual;
|
|
118
|
+
const unmountedError = /* @__PURE__ */ new Error("FaTable 已卸载,待执行的渲染已取消。");
|
|
119
|
+
const loadingTasks = createLoadingTasks((loading, text) => {
|
|
120
|
+
state.loading = loading;
|
|
121
|
+
state.loadingText = text ?? "加载中...";
|
|
122
|
+
});
|
|
112
123
|
provide(tableStateKey, state);
|
|
113
124
|
const handleTableColumnAutoWidth = () => {
|
|
114
|
-
|
|
115
|
-
|
|
125
|
+
if (disposed) return;
|
|
126
|
+
const currentWidthVersion = ++widthVersion;
|
|
127
|
+
releaseWidth?.();
|
|
128
|
+
const done = loadingTasks.begin();
|
|
129
|
+
releaseWidth = done;
|
|
116
130
|
state.autoColumnWidth = [];
|
|
117
131
|
const autoWidthColumns = state.tableColumns.filter((f) => f.autoWidth);
|
|
118
132
|
if (slots.operation) autoWidthColumns.push({ prop: "__table-operation" });
|
|
119
133
|
if (autoWidthColumns.length > 0) {
|
|
120
134
|
const otherWidth = globalSize.value === "default" ? 25 : 17;
|
|
121
135
|
nextTick(() => {
|
|
136
|
+
if (disposed || currentWidthVersion !== widthVersion) return;
|
|
122
137
|
const tableDom = document.querySelector(`.fa-table__${props.tableKey}`);
|
|
123
138
|
if (tableDom) autoWidthColumns.forEach((item) => {
|
|
124
139
|
const headerColumnDom = tableDom.querySelector(`.__fa-table__auto-width-column__cell-header__${item.prop}`);
|
|
@@ -139,12 +154,13 @@ const useTable = (props, slots, emit) => {
|
|
|
139
154
|
width: maxWidth
|
|
140
155
|
});
|
|
141
156
|
});
|
|
142
|
-
}).
|
|
143
|
-
|
|
157
|
+
}).then(done, (error) => {
|
|
158
|
+
done();
|
|
159
|
+
console.error("[Fast:FaTable] 自动宽度计算失败。", error);
|
|
144
160
|
});
|
|
145
161
|
return;
|
|
146
162
|
}
|
|
147
|
-
|
|
163
|
+
done();
|
|
148
164
|
};
|
|
149
165
|
const handleTableData = (data) => {
|
|
150
166
|
if (props.treeData) {
|
|
@@ -174,74 +190,77 @@ const useTable = (props, slots, emit) => {
|
|
|
174
190
|
return params;
|
|
175
191
|
};
|
|
176
192
|
const loadData = async () => {
|
|
193
|
+
if (disposed) return;
|
|
177
194
|
const currentRequestVersion = ++requestVersion;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
releaseRequest?.();
|
|
196
|
+
const done = loadingTasks.begin();
|
|
197
|
+
releaseRequest = done;
|
|
198
|
+
try {
|
|
199
|
+
if (props.requestApi) {
|
|
200
|
+
const params = getRequestParam();
|
|
201
|
+
emit("refresh", params);
|
|
202
|
+
let pageData;
|
|
203
|
+
try {
|
|
204
|
+
const resData = await props.requestApi(params);
|
|
205
|
+
if (disposed || currentRequestVersion !== requestVersion) return;
|
|
206
|
+
props.dataCallback?.(resData);
|
|
207
|
+
if (props.pagination) {
|
|
208
|
+
if (Array.isArray(resData)) {
|
|
209
|
+
pageData = resData;
|
|
210
|
+
state.tablePagination.totalRows = resData.length;
|
|
211
|
+
} else {
|
|
212
|
+
const pageRes = resData;
|
|
213
|
+
pageData = pageRes.rows ?? [];
|
|
214
|
+
Object.assign(state.tablePagination, {
|
|
215
|
+
pageIndex: pageRes.pageIndex ?? state.tablePagination.pageIndex,
|
|
216
|
+
pageSize: pageRes.pageSize ?? state.tablePagination.pageSize,
|
|
217
|
+
totalRows: pageRes.totalRows ?? pageData.length
|
|
218
|
+
});
|
|
219
|
+
}
|
|
192
220
|
} else {
|
|
193
|
-
|
|
194
|
-
pageData = pageRes.rows ?? [];
|
|
221
|
+
pageData = resData;
|
|
195
222
|
Object.assign(state.tablePagination, {
|
|
196
|
-
pageIndex:
|
|
197
|
-
pageSize:
|
|
198
|
-
totalRows:
|
|
223
|
+
pageIndex: 1,
|
|
224
|
+
pageSize: 0,
|
|
225
|
+
totalRows: pageData.length
|
|
199
226
|
});
|
|
200
227
|
}
|
|
228
|
+
state.tableData = handleTableData(pageData);
|
|
229
|
+
} catch (error) {
|
|
230
|
+
if (disposed || currentRequestVersion !== requestVersion) return;
|
|
231
|
+
state.tableData = [];
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
} else {
|
|
235
|
+
emit("refresh", { searchValue: state.searchParam.searchValue });
|
|
236
|
+
let _value = handleTableData([...props.data]);
|
|
237
|
+
_value = _value.filter((f) => {
|
|
238
|
+
const searchValue = state.searchParam.searchValue;
|
|
239
|
+
if (typeof searchValue !== "string" || searchValue.length === 0) return true;
|
|
240
|
+
return state.tableColumns.some((col) => {
|
|
241
|
+
const value = tableUtil.handleRowAccordingToProp(f, col.prop ?? "");
|
|
242
|
+
return (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean" ? String(value) : "").toLowerCase().includes(searchValue.toLowerCase());
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
if (Array.isArray(state.searchParam.sortList) && state.searchParam.sortList.length > 0) _value = _value.sort(tableUtil.arrayDynamicSort(state.searchParam.sortList));
|
|
246
|
+
if (props.pagination) {
|
|
247
|
+
Object.assign(state.tablePagination, { totalRows: _value.length });
|
|
248
|
+
const pageStart = (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;
|
|
249
|
+
const pageEnd = pageStart + state.tablePagination.pageSize;
|
|
250
|
+
state.tableData = _value.slice(pageStart, pageEnd);
|
|
201
251
|
} else {
|
|
202
|
-
|
|
252
|
+
state.tableData = _value;
|
|
203
253
|
Object.assign(state.tablePagination, {
|
|
204
254
|
pageIndex: 1,
|
|
205
255
|
pageSize: 0,
|
|
206
|
-
totalRows:
|
|
256
|
+
totalRows: _value.length
|
|
207
257
|
});
|
|
208
258
|
}
|
|
209
|
-
state.tableData = handleTableData(pageData);
|
|
210
|
-
} catch (error) {
|
|
211
|
-
if (currentRequestVersion !== requestVersion) return;
|
|
212
|
-
state.tableData = [];
|
|
213
|
-
throw error;
|
|
214
|
-
} finally {
|
|
215
|
-
if (currentRequestVersion === requestVersion) state.loading = false;
|
|
216
|
-
}
|
|
217
|
-
} else {
|
|
218
|
-
emit("refresh", { searchValue: state.searchParam.searchValue });
|
|
219
|
-
let _value = handleTableData([...props.data]);
|
|
220
|
-
_value = _value.filter((f) => {
|
|
221
|
-
const searchValue = state.searchParam.searchValue;
|
|
222
|
-
if (typeof searchValue !== "string" || searchValue.length === 0) return true;
|
|
223
|
-
return state.tableColumns.some((col) => {
|
|
224
|
-
const value = tableUtil.handleRowAccordingToProp(f, col.prop ?? "");
|
|
225
|
-
return (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean" ? String(value) : "").toLowerCase().includes(searchValue.toLowerCase());
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
if (Array.isArray(state.searchParam.sortList) && state.searchParam.sortList.length > 0) _value = _value.sort(tableUtil.arrayDynamicSort(state.searchParam.sortList));
|
|
229
|
-
if (props.pagination) {
|
|
230
|
-
Object.assign(state.tablePagination, { totalRows: _value.length });
|
|
231
|
-
const pageStart = (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;
|
|
232
|
-
const pageEnd = pageStart + state.tablePagination.pageSize;
|
|
233
|
-
state.tableData = _value.slice(pageStart, pageEnd);
|
|
234
|
-
} else {
|
|
235
|
-
state.tableData = _value;
|
|
236
|
-
Object.assign(state.tablePagination, {
|
|
237
|
-
pageIndex: 1,
|
|
238
|
-
pageSize: 0,
|
|
239
|
-
totalRows: _value.length
|
|
240
|
-
});
|
|
241
259
|
}
|
|
242
|
-
|
|
260
|
+
if (!disposed && currentRequestVersion === requestVersion) handleTableColumnAutoWidth();
|
|
261
|
+
} finally {
|
|
262
|
+
done();
|
|
243
263
|
}
|
|
244
|
-
handleTableColumnAutoWidth();
|
|
245
264
|
};
|
|
246
265
|
const cloneColumns = (columns) => columns.map((column) => ({
|
|
247
266
|
...column,
|
|
@@ -252,6 +271,7 @@ const useTable = (props, slots, emit) => {
|
|
|
252
271
|
...column._children && { _children: cloneColumns(column._children) }
|
|
253
272
|
}));
|
|
254
273
|
const loadTableColumns = () => {
|
|
274
|
+
if (disposed) return;
|
|
255
275
|
let columns = props.columns ? cloneColumns(props.columns) : [];
|
|
256
276
|
columns.forEach((col) => {
|
|
257
277
|
if (col.pureSearch || col.search) {
|
|
@@ -341,6 +361,7 @@ const useTable = (props, slots, emit) => {
|
|
|
341
361
|
}
|
|
342
362
|
};
|
|
343
363
|
const tableSearch = async () => {
|
|
364
|
+
if (disposed) return;
|
|
344
365
|
state.tablePagination.pageIndex = 1;
|
|
345
366
|
updatedTotalParam();
|
|
346
367
|
await loadData();
|
|
@@ -350,6 +371,7 @@ const useTable = (props, slots, emit) => {
|
|
|
350
371
|
return tableSearch();
|
|
351
372
|
}, 300);
|
|
352
373
|
const tableReset = async () => {
|
|
374
|
+
if (disposed) return;
|
|
353
375
|
state.tablePagination.pageIndex = 1;
|
|
354
376
|
state.searchParam = {};
|
|
355
377
|
defaultSearchTime();
|
|
@@ -358,18 +380,32 @@ const useTable = (props, slots, emit) => {
|
|
|
358
380
|
await loadData();
|
|
359
381
|
};
|
|
360
382
|
const doRender = async () => {
|
|
383
|
+
if (disposed) return;
|
|
384
|
+
requestVersion++;
|
|
361
385
|
state.orgColumns = [];
|
|
362
386
|
state.autoColumnWidth = [];
|
|
363
387
|
state.tableData = [];
|
|
364
|
-
|
|
388
|
+
try {
|
|
389
|
+
await renderTable();
|
|
390
|
+
} catch (error) {
|
|
391
|
+
if (error !== unmountedError) throw error;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
const setManualLoading = (loading) => {
|
|
395
|
+
if (disposed) return;
|
|
396
|
+
if (loading) releaseManual ??= loadingTasks.begin();
|
|
397
|
+
else {
|
|
398
|
+
releaseManual?.();
|
|
399
|
+
releaseManual = void 0;
|
|
400
|
+
}
|
|
365
401
|
};
|
|
366
402
|
const doLoading = async (loadingFunction, loadingText = "加载中...") => {
|
|
367
|
-
|
|
368
|
-
|
|
403
|
+
if (disposed) return;
|
|
404
|
+
const done = loadingTasks.begin(loadingText);
|
|
369
405
|
try {
|
|
370
406
|
await callOptionalFunction(loadingFunction);
|
|
371
407
|
} finally {
|
|
372
|
-
|
|
408
|
+
done();
|
|
373
409
|
}
|
|
374
410
|
};
|
|
375
411
|
const handleCustomCellClick = (emitName, { row, column, $index }) => {
|
|
@@ -384,6 +420,13 @@ const useTable = (props, slots, emit) => {
|
|
|
384
420
|
watch(() => props.searchForm, (newValue) => {
|
|
385
421
|
state.searchForm = newValue;
|
|
386
422
|
});
|
|
423
|
+
onBeforeUnmount(() => {
|
|
424
|
+
disposed = true;
|
|
425
|
+
requestVersion++;
|
|
426
|
+
widthVersion++;
|
|
427
|
+
renderTable.cancel(unmountedError);
|
|
428
|
+
loadingTasks.dispose();
|
|
429
|
+
});
|
|
387
430
|
return {
|
|
388
431
|
globalSize,
|
|
389
432
|
state,
|
|
@@ -398,6 +441,7 @@ const useTable = (props, slots, emit) => {
|
|
|
398
441
|
tableSearch,
|
|
399
442
|
tableReset,
|
|
400
443
|
doRender,
|
|
444
|
+
setManualLoading,
|
|
401
445
|
doLoading,
|
|
402
446
|
handleCustomCellClick
|
|
403
447
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTable.mjs","names":[],"sources":["../../../../src/components/table/src/useTable.ts"],"sourcesContent":["import { computed, nextTick, provide, reactive, shallowRef, watch } from \"vue\";\nimport { dayjs, useGlobalSize } from \"element-plus\";\nimport { callOptionalFunction, debounce } from \"../../../utils\";\nimport { tableUtil } from \"../utils/table\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport type { TableInstance } from \"element-plus\";\nimport type { ExtractPropTypes, InjectionKey, SetupContext, ShallowRef } from \"vue\";\nimport type { makeSlots } from \"../../../utils\";\nimport type { PagedInput, PagedResult } from \"./page.type\";\nimport type { FaTableSlots, faTableEmits, faTableProps } from \"./table\";\nimport type { DefaultRow, FaTableState } from \"./table.state\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx } from \"./table.type\";\n\n/** FaTable 状态的依赖注入键。 */\nexport const tableStateKey: InjectionKey<FaTableState> = Symbol(\"tableState\");\n/** FaTable 枚举映射的依赖注入键。 */\nexport const enumMapKey: InjectionKey<Map<string, FaTableEnumColumnCtx[]>> = Symbol(\"enumMap\");\n\ntype TableSetupContext = SetupContext<typeof faTableEmits, ReturnType<typeof makeSlots<FaTableSlots>>>;\n\ninterface TableComposable {\n\tglobalSize: ReturnType<typeof useGlobalSize>;\n\tstate: FaTableState;\n\telementRef: Readonly<ShallowRef<HTMLElement | null>>;\n\ttableRef: Readonly<ShallowRef<TableInstance | null>>;\n\thandleTableColumnAutoWidth: () => void;\n\tgetRequestParam: () => PagedInput;\n\tloadTableColumns: () => void;\n\thandleSizeChange: (pageSize: number) => void;\n\thandlePaginationChange: (value: number) => void;\n\tdefaultSearchTime: () => void;\n\ttableSearch: () => Promise<void>;\n\ttableReset: () => Promise<void>;\n\tdoRender: () => Promise<void>;\n\tdoLoading: (loadingFunction: () => void | Promise<void>, loadingText?: string) => Promise<void>;\n\thandleCustomCellClick: (emitName: string, context: { row: DefaultRow; column: FaTableColumnCtx; $index: number }) => void;\n}\n\n/**\n * 创建 FaTable 的状态和操作方法。\n *\n * @param props - FaTable 的 Props。\n * @param slots - FaTable 的插槽。\n * @param emit - FaTable 的事件触发器。\n * @returns FaTable 的状态、引用和操作方法。\n */\nexport const useTable = (\n\tprops: ExtractPropTypes<typeof faTableProps>,\n\tslots: TableSetupContext[\"slots\"],\n\temit: TableSetupContext[\"emit\"]\n): TableComposable => {\n\tconst globalSize = useGlobalSize();\n\n\tconst elementRef = shallowRef<HTMLElement | null>(null);\n\tconst tableRef = shallowRef<TableInstance | null>(null);\n\n\t/**\n\t * 定义 enumMap 存储 enum 值(避免异步请求无法格式化单元格内容 || 无法填充搜索下拉选择)\n\t */\n\tconst enumMap = reactive(new Map<string, FaTableEnumColumnCtx[]>());\n\tprovide(enumMapKey, enumMap);\n\n\tconst state: FaTableState = reactive({\n\t\tloading: false,\n\t\tloadingText: \"加载中...\",\n\t\torgColumns: [],\n\t\ttableColumns: computed(() => state.orgColumns.filter((f) => f.prop && !f.pureSearch)),\n\t\tsearchColumns: computed(() =>\n\t\t\tstate.orgColumns\n\t\t\t\t.filter((item) => item.pureSearch === true || item.search !== undefined)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn (a.search?.order ?? 0) - (b.search?.order ?? 0);\n\t\t\t\t})\n\t\t),\n\t\tspanColumns: computed(() => [\n\t\t\t...state.orgColumns.flatMap((column) => (column.spanProp ? [{ prop: column.prop ?? \"\", spanProp: column.spanProp }] : [])),\n\t\t\t...(props.props.span\n\t\t\t\t? [\n\t\t\t\t\t\t{ prop: \"__table-index\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-selection\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-operation\", spanProp: props.props.span },\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t]),\n\t\ttableData: [],\n\t\ttableSpanData: computed(() => {\n\t\t\tif (state.spanColumns.length > 0 && state.tableData.length > 0) {\n\t\t\t\tconst result: Record<string, number[]> = {};\n\t\t\t\tconst spanIndexes: Record<string, number> = {};\n\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\tresult[item.prop] = new Array<number>(state.tableData.length).fill(1, 0, 1).fill(0, 1);\n\t\t\t\t\tspanIndexes[item.prop] = 0;\n\t\t\t\t});\n\t\t\t\tfor (let i = 1; i < state.tableData.length; i++) {\n\t\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\t\tconst currentRow = state.tableData[i];\n\t\t\t\t\t\tconst previousRow = state.tableData[i - 1];\n\t\t\t\t\t\tconst spanValues = result[item.prop];\n\t\t\t\t\t\tconst spanIndex = spanIndexes[item.prop];\n\t\t\t\t\t\tif (currentRow === undefined || previousRow === undefined || spanValues === undefined || spanIndex === undefined) return;\n\t\t\t\t\t\tif (currentRow[item.spanProp] === previousRow[item.spanProp]) {\n\t\t\t\t\t\t\tspanValues[spanIndex] = (spanValues[spanIndex] ?? 0) + 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspanIndexes[item.prop] = i;\n\t\t\t\t\t\t\tspanValues[i] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn {};\n\t\t}),\n\t\ttablePagination: {\n\t\t\tpageIndex: 1,\n\t\t\tpageSize: 20,\n\t\t\ttotalRows: 0,\n\t\t},\n\t\tinitParam: {},\n\t\tsearchParam: {},\n\t\tsearchValueUpdate: \"\",\n\t\tsearchForm: props.searchForm,\n\t\tselected: false,\n\t\tselectedList: [],\n\t\tselectedListIds: computed(() =>\n\t\t\tstate.selectedList.flatMap((item) => {\n\t\t\t\tconst rowKey: unknown =\n\t\t\t\t\ttypeof props.rowKey === \"function\" ? props.rowKey(item) : tableUtil.handleRowAccordingToProp(item, props.rowKey);\n\t\t\t\treturn typeof rowKey === \"string\" || typeof rowKey === \"number\" ? [rowKey] : [];\n\t\t\t})\n\t\t),\n\t\tindeterminateSelectedListIds: [],\n\t\toperationColumnWidth: computed(() => {\n\t\t\tconst findAutoCol = state.autoColumnWidth.find((f) => f.prop === \"__table-operation\");\n\t\t\tif (findAutoCol) {\n\t\t\t\treturn `${findAutoCol.width}px`;\n\t\t\t}\n\t\t\tswitch (globalSize.value) {\n\t\t\t\tcase \"large\":\n\t\t\t\tcase \"default\":\n\t\t\t\t\treturn \"54px\";\n\t\t\t\tcase \"small\":\n\t\t\t\t\treturn \"42px\";\n\t\t\t\tcase \"\":\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"auto\";\n\t\t\t}\n\t\t}),\n\t\timagePreview: false,\n\t\tpreviewList: [],\n\t\ttableWidth: 0,\n\t\ttableHeight: 0,\n\t\tautoColumnWidth: [],\n\t});\n\tlet requestVersion = 0;\n\n\tprovide(tableStateKey, state);\n\n\tconst handleTableColumnAutoWidth = (): void => {\n\t\tstate.loading = true;\n\t\tstate.loadingText = \"加载中...\";\n\t\tstate.autoColumnWidth = [];\n\t\tconst autoWidthColumns = state.tableColumns.filter((f) => f.autoWidth);\n\t\tif (slots.operation) {\n\t\t\t// 操作列自动宽度\n\t\t\tautoWidthColumns.push({\n\t\t\t\tprop: \"__table-operation\",\n\t\t\t});\n\t\t}\n\t\tif (autoWidthColumns.length > 0) {\n\t\t\t// padding24/16 + border1\n\t\t\tconst otherWidth = globalSize.value === \"default\" ? 25 : 17;\n\t\t\tnextTick(() => {\n\t\t\t\tconst tableDom = document.querySelector(`.fa-table__${props.tableKey}`);\n\t\t\t\tif (tableDom) {\n\t\t\t\t\tautoWidthColumns.forEach((item) => {\n\t\t\t\t\t\tconst headerColumnDom = tableDom.querySelector(`.__fa-table__auto-width-column__cell-header__${item.prop}`);\n\t\t\t\t\t\tconst cellColumnDoms = tableDom.querySelectorAll(`.__fa-table__auto-width-column__cell__${item.prop}`);\n\t\t\t\t\t\tlet maxWidth = 0;\n\t\t\t\t\t\tif (headerColumnDom) {\n\t\t\t\t\t\t\tmaxWidth = Math.ceil(headerColumnDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (item.sortable) {\n\t\t\t\t\t\t\t\tmaxWidth += 24;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcellColumnDoms.forEach((cellDom) => {\n\t\t\t\t\t\t\tconst curWidth = Math.ceil(cellDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (curWidth > maxWidth) {\n\t\t\t\t\t\t\t\tmaxWidth = curWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst autoWidthEntry = state.autoColumnWidth.find((f) => f.prop === item.prop);\n\t\t\t\t\t\tif (autoWidthEntry) {\n\t\t\t\t\t\t\tautoWidthEntry.width = Math.max(autoWidthEntry.width, maxWidth);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (item.prop) {\n\t\t\t\t\t\t\t\tstate.autoColumnWidth.push({\n\t\t\t\t\t\t\t\t\tprop: item.prop,\n\t\t\t\t\t\t\t\t\twidth: maxWidth,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).finally(() => {\n\t\t\t\tstate.loading = false;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tstate.loading = false;\n\t};\n\n\tconst handleTableData = (data: DefaultRow[]): DefaultRow[] => {\n\t\tif (props.treeData) {\n\t\t\tconst result: DefaultRow[] = [];\n\t\t\tdata.forEach((row) => {\n\t\t\t\tconst rowList: unknown = row[props.props.children ?? \"children\"];\n\t\t\t\tif (Array.isArray(rowList)) {\n\t\t\t\t\t// 如果 rowList 是数组,遍历并合并每个子项\n\t\t\t\t\tconst childRows: unknown[] = rowList;\n\t\t\t\t\tchildRows.forEach((childRow) => {\n\t\t\t\t\t\tresult.push(typeof childRow === \"object\" && childRow !== null ? { ...row, ...childRow } : row);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult.push(typeof rowList === \"object\" && rowList !== null ? { ...row, ...rowList } : row);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn data;\n\t\t}\n\t};\n\n\tconst getRequestParam = (): PagedInput => {\n\t\tconst params = { ...state.searchParam, ...(props.pagination ? state.tablePagination : {}) };\n\t\t// 删除总条数\n\t\tdelete params.totalRows;\n\t\treturn params;\n\t};\n\n\tconst loadData = async (): Promise<void> => {\n\t\tconst currentRequestVersion = ++requestVersion;\n\t\tstate.loading = true;\n\t\tstate.loadingText = \"加载中...\";\n\t\tif (props.requestApi) {\n\t\t\tconst params = getRequestParam();\n\t\t\temit(\"refresh\", params);\n\t\t\tlet pageData: DefaultRow[];\n\t\t\ttry {\n\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\t// 数据回调\n\t\t\t\tprops.dataCallback?.(resData);\n\t\t\t\t// 解析 API 接口返回的分页数据(如果有分页更新分页信息)\n\t\t\t\tif (props.pagination) {\n\t\t\t\t\tif (Array.isArray(resData)) {\n\t\t\t\t\t\tpageData = resData;\n\t\t\t\t\t\tstate.tablePagination.totalRows = resData.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pageRes = resData as PagedResult;\n\t\t\t\t\t\tpageData = pageRes.rows ?? [];\n\t\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\t\tpageIndex: pageRes.pageIndex ?? state.tablePagination.pageIndex,\n\t\t\t\t\t\t\tpageSize: pageRes.pageSize ?? state.tablePagination.pageSize,\n\t\t\t\t\t\t\ttotalRows: pageRes.totalRows ?? pageData.length,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpageData = resData as DefaultRow[];\n\t\t\t\t\t// 更新分页信息\n\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\t\tpageSize: 0,\n\t\t\t\t\t\ttotalRows: pageData.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tstate.tableData = handleTableData(pageData);\n\t\t\t} catch (error) {\n\t\t\t\tif (currentRequestVersion !== requestVersion) return;\n\t\t\t\tstate.tableData = [];\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (currentRequestVersion === requestVersion) state.loading = false;\n\t\t\t}\n\t\t} else {\n\t\t\temit(\"refresh\", { searchValue: state.searchParam.searchValue });\n\t\t\tlet _value = handleTableData([...props.data]);\n\t\t\t_value = _value.filter((f) => {\n\t\t\t\tconst searchValue = state.searchParam.searchValue;\n\t\t\t\tif (typeof searchValue !== \"string\" || searchValue.length === 0) return true;\n\t\t\t\treturn state.tableColumns.some((col) => {\n\t\t\t\t\tconst value: unknown = tableUtil.handleRowAccordingToProp(f, col.prop ?? \"\");\n\t\t\t\t\tconst text =\n\t\t\t\t\t\ttypeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\"\n\t\t\t\t\t\t\t? String(value)\n\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\treturn text.toLowerCase().includes(searchValue.toLowerCase());\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (Array.isArray(state.searchParam.sortList) && state.searchParam.sortList.length > 0) {\n\t\t\t\t_value = _value.sort(tableUtil.arrayDynamicSort(state.searchParam.sortList));\n\t\t\t}\n\t\t\tif (props.pagination) {\n\t\t\t\t// 更新分页信息\n\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t});\n\t\t\t\tconst pageStart = (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;\n\t\t\t\tconst pageEnd = pageStart + state.tablePagination.pageSize;\n\t\t\t\tstate.tableData = _value.slice(pageStart, pageEnd);\n\t\t\t} else {\n\t\t\t\tstate.tableData = _value;\n\t\t\t\t// 更新分页信息\n\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\tpageSize: 0,\n\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t});\n\t\t\t}\n\t\t\tstate.loading = false;\n\t\t}\n\t\thandleTableColumnAutoWidth();\n\t};\n\n\tconst cloneColumns = (columns: FaTableColumnCtx[]): FaTableColumnCtx[] =>\n\t\tcolumns.map((column) => ({\n\t\t\t...column,\n\t\t\t...(column.search && { search: { ...column.search, ...(column.search.props && { props: { ...column.search.props } }) } }),\n\t\t\t...(column._children && { _children: cloneColumns(column._children) }),\n\t\t}));\n\n\tconst loadTableColumns = (): void => {\n\t\tlet columns: FaTableColumnCtx[] = props.columns ? cloneColumns(props.columns) : [];\n\t\t// 默认值处理\n\t\tcolumns.forEach((col) => {\n\t\t\t// 处理搜索项的 key 和 label\n\t\t\tif (col.pureSearch || col.search) {\n\t\t\t\tcol.search ??= { el: \"\" };\n\t\t\t\tcol.search.key ??= col.prop;\n\t\t\t\tcol.search.label ??= col.label;\n\t\t\t\t// 处理默认值\n\t\t\t\tif (col.search.key && col.search.defaultValue !== undefined) {\n\t\t\t\t\tstate.searchParam[col.search.key] = col.search.defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// 排序\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\treturn (a.order ?? 0) - (b.order ?? 0);\n\t\t});\n\n\t\t// TODO:这里的扁平化暂时没用到\n\t\tstate.orgColumns = tableUtil.flatColumns(columns, enumMap);\n\t};\n\n\tconst handleSizeChange = (pageSize: number): void => {\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tstate.tablePagination.pageSize = pageSize;\n\t\temit(\"sizeChange\", pageSize);\n\t\temit(\"paginationChange\", 1, pageSize);\n\t\tloadData();\n\t};\n\tconst handlePaginationChange = (val: number): void => {\n\t\tstate.tablePagination.pageIndex = val;\n\t\temit(\"paginationChange\", val, state.tablePagination.pageSize);\n\t\tloadData();\n\t};\n\n\tconst updatedTotalParam = (): void => {\n\t\t// 处理查询参数,可以给查询参数加自定义前缀操作\n\t\tconst newSearchParam: Record<string, unknown> = {};\n\t\t// 防止手动清空输入框携带参数(这里可以自定义查询参数前缀)\n\t\tfor (const key in state.searchParam) {\n\t\t\t// * 某些情况下参数为 false/0 也应该携带参数\n\t\t\tif (state.searchParam[key] || state.searchParam[key] === false || state.searchParam[key] === 0) {\n\t\t\t\tnewSearchParam[key] = state.searchParam[key];\n\t\t\t}\n\t\t\t// 处理某些情况下如果为空字符串,其实是不需要传到后端的\n\t\t\telse if (!state.searchParam[key]) {\n\t\t\t\tdelete state.searchParam[key];\n\t\t\t}\n\t\t}\n\t\tObject.assign(state.searchParam, newSearchParam);\n\t};\n\n\tconst defaultSearchTime = (): void => {\n\t\tif (props.hideSearchTime) {\n\t\t\tstate.searchParam.searchTimeList = undefined;\n\t\t} else {\n\t\t\tconst end = new Date();\n\t\t\tconst start = new Date();\n\t\t\tif (props.futureSearchTime) {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.searchParam.searchTimeList = [dayjs(start).format(\"YYYY-MM-DD 00:00:00\"), dayjs(end).format(\"YYYY-MM-DD 23:59:59\")];\n\t\t}\n\t};\n\n\tconst tableSearch = async (): Promise<void> => {\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tupdatedTotalParam();\n\t\tawait loadData();\n\t};\n\tconst renderTable = debounce((): Promise<void> => {\n\t\tloadTableColumns();\n\t\treturn tableSearch();\n\t}, 300);\n\n\tconst tableReset = async (): Promise<void> => {\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\t// 清除搜索条件\n\t\tstate.searchParam = {};\n\t\tdefaultSearchTime();\n\t\t// 重置搜索表单的时候,如果有默认搜索参数,则重置默认的搜索参数\n\t\tObject.assign(state.searchParam, state.initParam);\n\t\temit(\"reset\", state.searchParam);\n\t\tawait loadData();\n\t};\n\n\tconst doRender = async (): Promise<void> => {\n\t\tstate.orgColumns = [];\n\t\tstate.autoColumnWidth = [];\n\t\tstate.tableData = [];\n\t\tawait renderTable();\n\t};\n\n\tconst doLoading = async (loadingFunction: () => void | Promise<void>, loadingText = \"加载中...\"): Promise<void> => {\n\t\tstate.loading = true;\n\t\tstate.loadingText = loadingText;\n\t\ttry {\n\t\t\tawait callOptionalFunction(loadingFunction);\n\t\t} finally {\n\t\t\tstate.loading = false;\n\t\t}\n\t};\n\n\tconst handleCustomCellClick = (\n\t\temitName: string,\n\t\t{ row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number }\n\t): void => {\n\t\temit(\"customCellClick\", emitName, { row, column, $index, ...getTableDefaultSlots(state) });\n\t};\n\n\twatch(\n\t\t() => props.tableKey,\n\t\t() => doRender()\n\t);\n\n\twatch(\n\t\t() => props.searchForm,\n\t\t(newValue) => {\n\t\t\tstate.searchForm = newValue;\n\t\t}\n\t);\n\n\treturn {\n\t\tglobalSize,\n\t\tstate,\n\t\telementRef,\n\t\ttableRef,\n\t\thandleTableColumnAutoWidth,\n\t\tgetRequestParam,\n\t\tloadTableColumns,\n\t\thandleSizeChange,\n\t\thandlePaginationChange,\n\t\tdefaultSearchTime,\n\t\ttableSearch,\n\t\ttableReset,\n\t\tdoRender,\n\t\tdoLoading,\n\t\thandleCustomCellClick,\n\t};\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTable.mjs","names":[],"sources":["../../../../src/components/table/src/useTable.ts"],"sourcesContent":["import { computed, nextTick, onBeforeUnmount, provide, reactive, shallowRef, watch } from \"vue\";\nimport { dayjs, useGlobalSize } from \"element-plus\";\nimport { callOptionalFunction, debounce } from \"../../../utils\";\nimport { createLoadingTasks } from \"../../../utils/loading-tasks\";\nimport { tableUtil } from \"../utils/table\";\nimport { getTableDefaultSlots } from \"./table.type\";\nimport type { TableInstance } from \"element-plus\";\nimport type { ExtractPropTypes, InjectionKey, SetupContext, ShallowRef } from \"vue\";\nimport type { makeSlots } from \"../../../utils\";\nimport type { PagedInput, PagedResult } from \"./page.type\";\nimport type { FaTableSlots, faTableEmits, faTableProps } from \"./table\";\nimport type { DefaultRow, FaTableState } from \"./table.state\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx } from \"./table.type\";\n\n/** FaTable 状态的依赖注入键。 */\nexport const tableStateKey: InjectionKey<FaTableState> = Symbol(\"tableState\");\n/** FaTable 枚举映射的依赖注入键。 */\nexport const enumMapKey: InjectionKey<Map<string, FaTableEnumColumnCtx[]>> = Symbol(\"enumMap\");\n\ntype TableSetupContext = SetupContext<typeof faTableEmits, ReturnType<typeof makeSlots<FaTableSlots>>>;\n\ninterface TableComposable {\n\tglobalSize: ReturnType<typeof useGlobalSize>;\n\tstate: FaTableState;\n\telementRef: Readonly<ShallowRef<HTMLElement | null>>;\n\ttableRef: Readonly<ShallowRef<TableInstance | null>>;\n\thandleTableColumnAutoWidth: () => void;\n\tgetRequestParam: () => PagedInput;\n\tloadTableColumns: () => void;\n\thandleSizeChange: (pageSize: number) => void;\n\thandlePaginationChange: (value: number) => void;\n\tdefaultSearchTime: () => void;\n\ttableSearch: () => Promise<void>;\n\ttableReset: () => Promise<void>;\n\tdoRender: () => Promise<void>;\n\tsetManualLoading: (loading: boolean) => void;\n\tdoLoading: (loadingFunction: () => void | Promise<void>, loadingText?: string) => Promise<void>;\n\thandleCustomCellClick: (emitName: string, context: { row: DefaultRow; column: FaTableColumnCtx; $index: number }) => void;\n}\n\n/**\n * 创建 FaTable 的状态和操作方法。\n *\n * @param props - FaTable 的 Props。\n * @param slots - FaTable 的插槽。\n * @param emit - FaTable 的事件触发器。\n * @returns FaTable 的状态、引用和操作方法。\n */\nexport const useTable = (\n\tprops: ExtractPropTypes<typeof faTableProps>,\n\tslots: TableSetupContext[\"slots\"],\n\temit: TableSetupContext[\"emit\"]\n): TableComposable => {\n\tconst globalSize = useGlobalSize();\n\n\tconst elementRef = shallowRef<HTMLElement | null>(null);\n\tconst tableRef = shallowRef<TableInstance | null>(null);\n\n\t/**\n\t * 定义 enumMap 存储 enum 值(避免异步请求无法格式化单元格内容 || 无法填充搜索下拉选择)\n\t */\n\tconst enumMap = reactive(new Map<string, FaTableEnumColumnCtx[]>());\n\tprovide(enumMapKey, enumMap);\n\n\tconst state: FaTableState = reactive({\n\t\tloading: false,\n\t\tloadingText: \"加载中...\",\n\t\torgColumns: [],\n\t\ttableColumns: computed(() => state.orgColumns.filter((f) => f.prop && !f.pureSearch)),\n\t\tsearchColumns: computed(() =>\n\t\t\tstate.orgColumns\n\t\t\t\t.filter((item) => item.pureSearch === true || item.search !== undefined)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn (a.search?.order ?? 0) - (b.search?.order ?? 0);\n\t\t\t\t})\n\t\t),\n\t\tspanColumns: computed(() => [\n\t\t\t...state.orgColumns.flatMap((column) => (column.spanProp ? [{ prop: column.prop ?? \"\", spanProp: column.spanProp }] : [])),\n\t\t\t...(props.props.span\n\t\t\t\t? [\n\t\t\t\t\t\t{ prop: \"__table-index\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-selection\", spanProp: props.props.span },\n\t\t\t\t\t\t{ prop: \"__table-operation\", spanProp: props.props.span },\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t]),\n\t\ttableData: [],\n\t\ttableSpanData: computed(() => {\n\t\t\tif (state.spanColumns.length > 0 && state.tableData.length > 0) {\n\t\t\t\tconst result: Record<string, number[]> = {};\n\t\t\t\tconst spanIndexes: Record<string, number> = {};\n\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\tresult[item.prop] = new Array<number>(state.tableData.length).fill(1, 0, 1).fill(0, 1);\n\t\t\t\t\tspanIndexes[item.prop] = 0;\n\t\t\t\t});\n\t\t\t\tfor (let i = 1; i < state.tableData.length; i++) {\n\t\t\t\t\tstate.spanColumns.forEach((item) => {\n\t\t\t\t\t\tconst currentRow = state.tableData[i];\n\t\t\t\t\t\tconst previousRow = state.tableData[i - 1];\n\t\t\t\t\t\tconst spanValues = result[item.prop];\n\t\t\t\t\t\tconst spanIndex = spanIndexes[item.prop];\n\t\t\t\t\t\tif (currentRow === undefined || previousRow === undefined || spanValues === undefined || spanIndex === undefined) return;\n\t\t\t\t\t\tif (currentRow[item.spanProp] === previousRow[item.spanProp]) {\n\t\t\t\t\t\t\tspanValues[spanIndex] = (spanValues[spanIndex] ?? 0) + 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspanIndexes[item.prop] = i;\n\t\t\t\t\t\t\tspanValues[i] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn {};\n\t\t}),\n\t\ttablePagination: {\n\t\t\tpageIndex: 1,\n\t\t\tpageSize: 20,\n\t\t\ttotalRows: 0,\n\t\t},\n\t\tinitParam: {},\n\t\tsearchParam: {},\n\t\tsearchValueUpdate: \"\",\n\t\tsearchForm: props.searchForm,\n\t\tselected: false,\n\t\tselectedList: [],\n\t\tselectedListIds: computed(() =>\n\t\t\tstate.selectedList.flatMap((item) => {\n\t\t\t\tconst rowKey: unknown =\n\t\t\t\t\ttypeof props.rowKey === \"function\" ? props.rowKey(item) : tableUtil.handleRowAccordingToProp(item, props.rowKey);\n\t\t\t\treturn typeof rowKey === \"string\" || typeof rowKey === \"number\" ? [rowKey] : [];\n\t\t\t})\n\t\t),\n\t\tindeterminateSelectedListIds: [],\n\t\toperationColumnWidth: computed(() => {\n\t\t\tconst findAutoCol = state.autoColumnWidth.find((f) => f.prop === \"__table-operation\");\n\t\t\tif (findAutoCol) {\n\t\t\t\treturn `${findAutoCol.width}px`;\n\t\t\t}\n\t\t\tswitch (globalSize.value) {\n\t\t\t\tcase \"large\":\n\t\t\t\tcase \"default\":\n\t\t\t\t\treturn \"54px\";\n\t\t\t\tcase \"small\":\n\t\t\t\t\treturn \"42px\";\n\t\t\t\tcase \"\":\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"auto\";\n\t\t\t}\n\t\t}),\n\t\timagePreview: false,\n\t\tpreviewList: [],\n\t\ttableWidth: 0,\n\t\ttableHeight: 0,\n\t\tautoColumnWidth: [],\n\t});\n\t// 请求与列宽各自失效,Loading 按任务独立释放。\n\tlet requestVersion = 0;\n\tlet widthVersion = 0;\n\tlet disposed = false;\n\tlet releaseRequest: (() => void) | undefined;\n\tlet releaseWidth: (() => void) | undefined;\n\tlet releaseManual: (() => void) | undefined;\n\n\tconst unmountedError = new Error(\"FaTable 已卸载,待执行的渲染已取消。\");\n\tconst loadingTasks = createLoadingTasks((loading, text) => {\n\t\tstate.loading = loading;\n\t\tstate.loadingText = text ?? \"加载中...\";\n\t});\n\n\tprovide(tableStateKey, state);\n\n\tconst handleTableColumnAutoWidth = (): void => {\n\t\tif (disposed) return;\n\t\tconst currentWidthVersion = ++widthVersion;\n\t\treleaseWidth?.();\n\t\tconst done = loadingTasks.begin();\n\t\treleaseWidth = done;\n\t\tstate.autoColumnWidth = [];\n\t\tconst autoWidthColumns = state.tableColumns.filter((f) => f.autoWidth);\n\t\tif (slots.operation) {\n\t\t\t// 操作列自动宽度\n\t\t\tautoWidthColumns.push({\n\t\t\t\tprop: \"__table-operation\",\n\t\t\t});\n\t\t}\n\t\tif (autoWidthColumns.length > 0) {\n\t\t\t// padding24/16 + border1\n\t\t\tconst otherWidth = globalSize.value === \"default\" ? 25 : 17;\n\t\t\tnextTick(() => {\n\t\t\t\tif (disposed || currentWidthVersion !== widthVersion) return;\n\t\t\t\tconst tableDom = document.querySelector(`.fa-table__${props.tableKey}`);\n\t\t\t\tif (tableDom) {\n\t\t\t\t\tautoWidthColumns.forEach((item) => {\n\t\t\t\t\t\tconst headerColumnDom = tableDom.querySelector(`.__fa-table__auto-width-column__cell-header__${item.prop}`);\n\t\t\t\t\t\tconst cellColumnDoms = tableDom.querySelectorAll(`.__fa-table__auto-width-column__cell__${item.prop}`);\n\t\t\t\t\t\tlet maxWidth = 0;\n\t\t\t\t\t\tif (headerColumnDom) {\n\t\t\t\t\t\t\tmaxWidth = Math.ceil(headerColumnDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (item.sortable) {\n\t\t\t\t\t\t\t\tmaxWidth += 24;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcellColumnDoms.forEach((cellDom) => {\n\t\t\t\t\t\t\tconst curWidth = Math.ceil(cellDom.scrollWidth) + otherWidth;\n\t\t\t\t\t\t\tif (curWidth > maxWidth) {\n\t\t\t\t\t\t\t\tmaxWidth = curWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst autoWidthEntry = state.autoColumnWidth.find((f) => f.prop === item.prop);\n\t\t\t\t\t\tif (autoWidthEntry) {\n\t\t\t\t\t\t\tautoWidthEntry.width = Math.max(autoWidthEntry.width, maxWidth);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (item.prop) {\n\t\t\t\t\t\t\t\tstate.autoColumnWidth.push({\n\t\t\t\t\t\t\t\t\tprop: item.prop,\n\t\t\t\t\t\t\t\t\twidth: maxWidth,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).then(done, (error: unknown) => {\n\t\t\t\tdone();\n\t\t\t\t// 此方法是同步公开入口;宽度失败不改变请求结果,也不能遗留 Loading。\n\t\t\t\tconsole.error(\"[Fast:FaTable] 自动宽度计算失败。\", error);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdone();\n\t};\n\n\tconst handleTableData = (data: DefaultRow[]): DefaultRow[] => {\n\t\tif (props.treeData) {\n\t\t\tconst result: DefaultRow[] = [];\n\t\t\tdata.forEach((row) => {\n\t\t\t\tconst rowList: unknown = row[props.props.children ?? \"children\"];\n\t\t\t\tif (Array.isArray(rowList)) {\n\t\t\t\t\t// 如果 rowList 是数组,遍历并合并每个子项\n\t\t\t\t\tconst childRows: unknown[] = rowList;\n\t\t\t\t\tchildRows.forEach((childRow) => {\n\t\t\t\t\t\tresult.push(typeof childRow === \"object\" && childRow !== null ? { ...row, ...childRow } : row);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult.push(typeof rowList === \"object\" && rowList !== null ? { ...row, ...rowList } : row);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn data;\n\t\t}\n\t};\n\n\tconst getRequestParam = (): PagedInput => {\n\t\tconst params = { ...state.searchParam, ...(props.pagination ? state.tablePagination : {}) };\n\t\t// 删除总条数\n\t\tdelete params.totalRows;\n\t\treturn params;\n\t};\n\n\tconst loadData = async (): Promise<void> => {\n\t\tif (disposed) return;\n\t\tconst currentRequestVersion = ++requestVersion;\n\t\treleaseRequest?.();\n\t\tconst done = loadingTasks.begin();\n\t\treleaseRequest = done;\n\t\ttry {\n\t\t\tif (props.requestApi) {\n\t\t\t\tconst params = getRequestParam();\n\t\t\t\temit(\"refresh\", params);\n\t\t\t\tlet pageData: DefaultRow[];\n\t\t\t\ttry {\n\t\t\t\t\tconst resData = await props.requestApi(params);\n\t\t\t\t\tif (disposed || currentRequestVersion !== requestVersion) return;\n\t\t\t\t\t// 数据回调\n\t\t\t\t\tprops.dataCallback?.(resData);\n\t\t\t\t\t// 解析 API 接口返回的分页数据(如果有分页更新分页信息)\n\t\t\t\t\tif (props.pagination) {\n\t\t\t\t\t\tif (Array.isArray(resData)) {\n\t\t\t\t\t\t\tpageData = resData;\n\t\t\t\t\t\t\tstate.tablePagination.totalRows = resData.length;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pageRes = resData as PagedResult;\n\t\t\t\t\t\t\tpageData = pageRes.rows ?? [];\n\t\t\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\t\t\tpageIndex: pageRes.pageIndex ?? state.tablePagination.pageIndex,\n\t\t\t\t\t\t\t\tpageSize: pageRes.pageSize ?? state.tablePagination.pageSize,\n\t\t\t\t\t\t\t\ttotalRows: pageRes.totalRows ?? pageData.length,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpageData = resData as DefaultRow[];\n\t\t\t\t\t\t// 更新分页信息\n\t\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\t\t\tpageSize: 0,\n\t\t\t\t\t\t\ttotalRows: pageData.length,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tstate.tableData = handleTableData(pageData);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (disposed || currentRequestVersion !== requestVersion) return;\n\t\t\t\t\tstate.tableData = [];\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\temit(\"refresh\", { searchValue: state.searchParam.searchValue });\n\t\t\t\tlet _value = handleTableData([...props.data]);\n\t\t\t\t_value = _value.filter((f) => {\n\t\t\t\t\tconst searchValue = state.searchParam.searchValue;\n\t\t\t\t\tif (typeof searchValue !== \"string\" || searchValue.length === 0) return true;\n\t\t\t\t\treturn state.tableColumns.some((col) => {\n\t\t\t\t\t\tconst value: unknown = tableUtil.handleRowAccordingToProp(f, col.prop ?? \"\");\n\t\t\t\t\t\tconst text =\n\t\t\t\t\t\t\ttypeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\"\n\t\t\t\t\t\t\t\t? String(value)\n\t\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\t\treturn text.toLowerCase().includes(searchValue.toLowerCase());\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (Array.isArray(state.searchParam.sortList) && state.searchParam.sortList.length > 0) {\n\t\t\t\t\t_value = _value.sort(tableUtil.arrayDynamicSort(state.searchParam.sortList));\n\t\t\t\t}\n\t\t\t\tif (props.pagination) {\n\t\t\t\t\t// 更新分页信息\n\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t\t});\n\t\t\t\t\tconst pageStart = (state.tablePagination.pageIndex - 1) * state.tablePagination.pageSize;\n\t\t\t\t\tconst pageEnd = pageStart + state.tablePagination.pageSize;\n\t\t\t\t\tstate.tableData = _value.slice(pageStart, pageEnd);\n\t\t\t\t} else {\n\t\t\t\t\tstate.tableData = _value;\n\t\t\t\t\t// 更新分页信息\n\t\t\t\t\tObject.assign(state.tablePagination, {\n\t\t\t\t\t\tpageIndex: 1,\n\t\t\t\t\t\tpageSize: 0,\n\t\t\t\t\t\ttotalRows: _value.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!disposed && currentRequestVersion === requestVersion) handleTableColumnAutoWidth();\n\t\t} finally {\n\t\t\tdone();\n\t\t}\n\t};\n\n\tconst cloneColumns = (columns: FaTableColumnCtx[]): FaTableColumnCtx[] =>\n\t\tcolumns.map((column) => ({\n\t\t\t...column,\n\t\t\t...(column.search && { search: { ...column.search, ...(column.search.props && { props: { ...column.search.props } }) } }),\n\t\t\t...(column._children && { _children: cloneColumns(column._children) }),\n\t\t}));\n\n\tconst loadTableColumns = (): void => {\n\t\tif (disposed) return;\n\t\tlet columns: FaTableColumnCtx[] = props.columns ? cloneColumns(props.columns) : [];\n\t\t// 默认值处理\n\t\tcolumns.forEach((col) => {\n\t\t\t// 处理搜索项的 key 和 label\n\t\t\tif (col.pureSearch || col.search) {\n\t\t\t\tcol.search ??= { el: \"\" };\n\t\t\t\tcol.search.key ??= col.prop;\n\t\t\t\tcol.search.label ??= col.label;\n\t\t\t\t// 处理默认值\n\t\t\t\tif (col.search.key && col.search.defaultValue !== undefined) {\n\t\t\t\t\tstate.searchParam[col.search.key] = col.search.defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// 排序\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\treturn (a.order ?? 0) - (b.order ?? 0);\n\t\t});\n\n\t\t// TODO:这里的扁平化暂时没用到\n\t\tstate.orgColumns = tableUtil.flatColumns(columns, enumMap);\n\t};\n\n\tconst handleSizeChange = (pageSize: number): void => {\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tstate.tablePagination.pageSize = pageSize;\n\t\temit(\"sizeChange\", pageSize);\n\t\temit(\"paginationChange\", 1, pageSize);\n\t\tloadData();\n\t};\n\tconst handlePaginationChange = (val: number): void => {\n\t\tstate.tablePagination.pageIndex = val;\n\t\temit(\"paginationChange\", val, state.tablePagination.pageSize);\n\t\tloadData();\n\t};\n\n\tconst updatedTotalParam = (): void => {\n\t\t// 处理查询参数,可以给查询参数加自定义前缀操作\n\t\tconst newSearchParam: Record<string, unknown> = {};\n\t\t// 防止手动清空输入框携带参数(这里可以自定义查询参数前缀)\n\t\tfor (const key in state.searchParam) {\n\t\t\t// * 某些情况下参数为 false/0 也应该携带参数\n\t\t\tif (state.searchParam[key] || state.searchParam[key] === false || state.searchParam[key] === 0) {\n\t\t\t\tnewSearchParam[key] = state.searchParam[key];\n\t\t\t}\n\t\t\t// 处理某些情况下如果为空字符串,其实是不需要传到后端的\n\t\t\telse if (!state.searchParam[key]) {\n\t\t\t\tdelete state.searchParam[key];\n\t\t\t}\n\t\t}\n\t\tObject.assign(state.searchParam, newSearchParam);\n\t};\n\n\tconst defaultSearchTime = (): void => {\n\t\tif (props.hideSearchTime) {\n\t\t\tstate.searchParam.searchTimeList = undefined;\n\t\t} else {\n\t\t\tconst end = new Date();\n\t\t\tconst start = new Date();\n\t\t\tif (props.futureSearchTime) {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tend.setDate(end.getDate() + 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tend.setMonth(end.getMonth() + 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tend.setFullYear(end.getFullYear() + 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (props.dataSearchRange) {\n\t\t\t\t\tcase \"Past1D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3D\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1W\":\n\t\t\t\t\t\tstart.setDate(start.getDate() - 7);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past6M\":\n\t\t\t\t\t\tstart.setMonth(start.getMonth() - 6);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past1Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Past3Y\":\n\t\t\t\t\t\tstart.setFullYear(start.getFullYear() - 3);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.searchParam.searchTimeList = [dayjs(start).format(\"YYYY-MM-DD 00:00:00\"), dayjs(end).format(\"YYYY-MM-DD 23:59:59\")];\n\t\t}\n\t};\n\n\tconst tableSearch = async (): Promise<void> => {\n\t\tif (disposed) return;\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\tupdatedTotalParam();\n\t\tawait loadData();\n\t};\n\tconst renderTable = debounce((): Promise<void> => {\n\t\tloadTableColumns();\n\t\treturn tableSearch();\n\t}, 300);\n\n\tconst tableReset = async (): Promise<void> => {\n\t\tif (disposed) return;\n\t\t// 重置到第一页\n\t\tstate.tablePagination.pageIndex = 1;\n\t\t// 清除搜索条件\n\t\tstate.searchParam = {};\n\t\tdefaultSearchTime();\n\t\t// 重置搜索表单的时候,如果有默认搜索参数,则重置默认的搜索参数\n\t\tObject.assign(state.searchParam, state.initParam);\n\t\temit(\"reset\", state.searchParam);\n\t\tawait loadData();\n\t};\n\n\tconst doRender = async (): Promise<void> => {\n\t\tif (disposed) return;\n\t\t// 从重绘请求发出时失效旧结果,而不是等防抖结束后才失效。\n\t\trequestVersion++;\n\t\tstate.orgColumns = [];\n\t\tstate.autoColumnWidth = [];\n\t\tstate.tableData = [];\n\t\ttry {\n\t\t\tawait renderTable();\n\t\t} catch (error) {\n\t\t\tif (error !== unmountedError) throw error;\n\t\t}\n\t};\n\n\t// 供公开 loading 的 setter 使用,不单独暴露为组件方法。\n\tconst setManualLoading = (loading: boolean): void => {\n\t\tif (disposed) return;\n\t\tif (loading) {\n\t\t\treleaseManual ??= loadingTasks.begin();\n\t\t} else {\n\t\t\treleaseManual?.();\n\t\t\treleaseManual = undefined;\n\t\t}\n\t};\n\n\tconst doLoading = async (loadingFunction: () => void | Promise<void>, loadingText = \"加载中...\"): Promise<void> => {\n\t\tif (disposed) return;\n\t\tconst done = loadingTasks.begin(loadingText);\n\t\ttry {\n\t\t\tawait callOptionalFunction(loadingFunction);\n\t\t} finally {\n\t\t\tdone();\n\t\t}\n\t};\n\n\tconst handleCustomCellClick = (\n\t\temitName: string,\n\t\t{ row, column, $index }: { row: DefaultRow; column: FaTableColumnCtx; $index: number }\n\t): void => {\n\t\temit(\"customCellClick\", emitName, { row, column, $index, ...getTableDefaultSlots(state) });\n\t};\n\n\twatch(\n\t\t() => props.tableKey,\n\t\t() => doRender()\n\t);\n\n\twatch(\n\t\t() => props.searchForm,\n\t\t(newValue) => {\n\t\t\tstate.searchForm = newValue;\n\t\t}\n\t);\n\n\tonBeforeUnmount(() => {\n\t\tdisposed = true;\n\t\trequestVersion++;\n\t\twidthVersion++;\n\t\trenderTable.cancel(unmountedError);\n\t\tloadingTasks.dispose();\n\t});\n\n\treturn {\n\t\tglobalSize,\n\t\tstate,\n\t\telementRef,\n\t\ttableRef,\n\t\thandleTableColumnAutoWidth,\n\t\tgetRequestParam,\n\t\tloadTableColumns,\n\t\thandleSizeChange,\n\t\thandlePaginationChange,\n\t\tdefaultSearchTime,\n\t\ttableSearch,\n\t\ttableReset,\n\t\tdoRender,\n\t\tsetManualLoading,\n\t\tdoLoading,\n\t\thandleCustomCellClick,\n\t};\n};\n"],"mappings":"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"}
|
|
@@ -6,23 +6,23 @@ import type { FaTableColumnCtx, FaTableEnumColumnCtx, FaTableEnumColumnType } fr
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const tableUtil: {
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* 处理无数据情况
|
|
10
10
|
* @param {String} callValue 需要处理的值
|
|
11
11
|
*/
|
|
12
12
|
formatValue(callValue: unknown): unknown;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* 处理 prop 为多级嵌套的情况(列如: prop:user.name)
|
|
15
15
|
* @param {Object} row 当前行数据
|
|
16
16
|
* @param {String} prop 当前 prop
|
|
17
17
|
*/
|
|
18
18
|
handleRowAccordingToProp(row: DefaultRow, prop: string): unknown;
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* 处理 prop,当 prop 为多级嵌套时 ==> 返回最后一级 prop
|
|
21
21
|
* @param {String} prop 当前 prop
|
|
22
22
|
*/
|
|
23
23
|
handleProp(prop: string): string;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 根据枚举列表查询当需要的数据(如果指定了 label 和 value 的 key值,会自动识别格式化)
|
|
26
26
|
* @param {String} callValue 当前单元格值
|
|
27
27
|
* @param {Array} enumData 字典列表
|
|
28
28
|
* @param {Array} fieldNames 指定 label && value 的 key 值
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
const tableUtil = {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* 处理无数据情况
|
|
8
8
|
* @param {String} callValue 需要处理的值
|
|
9
9
|
*/
|
|
10
10
|
formatValue(callValue) {
|
|
@@ -12,7 +12,7 @@ const tableUtil = {
|
|
|
12
12
|
return callValue;
|
|
13
13
|
},
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 处理 prop 为多级嵌套的情况(列如: prop:user.name)
|
|
16
16
|
* @param {Object} row 当前行数据
|
|
17
17
|
* @param {String} prop 当前 prop
|
|
18
18
|
*/
|
|
@@ -25,7 +25,7 @@ const tableUtil = {
|
|
|
25
25
|
return value;
|
|
26
26
|
},
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* 处理 prop,当 prop 为多级嵌套时 ==> 返回最后一级 prop
|
|
29
29
|
* @param {String} prop 当前 prop
|
|
30
30
|
*/
|
|
31
31
|
handleProp(prop) {
|
|
@@ -34,7 +34,7 @@ const tableUtil = {
|
|
|
34
34
|
return propArr.at(-1) ?? prop;
|
|
35
35
|
},
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* 根据枚举列表查询当需要的数据(如果指定了 label 和 value 的 key值,会自动识别格式化)
|
|
38
38
|
* @param {String} callValue 当前单元格值
|
|
39
39
|
* @param {Array} enumData 字典列表
|
|
40
40
|
* @param {Array} fieldNames 指定 label && value 的 key 值
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.mjs","names":[],"sources":["../../../../src/components/table/utils/table.ts"],"sourcesContent":["import type { PagedSortInput } from \"../src/page.type\";\nimport type { DefaultRow } from \"../src/table.state\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx, FaTableEnumColumnType } from \"../src/table.type\";\n\n/**\n * 表格工具类\n */\nexport const tableUtil = {\n\t/**\n\t *
|
|
1
|
+
{"version":3,"file":"table.mjs","names":[],"sources":["../../../../src/components/table/utils/table.ts"],"sourcesContent":["import type { PagedSortInput } from \"../src/page.type\";\nimport type { DefaultRow } from \"../src/table.state\";\nimport type { FaTableColumnCtx, FaTableEnumColumnCtx, FaTableEnumColumnType } from \"../src/table.type\";\n\n/**\n * 表格工具类\n */\nexport const tableUtil = {\n\t/**\n\t * 处理无数据情况\n\t * @param {String} callValue 需要处理的值\n\t */\n\tformatValue(callValue: unknown): unknown {\n\t\t// 如果当前值为数组,使用 / 拼接(根据需求自定义)\n\t\tif (Array.isArray(callValue)) return callValue.length ? callValue.join(` , `) : null;\n\t\treturn callValue;\n\t},\n\t/**\n\t * 处理 prop 为多级嵌套的情况(列如: prop:user.name)\n\t * @param {Object} row 当前行数据\n\t * @param {String} prop 当前 prop\n\t */\n\thandleRowAccordingToProp(row: DefaultRow, prop: string): unknown {\n\t\tlet value: unknown = row;\n\t\tfor (const item of prop.split(\".\")) {\n\t\t\tif (typeof value !== \"object\" || value === null) return undefined;\n\t\t\tvalue = (value as Record<string, unknown>)[item];\n\t\t}\n\t\treturn value;\n\t},\n\t/**\n\t * 处理 prop,当 prop 为多级嵌套时 ==> 返回最后一级 prop\n\t * @param {String} prop 当前 prop\n\t */\n\thandleProp(prop: string): string {\n\t\tconst propArr = prop.split(\".\");\n\t\tif (propArr.length === 1) return prop;\n\t\treturn propArr.at(-1) ?? prop;\n\t},\n\t/**\n\t * 根据枚举列表查询当需要的数据(如果指定了 label 和 value 的 key值,会自动识别格式化)\n\t * @param {String} callValue 当前单元格值\n\t * @param {Array} enumData 字典列表\n\t * @param {Array} fieldNames 指定 label && value 的 key 值\n\t * @param {String} type 过滤类型(目前只有 tag)\n\t */\n\tfilterEnum(callValue: unknown, enumData: FaTableEnumColumnCtx[], fieldNames?: { label: string; value: string }, type?: \"tag\"): unknown {\n\t\tconst value = fieldNames?.value ?? \"value\";\n\t\tconst label = fieldNames?.label ?? \"label\";\n\t\tconst filterData = enumData.find((item) => item[value] === callValue);\n\t\tif (type === \"tag\") {\n\t\t\treturn filterData?.type ?? \"info\";\n\t\t}\n\t\treturn filterData ? filterData[label] : null;\n\t},\n\t/**\n\t * 数组动态排序\n\t */\n\tarrayDynamicSort(sortList: PagedSortInput[]): (a: DefaultRow, b: DefaultRow) => number {\n\t\treturn (a, b) => {\n\t\t\tif (sortList.length > 0) {\n\t\t\t\tfor (const condition of sortList) {\n\t\t\t\t\tconst property = condition.enField;\n\t\t\t\t\tconst order = condition.mode;\n\t\t\t\t\tif (!property) continue;\n\n\t\t\t\t\tconst aValue: unknown = a[property];\n\t\t\t\t\tconst bValue: unknown = b[property];\n\n\t\t\t\t\tif (typeof aValue === \"string\" && typeof bValue === \"string\") {\n\t\t\t\t\t\tif (order === \"ascending\") {\n\t\t\t\t\t\t\tconst comparison = aValue.localeCompare(bValue, \"zh-CN\");\n\t\t\t\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\t\t\t\treturn comparison;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (order === \"descending\") {\n\t\t\t\t\t\t\tconst comparison = bValue.localeCompare(aValue, \"zh-CN\");\n\t\t\t\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\t\t\t\treturn comparison;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (order === \"ascending\") {\n\t\t\t\t\t\t\tif ((aValue as string) < (bValue as string)) return -1;\n\t\t\t\t\t\t\tif ((aValue as string) > (bValue as string)) return 1;\n\t\t\t\t\t\t} else if (order === \"descending\") {\n\t\t\t\t\t\t\tif ((aValue as string) > (bValue as string)) return -1;\n\t\t\t\t\t\t\tif ((aValue as string) < (bValue as string)) return 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t};\n\t},\n\t/**\n\t * 设置枚举\n\t */\n\tsetEnumMap(columnEnum: FaTableEnumColumnType, prop: string, enumMap: Map<string, FaTableEnumColumnCtx[]>): void {\n\t\tif (!columnEnum) return;\n\t\tif (typeof columnEnum === \"function\") {\n\t\t\tenumMap.set(prop, columnEnum());\n\t\t} else if (Array.isArray(columnEnum)) {\n\t\t\tenumMap.set(prop, columnEnum);\n\t\t}\n\t},\n\t/**\n\t * 扁平化 columns\n\t */\n\tflatColumns(columns: FaTableColumnCtx[], enumMap?: Map<string, FaTableEnumColumnCtx[]>): FaTableColumnCtx[] {\n\t\tconst flatArr: FaTableColumnCtx[] = [];\n\t\tcolumns.forEach((col) => {\n\t\t\tif (col._children?.length) {\n\t\t\t\tflatArr.push(...this.flatColumns(col._children));\n\t\t\t}\n\n\t\t\tflatArr.push(col);\n\n\t\t\t// 给每一项 column 添加 show && filterEnum 默认属性\n\t\t\tcol.show ??= true;\n\t\t\tlet enumKey = col.prop ?? col.search?.key;\n\n\t\t\tif (col.enum && typeof col.enum === \"string\") {\n\t\t\t\tenumKey = col.enum;\n\t\t\t}\n\n\t\t\t// 设置 enumMap\n\t\t\tif (col.enum && enumKey && enumMap) this.setEnumMap(col.enum, enumKey, enumMap);\n\t\t});\n\t\treturn flatArr.filter((item) => !item._children?.length);\n\t},\n};\n"],"mappings":";;;;AAOA,MAAa,YAAY;;;;;CAKxB,YAAY,WAA6B;EAExC,IAAI,MAAM,QAAQ,SAAS,GAAG,OAAO,UAAU,SAAS,UAAU,KAAK,KAAK,IAAI;EAChF,OAAO;CACR;;;;;;CAMA,yBAAyB,KAAiB,MAAuB;EAChE,IAAI,QAAiB;EACrB,KAAK,MAAM,QAAQ,KAAK,MAAM,GAAG,GAAG;GACnC,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO,KAAA;GACxD,QAAS,MAAkC;EAC5C;EACA,OAAO;CACR;;;;;CAKA,WAAW,MAAsB;EAChC,MAAM,UAAU,KAAK,MAAM,GAAG;EAC9B,IAAI,QAAQ,WAAW,GAAG,OAAO;EACjC,OAAO,QAAQ,GAAG,EAAE,KAAK;CAC1B;;;;;;;;CAQA,WAAW,WAAoB,UAAkC,YAA+C,MAAuB;EACtI,MAAM,QAAQ,YAAY,SAAS;EACnC,MAAM,QAAQ,YAAY,SAAS;EACnC,MAAM,aAAa,SAAS,MAAM,SAAS,KAAK,WAAW,SAAS;EACpE,IAAI,SAAS,OACZ,OAAO,YAAY,QAAQ;EAE5B,OAAO,aAAa,WAAW,SAAS;CACzC;;;;CAIA,iBAAiB,UAAsE;EACtF,QAAQ,GAAG,MAAM;GAChB,IAAI,SAAS,SAAS,GACrB,KAAK,MAAM,aAAa,UAAU;IACjC,MAAM,WAAW,UAAU;IAC3B,MAAM,QAAQ,UAAU;IACxB,IAAI,CAAC,UAAU;IAEf,MAAM,SAAkB,EAAE;IAC1B,MAAM,SAAkB,EAAE;IAE1B,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAAU;KAC7D,IAAI,UAAU,aAAa;MAC1B,MAAM,aAAa,OAAO,cAAc,QAAQ,OAAO;MACvD,IAAI,eAAe,GAClB,OAAO;KAET,OAAO,IAAI,UAAU,cAAc;MAClC,MAAM,aAAa,OAAO,cAAc,QAAQ,OAAO;MACvD,IAAI,eAAe,GAClB,OAAO;KAET;IACD,OACC,IAAI,UAAU,aAAa;KAC1B,IAAK,SAAqB,QAAmB,OAAO;KACpD,IAAK,SAAqB,QAAmB,OAAO;IACrD,OAAO,IAAI,UAAU,cAAc;KAClC,IAAK,SAAqB,QAAmB,OAAO;KACpD,IAAK,SAAqB,QAAmB,OAAO;IACrD;GAEF;GAGD,OAAO;EACR;CACD;;;;CAIA,WAAW,YAAmC,MAAc,SAAoD;EAC/G,IAAI,CAAC,YAAY;EACjB,IAAI,OAAO,eAAe,YACzB,QAAQ,IAAI,MAAM,WAAW,CAAC;OACxB,IAAI,MAAM,QAAQ,UAAU,GAClC,QAAQ,IAAI,MAAM,UAAU;CAE9B;;;;CAIA,YAAY,SAA6B,SAAmE;EAC3G,MAAM,UAA8B,CAAC;EACrC,QAAQ,SAAS,QAAQ;GACxB,IAAI,IAAI,WAAW,QAClB,QAAQ,KAAK,GAAG,KAAK,YAAY,IAAI,SAAS,CAAC;GAGhD,QAAQ,KAAK,GAAG;GAGhB,IAAI,SAAS;GACb,IAAI,UAAU,IAAI,QAAQ,IAAI,QAAQ;GAEtC,IAAI,IAAI,QAAQ,OAAO,IAAI,SAAS,UACnC,UAAU,IAAI;GAIf,IAAI,IAAI,QAAQ,WAAW,SAAS,KAAK,WAAW,IAAI,MAAM,SAAS,OAAO;EAC/E,CAAC;EACD,OAAO,QAAQ,QAAQ,SAAS,CAAC,KAAK,WAAW,MAAM;CACxD;AACD"}
|