@robot-admin/request-core 0.4.1 → 0.5.0
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 +14 -0
- package/README.md +43 -3
- package/dist/{chunk-WUZ43MLM.cjs → chunk-3VKMESSO.cjs} +4 -4
- package/dist/{chunk-WUZ43MLM.cjs.map → chunk-3VKMESSO.cjs.map} +1 -1
- package/dist/{chunk-QSDNDTOZ.js → chunk-5ZK67Q2E.js} +3 -3
- package/dist/{chunk-QSDNDTOZ.js.map → chunk-5ZK67Q2E.js.map} +1 -1
- package/dist/{chunk-2JXH7SIL.js → chunk-ICWJ3KIS.js} +37 -17
- package/dist/chunk-ICWJ3KIS.js.map +1 -0
- package/dist/chunk-NCTU7EUD.cjs +27 -0
- package/dist/chunk-NCTU7EUD.cjs.map +1 -0
- package/dist/chunk-ONOINBRA.js +25 -0
- package/dist/chunk-ONOINBRA.js.map +1 -0
- package/dist/{chunk-KHI6XQRN.cjs → chunk-PWK5GFU3.cjs} +37 -17
- package/dist/chunk-PWK5GFU3.cjs.map +1 -0
- package/dist/chunk-SENLCWTU.js +8 -0
- package/dist/{chunk-56QOEWUS.js.map → chunk-SENLCWTU.js.map} +1 -1
- package/dist/chunk-SUYY5N5J.cjs +10 -0
- package/dist/{chunk-WXHQXPS4.cjs.map → chunk-SUYY5N5J.cjs.map} +1 -1
- package/dist/createTableCrud-C8GsAwxO.d.ts +9 -0
- package/dist/createTableCrud-Ctl2qZY-.d.cts +9 -0
- package/dist/crud.cjs +5 -5
- package/dist/crud.d.cts +1 -1
- package/dist/crud.d.ts +1 -1
- package/dist/crud.js +3 -3
- package/dist/index.cjs +10 -5
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -3
- package/dist/naive.cjs +3 -3
- package/dist/naive.d.cts +2 -2
- package/dist/naive.d.ts +2 -2
- package/dist/naive.js +2 -2
- package/dist/{types-CUyibJZX.d.ts → types-4y_P4TzY.d.ts} +29 -1
- package/dist/{types-BRDRqYFs.d.cts → types-DHOiso_K.d.cts} +29 -1
- package/dist/vue.cjs +11 -6
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.d.cts +3 -2
- package/dist/vue.d.ts +3 -2
- package/dist/vue.js +2 -1
- package/dist/vue.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2JXH7SIL.js.map +0 -1
- package/dist/chunk-56QOEWUS.js +0 -8
- package/dist/chunk-KHI6XQRN.cjs.map +0 -1
- package/dist/chunk-WXHQXPS4.cjs +0 -10
package/dist/vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue/useRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/vue/useRequest.ts"],"names":[],"mappings":"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","file":"vue.js","sourcesContent":["import {\n computed,\n getCurrentScope,\n onScopeDispose,\n shallowRef,\n type ComputedRef,\n type ShallowRef,\n} from \"vue\";\nimport type { ConcurrencyPolicy } from \"../axios/types\";\nimport {\n isCanceledError,\n normalizeRequestError,\n type RequestError,\n} from \"../client/errors\";\n\nexport interface UseRequestContext {\n signal: AbortSignal;\n}\n\nexport interface UseRequestOptions<T, Args extends unknown[]> {\n initialData?: T;\n immediate?: boolean;\n immediateArgs?: Args;\n concurrency?: Extract<ConcurrencyPolicy, \"allow\" | \"takeLatest\" | \"takeFirst\">;\n keepPreviousData?: boolean;\n onSuccess?: (data: T) => void | Promise<void>;\n onError?: (error: RequestError) => void | Promise<void>;\n}\n\nexport interface UseRequestReturn<T, Args extends unknown[]> {\n data: ShallowRef<T | undefined>;\n error: ShallowRef<RequestError | null>;\n loading: ComputedRef<boolean>;\n run: (...args: Args) => Promise<T>;\n cancel: (reason?: unknown) => void;\n reset: () => void;\n}\n\nexport function useRequest<T, Args extends unknown[] = []>(\n executor: (context: UseRequestContext, ...args: Args) => Promise<T>,\n options: UseRequestOptions<T, Args> = {},\n): UseRequestReturn<T, Args> {\n const data = shallowRef<T | undefined>(options.initialData);\n const error = shallowRef<RequestError | null>(null);\n const pending = shallowRef(0);\n const loading = computed(() => pending.value > 0);\n let active: { controller: AbortController; promise: Promise<T>; id: number } | null =\n null;\n const controllers = new Set<AbortController>();\n let sequence = 0;\n\n const cancel = (reason?: unknown): void => {\n sequence += 1;\n for (const controller of controllers) controller.abort(reason);\n controllers.clear();\n active = null;\n };\n\n const run = async (...args: Args): Promise<T> => {\n const concurrency = options.concurrency ?? \"takeLatest\";\n if (active && concurrency === \"takeFirst\") return active.promise;\n if (active && concurrency === \"takeLatest\") active.controller.abort();\n\n const id = ++sequence;\n const controller = new AbortController();\n controllers.add(controller);\n if (!options.keepPreviousData) data.value = undefined;\n error.value = null;\n pending.value += 1;\n\n const promise = executor({ signal: controller.signal }, ...args);\n active = { controller, promise, id };\n try {\n const result = await promise;\n if (id === sequence || concurrency === \"takeFirst\") {\n data.value = result;\n try {\n await options.onSuccess?.(result);\n } catch {\n // Lifecycle callbacks must not turn a successful request into a failure.\n }\n }\n return result;\n } catch (cause) {\n const normalized = normalizeRequestError(cause);\n if (!isCanceledError(normalized) && id === sequence) {\n error.value = normalized;\n try {\n await options.onError?.(normalized);\n } catch {\n // Preserve the original request error if an observer fails.\n }\n }\n throw normalized;\n } finally {\n pending.value = Math.max(0, pending.value - 1);\n controllers.delete(controller);\n if (active?.id === id) active = null;\n }\n };\n\n const reset = (): void => {\n cancel();\n data.value = options.initialData;\n error.value = null;\n };\n\n if (getCurrentScope()) onScopeDispose(() => cancel());\n if (options.immediate) {\n void run(...(options.immediateArgs ?? ([] as unknown as Args))).catch(() => undefined);\n }\n\n return { data, error, loading, run, cancel, reset };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue/context.ts","../src/composables/useTableCrud/constants.ts","../src/composables/useTableCrud/utils.ts","../src/composables/useTableCrud/useTableCrud.ts"],"names":["rootTotal"],"mappings":"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","file":"chunk-2JXH7SIL.js","sourcesContent":["import {\n inject,\n provide,\n type App,\n type InjectionKey,\n} from \"vue\";\nimport type { RequestClient } from \"../client/types\";\n\nexport const REQUEST_CLIENT_KEY = Symbol.for(\n \"@robot-admin/request-core/vue-client/v1\",\n) as InjectionKey<RequestClient>;\n\nexport function createRequestPlugin(client: RequestClient) {\n return {\n install(app: App): void {\n app.provide(REQUEST_CLIENT_KEY, client);\n },\n };\n}\n\nexport function provideRequestClient(client: RequestClient): RequestClient {\n provide(REQUEST_CLIENT_KEY, client);\n return client;\n}\n\nexport function useRequestClient(optional = false): RequestClient | undefined {\n const client = inject(REQUEST_CLIENT_KEY, undefined);\n if (!client && !optional) {\n throw new Error(\n \"Request client was not provided. Install createRequestPlugin(client) or pass client explicitly.\",\n );\n }\n return client;\n}\n","/*\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2026-02-07 10:00:00\n * @LastEditors: ChenYu ycyplus@gmail.com\n * @LastEditTime: 2026-02-07 10:00:00\n * @FilePath: \\robot-admin-request-core\\src\\composables\\useTableCrud\\constants.ts\n * @Description: useTableCrud 常量定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/**\n * 默认配置\n */\nexport const DEFAULT_CONFIG = {\n /** 默认 ID 字段名 */\n idKey: \"id\",\n /** 默认分页大小 */\n pageSize: 10,\n /** 默认启用分页 */\n paginationEnabled: true,\n /** 默认当前页 */\n currentPage: 1,\n} as const;\n\n/**\n * 响应字段别名配置(支持多种后端响应格式)\n */\n\n/** 数据字段别名(按优先级排序) - 用于从响应中提取数据层 */\nexport const DATA_FIELD_ALIASES = [\"data\", \"list\", \"items\", \"records\"] as const;\n\n/** 列表字段别名(按优先级排序) - 用于从数据层提取列表数组 */\nexport const LIST_FIELD_ALIASES = [\n \"list\",\n \"items\",\n \"records\",\n \"rows\",\n \"data\",\n] as const;\n\n/** 总数字段别名(按优先级排序) - 用于提取数据总数 */\nexport const TOTAL_FIELD_ALIASES = [\n \"total\",\n \"totalCount\",\n \"count\",\n \"totalElements\",\n] as const;\n\n/** 成功状态码(支持数字和字符串) */\nexport const SUCCESS_CODES = [200, 0, \"200\", \"0\"] as const;\n\n/**\n * 默认消息文本\n */\nexport const DEFAULT_MESSAGES = {\n createSuccess: \"新增成功\",\n updateSuccess: \"更新成功\",\n deleteSuccess: \"删除成功\",\n saveError: \"保存失败\",\n deleteError: \"删除失败\",\n loadError: \"数据加载失败\",\n detailError: \"详情获取失败\",\n noDeleteApi: \"未配置删除接口\",\n} as const;\n","/*\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2026-02-07 10:00:00\n * @LastEditors: ChenYu ycyplus@gmail.com\n * @LastEditTime: 2026-02-07 10:00:00\n * @FilePath: \\robot-admin-request-core\\src\\composables\\useTableCrud\\utils.ts\n * @Description: useTableCrud 工具函数\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\nimport type { DataRecord } from \"./types\";\nimport {\n DATA_FIELD_ALIASES,\n LIST_FIELD_ALIASES,\n TOTAL_FIELD_ALIASES,\n SUCCESS_CODES,\n} from \"./constants\";\nimport { getGlobalConfig } from \"../../core\";\n\n/**\n * 获取运行时字段别名(优先使用全局配置)\n */\nfunction getRuntimeFieldAliases() {\n const config = getGlobalConfig();\n return {\n data: config.fieldAliases.data || DATA_FIELD_ALIASES,\n list: config.fieldAliases.list || LIST_FIELD_ALIASES,\n total: config.fieldAliases.total || TOTAL_FIELD_ALIASES,\n };\n}\n\n/**\n * 获取运行时成功状态码(优先使用全局配置)\n */\nfunction getRuntimeSuccessCodes() {\n const config = getGlobalConfig();\n return config.successCodes || SUCCESS_CODES;\n}\n\n/**\n * 字段查找器(支持多种字段别名)\n */\nexport const FieldFinder = {\n /**\n * 查找第一个存在的字段值\n */\n findFirst<T>(\n obj: object | null | undefined,\n aliases: readonly string[],\n defaultValue: T,\n ): T {\n if (!obj || typeof obj !== \"object\") return defaultValue;\n\n const record = obj as Record<string, unknown>;\n for (const key of aliases) {\n if (key in record && record[key] !== undefined) {\n return record[key] as T;\n }\n }\n return defaultValue;\n },\n\n /**\n * 查找第一个存在的数字字段\n */\n findNumber(\n obj: object | null | undefined,\n aliases: readonly string[],\n defaultValue = 0,\n ): number {\n const value = this.findFirst(obj, aliases, defaultValue);\n const numberValue = Number(value);\n return Number.isFinite(numberValue) ? numberValue : defaultValue;\n },\n};\n\n/**\n * 响应标准化工具\n */\nexport const ResponseNormalizer = {\n /**\n * 判断响应是否成功\n */\n isSuccess(res: unknown): boolean {\n if (!res || typeof res !== \"object\") return false;\n const record = res as Record<string, unknown>;\n if (typeof record.success === \"boolean\") return record.success;\n if (!(\"code\" in record)) return true;\n // 使用运行时配置的成功状态码\n const successCodes = getRuntimeSuccessCodes();\n return (\n successCodes.includes(record.code as number | string) ||\n successCodes.some((code) => String(code) === String(record.code))\n );\n },\n\n /**\n * 标准化响应数据(提取 data 层)\n */\n normalize<T = unknown>(\n res: unknown,\n ): { data: T; success: boolean; raw: unknown } {\n if (!res || typeof res !== \"object\") {\n return { data: res as T, success: true, raw: res };\n }\n\n const aliases = getRuntimeFieldAliases();\n const record = res as Record<string, unknown>;\n const hasDataLayer = aliases.data.some((key) => key in record);\n if (!hasDataLayer) {\n return { data: res as T, success: ResponseNormalizer.isSuccess(res), raw: res };\n }\n return {\n data: FieldFinder.findFirst(record, aliases.data, res) as T,\n success: ResponseNormalizer.isSuccess(res),\n raw: res,\n };\n },\n};\n\n/**\n * URL 工具\n */\nexport const UrlUtils = {\n /**\n * 构建 URL(处理路径参数)\n */\n buildUrl(endpoint: string, id?: unknown): string {\n if (id !== undefined && endpoint.includes(\":id\")) {\n return endpoint.replace(\":id\", encodeURIComponent(String(id)));\n }\n return endpoint;\n },\n};\n\n/**\n * 数据提取工具(增强版,支持多种响应格式)\n */\nexport const DataExtractor = {\n /**\n * 从响应中提取列表数据(支持多种格式)\n *\n * 支持的响应结构:\n * 1. { code: 0, data: { list: [...], total: 10 } } // 嵌套结构(最常见)\n * 2. { data: { items: [...], total: 10 } } // 嵌套结构\n * 3. { list: [...], total: 10 } // 扁平结构\n * 4. { items: [...], totalCount: 10 } // 不同字段名\n * 5. { data: [...] } // 直接数组\n * 6. [...] // 纯数组\n */\n extractList<T = unknown>(response: unknown): { items: T[]; total: number } {\n // 第一步:标准化响应,提取 data 层\n const normalized = ResponseNormalizer.normalize(response);\n const dataLayer = normalized.data;\n const aliases = getRuntimeFieldAliases();\n\n if (Array.isArray(dataLayer)) {\n const rootTotal = FieldFinder.findNumber(\n response && typeof response === \"object\" ? response : null,\n aliases.total,\n dataLayer.length,\n );\n return { items: dataLayer as T[], total: rootTotal };\n }\n\n if (!dataLayer || typeof dataLayer !== \"object\") {\n return { items: [], total: 0 };\n }\n\n // 第二步:从 data 层提取列表数组(使用运行时配置)\n const list = FieldFinder.findFirst<unknown[]>(dataLayer, aliases.list, []);\n\n // 第三步:提取总数(使用运行时配置)\n const rootTotal = FieldFinder.findNumber(\n response && typeof response === \"object\" ? response : null,\n aliases.total,\n Array.isArray(list) ? list.length : 0,\n );\n const total = FieldFinder.findNumber(dataLayer, aliases.total, rootTotal);\n\n return {\n items: Array.isArray(list) ? (list as T[]) : [],\n total,\n };\n },\n\n /**\n * 从响应中提取详情数据\n */\n extractDetail<T = unknown>(response: unknown): T | null {\n // 标准化响应\n const normalized = ResponseNormalizer.normalize(response);\n return normalized.data as T | null;\n },\n};\n\n/**\n * 行操作工具\n */\nexport const RowUtils = {\n /**\n * 从数组中查找行索引\n */\n findIndex<T extends DataRecord>(items: T[], idKey: keyof T, id: unknown): number {\n return items.findIndex((item) => item[idKey] === id);\n },\n\n /**\n * 从数组中移除行\n */\n remove<T extends DataRecord>(items: T[], idKey: keyof T, id: unknown): boolean {\n const index = this.findIndex(items, idKey, id);\n if (index !== -1) {\n items.splice(index, 1);\n return true;\n }\n return false;\n },\n\n /**\n * 生成默认 ID\n */\n generateId(): number {\n return Date.now() + Math.floor(Math.random() * 1000);\n },\n};\n","import {\n computed,\n getCurrentInstance,\n getCurrentScope,\n onMounted,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n type Ref,\n} from \"vue\";\nimport {\n deleteData,\n getData,\n postData,\n putData,\n} from \"../../axios/service\";\nimport {\n isCanceledError,\n normalizeRequestError,\n RequestError,\n} from \"../../client/errors\";\nimport { useRequestClient } from \"../../vue/context\";\nimport { DEFAULT_CONFIG, DEFAULT_MESSAGES } from \"./constants\";\nimport type {\n ActionContext,\n CrudDialogApi,\n CrudMessageApi,\n DataRecord,\n TableActions,\n TablePageState,\n TableQueryResult,\n UseTableCrudConfig,\n UseTableCrudReturn,\n} from \"./types\";\nimport { DataExtractor, RowUtils, UrlUtils } from \"./utils\";\n\ntype Operation = \"refresh\" | \"detail\" | \"create\" | \"update\" | \"remove\";\n\nconst noopMessage: CrudMessageApi = {\n success: () => undefined,\n error: () => undefined,\n warning: () => undefined,\n info: () => undefined,\n};\n\nconst noopDialog: CrudDialogApi = {\n warning: () => undefined,\n error: () => undefined,\n success: () => undefined,\n info: () => undefined,\n};\n\nfunction cloneValue<T>(value: T): T {\n if (typeof structuredClone === \"function\") {\n try {\n return structuredClone(value);\n } catch {\n // Shallow fallback supports reactive proxies and class-backed filters.\n }\n }\n return Array.isArray(value)\n ? ([...value] as T)\n : value && typeof value === \"object\"\n ? ({ ...value } as T)\n : value;\n}\n\nfunction recordValue<T extends object>(row: T, key: keyof T): unknown {\n return row[key];\n}\n\nfunction asQueryResult<T>(value: unknown): TableQueryResult<T> | null {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Partial<TableQueryResult<T>>;\n return Array.isArray(candidate.items) && Number.isFinite(candidate.total)\n ? { items: candidate.items, total: Number(candidate.total) }\n : null;\n}\n\nexport function useTableCrud<\n T extends DataRecord,\n Filters extends object = Record<string, unknown>,\n Sort extends object = Record<string, unknown>,\n>(\n config: UseTableCrudConfig<T, Filters, Sort>,\n): UseTableCrudReturn<T, Filters, Sort> {\n const {\n api,\n query,\n mutations = {},\n columns = [],\n customActions = [],\n detail: detailConfig,\n idKey = DEFAULT_CONFIG.idKey as keyof T,\n defaultPageSize = DEFAULT_CONFIG.pageSize,\n defaultPaginationEnabled = DEFAULT_CONFIG.paginationEnabled,\n initialFilters = {} as Filters,\n initialSort = null,\n createNewRow,\n autoLoad = true,\n extractListData,\n refreshAfterMutation = true,\n batchConcurrency = 4,\n detailTitle,\n } = config;\n\n if (!query && !api?.list) {\n throw new Error(\"useTableCrud requires either query or api.list.\");\n }\n if (!Number.isInteger(batchConcurrency) || batchConcurrency < 1) {\n throw new RangeError(\"batchConcurrency must be an integer greater than 0.\");\n }\n\n const injectedClient = getCurrentInstance() ? useRequestClient(true) : undefined;\n const client = config.client ?? injectedClient;\n const message = config.ui?.message ?? noopMessage;\n const dialog: CrudDialogApi = config.ui?.dialog ?? noopDialog;\n const notify = (\n type: \"success\" | \"error\" | \"warning\",\n text: string,\n ): void => {\n try {\n void Promise.resolve(message[type](text)).catch(() => undefined);\n } catch {\n // Presentation adapters must not alter request outcomes.\n }\n };\n\n const data = shallowRef<T[]>([]);\n const total = ref(0);\n const tableRef = ref<unknown>();\n const paginationEnabled = ref(defaultPaginationEnabled);\n const filters = ref(cloneValue(initialFilters)) as Ref<Filters>;\n const sort = ref(cloneValue(initialSort)) as Ref<Sort | null>;\n const error = shallowRef<RequestError | null>(null);\n const lastUpdated = ref<number | null>(null);\n const page: TablePageState = reactive({\n current: DEFAULT_CONFIG.currentPage,\n size: defaultPageSize,\n });\n const counts = reactive<Record<Operation, number>>({\n refresh: 0,\n detail: 0,\n create: 0,\n update: 0,\n remove: 0,\n });\n const controllers = new Set<AbortController>();\n let refreshController: AbortController | null = null;\n let refreshSequence = 0;\n let disposed = false;\n\n const loading = computed(() => Object.values(counts).some((count) => count > 0));\n const isInitialLoading = computed(\n () => counts.refresh > 0 && lastUpdated.value === null,\n );\n const isRefreshing = computed(\n () => counts.refresh > 0 && lastUpdated.value !== null,\n );\n const creating = computed(() => counts.create > 0);\n const updating = computed(() => counts.update > 0);\n const removing = computed(() => counts.remove > 0);\n\n const startOperation = (operation: Operation): AbortController => {\n counts[operation] += 1;\n const controller = new AbortController();\n controllers.add(controller);\n return controller;\n };\n\n const finishOperation = (\n operation: Operation,\n controller: AbortController,\n ): void => {\n counts[operation] = Math.max(0, counts[operation] - 1);\n controllers.delete(controller);\n };\n\n const reportError = async (\n cause: unknown,\n operation: Operation,\n fallbackMessage: string,\n ): Promise<RequestError> => {\n const normalized = normalizeRequestError(cause);\n if (!isCanceledError(normalized)) {\n error.value = normalized;\n notify(\"error\", fallbackMessage);\n try {\n await config.onError?.(normalized, operation);\n } catch {\n // Error observers must not replace the request failure.\n }\n }\n return normalized;\n };\n\n const detailVisible = ref(false);\n const detailData = ref<T | null>(null) as Ref<T | null>;\n const detailTitleState = ref(\"\");\n const detail = {\n visible: detailVisible,\n data: detailData,\n title: detailTitleState,\n show: (row: T): void => {\n detailData.value = row;\n detailTitleState.value =\n detailTitle?.(row) ??\n `详情 - ${String(\n (row as Record<string, unknown>).name ?? recordValue(row, idKey) ?? \"\",\n )}`;\n detailVisible.value = true;\n },\n close: (): void => {\n detailVisible.value = false;\n detailData.value = null;\n detailTitleState.value = \"\";\n },\n };\n\n const requestList = async (signal: AbortSignal): Promise<unknown> => {\n if (query) {\n return query({\n page: page.current,\n pageSize: page.size,\n paginationEnabled: paginationEnabled.value,\n filters: filters.value,\n sort: sort.value,\n signal,\n });\n }\n const paginationParams = paginationEnabled.value\n ? { page: page.current, pageSize: page.size }\n : {};\n const params = {\n ...paginationParams,\n ...(filters.value as Record<string, unknown>),\n ...(sort.value ? { sort: sort.value } : {}),\n };\n return client\n ? client.get(api!.list, { params, signal, concurrency: \"takeLatest\" })\n : getData(api!.list, { params, signal, dedupe: true });\n };\n\n const refresh = async (): Promise<void> => {\n if (disposed) return;\n refreshController?.abort();\n const sequence = ++refreshSequence;\n const controller = startOperation(\"refresh\");\n refreshController = controller;\n error.value = null;\n try {\n const response = await requestList(controller.signal);\n if (sequence !== refreshSequence || controller.signal.aborted) return;\n const extracted =\n extractListData?.(response) ??\n asQueryResult<T>(response) ??\n DataExtractor.extractList<T>(response);\n data.value = [...extracted.items];\n total.value = extracted.total;\n lastUpdated.value = Date.now();\n } catch (cause) {\n if (!controller.signal.aborted) {\n await reportError(cause, \"refresh\", DEFAULT_MESSAGES.loadError);\n }\n } finally {\n if (refreshController === controller) refreshController = null;\n finishOperation(\"refresh\", controller);\n }\n };\n\n const maybeRefresh = async (): Promise<void> => {\n if (refreshAfterMutation) await refresh();\n };\n\n const getDetail = async (row: T): Promise<T | null> => {\n if (!mutations.get && !api?.get) {\n detail.show(row);\n return row;\n }\n const controller = startOperation(\"detail\");\n try {\n let result: T | null;\n if (mutations.get) {\n result = await mutations.get(row, { signal: controller.signal });\n } else {\n const url = UrlUtils.buildUrl(api!.get!, recordValue(row, idKey));\n const response = client\n ? await client.get(url, { signal: controller.signal })\n : await getData(url, { signal: controller.signal });\n result = DataExtractor.extractDetail<T>(response);\n }\n if (result) detail.show(result);\n return result;\n } catch (cause) {\n if (!controller.signal.aborted) {\n await reportError(cause, \"detail\", DEFAULT_MESSAGES.detailError);\n }\n return null;\n } finally {\n finishOperation(\"detail\", controller);\n }\n };\n\n const create = async (row: T): Promise<void> => {\n if (!mutations.create && !api?.create) {\n notify(\"warning\", \"未配置新增操作\");\n return;\n }\n const controller = startOperation(\"create\");\n try {\n if (mutations.create) {\n await mutations.create(row, { signal: controller.signal });\n } else if (client) {\n await client.post(api!.create!, row, { signal: controller.signal });\n } else {\n await postData(api!.create!, row, { signal: controller.signal });\n }\n notify(\"success\", DEFAULT_MESSAGES.createSuccess);\n await maybeRefresh();\n } catch (cause) {\n throw await reportError(cause, \"create\", \"新增失败\");\n } finally {\n finishOperation(\"create\", controller);\n }\n };\n\n const save = async (row: T): Promise<void> => {\n if (!mutations.update && !api?.update) {\n notify(\"warning\", \"未配置更新操作\");\n return;\n }\n const controller = startOperation(\"update\");\n try {\n if (mutations.update) {\n await mutations.update(row, { signal: controller.signal });\n } else {\n const url = UrlUtils.buildUrl(api!.update!, recordValue(row, idKey));\n if (client) await client.put(url, row, { signal: controller.signal });\n else await putData(url, row, { signal: controller.signal });\n }\n notify(\"success\", DEFAULT_MESSAGES.updateSuccess);\n await maybeRefresh();\n } catch (cause) {\n throw await reportError(cause, \"update\", DEFAULT_MESSAGES.saveError);\n } finally {\n finishOperation(\"update\", controller);\n }\n };\n\n const removeOne = async (row: T, signal: AbortSignal): Promise<void> => {\n if (mutations.remove) {\n await mutations.remove(row, { signal });\n return;\n }\n if (!api?.remove) throw new Error(\"Delete operation is not configured.\");\n const url = UrlUtils.buildUrl(api.remove, recordValue(row, idKey));\n if (client) await client.delete(url, { signal });\n else await deleteData(url, { signal });\n };\n\n const removeRowsLocally = (rows: readonly T[]): void => {\n let removed = 0;\n for (const row of rows) {\n if (RowUtils.remove(data.value, idKey, recordValue(row, idKey))) {\n removed += 1;\n }\n }\n if (removed > 0) {\n data.value = [...data.value];\n total.value = Math.max(0, total.value - removed);\n }\n };\n\n const remove = async (row: T): Promise<void> => {\n if (!mutations.remove && !api?.remove) {\n notify(\"warning\", DEFAULT_MESSAGES.noDeleteApi);\n return;\n }\n const controller = startOperation(\"remove\");\n try {\n await removeOne(row, controller.signal);\n notify(\"success\", DEFAULT_MESSAGES.deleteSuccess);\n if (refreshAfterMutation) await refresh();\n else removeRowsLocally([row]);\n } catch (cause) {\n throw await reportError(cause, \"remove\", DEFAULT_MESSAGES.deleteError);\n } finally {\n finishOperation(\"remove\", controller);\n }\n };\n\n const batchRemove = async (rows: T[]): Promise<void> => {\n if (rows.length === 0) {\n notify(\"warning\", \"请选择要删除的数据\");\n return;\n }\n if (!mutations.batchRemove && !mutations.remove && !api?.batchRemove && !api?.remove) {\n notify(\"warning\", DEFAULT_MESSAGES.noDeleteApi);\n return;\n }\n const controller = startOperation(\"remove\");\n try {\n if (mutations.batchRemove) {\n await mutations.batchRemove(rows, { signal: controller.signal });\n } else if (api?.batchRemove) {\n const ids = rows.map((row) => recordValue(row, idKey));\n if (client) {\n await client.post(api.batchRemove, { ids }, { signal: controller.signal });\n } else {\n await postData(api.batchRemove, { ids }, { signal: controller.signal });\n }\n } else {\n let cursor = 0;\n const failures: unknown[] = [];\n const worker = async (): Promise<void> => {\n while (cursor < rows.length && !controller.signal.aborted) {\n const current = rows[cursor++];\n try {\n await removeOne(current, controller.signal);\n } catch (cause) {\n failures.push(cause);\n }\n }\n };\n await Promise.all(\n Array.from({ length: Math.min(batchConcurrency, rows.length) }, worker),\n );\n if (controller.signal.aborted) {\n throw Object.assign(new Error(\"canceled\"), {\n name: \"AbortError\",\n code: \"ERR_CANCELED\",\n });\n }\n if (failures.length > 0) {\n throw new RequestError({\n kind: \"business\",\n message: `${failures.length} delete operation(s) failed.`,\n data: failures,\n });\n }\n }\n notify(\"success\", `成功删除 ${rows.length} 条数据`);\n if (refreshAfterMutation) await refresh();\n else removeRowsLocally(rows);\n } catch (cause) {\n throw await reportError(cause, \"remove\", \"批量删除失败\");\n } finally {\n finishOperation(\"remove\", controller);\n }\n };\n\n const search = async (next?: Partial<Filters>): Promise<void> => {\n if (next) Object.assign(filters.value, next);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const resetSearch = async (): Promise<void> => {\n filters.value = cloneValue(initialFilters);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const setSort = async (next: Sort | null): Promise<void> => {\n sort.value = cloneValue(next);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const handlePaginationChange = (pageNumber: number, pageSize: number): void => {\n page.current = pageNumber;\n page.size = pageSize;\n void refresh();\n };\n\n const handleRowDelete = (row: T): void => {\n removeRowsLocally([row]);\n };\n\n const createActionContext = (index: number): ActionContext<T> => ({\n data: data.value,\n index,\n page,\n paginationEnabled: paginationEnabled.value,\n message,\n dialog,\n refresh,\n });\n\n const actions = computed<TableActions<T>>(() => {\n const result: TableActions<T> = {};\n if (mutations.update || api?.update) {\n result.edit = async (row) => {\n try {\n await save(row);\n return { data: row, error: null };\n } catch (cause) {\n return { data: null, error: normalizeRequestError(cause) };\n }\n };\n }\n if (mutations.remove || api?.remove) {\n result.delete = async (row) => {\n try {\n await remove(row);\n return { data: { success: true }, error: null };\n } catch (cause) {\n return { data: null, error: normalizeRequestError(cause) };\n }\n };\n }\n if (mutations.get || api?.get) {\n result.detail = async (row) => {\n const value = await getDetail(row);\n return { data: value, error: error.value };\n };\n }\n if (customActions.length > 0) {\n result.custom = customActions.map((action) => ({\n key: action.key,\n label: action.label,\n icon: action.icon,\n type: action.type ?? \"default\",\n onClick: (row, index) => action.handler(row, createActionContext(index)),\n }));\n }\n return result;\n });\n\n const pagination = computed(() =>\n paginationEnabled.value\n ? {\n enabled: true as const,\n page: page.current,\n pageSize: page.size,\n itemCount: total.value,\n }\n : false,\n );\n\n const createDraft = (): T => createNewRow?.() ?? ({} as T);\n const cancel = (): void => {\n refreshSequence += 1;\n refreshController?.abort();\n refreshController = null;\n for (const controller of controllers) controller.abort();\n };\n const dispose = (): void => {\n if (disposed) return;\n disposed = true;\n cancel();\n };\n\n if (getCurrentScope()) onScopeDispose(dispose);\n if (autoLoad === \"mounted\" && getCurrentInstance()) {\n onMounted(() => void refresh());\n } else if (autoLoad === \"mounted\") {\n void refresh();\n }\n else if (autoLoad) void refresh();\n\n return {\n data,\n rows: data,\n loading,\n isInitialLoading,\n isRefreshing,\n creating,\n updating,\n removing,\n total,\n error,\n lastUpdated,\n columns: computed(() => columns),\n actions,\n tableRef,\n page,\n filters,\n sort,\n paginationEnabled,\n pagination,\n refresh,\n reload: refresh,\n search,\n resetSearch,\n setSort,\n create,\n save,\n remove,\n batchRemove,\n getDetail,\n createDraft,\n cancel,\n dispose,\n handleCancel: refresh,\n handlePaginationChange,\n handleRowDelete,\n detail,\n detailConfig,\n };\n}\n"]}
|
package/dist/chunk-56QOEWUS.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue/context.ts","../src/composables/useTableCrud/constants.ts","../src/composables/useTableCrud/utils.ts","../src/composables/useTableCrud/useTableCrud.ts"],"names":["provide","inject","getGlobalConfig","rootTotal","getCurrentInstance","shallowRef","ref","reactive","computed","normalizeRequestError","isCanceledError","getData","postData","putData","deleteData","RequestError","getCurrentScope","onScopeDispose","onMounted"],"mappings":"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","file":"chunk-KHI6XQRN.cjs","sourcesContent":["import {\n inject,\n provide,\n type App,\n type InjectionKey,\n} from \"vue\";\nimport type { RequestClient } from \"../client/types\";\n\nexport const REQUEST_CLIENT_KEY = Symbol.for(\n \"@robot-admin/request-core/vue-client/v1\",\n) as InjectionKey<RequestClient>;\n\nexport function createRequestPlugin(client: RequestClient) {\n return {\n install(app: App): void {\n app.provide(REQUEST_CLIENT_KEY, client);\n },\n };\n}\n\nexport function provideRequestClient(client: RequestClient): RequestClient {\n provide(REQUEST_CLIENT_KEY, client);\n return client;\n}\n\nexport function useRequestClient(optional = false): RequestClient | undefined {\n const client = inject(REQUEST_CLIENT_KEY, undefined);\n if (!client && !optional) {\n throw new Error(\n \"Request client was not provided. Install createRequestPlugin(client) or pass client explicitly.\",\n );\n }\n return client;\n}\n","/*\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2026-02-07 10:00:00\n * @LastEditors: ChenYu ycyplus@gmail.com\n * @LastEditTime: 2026-02-07 10:00:00\n * @FilePath: \\robot-admin-request-core\\src\\composables\\useTableCrud\\constants.ts\n * @Description: useTableCrud 常量定义\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\n/**\n * 默认配置\n */\nexport const DEFAULT_CONFIG = {\n /** 默认 ID 字段名 */\n idKey: \"id\",\n /** 默认分页大小 */\n pageSize: 10,\n /** 默认启用分页 */\n paginationEnabled: true,\n /** 默认当前页 */\n currentPage: 1,\n} as const;\n\n/**\n * 响应字段别名配置(支持多种后端响应格式)\n */\n\n/** 数据字段别名(按优先级排序) - 用于从响应中提取数据层 */\nexport const DATA_FIELD_ALIASES = [\"data\", \"list\", \"items\", \"records\"] as const;\n\n/** 列表字段别名(按优先级排序) - 用于从数据层提取列表数组 */\nexport const LIST_FIELD_ALIASES = [\n \"list\",\n \"items\",\n \"records\",\n \"rows\",\n \"data\",\n] as const;\n\n/** 总数字段别名(按优先级排序) - 用于提取数据总数 */\nexport const TOTAL_FIELD_ALIASES = [\n \"total\",\n \"totalCount\",\n \"count\",\n \"totalElements\",\n] as const;\n\n/** 成功状态码(支持数字和字符串) */\nexport const SUCCESS_CODES = [200, 0, \"200\", \"0\"] as const;\n\n/**\n * 默认消息文本\n */\nexport const DEFAULT_MESSAGES = {\n createSuccess: \"新增成功\",\n updateSuccess: \"更新成功\",\n deleteSuccess: \"删除成功\",\n saveError: \"保存失败\",\n deleteError: \"删除失败\",\n loadError: \"数据加载失败\",\n detailError: \"详情获取失败\",\n noDeleteApi: \"未配置删除接口\",\n} as const;\n","/*\n * @Author: ChenYu ycyplus@gmail.com\n * @Date: 2026-02-07 10:00:00\n * @LastEditors: ChenYu ycyplus@gmail.com\n * @LastEditTime: 2026-02-07 10:00:00\n * @FilePath: \\robot-admin-request-core\\src\\composables\\useTableCrud\\utils.ts\n * @Description: useTableCrud 工具函数\n * Copyright (c) 2026 by CHENY, All Rights Reserved 😎.\n */\n\nimport type { DataRecord } from \"./types\";\nimport {\n DATA_FIELD_ALIASES,\n LIST_FIELD_ALIASES,\n TOTAL_FIELD_ALIASES,\n SUCCESS_CODES,\n} from \"./constants\";\nimport { getGlobalConfig } from \"../../core\";\n\n/**\n * 获取运行时字段别名(优先使用全局配置)\n */\nfunction getRuntimeFieldAliases() {\n const config = getGlobalConfig();\n return {\n data: config.fieldAliases.data || DATA_FIELD_ALIASES,\n list: config.fieldAliases.list || LIST_FIELD_ALIASES,\n total: config.fieldAliases.total || TOTAL_FIELD_ALIASES,\n };\n}\n\n/**\n * 获取运行时成功状态码(优先使用全局配置)\n */\nfunction getRuntimeSuccessCodes() {\n const config = getGlobalConfig();\n return config.successCodes || SUCCESS_CODES;\n}\n\n/**\n * 字段查找器(支持多种字段别名)\n */\nexport const FieldFinder = {\n /**\n * 查找第一个存在的字段值\n */\n findFirst<T>(\n obj: object | null | undefined,\n aliases: readonly string[],\n defaultValue: T,\n ): T {\n if (!obj || typeof obj !== \"object\") return defaultValue;\n\n const record = obj as Record<string, unknown>;\n for (const key of aliases) {\n if (key in record && record[key] !== undefined) {\n return record[key] as T;\n }\n }\n return defaultValue;\n },\n\n /**\n * 查找第一个存在的数字字段\n */\n findNumber(\n obj: object | null | undefined,\n aliases: readonly string[],\n defaultValue = 0,\n ): number {\n const value = this.findFirst(obj, aliases, defaultValue);\n const numberValue = Number(value);\n return Number.isFinite(numberValue) ? numberValue : defaultValue;\n },\n};\n\n/**\n * 响应标准化工具\n */\nexport const ResponseNormalizer = {\n /**\n * 判断响应是否成功\n */\n isSuccess(res: unknown): boolean {\n if (!res || typeof res !== \"object\") return false;\n const record = res as Record<string, unknown>;\n if (typeof record.success === \"boolean\") return record.success;\n if (!(\"code\" in record)) return true;\n // 使用运行时配置的成功状态码\n const successCodes = getRuntimeSuccessCodes();\n return (\n successCodes.includes(record.code as number | string) ||\n successCodes.some((code) => String(code) === String(record.code))\n );\n },\n\n /**\n * 标准化响应数据(提取 data 层)\n */\n normalize<T = unknown>(\n res: unknown,\n ): { data: T; success: boolean; raw: unknown } {\n if (!res || typeof res !== \"object\") {\n return { data: res as T, success: true, raw: res };\n }\n\n const aliases = getRuntimeFieldAliases();\n const record = res as Record<string, unknown>;\n const hasDataLayer = aliases.data.some((key) => key in record);\n if (!hasDataLayer) {\n return { data: res as T, success: ResponseNormalizer.isSuccess(res), raw: res };\n }\n return {\n data: FieldFinder.findFirst(record, aliases.data, res) as T,\n success: ResponseNormalizer.isSuccess(res),\n raw: res,\n };\n },\n};\n\n/**\n * URL 工具\n */\nexport const UrlUtils = {\n /**\n * 构建 URL(处理路径参数)\n */\n buildUrl(endpoint: string, id?: unknown): string {\n if (id !== undefined && endpoint.includes(\":id\")) {\n return endpoint.replace(\":id\", encodeURIComponent(String(id)));\n }\n return endpoint;\n },\n};\n\n/**\n * 数据提取工具(增强版,支持多种响应格式)\n */\nexport const DataExtractor = {\n /**\n * 从响应中提取列表数据(支持多种格式)\n *\n * 支持的响应结构:\n * 1. { code: 0, data: { list: [...], total: 10 } } // 嵌套结构(最常见)\n * 2. { data: { items: [...], total: 10 } } // 嵌套结构\n * 3. { list: [...], total: 10 } // 扁平结构\n * 4. { items: [...], totalCount: 10 } // 不同字段名\n * 5. { data: [...] } // 直接数组\n * 6. [...] // 纯数组\n */\n extractList<T = unknown>(response: unknown): { items: T[]; total: number } {\n // 第一步:标准化响应,提取 data 层\n const normalized = ResponseNormalizer.normalize(response);\n const dataLayer = normalized.data;\n const aliases = getRuntimeFieldAliases();\n\n if (Array.isArray(dataLayer)) {\n const rootTotal = FieldFinder.findNumber(\n response && typeof response === \"object\" ? response : null,\n aliases.total,\n dataLayer.length,\n );\n return { items: dataLayer as T[], total: rootTotal };\n }\n\n if (!dataLayer || typeof dataLayer !== \"object\") {\n return { items: [], total: 0 };\n }\n\n // 第二步:从 data 层提取列表数组(使用运行时配置)\n const list = FieldFinder.findFirst<unknown[]>(dataLayer, aliases.list, []);\n\n // 第三步:提取总数(使用运行时配置)\n const rootTotal = FieldFinder.findNumber(\n response && typeof response === \"object\" ? response : null,\n aliases.total,\n Array.isArray(list) ? list.length : 0,\n );\n const total = FieldFinder.findNumber(dataLayer, aliases.total, rootTotal);\n\n return {\n items: Array.isArray(list) ? (list as T[]) : [],\n total,\n };\n },\n\n /**\n * 从响应中提取详情数据\n */\n extractDetail<T = unknown>(response: unknown): T | null {\n // 标准化响应\n const normalized = ResponseNormalizer.normalize(response);\n return normalized.data as T | null;\n },\n};\n\n/**\n * 行操作工具\n */\nexport const RowUtils = {\n /**\n * 从数组中查找行索引\n */\n findIndex<T extends DataRecord>(items: T[], idKey: keyof T, id: unknown): number {\n return items.findIndex((item) => item[idKey] === id);\n },\n\n /**\n * 从数组中移除行\n */\n remove<T extends DataRecord>(items: T[], idKey: keyof T, id: unknown): boolean {\n const index = this.findIndex(items, idKey, id);\n if (index !== -1) {\n items.splice(index, 1);\n return true;\n }\n return false;\n },\n\n /**\n * 生成默认 ID\n */\n generateId(): number {\n return Date.now() + Math.floor(Math.random() * 1000);\n },\n};\n","import {\n computed,\n getCurrentInstance,\n getCurrentScope,\n onMounted,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n type Ref,\n} from \"vue\";\nimport {\n deleteData,\n getData,\n postData,\n putData,\n} from \"../../axios/service\";\nimport {\n isCanceledError,\n normalizeRequestError,\n RequestError,\n} from \"../../client/errors\";\nimport { useRequestClient } from \"../../vue/context\";\nimport { DEFAULT_CONFIG, DEFAULT_MESSAGES } from \"./constants\";\nimport type {\n ActionContext,\n CrudDialogApi,\n CrudMessageApi,\n DataRecord,\n TableActions,\n TablePageState,\n TableQueryResult,\n UseTableCrudConfig,\n UseTableCrudReturn,\n} from \"./types\";\nimport { DataExtractor, RowUtils, UrlUtils } from \"./utils\";\n\ntype Operation = \"refresh\" | \"detail\" | \"create\" | \"update\" | \"remove\";\n\nconst noopMessage: CrudMessageApi = {\n success: () => undefined,\n error: () => undefined,\n warning: () => undefined,\n info: () => undefined,\n};\n\nconst noopDialog: CrudDialogApi = {\n warning: () => undefined,\n error: () => undefined,\n success: () => undefined,\n info: () => undefined,\n};\n\nfunction cloneValue<T>(value: T): T {\n if (typeof structuredClone === \"function\") {\n try {\n return structuredClone(value);\n } catch {\n // Shallow fallback supports reactive proxies and class-backed filters.\n }\n }\n return Array.isArray(value)\n ? ([...value] as T)\n : value && typeof value === \"object\"\n ? ({ ...value } as T)\n : value;\n}\n\nfunction recordValue<T extends object>(row: T, key: keyof T): unknown {\n return row[key];\n}\n\nfunction asQueryResult<T>(value: unknown): TableQueryResult<T> | null {\n if (!value || typeof value !== \"object\") return null;\n const candidate = value as Partial<TableQueryResult<T>>;\n return Array.isArray(candidate.items) && Number.isFinite(candidate.total)\n ? { items: candidate.items, total: Number(candidate.total) }\n : null;\n}\n\nexport function useTableCrud<\n T extends DataRecord,\n Filters extends object = Record<string, unknown>,\n Sort extends object = Record<string, unknown>,\n>(\n config: UseTableCrudConfig<T, Filters, Sort>,\n): UseTableCrudReturn<T, Filters, Sort> {\n const {\n api,\n query,\n mutations = {},\n columns = [],\n customActions = [],\n detail: detailConfig,\n idKey = DEFAULT_CONFIG.idKey as keyof T,\n defaultPageSize = DEFAULT_CONFIG.pageSize,\n defaultPaginationEnabled = DEFAULT_CONFIG.paginationEnabled,\n initialFilters = {} as Filters,\n initialSort = null,\n createNewRow,\n autoLoad = true,\n extractListData,\n refreshAfterMutation = true,\n batchConcurrency = 4,\n detailTitle,\n } = config;\n\n if (!query && !api?.list) {\n throw new Error(\"useTableCrud requires either query or api.list.\");\n }\n if (!Number.isInteger(batchConcurrency) || batchConcurrency < 1) {\n throw new RangeError(\"batchConcurrency must be an integer greater than 0.\");\n }\n\n const injectedClient = getCurrentInstance() ? useRequestClient(true) : undefined;\n const client = config.client ?? injectedClient;\n const message = config.ui?.message ?? noopMessage;\n const dialog: CrudDialogApi = config.ui?.dialog ?? noopDialog;\n const notify = (\n type: \"success\" | \"error\" | \"warning\",\n text: string,\n ): void => {\n try {\n void Promise.resolve(message[type](text)).catch(() => undefined);\n } catch {\n // Presentation adapters must not alter request outcomes.\n }\n };\n\n const data = shallowRef<T[]>([]);\n const total = ref(0);\n const tableRef = ref<unknown>();\n const paginationEnabled = ref(defaultPaginationEnabled);\n const filters = ref(cloneValue(initialFilters)) as Ref<Filters>;\n const sort = ref(cloneValue(initialSort)) as Ref<Sort | null>;\n const error = shallowRef<RequestError | null>(null);\n const lastUpdated = ref<number | null>(null);\n const page: TablePageState = reactive({\n current: DEFAULT_CONFIG.currentPage,\n size: defaultPageSize,\n });\n const counts = reactive<Record<Operation, number>>({\n refresh: 0,\n detail: 0,\n create: 0,\n update: 0,\n remove: 0,\n });\n const controllers = new Set<AbortController>();\n let refreshController: AbortController | null = null;\n let refreshSequence = 0;\n let disposed = false;\n\n const loading = computed(() => Object.values(counts).some((count) => count > 0));\n const isInitialLoading = computed(\n () => counts.refresh > 0 && lastUpdated.value === null,\n );\n const isRefreshing = computed(\n () => counts.refresh > 0 && lastUpdated.value !== null,\n );\n const creating = computed(() => counts.create > 0);\n const updating = computed(() => counts.update > 0);\n const removing = computed(() => counts.remove > 0);\n\n const startOperation = (operation: Operation): AbortController => {\n counts[operation] += 1;\n const controller = new AbortController();\n controllers.add(controller);\n return controller;\n };\n\n const finishOperation = (\n operation: Operation,\n controller: AbortController,\n ): void => {\n counts[operation] = Math.max(0, counts[operation] - 1);\n controllers.delete(controller);\n };\n\n const reportError = async (\n cause: unknown,\n operation: Operation,\n fallbackMessage: string,\n ): Promise<RequestError> => {\n const normalized = normalizeRequestError(cause);\n if (!isCanceledError(normalized)) {\n error.value = normalized;\n notify(\"error\", fallbackMessage);\n try {\n await config.onError?.(normalized, operation);\n } catch {\n // Error observers must not replace the request failure.\n }\n }\n return normalized;\n };\n\n const detailVisible = ref(false);\n const detailData = ref<T | null>(null) as Ref<T | null>;\n const detailTitleState = ref(\"\");\n const detail = {\n visible: detailVisible,\n data: detailData,\n title: detailTitleState,\n show: (row: T): void => {\n detailData.value = row;\n detailTitleState.value =\n detailTitle?.(row) ??\n `详情 - ${String(\n (row as Record<string, unknown>).name ?? recordValue(row, idKey) ?? \"\",\n )}`;\n detailVisible.value = true;\n },\n close: (): void => {\n detailVisible.value = false;\n detailData.value = null;\n detailTitleState.value = \"\";\n },\n };\n\n const requestList = async (signal: AbortSignal): Promise<unknown> => {\n if (query) {\n return query({\n page: page.current,\n pageSize: page.size,\n paginationEnabled: paginationEnabled.value,\n filters: filters.value,\n sort: sort.value,\n signal,\n });\n }\n const paginationParams = paginationEnabled.value\n ? { page: page.current, pageSize: page.size }\n : {};\n const params = {\n ...paginationParams,\n ...(filters.value as Record<string, unknown>),\n ...(sort.value ? { sort: sort.value } : {}),\n };\n return client\n ? client.get(api!.list, { params, signal, concurrency: \"takeLatest\" })\n : getData(api!.list, { params, signal, dedupe: true });\n };\n\n const refresh = async (): Promise<void> => {\n if (disposed) return;\n refreshController?.abort();\n const sequence = ++refreshSequence;\n const controller = startOperation(\"refresh\");\n refreshController = controller;\n error.value = null;\n try {\n const response = await requestList(controller.signal);\n if (sequence !== refreshSequence || controller.signal.aborted) return;\n const extracted =\n extractListData?.(response) ??\n asQueryResult<T>(response) ??\n DataExtractor.extractList<T>(response);\n data.value = [...extracted.items];\n total.value = extracted.total;\n lastUpdated.value = Date.now();\n } catch (cause) {\n if (!controller.signal.aborted) {\n await reportError(cause, \"refresh\", DEFAULT_MESSAGES.loadError);\n }\n } finally {\n if (refreshController === controller) refreshController = null;\n finishOperation(\"refresh\", controller);\n }\n };\n\n const maybeRefresh = async (): Promise<void> => {\n if (refreshAfterMutation) await refresh();\n };\n\n const getDetail = async (row: T): Promise<T | null> => {\n if (!mutations.get && !api?.get) {\n detail.show(row);\n return row;\n }\n const controller = startOperation(\"detail\");\n try {\n let result: T | null;\n if (mutations.get) {\n result = await mutations.get(row, { signal: controller.signal });\n } else {\n const url = UrlUtils.buildUrl(api!.get!, recordValue(row, idKey));\n const response = client\n ? await client.get(url, { signal: controller.signal })\n : await getData(url, { signal: controller.signal });\n result = DataExtractor.extractDetail<T>(response);\n }\n if (result) detail.show(result);\n return result;\n } catch (cause) {\n if (!controller.signal.aborted) {\n await reportError(cause, \"detail\", DEFAULT_MESSAGES.detailError);\n }\n return null;\n } finally {\n finishOperation(\"detail\", controller);\n }\n };\n\n const create = async (row: T): Promise<void> => {\n if (!mutations.create && !api?.create) {\n notify(\"warning\", \"未配置新增操作\");\n return;\n }\n const controller = startOperation(\"create\");\n try {\n if (mutations.create) {\n await mutations.create(row, { signal: controller.signal });\n } else if (client) {\n await client.post(api!.create!, row, { signal: controller.signal });\n } else {\n await postData(api!.create!, row, { signal: controller.signal });\n }\n notify(\"success\", DEFAULT_MESSAGES.createSuccess);\n await maybeRefresh();\n } catch (cause) {\n throw await reportError(cause, \"create\", \"新增失败\");\n } finally {\n finishOperation(\"create\", controller);\n }\n };\n\n const save = async (row: T): Promise<void> => {\n if (!mutations.update && !api?.update) {\n notify(\"warning\", \"未配置更新操作\");\n return;\n }\n const controller = startOperation(\"update\");\n try {\n if (mutations.update) {\n await mutations.update(row, { signal: controller.signal });\n } else {\n const url = UrlUtils.buildUrl(api!.update!, recordValue(row, idKey));\n if (client) await client.put(url, row, { signal: controller.signal });\n else await putData(url, row, { signal: controller.signal });\n }\n notify(\"success\", DEFAULT_MESSAGES.updateSuccess);\n await maybeRefresh();\n } catch (cause) {\n throw await reportError(cause, \"update\", DEFAULT_MESSAGES.saveError);\n } finally {\n finishOperation(\"update\", controller);\n }\n };\n\n const removeOne = async (row: T, signal: AbortSignal): Promise<void> => {\n if (mutations.remove) {\n await mutations.remove(row, { signal });\n return;\n }\n if (!api?.remove) throw new Error(\"Delete operation is not configured.\");\n const url = UrlUtils.buildUrl(api.remove, recordValue(row, idKey));\n if (client) await client.delete(url, { signal });\n else await deleteData(url, { signal });\n };\n\n const removeRowsLocally = (rows: readonly T[]): void => {\n let removed = 0;\n for (const row of rows) {\n if (RowUtils.remove(data.value, idKey, recordValue(row, idKey))) {\n removed += 1;\n }\n }\n if (removed > 0) {\n data.value = [...data.value];\n total.value = Math.max(0, total.value - removed);\n }\n };\n\n const remove = async (row: T): Promise<void> => {\n if (!mutations.remove && !api?.remove) {\n notify(\"warning\", DEFAULT_MESSAGES.noDeleteApi);\n return;\n }\n const controller = startOperation(\"remove\");\n try {\n await removeOne(row, controller.signal);\n notify(\"success\", DEFAULT_MESSAGES.deleteSuccess);\n if (refreshAfterMutation) await refresh();\n else removeRowsLocally([row]);\n } catch (cause) {\n throw await reportError(cause, \"remove\", DEFAULT_MESSAGES.deleteError);\n } finally {\n finishOperation(\"remove\", controller);\n }\n };\n\n const batchRemove = async (rows: T[]): Promise<void> => {\n if (rows.length === 0) {\n notify(\"warning\", \"请选择要删除的数据\");\n return;\n }\n if (!mutations.batchRemove && !mutations.remove && !api?.batchRemove && !api?.remove) {\n notify(\"warning\", DEFAULT_MESSAGES.noDeleteApi);\n return;\n }\n const controller = startOperation(\"remove\");\n try {\n if (mutations.batchRemove) {\n await mutations.batchRemove(rows, { signal: controller.signal });\n } else if (api?.batchRemove) {\n const ids = rows.map((row) => recordValue(row, idKey));\n if (client) {\n await client.post(api.batchRemove, { ids }, { signal: controller.signal });\n } else {\n await postData(api.batchRemove, { ids }, { signal: controller.signal });\n }\n } else {\n let cursor = 0;\n const failures: unknown[] = [];\n const worker = async (): Promise<void> => {\n while (cursor < rows.length && !controller.signal.aborted) {\n const current = rows[cursor++];\n try {\n await removeOne(current, controller.signal);\n } catch (cause) {\n failures.push(cause);\n }\n }\n };\n await Promise.all(\n Array.from({ length: Math.min(batchConcurrency, rows.length) }, worker),\n );\n if (controller.signal.aborted) {\n throw Object.assign(new Error(\"canceled\"), {\n name: \"AbortError\",\n code: \"ERR_CANCELED\",\n });\n }\n if (failures.length > 0) {\n throw new RequestError({\n kind: \"business\",\n message: `${failures.length} delete operation(s) failed.`,\n data: failures,\n });\n }\n }\n notify(\"success\", `成功删除 ${rows.length} 条数据`);\n if (refreshAfterMutation) await refresh();\n else removeRowsLocally(rows);\n } catch (cause) {\n throw await reportError(cause, \"remove\", \"批量删除失败\");\n } finally {\n finishOperation(\"remove\", controller);\n }\n };\n\n const search = async (next?: Partial<Filters>): Promise<void> => {\n if (next) Object.assign(filters.value, next);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const resetSearch = async (): Promise<void> => {\n filters.value = cloneValue(initialFilters);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const setSort = async (next: Sort | null): Promise<void> => {\n sort.value = cloneValue(next);\n page.current = DEFAULT_CONFIG.currentPage;\n await refresh();\n };\n\n const handlePaginationChange = (pageNumber: number, pageSize: number): void => {\n page.current = pageNumber;\n page.size = pageSize;\n void refresh();\n };\n\n const handleRowDelete = (row: T): void => {\n removeRowsLocally([row]);\n };\n\n const createActionContext = (index: number): ActionContext<T> => ({\n data: data.value,\n index,\n page,\n paginationEnabled: paginationEnabled.value,\n message,\n dialog,\n refresh,\n });\n\n const actions = computed<TableActions<T>>(() => {\n const result: TableActions<T> = {};\n if (mutations.update || api?.update) {\n result.edit = async (row) => {\n try {\n await save(row);\n return { data: row, error: null };\n } catch (cause) {\n return { data: null, error: normalizeRequestError(cause) };\n }\n };\n }\n if (mutations.remove || api?.remove) {\n result.delete = async (row) => {\n try {\n await remove(row);\n return { data: { success: true }, error: null };\n } catch (cause) {\n return { data: null, error: normalizeRequestError(cause) };\n }\n };\n }\n if (mutations.get || api?.get) {\n result.detail = async (row) => {\n const value = await getDetail(row);\n return { data: value, error: error.value };\n };\n }\n if (customActions.length > 0) {\n result.custom = customActions.map((action) => ({\n key: action.key,\n label: action.label,\n icon: action.icon,\n type: action.type ?? \"default\",\n onClick: (row, index) => action.handler(row, createActionContext(index)),\n }));\n }\n return result;\n });\n\n const pagination = computed(() =>\n paginationEnabled.value\n ? {\n enabled: true as const,\n page: page.current,\n pageSize: page.size,\n itemCount: total.value,\n }\n : false,\n );\n\n const createDraft = (): T => createNewRow?.() ?? ({} as T);\n const cancel = (): void => {\n refreshSequence += 1;\n refreshController?.abort();\n refreshController = null;\n for (const controller of controllers) controller.abort();\n };\n const dispose = (): void => {\n if (disposed) return;\n disposed = true;\n cancel();\n };\n\n if (getCurrentScope()) onScopeDispose(dispose);\n if (autoLoad === \"mounted\" && getCurrentInstance()) {\n onMounted(() => void refresh());\n } else if (autoLoad === \"mounted\") {\n void refresh();\n }\n else if (autoLoad) void refresh();\n\n return {\n data,\n rows: data,\n loading,\n isInitialLoading,\n isRefreshing,\n creating,\n updating,\n removing,\n total,\n error,\n lastUpdated,\n columns: computed(() => columns),\n actions,\n tableRef,\n page,\n filters,\n sort,\n paginationEnabled,\n pagination,\n refresh,\n reload: refresh,\n search,\n resetSearch,\n setSort,\n create,\n save,\n remove,\n batchRemove,\n getDetail,\n createDraft,\n cancel,\n dispose,\n handleCancel: refresh,\n handlePaginationChange,\n handleRowDelete,\n detail,\n detailConfig,\n };\n}\n"]}
|
package/dist/chunk-WXHQXPS4.cjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkWUZ43MLM_cjs = require('./chunk-WUZ43MLM.cjs');
|
|
4
|
-
|
|
5
|
-
// src/entries/crud.ts
|
|
6
|
-
var useTableCrud = chunkWUZ43MLM_cjs.useNaiveTableCrud;
|
|
7
|
-
|
|
8
|
-
exports.useTableCrud = useTableCrud;
|
|
9
|
-
//# sourceMappingURL=chunk-WXHQXPS4.cjs.map
|
|
10
|
-
//# sourceMappingURL=chunk-WXHQXPS4.cjs.map
|