{"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-expand\", 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-index\", 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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"}