@robot-admin/naive-ui-components 0.22.0 → 0.23.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 +18 -0
- package/README.md +9 -5
- package/README_EN.md +9 -5
- package/dist/C_ActionBar.d.cts +2 -1
- package/dist/C_ActionBar.d.ts +2 -1
- package/dist/C_AntV2.cjs +3 -3
- package/dist/C_AntV2.js +3 -3
- package/dist/C_BatchResult.cjs +1 -0
- package/dist/C_BatchResult.css +32 -0
- package/dist/C_BatchResult.d.cts +2 -0
- package/dist/C_BatchResult.d.ts +2 -0
- package/dist/C_BatchResult.js +1 -0
- package/dist/C_BatchResult2.cjs +1 -0
- package/dist/C_BatchResult2.js +1 -0
- package/dist/C_Breadcrumb.d.cts +2 -2
- package/dist/C_Breadcrumb.d.ts +1 -1
- package/dist/C_Captcha.d.ts +2 -0
- package/dist/C_Cascade.d.cts +1 -1
- package/dist/C_Cascade.d.ts +1 -1
- package/dist/C_Chat.d.cts +1 -1
- package/dist/C_Chat.d.ts +1 -1
- package/dist/C_City.d.cts +1 -1
- package/dist/C_City.d.ts +1 -1
- package/dist/C_Code.d.cts +1 -1
- package/dist/C_Code.d.ts +1 -1
- package/dist/C_ContextMenu.d.cts +1 -1
- package/dist/C_ContextMenu.d.ts +1 -1
- package/dist/C_DataPicker.cjs +1 -0
- package/dist/C_DataPicker.css +54 -0
- package/dist/C_DataPicker.d.cts +2 -0
- package/dist/C_DataPicker.d.ts +5 -0
- package/dist/C_DataPicker.js +1 -0
- package/dist/C_DataPicker2.cjs +1 -0
- package/dist/C_DataPicker2.js +1 -0
- package/dist/C_Date.d.cts +1 -1
- package/dist/C_Date.d.ts +1 -1
- package/dist/C_Density.cjs +1 -0
- package/dist/C_Density.css +1 -0
- package/dist/C_Density.d.cts +3 -0
- package/dist/C_Density.d.ts +3 -0
- package/dist/C_Density.js +1 -0
- package/dist/C_Density2.cjs +1 -0
- package/dist/C_Density2.js +1 -0
- package/dist/C_Editor.d.cts +1 -1
- package/dist/C_Editor.d.ts +1 -1
- package/dist/C_ErrorSummary.cjs +1 -0
- package/dist/C_ErrorSummary.css +29 -0
- package/dist/C_ErrorSummary.d.cts +3 -0
- package/dist/C_ErrorSummary.d.ts +3 -0
- package/dist/C_ErrorSummary.js +1 -0
- package/dist/C_ErrorSummary2.cjs +1 -0
- package/dist/C_ErrorSummary2.js +1 -0
- package/dist/C_Form.base.css +150 -148
- package/dist/C_Form.cjs +1 -1
- package/dist/C_Form.css +151 -253
- package/dist/C_Form.d.cts +3 -1
- package/dist/C_Form.d.ts +19 -1
- package/dist/C_Form.js +1 -1
- package/dist/C_FormModal.css +11 -12
- package/dist/C_FormModal.d.cts +1 -1
- package/dist/C_FormModal.d.ts +18 -2
- package/dist/C_FormModal2.cjs +1 -1
- package/dist/C_FormModal2.js +1 -1
- package/dist/C_FormSearch.cjs +1 -1
- package/dist/C_FormSearch.css +128 -56
- package/dist/C_FormSearch.d.cts +3 -3
- package/dist/C_FormSearch.d.ts +5 -3
- package/dist/C_FormSearch.js +1 -1
- package/dist/C_FormulaEditor.d.cts +1 -1
- package/dist/C_FormulaEditor.d.ts +1 -1
- package/dist/C_Guide.d.cts +1 -1
- package/dist/C_Guide.d.ts +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Loading.d.cts +1 -1
- package/dist/C_Loading.d.ts +1 -1
- package/dist/C_Login.d.cts +1 -1
- package/dist/C_Login.d.ts +4 -1
- package/dist/C_Markdown.d.cts +1 -1
- package/dist/C_Markdown.d.ts +1 -1
- package/dist/C_Menu.d.cts +2 -2
- package/dist/C_Menu.d.ts +1 -1
- package/dist/C_OrgChart.d.cts +1 -1
- package/dist/C_OrgChart.d.ts +1 -1
- package/dist/C_Progress.d.cts +1 -1
- package/dist/C_Progress.d.ts +1 -1
- package/dist/C_SectionNav.cjs +1 -0
- package/dist/C_SectionNav.css +46 -0
- package/dist/C_SectionNav.d.cts +2 -0
- package/dist/C_SectionNav.d.ts +2 -0
- package/dist/C_SectionNav.js +1 -0
- package/dist/C_SectionNav2.cjs +1 -0
- package/dist/C_SectionNav2.js +1 -0
- package/dist/C_Skeleton.d.cts +1 -1
- package/dist/C_Skeleton.d.ts +1 -1
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_Table.base.css +258 -256
- package/dist/C_Table.cjs +1 -1
- package/dist/C_Table.css +109 -1283
- package/dist/C_Table.d.cts +2 -1
- package/dist/C_Table.d.ts +11 -7
- package/dist/C_Table.js +1 -1
- package/dist/C_Table2.cjs +3 -0
- package/dist/C_Table2.js +3 -0
- package/dist/C_Tabs.cjs +1 -1
- package/dist/C_Tabs.d.cts +1 -1
- package/dist/C_Tabs.d.ts +1 -1
- package/dist/C_Tabs.js +1 -1
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Timeline.d.cts +1 -1
- package/dist/C_Timeline.d.ts +1 -1
- package/dist/C_Transfer.d.cts +1 -1
- package/dist/C_Transfer.d.ts +1 -1
- package/dist/C_Tree.d.cts +1 -1
- package/dist/C_Tree.d.ts +10 -6
- package/dist/C_Upload.d.cts +1 -1
- package/dist/C_Upload.d.ts +1 -1
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/Card.cjs +1 -1
- package/dist/Card.js +1 -1
- package/dist/Steps.cjs +1 -1
- package/dist/Steps.js +1 -1
- package/dist/Tabs.cjs +1 -1
- package/dist/Tabs.js +1 -1
- package/dist/batchPatch.cjs +1 -0
- package/dist/batchPatch.d.cts +26 -0
- package/dist/batchPatch.d.ts +26 -0
- package/dist/batchPatch.js +1 -0
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +7 -1
- package/dist/config.d.ts +7 -1
- package/dist/config.js +1 -1
- package/dist/config2.d.ts +14 -0
- package/dist/constants.d.cts +3 -3
- package/dist/constants.d.ts +3 -3
- package/dist/constants2.d.cts +402 -173
- package/dist/constants2.d.ts +402 -173
- package/dist/constants3.d.cts +3 -3
- package/dist/constants3.d.ts +3 -3
- package/dist/constants4.d.cts +173 -402
- package/dist/constants4.d.ts +173 -402
- package/dist/constants5.d.cts +2 -2
- package/dist/constants5.d.ts +2 -2
- package/dist/data.cjs +1 -1
- package/dist/data.d.cts +5 -108
- package/dist/data.d.ts +5 -108
- package/dist/data.js +1 -1
- package/dist/data2.cjs +1 -1
- package/dist/data2.d.cts +108 -0
- package/dist/data2.d.ts +108 -0
- package/dist/data2.js +1 -1
- package/dist/data3.cjs +1 -0
- package/dist/data3.js +1 -0
- package/dist/dateRange.d.cts +108 -13
- package/dist/dateRange.d.ts +108 -13
- package/dist/density.cjs +1 -1
- package/dist/density.js +1 -1
- package/dist/dictionary.cjs +1 -0
- package/dist/dictionary.d.cts +38 -0
- package/dist/dictionary.d.ts +38 -0
- package/dist/dictionary.js +1 -0
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +65 -53
- package/dist/index.d.ts +73 -57
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.cts +37 -80
- package/dist/index10.vue.d.ts +77 -53
- package/dist/index11.vue.d.cts +77 -53
- package/dist/index11.vue.d.ts +1117 -45
- package/dist/index12.vue.d.cts +1117 -45
- package/dist/index12.vue.d.ts +17 -128
- package/dist/index13.vue.d.cts +17 -128
- package/dist/index13.vue.d.ts +57 -53
- package/dist/index14.vue.d.cts +57 -53
- package/dist/index14.vue.d.ts +16 -25
- package/dist/index15.vue.d.cts +16 -25
- package/dist/index15.vue.d.ts +52 -12
- package/dist/index16.vue.d.cts +52 -12
- package/dist/index16.vue.d.ts +13 -129
- package/dist/index17.vue.d.cts +13 -129
- package/dist/index17.vue.d.ts +123 -74
- package/dist/index18.vue.d.cts +123 -74
- package/dist/index18.vue.d.ts +48 -71
- package/dist/index19.vue.d.cts +40 -91
- package/dist/index19.vue.d.ts +36 -96
- package/dist/index2.vue.d.cts +2 -2
- package/dist/index2.vue.d.ts +2 -2
- package/dist/index20.vue.d.cts +38 -47
- package/dist/index20.vue.d.ts +13 -48
- package/dist/index21.vue.d.cts +12 -96
- package/dist/index21.vue.d.ts +25 -95
- package/dist/index22.vue.d.cts +20 -32
- package/dist/index22.vue.d.ts +75 -37
- package/dist/index23.vue.d.cts +77 -13
- package/dist/index23.vue.d.ts +71 -13
- package/dist/index24.vue.d.cts +2 -2
- package/dist/index24.vue.d.ts +1 -1
- package/dist/index25.vue.d.cts +116 -90
- package/dist/index25.vue.d.ts +116 -90
- package/dist/index26.vue.d.cts +94 -59
- package/dist/index26.vue.d.ts +94 -59
- package/dist/index27.vue.d.cts +75 -0
- package/dist/index27.vue.d.ts +75 -0
- package/dist/index28.vue.d.cts +103 -0
- package/dist/index28.vue.d.ts +103 -0
- package/dist/index29.vue.d.cts +105 -0
- package/dist/index29.vue.d.ts +105 -0
- package/dist/index3.vue.d.cts +4 -4
- package/dist/index3.vue.d.ts +4 -4
- package/dist/index30.vue.d.cts +28 -0
- package/dist/index30.vue.d.ts +28 -0
- package/dist/index4.vue.d.cts +19 -128
- package/dist/index4.vue.d.ts +17 -34
- package/dist/index5.vue.d.cts +127 -35
- package/dist/index5.vue.d.ts +30 -19
- package/dist/index6.vue.d.cts +30 -19
- package/dist/index6.vue.d.ts +22 -118
- package/dist/index7.vue.d.cts +22 -118
- package/dist/index7.vue.d.ts +112 -18
- package/dist/index8.vue.d.cts +112 -18
- package/dist/index8.vue.d.ts +24 -35
- package/dist/index9.vue.d.cts +24 -35
- package/dist/index9.vue.d.ts +37 -80
- package/dist/mapUtils.d.cts +4 -4
- package/dist/mapUtils.d.ts +4 -4
- package/dist/numberCodec.cjs +1 -0
- package/dist/numberCodec.d.cts +25 -0
- package/dist/numberCodec.d.ts +25 -0
- package/dist/numberCodec.js +1 -0
- package/dist/observer.cjs +1 -0
- package/dist/observer.js +1 -0
- package/dist/presets.d.cts +3 -66
- package/dist/presets.d.ts +3 -66
- package/dist/resolver.cjs +1 -1
- package/dist/resolver.d.cts +1 -1
- package/dist/resolver.d.ts +1 -1
- package/dist/resolver.js +1 -1
- package/dist/serializeSearch.cjs +1 -0
- package/dist/serializeSearch.js +1 -0
- package/dist/style.css +561 -322
- package/dist/types.d.cts +60 -103
- package/dist/types.d.ts +62 -52
- package/dist/types2.d.cts +104 -51
- package/dist/types2.d.ts +56 -0
- package/dist/types3.d.cts +56 -0
- package/dist/useCalendarEvents.d.cts +1 -1
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.cts +6 -6
- package/dist/useCollapsePanel.d.ts +6 -6
- package/dist/useComponentLocale.cjs +1 -1
- package/dist/useComponentLocale.js +1 -1
- package/dist/useCropperCore.d.cts +13 -13
- package/dist/useCropperCore.d.ts +13 -13
- package/dist/useDataResource.cjs +1 -0
- package/dist/useDataResource.js +1 -0
- package/dist/useDictionary.cjs +1 -0
- package/dist/useDictionary.js +1 -0
- package/dist/useDynamicFormState.d.cts +959 -582
- package/dist/useDynamicFormState.d.ts +951 -584
- package/dist/useEdgeInteraction.d.cts +3 -3
- package/dist/useEdgeInteraction.d.ts +3 -3
- package/dist/useFormArray.cjs +1 -0
- package/dist/useFormArray.d.cts +69 -0
- package/dist/useFormArray.d.ts +69 -0
- package/dist/useFormArray.js +1 -0
- package/dist/useFormConfig.cjs +1 -0
- package/dist/useFormConfig.d.cts +590 -0
- package/dist/useFormConfig.d.ts +590 -0
- package/dist/useFormConfig.js +1 -0
- package/dist/useFullscreen.d.cts +3 -3
- package/dist/useFullscreen.d.ts +3 -3
- package/dist/useGridWidth.cjs +1 -0
- package/dist/useGridWidth.js +1 -0
- package/dist/useInfiniteScroll.d.cts +2 -2
- package/dist/useInfiniteScroll.d.ts +2 -2
- package/dist/useQRCode.d.cts +3 -3
- package/dist/useQRCode.d.ts +3 -3
- package/dist/useSignatureHistory.d.cts +4 -4
- package/dist/useSignatureHistory.d.ts +4 -4
- package/dist/useSplitResize.d.cts +5 -5
- package/dist/useSplitResize.d.ts +5 -5
- package/dist/useTableGlobalConfig.cjs +1 -0
- package/dist/useTableGlobalConfig.js +1 -0
- package/dist/useTableQuery.cjs +1 -3
- package/dist/useTableQuery.js +1 -3
- package/dist/useWorkflowValidation.d.cts +6 -6
- package/dist/useWorkflowValidation.d.ts +6 -6
- package/dist/validation.cjs +1 -0
- package/dist/validation.d.cts +18 -0
- package/dist/validation.d.ts +18 -0
- package/dist/validation.js +1 -0
- package/dist/verification.d.cts +4 -4
- package/dist/verification.d.ts +4 -4
- package/dist/workflows.cjs +1 -0
- package/dist/workflows.d.cts +2 -0
- package/dist/workflows.d.ts +2 -0
- package/dist/workflows.js +1 -0
- package/docs/components.en.md +13 -1
- package/docs/components.md +13 -1
- package/docs/guides/batch-results.md +47 -0
- package/docs/guides/data-picker.md +65 -0
- package/docs/guides/data-workflows.md +123 -0
- package/docs/guides/form-density.en.md +56 -3
- package/docs/guides/form-density.md +56 -3
- package/docs/guides/search-workflows.md +164 -0
- package/docs/guides/usage.en.md +1 -1
- package/package.json +21 -1
- package/dist/C_FormSearch2.cjs +0 -1
- package/dist/C_FormSearch2.js +0 -1
- package/dist/useTableQuery.d.cts +0 -1957
- package/dist/useTableQuery.d.ts +0 -1957
|
@@ -1,580 +1,22 @@
|
|
|
1
1
|
import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.cjs";
|
|
2
|
-
import {
|
|
2
|
+
import { D as FormSlots, E as FormRecord, F as LayoutType, L as OptionItem, S as FormInstance, T as FormOption, a as ResolvedFormConfig, f as ComponentType, g as DynamicFormController, n as FormConfig, w as FormModel, z as SubmitEventPayload } from "./useFormConfig.cjs";
|
|
3
|
+
import { n as DictionaryOption } from "./dictionary.cjs";
|
|
4
|
+
import { n as ResolvedComponentDensity, t as ComponentDensity } from "./density.cjs";
|
|
5
|
+
import { $ as FormatterConfig, A as UseTableActionsOptions, B as ExpandConfig, D as TableRowKey, F as ColumnDragConfig, G as ToolbarConfig, H as SelectionConfig, K as TreeConfig, L as DisplayConfig, M as UseTableExpandOptions, N as UseTableExpandReturn, O as TableRowKeyIssue, P as BatchActionsConfig, R as EditConfig, S as TableColumn, U as SummaryConfig, V as ResolvedConfig, W as TableConfig, X as ExportConfig, b as SimpleTableActions, d as DataRecord, f as EditMode, g as ParentChildLinkMode, h as PaginationConfig, ht as DynamicRowsReturn, j as UseTableActionsReturn, k as TableRuntimeProps, mt as DynamicRowsOptions, ot as CrossPageSelectionConfig, q as VirtualScrollConfig, ut as RowDragConfig, w as TableInstance, x as StrictTableColumn, z as ErrorConfig } from "./index12.vue.cjs";
|
|
3
6
|
import * as vue from "vue";
|
|
4
|
-
import {
|
|
5
|
-
import { FormInst, FormItemInst,
|
|
6
|
-
import {
|
|
7
|
+
import { App, Component, ComputedRef, InjectionKey, MaybeRefOrGetter, Ref, ShallowRef, Slots, VNode, VNodeChild } from "vue";
|
|
8
|
+
import { DataTableColumn, DataTableRowKey, FormInst, FormItemInst, FormRules, PaginationProps, TreeInst, TreeOption, TreeProps } from "naive-ui";
|
|
9
|
+
import { HLJSApi } from "highlight.js";
|
|
7
10
|
|
|
8
|
-
//#region src/
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
type MaybePromise<T> = T | Promise<T>;
|
|
14
|
-
type FormRecord = Record<string, unknown>;
|
|
15
|
-
type AtomicFormValue = string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | File | Blob;
|
|
16
|
-
/**
|
|
17
|
-
* 最多展开五次子模型,保留六层字段路径及递归业务模型支持。
|
|
18
|
-
* 每层引用独立别名,避免 TypeScript 5.8 方差检查递归路径自身时栈溢出。
|
|
19
|
-
*/
|
|
20
|
-
type FieldPathChild<T> = NonNullable<T> extends AtomicFormValue ? never : NonNullable<T> extends readonly (infer Item)[] ? NonNullable<Item> extends AtomicFormValue ? never : NonNullable<Item> extends object ? NonNullable<Item> : never : NonNullable<T> extends object ? NonNullable<T> : never;
|
|
21
|
-
type FieldPathStep<T extends object, Children extends { [K in keyof T]: string }> = { [K in Extract<keyof T, string>]: NonNullable<T[K]> extends AtomicFormValue ? K : NonNullable<T[K]> extends readonly (infer Item)[] ? NonNullable<Item> extends AtomicFormValue ? K | `${K}.${number}` : NonNullable<Item> extends object ? K | `${K}.${number}` | `${K}.${number}.${Children[K]}` : K : NonNullable<T[K]> extends object ? K | `${K}.${Children[K]}` : K }[Extract<keyof T, string>];
|
|
22
|
-
type NestedFieldPath0<T extends object> = Extract<keyof T, string>;
|
|
23
|
-
type NestedFieldPath1<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath0<FieldPathChild<T[K]>> }>;
|
|
24
|
-
type NestedFieldPath2<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath1<FieldPathChild<T[K]>> }>;
|
|
25
|
-
type NestedFieldPath3<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath2<FieldPathChild<T[K]>> }>;
|
|
26
|
-
type NestedFieldPath4<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath3<FieldPathChild<T[K]>> }>;
|
|
27
|
-
type NestedFieldPath5<T extends object> = FieldPathStep<T, { [K in keyof T]: NestedFieldPath4<FieldPathChild<T[K]>> }>;
|
|
28
|
-
type FieldPath<T extends object = FormRecord> = keyof T extends never ? string : string extends keyof T ? string : NestedFieldPath5<T>;
|
|
29
|
-
type NestedFieldPathValue<T, P extends string> = T extends readonly (infer Item)[] ? P extends `${number}.${infer Rest}` ? NestedFieldPathValue<NonNullable<Item>, Rest> : P extends `${number}` ? Item : unknown : P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? NestedFieldPathValue<NonNullable<T[K]>, Rest> : unknown : unknown;
|
|
30
|
-
type FieldPathValue<T extends object, P extends string> = NestedFieldPathValue<T, P>;
|
|
31
|
-
/**
|
|
32
|
-
* 表单模式
|
|
33
|
-
* @description create = 新建(空白表单),edit = 编辑(回填已有数据 + 脏检查)
|
|
34
|
-
*/
|
|
35
|
-
type FormMode = 'create' | 'edit';
|
|
36
|
-
/**
|
|
37
|
-
* 支持的布局类型
|
|
38
|
-
* @description 定义表单支持的所有布局模式
|
|
39
|
-
*/
|
|
40
|
-
type LayoutType = 'default' | 'inline' | 'grid' | 'card' | 'tabs' | 'steps' | 'dynamic' | 'custom';
|
|
41
|
-
/**
|
|
42
|
-
* 标签位置类型
|
|
43
|
-
* @description 表单标签的显示位置
|
|
44
|
-
*/
|
|
45
|
-
type LabelPlacement = 'left' | 'top';
|
|
46
|
-
/**
|
|
47
|
-
* 支持的表单控件类型
|
|
48
|
-
* @description 所有支持的表单输入控件类型
|
|
49
|
-
*/
|
|
50
|
-
type ComponentType = 'input' | 'textarea' | 'inputNumber' | 'select' | 'checkbox' | 'radio' | 'switch' | 'slider' | 'rate' | 'datePicker' | 'daterange' | 'timePicker' | 'cascader' | 'colorPicker' | 'upload' | 'editor';
|
|
51
|
-
/**
|
|
52
|
-
* 选项项接口
|
|
53
|
-
* @description 用于 select、checkbox、radio 等组件的选项配置
|
|
54
|
-
*/
|
|
55
|
-
interface OptionItem {
|
|
56
|
-
value: string | number | boolean;
|
|
57
|
-
label: string;
|
|
58
|
-
disabled?: boolean;
|
|
59
|
-
[key: string]: unknown;
|
|
60
|
-
}
|
|
61
|
-
interface AsyncOptionsContext {
|
|
62
|
-
field: string;
|
|
63
|
-
reason: 'initialize' | 'dependency' | 'manual';
|
|
64
|
-
signal: AbortSignal;
|
|
65
|
-
}
|
|
66
|
-
interface FormErrorContext {
|
|
67
|
-
source: 'initialize' | 'async-options' | 'callback' | 'render' | 'submit';
|
|
68
|
-
field?: string;
|
|
69
|
-
}
|
|
70
|
-
/** 组件卸载时取消当前提交,业务请求可直接使用 signal。 */
|
|
71
|
-
interface FormSubmitContext {
|
|
72
|
-
signal: AbortSignal;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* 标签页配置接口
|
|
76
|
-
* @description 用于标签页布局的单个标签页配置
|
|
77
|
-
*/
|
|
78
|
-
interface TabConfig {
|
|
79
|
-
key: string;
|
|
80
|
-
title: string;
|
|
81
|
-
description?: string;
|
|
82
|
-
disabled?: boolean;
|
|
83
|
-
icon?: string;
|
|
84
|
-
closable?: boolean;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 步骤配置接口
|
|
88
|
-
* @description 用于步骤布局的单个步骤配置
|
|
89
|
-
*/
|
|
90
|
-
interface StepConfig {
|
|
91
|
-
key: string;
|
|
92
|
-
title: string;
|
|
93
|
-
description?: string;
|
|
94
|
-
disabled?: boolean;
|
|
95
|
-
icon?: string;
|
|
96
|
-
required?: boolean;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* 分组配置接口
|
|
100
|
-
* @description 用于卡片布局和自定义布局的分组配置
|
|
101
|
-
*/
|
|
102
|
-
interface GroupConfig {
|
|
103
|
-
key: string;
|
|
104
|
-
title: string;
|
|
105
|
-
description?: string;
|
|
106
|
-
icon?: string;
|
|
107
|
-
color?: string;
|
|
108
|
-
collapsible?: boolean;
|
|
109
|
-
collapsed?: boolean;
|
|
110
|
-
defaultExpanded?: boolean;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 动态字段配置接口
|
|
114
|
-
* @description 用于动态布局的字段配置
|
|
115
|
-
*/
|
|
116
|
-
interface DynamicFieldConfig {
|
|
117
|
-
id: string;
|
|
118
|
-
type: ComponentType | string;
|
|
119
|
-
prop: string;
|
|
120
|
-
label: string;
|
|
121
|
-
visible: boolean;
|
|
122
|
-
removable: boolean;
|
|
123
|
-
created: number;
|
|
124
|
-
placeholder?: string;
|
|
125
|
-
layout?: {
|
|
126
|
-
span?: number;
|
|
127
|
-
};
|
|
128
|
-
rules?: readonly FormValidationRule[];
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* 表单项布局配置
|
|
132
|
-
* @description 单个表单项的布局相关配置
|
|
133
|
-
*/
|
|
134
|
-
interface ItemLayoutConfig {
|
|
135
|
-
span?: number;
|
|
136
|
-
offset?: number;
|
|
137
|
-
width?: string | number;
|
|
138
|
-
group?: string;
|
|
139
|
-
tab?: string;
|
|
140
|
-
step?: string;
|
|
141
|
-
dynamic?: boolean;
|
|
142
|
-
customRender?: boolean;
|
|
143
|
-
enhanced?: boolean;
|
|
144
|
-
class?: string;
|
|
145
|
-
style?: CSSProperties | Record<string, unknown>;
|
|
146
|
-
hidden?: boolean;
|
|
147
|
-
suffix?: boolean;
|
|
148
|
-
/** Legacy nested grid attributes; top-level layout values take precedence. */
|
|
149
|
-
grid?: {
|
|
150
|
-
span?: number;
|
|
151
|
-
offset?: number;
|
|
152
|
-
suffix?: boolean;
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 网格布局配置
|
|
157
|
-
* @description 网格布局的详细配置选项
|
|
158
|
-
*/
|
|
159
|
-
interface GridLayoutConfig {
|
|
160
|
-
cols?: number;
|
|
161
|
-
gutter?: number;
|
|
162
|
-
yGutter?: number;
|
|
163
|
-
xGap?: number;
|
|
164
|
-
yGap?: number;
|
|
165
|
-
responsive?: boolean;
|
|
166
|
-
showConfigPanel?: boolean;
|
|
167
|
-
showStats?: boolean;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* 内联布局配置
|
|
171
|
-
* @description 内联布局的详细配置选项
|
|
172
|
-
*/
|
|
173
|
-
interface InlineLayoutConfig {
|
|
174
|
-
gap?: number;
|
|
175
|
-
rowGap?: number;
|
|
176
|
-
itemWidth?: number;
|
|
177
|
-
align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch';
|
|
178
|
-
wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* 卡片布局配置
|
|
182
|
-
* @description 卡片布局的详细配置选项
|
|
183
|
-
*/
|
|
184
|
-
interface CardLayoutConfig {
|
|
185
|
-
groups?: GroupConfig[];
|
|
186
|
-
spacing?: number;
|
|
187
|
-
bordered?: boolean;
|
|
188
|
-
direction?: 'vertical' | 'horizontal';
|
|
189
|
-
showLayoutConfig?: boolean;
|
|
190
|
-
showActionPanel?: boolean;
|
|
191
|
-
showProgress?: boolean;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* 标签页布局配置
|
|
195
|
-
* @description 标签页布局的详细配置选项
|
|
196
|
-
*/
|
|
197
|
-
interface TabsLayoutConfig {
|
|
198
|
-
tabs?: TabConfig[];
|
|
199
|
-
type?: 'line' | 'card' | 'segment';
|
|
200
|
-
size?: 'small' | 'medium' | 'large';
|
|
201
|
-
placement?: 'top' | 'right' | 'bottom' | 'left';
|
|
202
|
-
defaultTab?: string;
|
|
203
|
-
animated?: boolean;
|
|
204
|
-
closable?: boolean;
|
|
205
|
-
addable?: boolean;
|
|
206
|
-
showTabHeader?: boolean;
|
|
207
|
-
showActions?: boolean;
|
|
208
|
-
showCount?: boolean;
|
|
209
|
-
validateBeforeSwitch?: boolean;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* 步骤布局配置
|
|
213
|
-
* @description 步骤布局的详细配置选项
|
|
214
|
-
*/
|
|
215
|
-
interface StepsLayoutConfig {
|
|
216
|
-
steps?: StepConfig[];
|
|
217
|
-
vertical?: boolean;
|
|
218
|
-
size?: 'small' | 'medium';
|
|
219
|
-
defaultStep?: number;
|
|
220
|
-
showStepHeader?: boolean;
|
|
221
|
-
validateBeforeNext?: boolean;
|
|
222
|
-
prevButtonText?: string;
|
|
223
|
-
nextButtonText?: string;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* 动态布局配置
|
|
227
|
-
* @description 动态布局的详细配置选项
|
|
228
|
-
*/
|
|
229
|
-
interface DynamicLayoutConfig {
|
|
230
|
-
grid?: {
|
|
231
|
-
cols?: number;
|
|
232
|
-
gutter?: number;
|
|
233
|
-
};
|
|
234
|
-
controls?: {
|
|
235
|
-
showControls?: boolean;
|
|
236
|
-
showItemControls?: boolean;
|
|
237
|
-
showStats?: boolean;
|
|
238
|
-
};
|
|
239
|
-
dynamic?: {
|
|
240
|
-
allowAdd?: boolean;
|
|
241
|
-
allowRemove?: boolean;
|
|
242
|
-
allowToggle?: boolean;
|
|
243
|
-
maxFields?: number;
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* 自定义渲染布局配置
|
|
248
|
-
* @description 自定义渲染布局的详细配置选项
|
|
249
|
-
*/
|
|
250
|
-
interface CustomLayoutConfig {
|
|
251
|
-
groups?: GroupConfig[];
|
|
252
|
-
rendering?: {
|
|
253
|
-
mode?: 'basic' | 'enhanced';
|
|
254
|
-
animations?: boolean;
|
|
255
|
-
tooltips?: boolean;
|
|
256
|
-
};
|
|
257
|
-
display?: {
|
|
258
|
-
showIntro?: boolean;
|
|
259
|
-
showModeSwitch?: boolean;
|
|
260
|
-
showGroupActions?: boolean;
|
|
261
|
-
showStats?: boolean;
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* 完整布局配置
|
|
266
|
-
* @description 包含所有布局类型的配置选项
|
|
267
|
-
*/
|
|
268
|
-
interface LayoutConfig {
|
|
269
|
-
type?: LayoutType;
|
|
270
|
-
grid?: GridLayoutConfig;
|
|
271
|
-
inline?: InlineLayoutConfig;
|
|
272
|
-
card?: CardLayoutConfig;
|
|
273
|
-
tabs?: TabsLayoutConfig;
|
|
274
|
-
steps?: StepsLayoutConfig;
|
|
275
|
-
dynamic?: DynamicLayoutConfig;
|
|
276
|
-
custom?: CustomLayoutConfig;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* 表单配置项接口
|
|
280
|
-
* @description 单个表单项的完整配置
|
|
281
|
-
*/
|
|
282
|
-
interface FormOptionBase<T extends object> {
|
|
283
|
-
id?: string;
|
|
284
|
-
type: ComponentType | string;
|
|
285
|
-
label?: string;
|
|
286
|
-
placeholder?: string;
|
|
287
|
-
rules?: readonly FormValidationRule[];
|
|
288
|
-
attrs?: Record<string, unknown>;
|
|
289
|
-
children?: OptionItem[];
|
|
290
|
-
show?: boolean;
|
|
291
|
-
layout?: ItemLayoutConfig;
|
|
292
|
-
help?: string;
|
|
293
|
-
required?: boolean;
|
|
294
|
-
dependsOn?: FieldPath<T> | FieldPath<T>[];
|
|
295
|
-
showWhen?: (formModel: FormModel<T>) => boolean;
|
|
296
|
-
/** 字段级禁用(优先级高于全局 config.disabled) */
|
|
297
|
-
disabled?: boolean | ((formModel: FormModel<T>) => boolean);
|
|
298
|
-
/** 字段级只读(优先级高于全局 config.readonly) */
|
|
299
|
-
readonly?: boolean | ((formModel: FormModel<T>) => boolean);
|
|
300
|
-
/** 异步数据源:select / cascader / checkbox / radio 的远程选项加载 */
|
|
301
|
-
asyncOptions?: (formModel: FormModel<T>, context?: AsyncOptionsContext) => Promise<readonly OptionItem[]>;
|
|
302
|
-
/** 联动校验规则:根据表单数据动态返回校验规则 */
|
|
303
|
-
rulesWhen?: (formModel: FormModel<T>) => readonly FormValidationRule[];
|
|
304
|
-
/** 跨字段校验:需要引用多个字段值的验证函数,返回错误消息或 null */
|
|
305
|
-
crossFieldValidator?: (formModel: FormModel<T>) => MaybePromise<string | null>;
|
|
306
|
-
}
|
|
307
|
-
/** 字段名与初值、联动返回值关联;未声明业务模型时保持动态表单的宽松契约。 */
|
|
308
|
-
type FormOption<T extends object = FormRecord> = FormOptionBase<T> & { [P in FieldPath<T>]: {
|
|
309
|
-
prop: P;
|
|
310
|
-
value?: FieldPathValue<T, P>; /** 联动赋值:其他字段变化时自动计算本字段的值。 */
|
|
311
|
-
valueWhen?: (formModel: FormModel<T>) => FieldPathValue<T, P>;
|
|
312
|
-
} }[FieldPath<T>];
|
|
313
|
-
/**
|
|
314
|
-
* 表单提交事件参数
|
|
315
|
-
*/
|
|
316
|
-
interface SubmitEventPayload<T extends object = FormRecord> {
|
|
317
|
-
model: FormModel<T>;
|
|
318
|
-
form: FormInst;
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* C_Form 组件实例暴露的方法
|
|
322
|
-
* @description 表单组件实例对外暴露的所有方法
|
|
323
|
-
*/
|
|
324
|
-
interface FormInstance<T extends object = FormRecord> {
|
|
325
|
-
validate(): Promise<void>;
|
|
326
|
-
validateField(field: FieldPath<T> | FieldPath<T>[]): Promise<void>;
|
|
327
|
-
validateStep(step: number | string): Promise<boolean>;
|
|
328
|
-
validateTab(tabKey: string): Promise<boolean>;
|
|
329
|
-
validateDynamicFields(): Promise<boolean>;
|
|
330
|
-
validateCustomGroup(groupKey: string): Promise<boolean>;
|
|
331
|
-
clearValidation(field?: FieldPath<T> | FieldPath<T>[]): void;
|
|
332
|
-
getModel(): FormModel<T>;
|
|
333
|
-
setFields(fields: Partial<FormModel<T>>): void;
|
|
334
|
-
resetFields(): void;
|
|
335
|
-
setFieldValue<P extends FieldPath<T>>(field: P, value: FieldPathValue<T, P>, shouldValidate?: boolean): Promise<void>;
|
|
336
|
-
getFieldValue<P extends FieldPath<T>>(field: P): FieldPathValue<T, P>;
|
|
337
|
-
setFieldsValue(fields: Partial<FormModel<T>>, shouldValidate?: boolean): Promise<void>;
|
|
338
|
-
formRef: FormInst | null;
|
|
339
|
-
formModel: FormModel<T>;
|
|
340
|
-
initialize(): void;
|
|
341
|
-
layoutType: LayoutType;
|
|
342
|
-
shouldShowDefaultActions: boolean;
|
|
343
|
-
/** 表单是否被修改过 */
|
|
344
|
-
isDirty: boolean;
|
|
345
|
-
/** 获取被修改的字段列表 */
|
|
346
|
-
getChangedFields(): FieldPath<T>[];
|
|
347
|
-
/** 检查某字段是否被修改 */
|
|
348
|
-
isFieldDirty(field: FieldPath<T>): boolean;
|
|
349
|
-
/** 将当前值设为初始快照(常用于编辑模式加载数据后) */
|
|
350
|
-
markAsClean(): void;
|
|
351
|
-
/** 字段异步选项的 loading 状态 */
|
|
352
|
-
asyncLoadingMap: Record<string, boolean>;
|
|
353
|
-
/** 字段异步选项加载错误 */
|
|
354
|
-
asyncErrorMap: Record<string, unknown>;
|
|
355
|
-
/** 重新加载全部或指定字段的异步选项 */
|
|
356
|
-
reloadOptions(field?: FieldPath<T>): Promise<void>;
|
|
357
|
-
/** 是否正在提交 */
|
|
358
|
-
isSubmitting: boolean;
|
|
359
|
-
/** 验证并提交,成功返回 true */
|
|
360
|
-
submit(): Promise<boolean>;
|
|
361
|
-
}
|
|
362
|
-
/** C_Form 默认操作区插槽参数。 */
|
|
363
|
-
interface FormActionSlotProps<T extends object = FormRecord> {
|
|
364
|
-
form: FormInst | null;
|
|
365
|
-
model: FormModel<T>;
|
|
366
|
-
validate: FormInstance<T>['validate'];
|
|
367
|
-
validateField: FormInstance<T>['validateField'];
|
|
368
|
-
reset: FormInstance<T>['resetFields'];
|
|
369
|
-
setFields: FormInstance<T>['setFields'];
|
|
370
|
-
getModel: FormInstance<T>['getModel'];
|
|
371
|
-
clearValidation: FormInstance<T>['clearValidation'];
|
|
372
|
-
submit: FormInstance<T>['submit'];
|
|
373
|
-
reloadOptions: FormInstance<T>['reloadOptions'];
|
|
374
|
-
submitting: boolean;
|
|
375
|
-
}
|
|
376
|
-
/** Tabs 布局操作区插槽参数。 */
|
|
377
|
-
interface FormTabActionsSlotProps {
|
|
378
|
-
currentTab: string;
|
|
379
|
-
totalTabs: number;
|
|
380
|
-
validateTab: () => Promise<boolean>;
|
|
381
|
-
switchToTab: (targetTab: string) => Promise<boolean>;
|
|
382
|
-
}
|
|
383
|
-
/** Steps 布局操作区插槽参数。 */
|
|
384
|
-
interface FormStepActionsSlotProps {
|
|
385
|
-
currentStep: number;
|
|
386
|
-
totalSteps: number;
|
|
387
|
-
isFirstStep: boolean;
|
|
388
|
-
isLastStep: boolean;
|
|
389
|
-
nextStep: () => Promise<void>;
|
|
390
|
-
previousStep: () => void;
|
|
391
|
-
goToStep: (stepIndex: number) => Promise<void>;
|
|
392
|
-
/** Validate and submit the complete form, including fields in other steps. */
|
|
393
|
-
submit: () => Promise<boolean>;
|
|
394
|
-
submitting: boolean;
|
|
395
|
-
}
|
|
396
|
-
/** C_Form 对外公开的具名插槽。 */
|
|
397
|
-
interface FormSlots<T extends object = FormRecord> {
|
|
398
|
-
/** Field-specific named slots are intentionally open-ended. */
|
|
399
|
-
[slotName: string]: ((props: any) => unknown) | undefined;
|
|
400
|
-
action?: (props: FormActionSlotProps<T>) => unknown;
|
|
401
|
-
/** 增加业务按钮,保留组件默认的提交、重置和加载管理。 */
|
|
402
|
-
'action-extra'?: (props: FormActionSlotProps<T>) => unknown;
|
|
403
|
-
'tab-actions'?: (props: FormTabActionsSlotProps) => unknown;
|
|
404
|
-
'step-actions'?: (props: FormStepActionsSlotProps) => unknown;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* 表单数据模型类型(泛型)
|
|
408
|
-
*/
|
|
409
|
-
type FormModel<T extends object = FormRecord> = T;
|
|
410
|
-
/**
|
|
411
|
-
* 渲染模式类型
|
|
412
|
-
*/
|
|
413
|
-
type RenderMode = 'basic' | 'enhanced';
|
|
414
|
-
/**
|
|
415
|
-
* 动态表单配置接口
|
|
416
|
-
*/
|
|
417
|
-
interface DynamicFormConfig {
|
|
418
|
-
maxFields: number;
|
|
419
|
-
autoSave: boolean;
|
|
420
|
-
enableSort: boolean;
|
|
421
|
-
showControls: boolean;
|
|
422
|
-
showItemControls: boolean;
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* 动态表单状态接口
|
|
426
|
-
*/
|
|
427
|
-
interface DynamicFormState {
|
|
428
|
-
config: DynamicFormConfig;
|
|
429
|
-
baseFields: FormOption[];
|
|
430
|
-
dynamicFields: DynamicFieldConfig[];
|
|
431
|
-
hiddenFieldIds: Set<string>;
|
|
432
|
-
fieldCounter: number;
|
|
433
|
-
isInitialized: boolean;
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* 动态表单状态控制器
|
|
437
|
-
* @description 为组合式函数提供稳定的公共返回类型,避免声明文件泄漏依赖库内部类型
|
|
438
|
-
*/
|
|
439
|
-
interface DynamicFormController {
|
|
440
|
-
state: DeepReadonly<DynamicFormState>;
|
|
441
|
-
allFields: ComputedRef<FormOption[]>;
|
|
442
|
-
visibleFields: ComputedRef<FormOption[]>;
|
|
443
|
-
dynamicFieldsCount: ComputedRef<number>;
|
|
444
|
-
hiddenFieldsCount: ComputedRef<number>;
|
|
445
|
-
canAddMoreFields: ComputedRef<boolean>;
|
|
446
|
-
allVisible: ComputedRef<boolean>;
|
|
447
|
-
FIELD_TYPE_OPTIONS: ReadonlyArray<{
|
|
448
|
-
label: string;
|
|
449
|
-
value: ComponentType;
|
|
450
|
-
}>;
|
|
451
|
-
addField(config?: Partial<DynamicFieldConfig>): DynamicFieldConfig | null;
|
|
452
|
-
removeField(index?: number): DynamicFieldConfig | null;
|
|
453
|
-
clearDynamicFields(): number;
|
|
454
|
-
toggleFieldVisibility(fieldId: string): boolean;
|
|
455
|
-
toggleAllVisibility(): boolean;
|
|
456
|
-
updateConfig(config: Partial<DynamicFormConfig>): void;
|
|
457
|
-
exportConfig(): string;
|
|
458
|
-
initialize(baseFields: FormOption[], config?: Partial<DynamicFormConfig>): void;
|
|
459
|
-
}
|
|
11
|
+
//#region src/composables/useComponentLocale.d.ts
|
|
12
|
+
/** Bind the UI-independent translator to this Vue application and local configuration. */
|
|
13
|
+
declare function useComponentLocale(local?: MaybeRefOrGetter<ComponentLocale | undefined>): {
|
|
14
|
+
t: (key: string, params?: Record<string, string | number>) => string;
|
|
15
|
+
};
|
|
460
16
|
//#endregion
|
|
461
|
-
//#region src/
|
|
462
|
-
/**
|
|
463
|
-
|
|
464
|
-
onTabChange?: (tabKey: string, tabIndex: number) => void;
|
|
465
|
-
onTabBeforeChange?: (currentTab: string, targetTab: string) => MaybePromise<boolean | void>;
|
|
466
|
-
onTabValidate?: (tabKey: string) => void;
|
|
467
|
-
onStepChange?: (stepIndex: number, stepKey: string) => void;
|
|
468
|
-
onStepBeforeChange?: (currentStep: number, targetStep: number) => MaybePromise<boolean | void>;
|
|
469
|
-
onStepValidate?: (stepIndex: number) => void;
|
|
470
|
-
onFieldAdd?: (fieldConfig: DynamicFieldConfig) => void;
|
|
471
|
-
onFieldRemove?: (fieldId: string) => void;
|
|
472
|
-
onFieldToggle?: (fieldId: string, visible: boolean) => void;
|
|
473
|
-
onFieldsClear?: () => void;
|
|
474
|
-
onRenderModeChange?: (mode: RenderMode) => void;
|
|
475
|
-
onGroupToggle?: (groupKey: string, collapsed: boolean) => void;
|
|
476
|
-
onGroupReset?: (groupKey: string) => void;
|
|
477
|
-
onFieldsChange?: (fields: FormOption<T>[]) => void;
|
|
478
|
-
onSubmit?: (payload: SubmitEventPayload<T>, context?: FormSubmitContext) => unknown;
|
|
479
|
-
onError?: (error: unknown, context: FormErrorContext) => void;
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* C_Form 统一配置接口
|
|
483
|
-
* @description 收拢原先 13 个分散 Props 为 1 个 config 对象
|
|
484
|
-
* 默认值均在 FORM_DEFAULTS 中集中管理
|
|
485
|
-
*/
|
|
486
|
-
interface FormConfig<T extends object = FormRecord> extends LayoutCallbacks<T> {
|
|
487
|
-
feedback?: ComponentFeedback;
|
|
488
|
-
locale?: ComponentLocale;
|
|
489
|
-
/** 布局类型,默认 'default' */
|
|
490
|
-
layout?: LayoutType;
|
|
491
|
-
/** 标签位置,默认 'left' */
|
|
492
|
-
labelPlacement?: LabelPlacement;
|
|
493
|
-
/** 标签宽度,默认 'auto' */
|
|
494
|
-
labelWidth?: string | number;
|
|
495
|
-
/** 尺寸,默认 'medium' */
|
|
496
|
-
size?: 'small' | 'medium' | 'large';
|
|
497
|
-
/** 与表格、搜索表单一致的密度;显式 size 和布局间距优先。 */
|
|
498
|
-
density?: ComponentDensity;
|
|
499
|
-
/** 禁用整个表单,默认 false */
|
|
500
|
-
disabled?: boolean;
|
|
501
|
-
/** 只读,默认 false */
|
|
502
|
-
readonly?: boolean;
|
|
503
|
-
/** 显示默认提交/重置按钮,默认 true */
|
|
504
|
-
showActions?: boolean;
|
|
505
|
-
/** 值变化时自动校验,默认 false */
|
|
506
|
-
validateOnChange?: boolean;
|
|
507
|
-
/** 动态移除配置项后是否保留其模型值,默认 false */
|
|
508
|
-
preserveRemovedFields?: boolean;
|
|
509
|
-
/** 默认提交按钮文案 */
|
|
510
|
-
submitText?: string;
|
|
511
|
-
/** 默认重置按钮文案 */
|
|
512
|
-
resetText?: string;
|
|
513
|
-
/** 提交完成后的提示;默认不显示,由业务明确配置。 */
|
|
514
|
-
submitSuccessText?: string;
|
|
515
|
-
/** 重置完成后的提示;默认不显示。 */
|
|
516
|
-
resetSuccessText?: string;
|
|
517
|
-
/** 表单模式:create = 新建(默认),edit = 编辑(配合 initialValues 实现回填 + 脏检查) */
|
|
518
|
-
mode?: FormMode;
|
|
519
|
-
/** 编辑模式初始值:设置后自动作为脏检查基准 */
|
|
520
|
-
initialValues?: Partial<T>;
|
|
521
|
-
grid?: GridLayoutConfig;
|
|
522
|
-
inline?: InlineLayoutConfig;
|
|
523
|
-
card?: CardLayoutConfig;
|
|
524
|
-
tabs?: TabsLayoutConfig;
|
|
525
|
-
steps?: StepsLayoutConfig;
|
|
526
|
-
dynamic?: DynamicLayoutConfig;
|
|
527
|
-
custom?: CustomLayoutConfig;
|
|
528
|
-
}
|
|
529
|
-
/** Application-level C_Form defaults injection key. */
|
|
530
|
-
declare const FORM_GLOBAL_CONFIG_KEY: InjectionKey<FormConfig>;
|
|
531
|
-
/** Read application-level C_Form defaults without requiring a provider. */
|
|
532
|
-
declare function useFormGlobalConfig(): FormConfig;
|
|
533
|
-
/** Merge nested layout sections while preserving local-over-global precedence. */
|
|
534
|
-
declare function mergeFormConfig(local: FormConfig | undefined, global: FormConfig): FormConfig;
|
|
535
|
-
/** 解析后的配置(所有必填字段均已设置默认值) */
|
|
536
|
-
interface ResolvedFormConfig extends Required<Omit<FormConfig, keyof LayoutCallbacks | 'grid' | 'inline' | 'card' | 'tabs' | 'steps' | 'dynamic' | 'custom' | 'initialValues' | 'feedback' | 'locale'>> {
|
|
537
|
-
grid?: GridLayoutConfig;
|
|
538
|
-
inline?: InlineLayoutConfig;
|
|
539
|
-
card?: CardLayoutConfig;
|
|
540
|
-
tabs?: TabsLayoutConfig;
|
|
541
|
-
steps?: StepsLayoutConfig;
|
|
542
|
-
dynamic?: DynamicLayoutConfig;
|
|
543
|
-
custom?: CustomLayoutConfig;
|
|
544
|
-
onTabChange?: LayoutCallbacks['onTabChange'];
|
|
545
|
-
onTabBeforeChange?: LayoutCallbacks['onTabBeforeChange'];
|
|
546
|
-
onTabValidate?: LayoutCallbacks['onTabValidate'];
|
|
547
|
-
onStepChange?: LayoutCallbacks['onStepChange'];
|
|
548
|
-
onStepBeforeChange?: LayoutCallbacks['onStepBeforeChange'];
|
|
549
|
-
onStepValidate?: LayoutCallbacks['onStepValidate'];
|
|
550
|
-
onFieldAdd?: LayoutCallbacks['onFieldAdd'];
|
|
551
|
-
onFieldRemove?: LayoutCallbacks['onFieldRemove'];
|
|
552
|
-
onFieldToggle?: LayoutCallbacks['onFieldToggle'];
|
|
553
|
-
onFieldsClear?: LayoutCallbacks['onFieldsClear'];
|
|
554
|
-
onRenderModeChange?: LayoutCallbacks['onRenderModeChange'];
|
|
555
|
-
onGroupToggle?: LayoutCallbacks['onGroupToggle'];
|
|
556
|
-
onGroupReset?: LayoutCallbacks['onGroupReset'];
|
|
557
|
-
onFieldsChange?: LayoutCallbacks['onFieldsChange'];
|
|
558
|
-
onSubmit?: LayoutCallbacks['onSubmit'];
|
|
559
|
-
onError?: LayoutCallbacks['onError'];
|
|
560
|
-
initialValues?: Record<string, any>;
|
|
561
|
-
feedback?: ComponentFeedback;
|
|
562
|
-
locale?: ComponentLocale;
|
|
563
|
-
}
|
|
564
|
-
declare const FORM_DEFAULTS: ResolvedFormConfig;
|
|
565
|
-
/** 拥有自身控制按钮的布局(不显示默认操作按钮) */
|
|
566
|
-
declare const LAYOUTS_WITH_OWN_CONTROLS: readonly LayoutType[];
|
|
567
|
-
/**
|
|
568
|
-
* 解析 FormConfig,合并默认值
|
|
569
|
-
* @param config - 用户传入的配置(可选)
|
|
570
|
-
* @returns 具有完整默认值的 ResolvedFormConfig
|
|
571
|
-
*/
|
|
572
|
-
declare function resolveFormConfig(config?: FormConfig): ResolvedFormConfig;
|
|
573
|
-
/**
|
|
574
|
-
* 计算是否显示默认操作按钮
|
|
575
|
-
* @param resolved - 已解析的配置
|
|
576
|
-
*/
|
|
577
|
-
declare function shouldShowActions(resolved: ResolvedFormConfig): boolean;
|
|
17
|
+
//#region src/adapters/naive/feedback.d.ts
|
|
18
|
+
/** Reuse Naive providers when present and safely degrade to injected/no-op feedback. */
|
|
19
|
+
declare function useComponentFeedback(local?: MaybeRefOrGetter<ComponentFeedback | undefined>): Required<ComponentFeedback>;
|
|
578
20
|
//#endregion
|
|
579
21
|
//#region src/components/C_Form/composables/useFormRenderer.d.ts
|
|
580
22
|
type ComponentMap = Record<string, Component>;
|
|
@@ -604,6 +46,8 @@ interface UseFormRendererOptions {
|
|
|
604
46
|
instanceSlots?: Readonly<Slots>;
|
|
605
47
|
asyncOptionsCache: Ref<Record<string, OptionItem[]>>;
|
|
606
48
|
asyncLoadingMap: Ref<Record<string, boolean>>;
|
|
49
|
+
getDictionaryOptions?: (field: string) => readonly DictionaryOption[];
|
|
50
|
+
isDictionaryLoading?: (field: string) => boolean;
|
|
607
51
|
renderers?: ComputedRef<Record<string, FormRenderer> | undefined>;
|
|
608
52
|
/** Overrides application injection. An isolated registry never reads legacy globals. */
|
|
609
53
|
registry?: FormRendererRegistry;
|
|
@@ -638,22 +82,23 @@ declare function useFormRenderer(opts: UseFormRendererOptions): {
|
|
|
638
82
|
};
|
|
639
83
|
//#endregion
|
|
640
84
|
//#region src/components/C_Form/index.vue.d.ts
|
|
641
|
-
declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
642
|
-
props: vue.PublicProps & __VLS_PrettifyLocal<{
|
|
85
|
+
declare const __VLS_export$3: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
86
|
+
props: vue.PublicProps & __VLS_PrettifyLocal$3<{
|
|
643
87
|
/** 字段配置数组 */options: FormOption<T>[]; /** 双向绑定表单数据 */
|
|
644
88
|
modelValue?: FormModel<T>; /** 统一配置对象(收拢原先 13 个分散 Props) */
|
|
645
89
|
config?: FormConfig<T>; /** 当前表单实例的自定义渲染器,不污染全局注册表 */
|
|
646
90
|
renderers?: Record<string, FormRenderer>;
|
|
647
91
|
} & {
|
|
648
|
-
"onUpdate:modelValue"?: ((model: T) => any) | undefined;
|
|
649
92
|
onSubmit?: ((payload: SubmitEventPayload<T>) => any) | undefined;
|
|
650
|
-
"
|
|
93
|
+
"onUpdate:modelValue"?: ((model: T) => any) | undefined;
|
|
651
94
|
"onValidate-error"?: ((errors: unknown) => any) | undefined;
|
|
95
|
+
"onValidate-success"?: ((model: T) => any) | undefined;
|
|
652
96
|
}> & (typeof globalThis extends {
|
|
653
97
|
__VLS_PROPS_FALLBACK: infer P;
|
|
654
98
|
} ? P : {});
|
|
655
99
|
expose: (exposed: vue.ShallowUnwrapRef<{
|
|
656
100
|
validate: () => Promise<void>;
|
|
101
|
+
revealField: (field: string) => Promise<boolean>;
|
|
657
102
|
validateField: (field: string | string[]) => Promise<void>;
|
|
658
103
|
validateStep: (step: number | string) => Promise<boolean>;
|
|
659
104
|
validateTab: (tabKey: string) => Promise<boolean>;
|
|
@@ -683,12 +128,12 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
|
|
|
683
128
|
}>) => void;
|
|
684
129
|
attrs: any;
|
|
685
130
|
slots: FormSlots<T>;
|
|
686
|
-
emit: ((evt: "
|
|
131
|
+
emit: ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "update:modelValue", model: T) => void) & ((evt: "validate-error", errors: unknown) => void) & ((evt: "validate-success", model: T) => void);
|
|
687
132
|
}>) => vue.VNode & {
|
|
688
133
|
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
689
134
|
};
|
|
690
|
-
declare const _default: typeof __VLS_export;
|
|
691
|
-
type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
135
|
+
declare const _default$3: typeof __VLS_export$3;
|
|
136
|
+
type __VLS_PrettifyLocal$3<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
692
137
|
//#endregion
|
|
693
138
|
//#region src/components/C_Form/helpers.d.ts
|
|
694
139
|
/** Preserve business-model field inference without changing the component API. */
|
|
@@ -719,6 +164,935 @@ interface UseCFormReturn<T extends object> {
|
|
|
719
164
|
/** Small binding helper for the common controlled C_Form setup. */
|
|
720
165
|
declare function useCForm<T extends object>(setup: UseCFormOptions<T>): UseCFormReturn<T>;
|
|
721
166
|
//#endregion
|
|
167
|
+
//#region src/plugins/highlight.d.ts
|
|
168
|
+
interface HighlightPluginOptions {
|
|
169
|
+
autoDetect?: boolean;
|
|
170
|
+
extraLanguages?: string[];
|
|
171
|
+
/** Explicit compatibility bridge; restored when the owning app unmounts. */
|
|
172
|
+
exposeToWindow?: boolean;
|
|
173
|
+
/** Enable lifecycle diagnostics through the supplied logger. */
|
|
174
|
+
debug?: boolean;
|
|
175
|
+
logger?: Pick<Console, 'info' | 'warn' | 'error'>;
|
|
176
|
+
onError?: (error: unknown, context: {
|
|
177
|
+
source: 'language-loader';
|
|
178
|
+
language: string;
|
|
179
|
+
}) => void;
|
|
180
|
+
}
|
|
181
|
+
interface HighlightAPI {
|
|
182
|
+
getHljs: () => HLJSApi;
|
|
183
|
+
loadLanguage: (language: string) => Promise<boolean>;
|
|
184
|
+
loadLanguages: (languages: string[]) => Promise<string[]>;
|
|
185
|
+
getLoadedLanguages: () => string[];
|
|
186
|
+
}
|
|
187
|
+
/** Create an independent highlighter, including its language registry and loaders. */
|
|
188
|
+
declare function createHighlight(options?: HighlightPluginOptions): HighlightAPI;
|
|
189
|
+
/** Reuse the current app's highlighter or create a standalone, isolated one. */
|
|
190
|
+
declare function useHighlight(options?: HighlightPluginOptions): HighlightAPI;
|
|
191
|
+
/**
|
|
192
|
+
* * @description 安装 highlight.js 插件到 Vue 应用
|
|
193
|
+
* ? @param app - Vue 应用实例
|
|
194
|
+
* ? @param options - 插件配置选项
|
|
195
|
+
* ! @return 应用独立的 highlight API
|
|
196
|
+
*/
|
|
197
|
+
declare function setupHighlight(app: App, options?: HighlightPluginOptions): HighlightAPI;
|
|
198
|
+
//#endregion
|
|
199
|
+
//#region src/components/C_Table/index.vue.d.ts
|
|
200
|
+
declare const __VLS_export$2: <T extends object = DataRecord, C = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
201
|
+
props: vue.PublicProps & __VLS_PrettifyLocal$2<TableRuntimeProps<T, C> & {
|
|
202
|
+
onCancel?: ((rowData: T, rowIndex: number) => any) | undefined;
|
|
203
|
+
onSave?: ((rowData: T, rowIndex: number, columnKey?: string | undefined) => any) | undefined;
|
|
204
|
+
"onPagination-change"?: ((page: number, pageSize: number) => any) | undefined;
|
|
205
|
+
"onRow-delete"?: ((deletedRow: T, index: number) => any) | undefined;
|
|
206
|
+
"onBatch-action-error"?: ((error: unknown, actionKey: string) => any) | undefined;
|
|
207
|
+
"onRow-key-error"?: ((issues: TableRowKeyIssue<T>[]) => any) | undefined;
|
|
208
|
+
"onRow-add"?: ((newRow: T) => any) | undefined;
|
|
209
|
+
"onRow-copy"?: ((originalRow: T, newRow: T) => any) | undefined;
|
|
210
|
+
"onRow-move"?: ((row: T, fromIndex: number, toIndex: number) => any) | undefined;
|
|
211
|
+
"onRow-selection-change"?: ((selectedKey: DataTableRowKey | null, selectedRow: T | null) => any) | undefined;
|
|
212
|
+
"onView-detail"?: ((data: T) => any) | undefined;
|
|
213
|
+
"onColumn-change"?: ((columns: TableColumn<T>[]) => any) | undefined;
|
|
214
|
+
"onExpand-change"?: ((expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => any) | undefined;
|
|
215
|
+
"onSelection-change"?: ((checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => any) | undefined;
|
|
216
|
+
"onChild-selection-change"?: ((parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => any) | undefined;
|
|
217
|
+
"onParent-child-link-change"?: ((parentKey: DataTableRowKey, shouldSelect: boolean) => any) | undefined;
|
|
218
|
+
"onUpdate:data"?: ((data: T[]) => any) | undefined;
|
|
219
|
+
"onEdit-error"?: ((error: unknown) => any) | undefined;
|
|
220
|
+
}> & (typeof globalThis extends {
|
|
221
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
222
|
+
} ? P : {});
|
|
223
|
+
expose: (exposed: vue.ShallowUnwrapRef<TableInstance<T, C>>) => void;
|
|
224
|
+
attrs: any;
|
|
225
|
+
slots: {
|
|
226
|
+
'toolbar-left'?: (props: {}) => any;
|
|
227
|
+
} & {
|
|
228
|
+
'toolbar-right'?: (props: {}) => any;
|
|
229
|
+
} & {
|
|
230
|
+
error?: (props: {
|
|
231
|
+
error: ErrorConfig;
|
|
232
|
+
}) => any;
|
|
233
|
+
} & {
|
|
234
|
+
loading?: (props: {}) => any;
|
|
235
|
+
};
|
|
236
|
+
emit: ((evt: "cancel", rowData: T, rowIndex: number) => void) & ((evt: "save", rowData: T, rowIndex: number, columnKey?: string | undefined) => void) & ((evt: "pagination-change", page: number, pageSize: number) => void) & ((evt: "row-delete", deletedRow: T, index: number) => void) & ((evt: "batch-action-error", error: unknown, actionKey: string) => void) & ((evt: "row-key-error", issues: TableRowKeyIssue<T>[]) => void) & ((evt: "row-add", newRow: T) => void) & ((evt: "row-copy", originalRow: T, newRow: T) => void) & ((evt: "row-move", row: T, fromIndex: number, toIndex: number) => void) & ((evt: "row-selection-change", selectedKey: DataTableRowKey | null, selectedRow: T | null) => void) & ((evt: "view-detail", data: T) => void) & ((evt: "column-change", columns: TableColumn<T>[]) => void) & ((evt: "expand-change", expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => void) & ((evt: "selection-change", checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => void) & ((evt: "child-selection-change", parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => void) & ((evt: "parent-child-link-change", parentKey: DataTableRowKey, shouldSelect: boolean) => void) & ((evt: "update:data", data: T[]) => void) & ((evt: "edit-error", error: unknown) => void);
|
|
237
|
+
}>) => vue.VNode & {
|
|
238
|
+
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
239
|
+
};
|
|
240
|
+
declare const _default$2: typeof __VLS_export$2;
|
|
241
|
+
type __VLS_PrettifyLocal$2<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
242
|
+
//#endregion
|
|
243
|
+
//#region src/components/C_Table/helpers.d.ts
|
|
244
|
+
/** Type-safe identity helper that rejects misspelled business field keys. */
|
|
245
|
+
declare function defineTableColumns<T extends object>(columns: StrictTableColumn<T>[]): StrictTableColumn<T>[];
|
|
246
|
+
/** Preserve row types across edit, action, summary and batch callbacks. */
|
|
247
|
+
declare function defineTableConfig<T extends object, C = unknown>(config: TableConfig<T, C>): TableConfig<T, C>;
|
|
248
|
+
/** Find missing and duplicate row keys before stateful table features consume them. */
|
|
249
|
+
declare function validateTableRowKeys<T extends object>(data: readonly T[], rowKey: (row: T) => DataTableRowKey | null | undefined): TableRowKeyIssue<T>[];
|
|
250
|
+
//#endregion
|
|
251
|
+
//#region src/components/C_Table/composables/useTableColumns.d.ts
|
|
252
|
+
/** useTableColumns 中对 tableManager 的最小依赖接口 */
|
|
253
|
+
interface TableManagerRef {
|
|
254
|
+
editStates: {
|
|
255
|
+
cellEdit: {
|
|
256
|
+
isSaving?: Ref<boolean>;
|
|
257
|
+
isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
|
|
258
|
+
getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
|
|
259
|
+
updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
|
|
260
|
+
saveEditCell: () => Promise<unknown>;
|
|
261
|
+
cancelEditCell: () => void;
|
|
262
|
+
startEditCell: (rowKey: DataTableRowKey, columnKey: string) => void;
|
|
263
|
+
};
|
|
264
|
+
rowEdit: {
|
|
265
|
+
isSaving?: Ref<boolean>;
|
|
266
|
+
isEditingRow: (rowKey: DataTableRowKey) => boolean;
|
|
267
|
+
getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
|
|
268
|
+
updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
dynamicRowsState?: {
|
|
272
|
+
enhanceColumns: (columns: TableColumn[]) => TableColumn[];
|
|
273
|
+
} | null;
|
|
274
|
+
expandState?: {
|
|
275
|
+
getTableColumns: (originalColumns: TableColumn[]) => DataTableColumn[];
|
|
276
|
+
} | null;
|
|
277
|
+
}
|
|
278
|
+
interface UseTableColumnsOptions {
|
|
279
|
+
/** 原始列配置 */
|
|
280
|
+
rawColumns: ComputedRef<TableColumn[]>;
|
|
281
|
+
/** 统一配置 */
|
|
282
|
+
config: ComputedRef<ResolvedConfig>;
|
|
283
|
+
/** 默认列宽 */
|
|
284
|
+
columnWidth: number;
|
|
285
|
+
/** 区分使用侧显式统一列宽与内部默认值,不把默认值强加给弹性业务列。 */
|
|
286
|
+
columnWidthExplicit?: boolean;
|
|
287
|
+
/** 用户设定的 scrollX */
|
|
288
|
+
scrollX?: number | string;
|
|
289
|
+
/** 行键获取函数 */
|
|
290
|
+
rowKey: (row: DataRecord) => DataTableRowKey;
|
|
291
|
+
/** 表格管理器 */
|
|
292
|
+
tableManager: TableManagerRef;
|
|
293
|
+
/** 操作列渲染函数 */
|
|
294
|
+
actionsRenderer: (row: DataRecord, index: number) => VNodeChild;
|
|
295
|
+
/** 编辑模式检查器 */
|
|
296
|
+
editModeChecker: ComputedRef<{
|
|
297
|
+
isNonEditable: (column: TableColumn) => boolean;
|
|
298
|
+
isRowEditMode: () => boolean;
|
|
299
|
+
isCellEditMode: () => boolean;
|
|
300
|
+
}>;
|
|
301
|
+
/** 是否渲染操作列 */
|
|
302
|
+
showActionsColumn: ComputedRef<boolean>;
|
|
303
|
+
}
|
|
304
|
+
interface UseTableColumnsReturn {
|
|
305
|
+
reactiveColumns: Ref<TableColumn[]>;
|
|
306
|
+
showSettingsPanel: Ref<boolean>;
|
|
307
|
+
computedColumns: ComputedRef<DataTableColumn[]>;
|
|
308
|
+
computedScrollX: ComputedRef<number | string | undefined>;
|
|
309
|
+
getDictionaryLabel: (column: TableColumn, value: unknown) => string;
|
|
310
|
+
handleColumnChange: (columns: TableColumn[]) => void;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* 表格列处理引擎
|
|
314
|
+
*/
|
|
315
|
+
declare function useTableColumns(options: UseTableColumnsOptions): UseTableColumnsReturn;
|
|
316
|
+
//#endregion
|
|
317
|
+
//#region src/components/C_Table/composables/useRowEdit.d.ts
|
|
318
|
+
/** 行级校验错误 */
|
|
319
|
+
interface RowValidationError {
|
|
320
|
+
field: string;
|
|
321
|
+
message: string;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* 行编辑配置选项
|
|
325
|
+
*/
|
|
326
|
+
interface RowEditOptions {
|
|
327
|
+
data: () => DataRecord[];
|
|
328
|
+
rowKey: (row: DataRecord) => DataTableRowKey;
|
|
329
|
+
onSave?: (rowData: DataRecord, rowIndex: number, originalKey?: DataTableRowKey) => unknown;
|
|
330
|
+
onCancel?: (rowData: DataRecord, rowIndex: number) => unknown;
|
|
331
|
+
/** 列配置(用于提取校验规则) */
|
|
332
|
+
columns?: () => TableColumn[];
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* 可编辑行组合函数,提供表格整行的编辑功能
|
|
336
|
+
*/
|
|
337
|
+
declare function useRowEdit(options: RowEditOptions): {
|
|
338
|
+
editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
|
|
339
|
+
editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
|
|
340
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
341
|
+
isEditingRow: (rowKey: DataTableRowKey) => boolean;
|
|
342
|
+
startEditRow: (rowKey: DataTableRowKey) => boolean;
|
|
343
|
+
cancelEditRow: () => Promise<void>;
|
|
344
|
+
saveEditRow: () => Promise<{
|
|
345
|
+
updatedData: DataRecord;
|
|
346
|
+
rowIndex: number;
|
|
347
|
+
} | undefined>;
|
|
348
|
+
validateRow: () => Promise<boolean>;
|
|
349
|
+
validationErrors: vue.Ref<{
|
|
350
|
+
field: string;
|
|
351
|
+
message: string;
|
|
352
|
+
}[], RowValidationError[] | {
|
|
353
|
+
field: string;
|
|
354
|
+
message: string;
|
|
355
|
+
}[]>;
|
|
356
|
+
getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
|
|
357
|
+
updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
|
|
358
|
+
findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
|
|
359
|
+
invalidate: () => void;
|
|
360
|
+
};
|
|
361
|
+
//#endregion
|
|
362
|
+
//#region src/components/C_Table/composables/useTableManager.d.ts
|
|
363
|
+
/**
|
|
364
|
+
* 表格管理器配置接口
|
|
365
|
+
*/
|
|
366
|
+
interface TableManagerConfig {
|
|
367
|
+
feedback?: ComponentFeedback;
|
|
368
|
+
locale?: ComponentLocale;
|
|
369
|
+
editable: boolean;
|
|
370
|
+
editMode: string;
|
|
371
|
+
showRowActions: boolean;
|
|
372
|
+
modalTitle: string;
|
|
373
|
+
modalWidth: number;
|
|
374
|
+
onEditSave?: (rowData: DataRecord, rowIndex: number, columnKey?: string) => unknown;
|
|
375
|
+
onEditCancel?: (rowData: DataRecord, rowIndex: number) => unknown;
|
|
376
|
+
onEditError?: (error: unknown) => void;
|
|
377
|
+
expandable: boolean;
|
|
378
|
+
defaultExpandedKeys?: DataTableRowKey[];
|
|
379
|
+
onLoadExpandData?: (row: DataRecord) => Promise<any[]> | any[];
|
|
380
|
+
onExpandError?: (error: unknown, row: DataRecord) => void;
|
|
381
|
+
renderExpandContent?: unknown;
|
|
382
|
+
rowExpandable?: (row: DataRecord) => boolean;
|
|
383
|
+
enableSelection: boolean;
|
|
384
|
+
defaultCheckedKeys?: DataTableRowKey[];
|
|
385
|
+
rowCheckable?: (row: DataRecord) => boolean;
|
|
386
|
+
maxSelection?: number;
|
|
387
|
+
enableChildSelection: boolean;
|
|
388
|
+
childRowCheckable?: (childRow: DataRecord, parentRow: DataRecord) => boolean;
|
|
389
|
+
enableParentChildLink: boolean;
|
|
390
|
+
parentChildLinkMode: ParentChildLinkMode;
|
|
391
|
+
dynamicRows?: DynamicRowsOptions<DataRecord>;
|
|
392
|
+
treeEnabled?: boolean;
|
|
393
|
+
treeChildrenKey?: string;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* 表格管理器参数接口
|
|
397
|
+
*/
|
|
398
|
+
interface TableManagerParams {
|
|
399
|
+
config: MaybeRefOrGetter<TableManagerConfig>;
|
|
400
|
+
data: () => DataRecord[];
|
|
401
|
+
rowKey: (row: DataRecord) => DataTableRowKey;
|
|
402
|
+
emit: (...args: any[]) => unknown;
|
|
403
|
+
/** 列配置(用于编辑校验) */
|
|
404
|
+
columns?: () => TableColumn[];
|
|
405
|
+
/** UI 壳提供加载内容,状态引擎保持可独立调用。 */
|
|
406
|
+
renderLoading?: () => VNodeChild;
|
|
407
|
+
/** String row-key field inherited by dynamic row creation; explicit dynamicRows.rowKey wins. */
|
|
408
|
+
rowKeyField?: MaybeRefOrGetter<string | undefined>;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* 事件处理器接口
|
|
412
|
+
*/
|
|
413
|
+
interface EventHandlers {
|
|
414
|
+
onSave: (rowData: DataRecord, rowIndex: number, columnKey?: string, originalKey?: DataTableRowKey) => Promise<void>;
|
|
415
|
+
onCancel: (rowData: DataRecord, rowIndex: number) => Promise<void>;
|
|
416
|
+
onExpandChange: (keys: DataTableRowKey[], row?: DataRecord, expanded?: boolean) => void;
|
|
417
|
+
onSelectionChange: (checkedKeys: DataTableRowKey[], checkedRows: DataRecord[], childSelections: Map<DataTableRowKey, DataTableRowKey[]>) => void;
|
|
418
|
+
onChildSelectionChange: (parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: DataRecord[]) => void;
|
|
419
|
+
onRowChange: (data: DataRecord[]) => void;
|
|
420
|
+
onRowSelectionChange: (selectedKey: DataTableRowKey | null, selectedRow: DataRecord | null) => void;
|
|
421
|
+
onRowAdd: (newRow: DataRecord) => void;
|
|
422
|
+
onRowDelete: (deletedRow: DataRecord, index: number) => void;
|
|
423
|
+
onRowCopy: (originalRow: DataRecord, newRow: DataRecord) => void;
|
|
424
|
+
onRowMove: (row: DataRecord, fromIndex: number, toIndex: number) => void;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* 表格统一状态管理器
|
|
428
|
+
*/
|
|
429
|
+
declare function useTableManager(params: TableManagerParams): {
|
|
430
|
+
editStates: {
|
|
431
|
+
rowEdit: {
|
|
432
|
+
editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
|
|
433
|
+
editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
|
|
434
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
435
|
+
isEditingRow: (rowKey: DataTableRowKey) => boolean;
|
|
436
|
+
startEditRow: (rowKey: DataTableRowKey) => boolean;
|
|
437
|
+
cancelEditRow: () => Promise<void>;
|
|
438
|
+
saveEditRow: () => Promise<{
|
|
439
|
+
updatedData: DataRecord;
|
|
440
|
+
rowIndex: number;
|
|
441
|
+
} | undefined>;
|
|
442
|
+
validateRow: () => Promise<boolean>;
|
|
443
|
+
validationErrors: vue.Ref<{
|
|
444
|
+
field: string;
|
|
445
|
+
message: string;
|
|
446
|
+
}[], RowValidationError[] | {
|
|
447
|
+
field: string;
|
|
448
|
+
message: string;
|
|
449
|
+
}[]>;
|
|
450
|
+
getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
|
|
451
|
+
updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
|
|
452
|
+
findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
|
|
453
|
+
invalidate: () => void;
|
|
454
|
+
};
|
|
455
|
+
cellEdit: {
|
|
456
|
+
editingCell: vue.Ref<{
|
|
457
|
+
rowKey: DataTableRowKey | null;
|
|
458
|
+
columnKey: string | null;
|
|
459
|
+
}, {
|
|
460
|
+
rowKey: DataTableRowKey | null;
|
|
461
|
+
columnKey: string | null;
|
|
462
|
+
} | {
|
|
463
|
+
rowKey: DataTableRowKey | null;
|
|
464
|
+
columnKey: string | null;
|
|
465
|
+
}>;
|
|
466
|
+
editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
|
|
467
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
468
|
+
isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
|
|
469
|
+
startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
|
|
470
|
+
saveEditCell: () => Promise<{
|
|
471
|
+
updatedData: {
|
|
472
|
+
[x: string]: unknown;
|
|
473
|
+
};
|
|
474
|
+
rowIndex: number;
|
|
475
|
+
columnKey: string;
|
|
476
|
+
} | undefined>;
|
|
477
|
+
cancelEditCell: () => void;
|
|
478
|
+
validateCell: () => Promise<boolean>;
|
|
479
|
+
cellValidationError: vue.Ref<string | null, string | null>;
|
|
480
|
+
getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
|
|
481
|
+
updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
|
|
482
|
+
findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
|
|
483
|
+
invalidate: () => void;
|
|
484
|
+
};
|
|
485
|
+
modalEdit: {
|
|
486
|
+
isModalVisible: vue.Ref<boolean, boolean>;
|
|
487
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
488
|
+
editingData: vue.Ref<DataRecord, DataRecord>;
|
|
489
|
+
editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
|
|
490
|
+
editingRowIndex: vue.ComputedRef<number>;
|
|
491
|
+
startEdit: (rowKey: DataTableRowKey, sourceData?: DataRecord | undefined) => boolean;
|
|
492
|
+
saveEdit: (formData?: DataRecord | undefined) => Promise<{
|
|
493
|
+
updatedData: any;
|
|
494
|
+
rowIndex: number;
|
|
495
|
+
} | undefined>;
|
|
496
|
+
cancelEdit: () => Promise<boolean>;
|
|
497
|
+
updateEditingData: (data: DataRecord) => boolean;
|
|
498
|
+
resetEditingState: () => boolean;
|
|
499
|
+
isEditingRow: (rowKey: DataTableRowKey) => boolean;
|
|
500
|
+
getEditingRowData: (rowKey: DataTableRowKey) => any;
|
|
501
|
+
invalidate: () => void;
|
|
502
|
+
};
|
|
503
|
+
};
|
|
504
|
+
expandState: UseTableExpandReturn<DataRecord, DataRecord>;
|
|
505
|
+
dynamicRowsState: DynamicRowsReturn<DataRecord>;
|
|
506
|
+
stateManager: {
|
|
507
|
+
edit: {
|
|
508
|
+
/** 开始编辑 */start(rowKey: DataTableRowKey, columnKey?: string): void; /** 取消编辑 */
|
|
509
|
+
cancel(): void; /** 保存编辑 */
|
|
510
|
+
save(): Promise<void>; /** 是否正在编辑 */
|
|
511
|
+
isEditing(rowKey: DataTableRowKey, columnKey?: string): boolean; /** 获取当前编辑数据 */
|
|
512
|
+
getEditingData(): DataRecord | null | undefined;
|
|
513
|
+
};
|
|
514
|
+
expand: {
|
|
515
|
+
/** 展开行 */row(rowKey: DataTableRowKey): Promise<void>; /** 折叠行 */
|
|
516
|
+
collapse(rowKey: DataTableRowKey): void; /** 展开折叠切换 */
|
|
517
|
+
toggle(rowKey: DataTableRowKey): Promise<void>; /** 展开所有行 */
|
|
518
|
+
all(): Promise<void>; /** 折叠所有行 */
|
|
519
|
+
collapseAll(): void; /** 检查行是否已展开 */
|
|
520
|
+
isExpanded(rowKey: DataTableRowKey): boolean;
|
|
521
|
+
};
|
|
522
|
+
selection: {
|
|
523
|
+
/** 选择指定行 */select(rowKey: DataTableRowKey): void; /** 取消选择指定行 */
|
|
524
|
+
unselect(rowKey: DataTableRowKey): void; /** 选择所有行 */
|
|
525
|
+
all(): void; /** 清除所有行选择 */
|
|
526
|
+
clear(): void; /** 检查行是否已选择 */
|
|
527
|
+
isSelected(rowKey: DataTableRowKey): boolean; /** 获取所有已选择的行数据 */
|
|
528
|
+
getSelected(): DataRecord[];
|
|
529
|
+
};
|
|
530
|
+
childSelection: {
|
|
531
|
+
/** 选择指定父行下的子行 */select(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 取消选择指定父行下的子行 */
|
|
532
|
+
unselect(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 选择指定父行下的所有子行 */
|
|
533
|
+
selectAll(parentKey: DataTableRowKey): void; /** 清除指定父行下的所有子行选择 */
|
|
534
|
+
clear(parentKey: DataTableRowKey): void; /** 获取指定父行下所有已选择的子行数据 */
|
|
535
|
+
getSelected(parentKey: DataTableRowKey): DataRecord[];
|
|
536
|
+
};
|
|
537
|
+
dynamicRows: {
|
|
538
|
+
/** 添加行 */add(): void; /** 插入行 */
|
|
539
|
+
insert(): void; /** 删除行 */
|
|
540
|
+
delete(): void; /** 复制行 */
|
|
541
|
+
copy(): void; /** 上移动态行 */
|
|
542
|
+
moveUp(): void; /** 下移动态行 */
|
|
543
|
+
moveDown(): void; /** 清空动态行数据 */
|
|
544
|
+
clearSelection(): void; /** 获取当前选中的动态行数据 */
|
|
545
|
+
getSelected(): DataRecord | null; /** 打印表格 */
|
|
546
|
+
print(elementRef?: HTMLElement): Promise<void>; /** 导出表格数据 */
|
|
547
|
+
download(elementRef?: HTMLElement, filename?: string): Promise<void>;
|
|
548
|
+
}; /** 清除所有选择 */
|
|
549
|
+
clearAllSelections(): void;
|
|
550
|
+
};
|
|
551
|
+
expandedKeys: vue.ComputedRef<DataTableRowKey[]>;
|
|
552
|
+
checkedKeys: vue.ComputedRef<DataTableRowKey[]>;
|
|
553
|
+
eventHandlers: EventHandlers;
|
|
554
|
+
};
|
|
555
|
+
//#endregion
|
|
556
|
+
//#region src/components/C_Table/composables/useTableExpand.d.ts
|
|
557
|
+
/**
|
|
558
|
+
*
|
|
559
|
+
*/
|
|
560
|
+
declare function useTableExpand<T extends object = DataRecord, C = DataRecord>(options: UseTableExpandOptions<T, C>): UseTableExpandReturn<T, C>;
|
|
561
|
+
//#endregion
|
|
562
|
+
//#region src/components/C_Table/composables/useTableActions.d.ts
|
|
563
|
+
/**
|
|
564
|
+
* 表格操作Hook
|
|
565
|
+
*/
|
|
566
|
+
declare function useTableActions<T extends object = DataRecord>(options: UseTableActionsOptions<T>): UseTableActionsReturn<T>;
|
|
567
|
+
//#endregion
|
|
568
|
+
//#region src/components/C_Table/composables/usePagination.d.ts
|
|
569
|
+
interface UsePaginationOptions<T extends object = DataRecord> {
|
|
570
|
+
/** 数据源 - 支持函数、Ref 或 ComputedRef */
|
|
571
|
+
data: (() => T[]) | Ref<T[]> | ComputedRef<T[]>;
|
|
572
|
+
/** 分页配置 */
|
|
573
|
+
config: Ref<PaginationConfig | null> | ComputedRef<PaginationConfig | null>;
|
|
574
|
+
/** 事件触发器 */
|
|
575
|
+
emit?: (event: 'pagination-change', page: number, pageSize: number) => void;
|
|
576
|
+
}
|
|
577
|
+
interface UsePaginationReturn<T extends object = DataRecord> {
|
|
578
|
+
currentPage: Ref<number>;
|
|
579
|
+
currentPageSize: Ref<number>;
|
|
580
|
+
paginatedData: ComputedRef<T[]>;
|
|
581
|
+
paginationConfig: ComputedRef<PaginationProps | null>;
|
|
582
|
+
handlePageChange: (page: number) => void;
|
|
583
|
+
handlePageSizeChange: (pageSize: number) => void;
|
|
584
|
+
resetToFirstPage: () => void;
|
|
585
|
+
getTotalPages: () => number;
|
|
586
|
+
}
|
|
587
|
+
/** Local and remote pagination with stable controlled-state synchronization. */
|
|
588
|
+
declare function usePagination<T extends object = DataRecord>(options: UsePaginationOptions<T>): UsePaginationReturn<T>;
|
|
589
|
+
//#endregion
|
|
590
|
+
//#region src/components/C_Table/composables/useCellEdit.d.ts
|
|
591
|
+
/**
|
|
592
|
+
* 单元格编辑配置选项
|
|
593
|
+
*/
|
|
594
|
+
interface CellEditOptions {
|
|
595
|
+
data: () => DataRecord[];
|
|
596
|
+
rowKey: (row: DataRecord) => DataTableRowKey;
|
|
597
|
+
onSave?: (rowData: DataRecord, rowIndex: number, columnKey: string, originalKey?: DataTableRowKey) => unknown;
|
|
598
|
+
/** 列配置(用于提取校验规则) */
|
|
599
|
+
columns?: () => TableColumn[];
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* 可编辑单元格组合函数,提供表格单元格的编辑功能
|
|
603
|
+
*/
|
|
604
|
+
declare function useCellEdit(options: CellEditOptions): {
|
|
605
|
+
editingCell: vue.Ref<{
|
|
606
|
+
rowKey: DataTableRowKey | null;
|
|
607
|
+
columnKey: string | null;
|
|
608
|
+
}, {
|
|
609
|
+
rowKey: DataTableRowKey | null;
|
|
610
|
+
columnKey: string | null;
|
|
611
|
+
} | {
|
|
612
|
+
rowKey: DataTableRowKey | null;
|
|
613
|
+
columnKey: string | null;
|
|
614
|
+
}>;
|
|
615
|
+
editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
|
|
616
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
617
|
+
isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
|
|
618
|
+
startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
|
|
619
|
+
saveEditCell: () => Promise<{
|
|
620
|
+
updatedData: {
|
|
621
|
+
[x: string]: unknown;
|
|
622
|
+
};
|
|
623
|
+
rowIndex: number;
|
|
624
|
+
columnKey: string;
|
|
625
|
+
} | undefined>;
|
|
626
|
+
cancelEditCell: () => void;
|
|
627
|
+
validateCell: () => Promise<boolean>;
|
|
628
|
+
cellValidationError: vue.Ref<string | null, string | null>;
|
|
629
|
+
getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
|
|
630
|
+
updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
|
|
631
|
+
findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
|
|
632
|
+
invalidate: () => void;
|
|
633
|
+
};
|
|
634
|
+
//#endregion
|
|
635
|
+
//#region node_modules/@vue/shared/dist/shared.d.ts
|
|
636
|
+
type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
|
|
637
|
+
//#endregion
|
|
638
|
+
//#region src/components/C_Table/composables/useModalEdit.d.ts
|
|
639
|
+
interface ModalEditOptions<T extends object = DataRecord> {
|
|
640
|
+
data: () => T[];
|
|
641
|
+
rowKey: (row: T) => DataTableRowKey;
|
|
642
|
+
onSave?: (editingData: T, rowIndex: number, originalKey?: DataTableRowKey) => unknown;
|
|
643
|
+
onCancel?: (originalData: T, rowIndex: number) => unknown;
|
|
644
|
+
}
|
|
645
|
+
/** Modal edit state with lossless snapshots and retry-safe async saves. */
|
|
646
|
+
declare function useModalEdit<T extends object = DataRecord>(options: ModalEditOptions<T>): {
|
|
647
|
+
isModalVisible: vue.Ref<boolean, boolean>;
|
|
648
|
+
isSaving: vue.Ref<boolean, boolean>;
|
|
649
|
+
editingData: [T] extends [vue.Ref<any, any>] ? IfAny<T, vue.Ref<T, T>, T> : vue.Ref<vue.UnwrapRef<T>, T | vue.UnwrapRef<T>>;
|
|
650
|
+
editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
|
|
651
|
+
editingRowIndex: vue.ComputedRef<number>;
|
|
652
|
+
startEdit: (rowKey: DataTableRowKey, sourceData?: T) => boolean;
|
|
653
|
+
saveEdit: (formData?: T) => Promise<{
|
|
654
|
+
updatedData: any;
|
|
655
|
+
rowIndex: number;
|
|
656
|
+
} | undefined>;
|
|
657
|
+
cancelEdit: () => Promise<boolean>;
|
|
658
|
+
updateEditingData: (data: T) => boolean;
|
|
659
|
+
resetEditingState: () => boolean;
|
|
660
|
+
isEditingRow: (rowKey: DataTableRowKey) => boolean;
|
|
661
|
+
getEditingRowData: (rowKey: DataTableRowKey) => any;
|
|
662
|
+
invalidate: () => void;
|
|
663
|
+
};
|
|
664
|
+
//#endregion
|
|
665
|
+
//#region src/components/C_Table/composables/useTableQuery.d.ts
|
|
666
|
+
interface TableQueryContext<Q> {
|
|
667
|
+
page: number;
|
|
668
|
+
pageSize: number;
|
|
669
|
+
query: Readonly<Q>;
|
|
670
|
+
signal: AbortSignal;
|
|
671
|
+
}
|
|
672
|
+
interface TableQueryResult<T extends object> {
|
|
673
|
+
data: readonly T[];
|
|
674
|
+
total: number;
|
|
675
|
+
}
|
|
676
|
+
interface UseTableQueryOptions<T extends object, Q extends object> {
|
|
677
|
+
request: (context: TableQueryContext<Q>) => Promise<TableQueryResult<T>>;
|
|
678
|
+
initialQuery: Q;
|
|
679
|
+
columns?: MaybeRefOrGetter<TableColumn<T>[] | undefined>;
|
|
680
|
+
config?: MaybeRefOrGetter<TableConfig<T> | undefined>;
|
|
681
|
+
rowKey?: TableRowKey<T>;
|
|
682
|
+
initialPage?: number;
|
|
683
|
+
pageSize?: number;
|
|
684
|
+
immediate?: boolean;
|
|
685
|
+
onError?: (error: unknown) => void;
|
|
686
|
+
onSuccess?: (result: TableQueryResult<T>) => void;
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Remote table controller with latest-request-wins cancellation and ready-to-bind props.
|
|
690
|
+
*/
|
|
691
|
+
declare function useTableQuery<T extends object, Q extends object = Record<string, unknown>>(options: UseTableQueryOptions<T, Q>): {
|
|
692
|
+
data: vue.ShallowRef<T[], T[]>;
|
|
693
|
+
loading: vue.Ref<boolean, boolean>;
|
|
694
|
+
error: vue.ShallowRef<unknown, unknown>;
|
|
695
|
+
total: vue.Ref<number, number>;
|
|
696
|
+
page: vue.Ref<number, number>;
|
|
697
|
+
pageSize: vue.Ref<number, number>;
|
|
698
|
+
query: vue.Ref<any, any> extends Q ? Q extends Q & vue.Ref<any, any> ? IfAny<Q, vue.ShallowRef<Q, Q>, Q> : vue.ShallowRef<Q, Q> : vue.ShallowRef<Q, Q>;
|
|
699
|
+
tableProps: vue.ComputedRef<{
|
|
700
|
+
data: T[];
|
|
701
|
+
loading: boolean;
|
|
702
|
+
columns: TableColumn<T>[] | undefined;
|
|
703
|
+
rowKey: TableRowKey<T>;
|
|
704
|
+
config: {
|
|
705
|
+
pagination: {
|
|
706
|
+
enabled: true;
|
|
707
|
+
remote: true;
|
|
708
|
+
page: number;
|
|
709
|
+
pageSize: number;
|
|
710
|
+
total: number;
|
|
711
|
+
showSizePicker?: boolean;
|
|
712
|
+
showQuickJumper?: boolean;
|
|
713
|
+
pageSizes?: number[];
|
|
714
|
+
simple?: boolean;
|
|
715
|
+
size?: "small" | "medium" | "large";
|
|
716
|
+
};
|
|
717
|
+
density?: ComponentDensity;
|
|
718
|
+
feedback?: ComponentFeedback;
|
|
719
|
+
locale?: ComponentLocale;
|
|
720
|
+
validateRowKeys?: boolean;
|
|
721
|
+
edit?: boolean | EditMode | EditConfig<T> | undefined;
|
|
722
|
+
actions?: SimpleTableActions<T> | undefined;
|
|
723
|
+
expand?: boolean | ExpandConfig<T, unknown> | undefined;
|
|
724
|
+
selection?: boolean | SelectionConfig<T, unknown> | undefined;
|
|
725
|
+
dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
|
|
726
|
+
toolbar?: ToolbarConfig;
|
|
727
|
+
display?: DisplayConfig;
|
|
728
|
+
virtualScroll?: VirtualScrollConfig | boolean;
|
|
729
|
+
summary?: SummaryConfig<T> | undefined;
|
|
730
|
+
columnDrag?: ColumnDragConfig | boolean;
|
|
731
|
+
tree?: TreeConfig | boolean;
|
|
732
|
+
rowDrag?: RowDragConfig | boolean;
|
|
733
|
+
crossPageSelection?: CrossPageSelectionConfig | boolean;
|
|
734
|
+
export?: ExportConfig;
|
|
735
|
+
persistKey?: string;
|
|
736
|
+
formatterConfig?: FormatterConfig;
|
|
737
|
+
error?: ErrorConfig;
|
|
738
|
+
batchActions?: BatchActionsConfig<T> | undefined;
|
|
739
|
+
};
|
|
740
|
+
}>;
|
|
741
|
+
execute: () => Promise<boolean>;
|
|
742
|
+
reload: () => Promise<boolean>;
|
|
743
|
+
setQuery: (next: Partial<Q> | ((current: Readonly<Q>) => Q), reload?: boolean) => Promise<boolean>;
|
|
744
|
+
resetQuery: (reload?: boolean) => Promise<boolean>;
|
|
745
|
+
handlePaginationChange: (nextPage: number, nextPageSize: number) => Promise<boolean>;
|
|
746
|
+
bindings: vue.ComputedRef<{
|
|
747
|
+
onPaginationChange: (nextPage: number, nextPageSize: number) => Promise<boolean>;
|
|
748
|
+
data: T[];
|
|
749
|
+
loading: boolean;
|
|
750
|
+
columns: TableColumn<T>[] | undefined;
|
|
751
|
+
rowKey: TableRowKey<T>;
|
|
752
|
+
config: {
|
|
753
|
+
pagination: {
|
|
754
|
+
enabled: true;
|
|
755
|
+
remote: true;
|
|
756
|
+
page: number;
|
|
757
|
+
pageSize: number;
|
|
758
|
+
total: number;
|
|
759
|
+
showSizePicker?: boolean;
|
|
760
|
+
showQuickJumper?: boolean;
|
|
761
|
+
pageSizes?: number[];
|
|
762
|
+
simple?: boolean;
|
|
763
|
+
size?: "small" | "medium" | "large";
|
|
764
|
+
};
|
|
765
|
+
density?: ComponentDensity;
|
|
766
|
+
feedback?: ComponentFeedback;
|
|
767
|
+
locale?: ComponentLocale;
|
|
768
|
+
validateRowKeys?: boolean;
|
|
769
|
+
edit?: boolean | EditMode | EditConfig<T> | undefined;
|
|
770
|
+
actions?: SimpleTableActions<T> | undefined;
|
|
771
|
+
expand?: boolean | ExpandConfig<T, unknown> | undefined;
|
|
772
|
+
selection?: boolean | SelectionConfig<T, unknown> | undefined;
|
|
773
|
+
dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
|
|
774
|
+
toolbar?: ToolbarConfig;
|
|
775
|
+
display?: DisplayConfig;
|
|
776
|
+
virtualScroll?: VirtualScrollConfig | boolean;
|
|
777
|
+
summary?: SummaryConfig<T> | undefined;
|
|
778
|
+
columnDrag?: ColumnDragConfig | boolean;
|
|
779
|
+
tree?: TreeConfig | boolean;
|
|
780
|
+
rowDrag?: RowDragConfig | boolean;
|
|
781
|
+
crossPageSelection?: CrossPageSelectionConfig | boolean;
|
|
782
|
+
export?: ExportConfig;
|
|
783
|
+
persistKey?: string;
|
|
784
|
+
formatterConfig?: FormatterConfig;
|
|
785
|
+
error?: ErrorConfig;
|
|
786
|
+
batchActions?: BatchActionsConfig<T> | undefined;
|
|
787
|
+
};
|
|
788
|
+
}>;
|
|
789
|
+
cancel: () => void;
|
|
790
|
+
};
|
|
791
|
+
//#endregion
|
|
792
|
+
//#region src/components/C_Tree/types.d.ts
|
|
793
|
+
type TreeKey = string | number;
|
|
794
|
+
type TreeMode = 'menu' | 'file' | 'org' | 'custom';
|
|
795
|
+
type StatusType = 'success' | 'warning' | 'error' | 'info';
|
|
796
|
+
type ButtonType = 'primary' | 'info' | 'warning' | 'error' | 'default';
|
|
797
|
+
/** Custom fields are allowed; keyField/labelField select the actual identity and label. */
|
|
798
|
+
interface TreeOption$1 extends TreeOption {
|
|
799
|
+
id?: TreeKey;
|
|
800
|
+
children?: TreeOption$1[];
|
|
801
|
+
}
|
|
802
|
+
interface TreeNodeData extends TreeOption$1 {
|
|
803
|
+
name?: string;
|
|
804
|
+
type?: string;
|
|
805
|
+
children?: TreeNodeData[];
|
|
806
|
+
}
|
|
807
|
+
interface DropInfo<T extends object = TreeOption$1> {
|
|
808
|
+
node: T;
|
|
809
|
+
dragNode: T;
|
|
810
|
+
dropPosition: 'before' | 'inside' | 'after';
|
|
811
|
+
event: DragEvent;
|
|
812
|
+
}
|
|
813
|
+
interface StatusConfig {
|
|
814
|
+
field: string;
|
|
815
|
+
values: Record<string | number, {
|
|
816
|
+
text: string;
|
|
817
|
+
type: StatusType;
|
|
818
|
+
}>;
|
|
819
|
+
}
|
|
820
|
+
interface ActionConfig<T extends object = TreeNodeData> {
|
|
821
|
+
key: string;
|
|
822
|
+
text: string;
|
|
823
|
+
icon: string;
|
|
824
|
+
type?: ButtonType;
|
|
825
|
+
show?: (node: T) => boolean;
|
|
826
|
+
confirm?: string;
|
|
827
|
+
}
|
|
828
|
+
interface IconConfig {
|
|
829
|
+
default?: string;
|
|
830
|
+
typeMap?: Record<string, string>;
|
|
831
|
+
colorMap?: Record<string, string>;
|
|
832
|
+
}
|
|
833
|
+
type MaybeArray<T> = T | T[];
|
|
834
|
+
type TreeUpdateHandler<T extends object, A extends TreeUpdateMeta['action']> = (keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T, A>) => void;
|
|
835
|
+
type TreeDragHandler<T extends object> = (info: {
|
|
836
|
+
node: T;
|
|
837
|
+
event: DragEvent;
|
|
838
|
+
}) => void;
|
|
839
|
+
/** 原生功能保持透传,涉及节点的回调由数据源推导业务类型。 */
|
|
840
|
+
type TreeNativeProps<T extends object = TreeNodeData> = Omit<TreeProps, 'data' | 'filter' | 'onLoad' | 'getChildren' | 'renderLabel' | 'renderPrefix' | 'renderSuffix' | 'renderSwitcherIcon' | 'nodeProps' | 'allowDrop' | 'checkOnClick' | 'overrideDefaultNodeClickBehavior' | 'onDrop' | 'onDragenter' | 'onDragleave' | 'onDragend' | 'onDragstart' | 'onDragover' | 'onUpdateExpandedKeys' | 'onUpdate:expandedKeys' | 'onUpdateSelectedKeys' | 'onUpdate:selectedKeys' | 'onUpdateCheckedKeys' | 'onUpdate:checkedKeys' | 'onUpdateIndeterminateKeys' | 'onUpdate:indeterminateKeys'> & {
|
|
841
|
+
filter?: (pattern: string, node: T) => boolean;
|
|
842
|
+
onLoad?: (node: T) => Promise<unknown>;
|
|
843
|
+
getChildren?: (node: T) => unknown;
|
|
844
|
+
renderLabel?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
845
|
+
renderPrefix?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
846
|
+
renderSuffix?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
847
|
+
renderSwitcherIcon?: (context: {
|
|
848
|
+
expanded: boolean;
|
|
849
|
+
selected: boolean;
|
|
850
|
+
option: T;
|
|
851
|
+
}) => VNodeChild;
|
|
852
|
+
nodeProps?: (context: {
|
|
853
|
+
option: T;
|
|
854
|
+
}) => ReturnType<NonNullable<TreeProps['nodeProps']>>;
|
|
855
|
+
allowDrop?: (info: {
|
|
856
|
+
dropPosition: DropInfo['dropPosition'];
|
|
857
|
+
node: T;
|
|
858
|
+
phase: 'drag' | 'drop';
|
|
859
|
+
}) => boolean;
|
|
860
|
+
checkOnClick?: boolean | ((node: T) => boolean);
|
|
861
|
+
overrideDefaultNodeClickBehavior?: (info: {
|
|
862
|
+
option: T;
|
|
863
|
+
}) => ReturnType<NonNullable<TreeProps['overrideDefaultNodeClickBehavior']>>;
|
|
864
|
+
onDrop?: MaybeArray<(info: DropInfo<T>) => void>;
|
|
865
|
+
onDragenter?: MaybeArray<TreeDragHandler<T>>;
|
|
866
|
+
onDragleave?: MaybeArray<TreeDragHandler<T>>;
|
|
867
|
+
onDragend?: MaybeArray<TreeDragHandler<T>>;
|
|
868
|
+
onDragstart?: MaybeArray<TreeDragHandler<T>>;
|
|
869
|
+
onDragover?: MaybeArray<TreeDragHandler<T>>;
|
|
870
|
+
onUpdateExpandedKeys?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
|
|
871
|
+
'onUpdate:expandedKeys'?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
|
|
872
|
+
onUpdateSelectedKeys?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
|
|
873
|
+
'onUpdate:selectedKeys'?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
|
|
874
|
+
onUpdateCheckedKeys?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
|
|
875
|
+
'onUpdate:checkedKeys'?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
|
|
876
|
+
onUpdateIndeterminateKeys?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
|
|
877
|
+
'onUpdate:indeterminateKeys'?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
|
|
878
|
+
};
|
|
879
|
+
interface TreeRenderContext<T extends object = TreeOption$1> {
|
|
880
|
+
option: T;
|
|
881
|
+
checked: boolean;
|
|
882
|
+
selected: boolean;
|
|
883
|
+
}
|
|
884
|
+
interface TreeUpdateMeta<T extends object = TreeOption$1, A extends 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter' = 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter'> {
|
|
885
|
+
node: T | null;
|
|
886
|
+
action: A;
|
|
887
|
+
}
|
|
888
|
+
interface TreeProps$1<T extends object = TreeNodeData> {
|
|
889
|
+
/** Business interfaces need no string index signature; fields are selected by config. */
|
|
890
|
+
data: readonly T[];
|
|
891
|
+
mode?: TreeMode;
|
|
892
|
+
/** Native tree capabilities; explicit wrapper props have priority. */
|
|
893
|
+
treeProps?: TreeNativeProps<T>;
|
|
894
|
+
density?: ComponentDensity;
|
|
895
|
+
keyField?: string;
|
|
896
|
+
labelField?: string;
|
|
897
|
+
childrenField?: string;
|
|
898
|
+
searchPattern?: string;
|
|
899
|
+
searchable?: boolean;
|
|
900
|
+
searchPlaceholder?: string;
|
|
901
|
+
draggable?: boolean;
|
|
902
|
+
showLine?: boolean;
|
|
903
|
+
showToolbar?: boolean;
|
|
904
|
+
addable?: boolean;
|
|
905
|
+
addText?: string;
|
|
906
|
+
refreshable?: boolean;
|
|
907
|
+
iconField?: string;
|
|
908
|
+
iconConfig?: IconConfig;
|
|
909
|
+
statusConfigs?: StatusConfig[];
|
|
910
|
+
actions?: ActionConfig<T>[];
|
|
911
|
+
defaultExpandAll?: boolean;
|
|
912
|
+
defaultExpandedKeys?: TreeKey[];
|
|
913
|
+
defaultSelectedKeys?: TreeKey[];
|
|
914
|
+
defaultCheckedKeys?: TreeKey[];
|
|
915
|
+
expandedKeys?: TreeKey[];
|
|
916
|
+
selectedKeys?: TreeKey[];
|
|
917
|
+
checkedKeys?: TreeKey[];
|
|
918
|
+
}
|
|
919
|
+
interface TreeExpose<T extends object = TreeNodeData> {
|
|
920
|
+
expandAll: () => void;
|
|
921
|
+
collapseAll: () => void;
|
|
922
|
+
selectNode: (key: TreeKey) => void;
|
|
923
|
+
clearSelection: () => void;
|
|
924
|
+
setCheckedKeys: (keys: TreeKey[]) => void;
|
|
925
|
+
clearChecked: () => void;
|
|
926
|
+
getSelectedNode: () => T | null;
|
|
927
|
+
getCheckedData: () => {
|
|
928
|
+
keys: TreeKey[];
|
|
929
|
+
options: Array<T | null>;
|
|
930
|
+
};
|
|
931
|
+
getIndeterminateData: () => {
|
|
932
|
+
keys: TreeKey[];
|
|
933
|
+
options: Array<T | null>;
|
|
934
|
+
};
|
|
935
|
+
scrollTo: TreeInst['scrollTo'];
|
|
936
|
+
/** Vue 公开实例会解包顶层 Ref;这些属性直接读取数组。 */
|
|
937
|
+
expandedKeys: TreeKey[];
|
|
938
|
+
selectedKeys: TreeKey[];
|
|
939
|
+
checkedKeys: TreeKey[];
|
|
940
|
+
}
|
|
941
|
+
interface TreeEmits<T extends object = TreeNodeData> {
|
|
942
|
+
'update:searchPattern': [pattern: string];
|
|
943
|
+
'update:expandedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
|
|
944
|
+
'update:selectedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
|
|
945
|
+
'update:checkedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
|
|
946
|
+
'node-select': [node: T | null, selectedKeys: TreeKey[]];
|
|
947
|
+
'node-action': [action: string, node: T];
|
|
948
|
+
'node-drop': [info: DropInfo<T>];
|
|
949
|
+
'load-error': [error: unknown, node: T];
|
|
950
|
+
add: [parentNode?: T];
|
|
951
|
+
refresh: [];
|
|
952
|
+
}
|
|
953
|
+
interface TreeSlots<T extends object = TreeOption$1> {
|
|
954
|
+
'toolbar-actions'?: () => VNodeChild;
|
|
955
|
+
label?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
956
|
+
prefix?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
957
|
+
suffix?: (context: TreeRenderContext<T>) => VNodeChild;
|
|
958
|
+
empty?: () => VNodeChild;
|
|
959
|
+
}
|
|
960
|
+
//#endregion
|
|
961
|
+
//#region src/components/C_Tree/index.vue.d.ts
|
|
962
|
+
declare const __VLS_export$1: <T extends object = TreeNodeData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$1<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
963
|
+
props: vue.PublicProps & __VLS_PrettifyLocal$1<TreeProps$1<T> & {
|
|
964
|
+
onRefresh?: (() => any) | undefined;
|
|
965
|
+
onAdd?: ((parentNode?: T | undefined) => any) | undefined;
|
|
966
|
+
"onLoad-error"?: ((error: unknown, node: T) => any) | undefined;
|
|
967
|
+
"onUpdate:expandedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
|
|
968
|
+
"onNode-drop"?: ((info: DropInfo<T>) => any) | undefined;
|
|
969
|
+
"onUpdate:searchPattern"?: ((pattern: string) => any) | undefined;
|
|
970
|
+
"onUpdate:selectedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
|
|
971
|
+
"onUpdate:checkedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
|
|
972
|
+
"onNode-select"?: ((node: T | null, selectedKeys: TreeKey[]) => any) | undefined;
|
|
973
|
+
"onNode-action"?: ((action: string, node: T) => any) | undefined;
|
|
974
|
+
}> & (typeof globalThis extends {
|
|
975
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
976
|
+
} ? P : {});
|
|
977
|
+
expose: (exposed: vue.ShallowUnwrapRef<Omit<TreeExpose<T>, "selectedKeys" | "expandedKeys" | "checkedKeys"> & {
|
|
978
|
+
expandedKeys: vue.Ref<TreeKey[]>;
|
|
979
|
+
selectedKeys: vue.Ref<TreeKey[]>;
|
|
980
|
+
checkedKeys: vue.Ref<TreeKey[]>;
|
|
981
|
+
}>) => void;
|
|
982
|
+
attrs: any;
|
|
983
|
+
slots: TreeSlots<T>;
|
|
984
|
+
emit: ((evt: "refresh") => void) & ((evt: "add", parentNode?: T | undefined) => void) & ((evt: "load-error", error: unknown, node: T) => void) & ((evt: "update:expandedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "node-drop", info: DropInfo<T>) => void) & ((evt: "update:searchPattern", pattern: string) => void) & ((evt: "update:selectedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "update:checkedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "node-select", node: T | null, selectedKeys: TreeKey[]) => void) & ((evt: "node-action", action: string, node: T) => void);
|
|
985
|
+
}>) => vue.VNode & {
|
|
986
|
+
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
987
|
+
};
|
|
988
|
+
declare const _default$1: typeof __VLS_export$1;
|
|
989
|
+
type __VLS_PrettifyLocal$1<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
990
|
+
//#endregion
|
|
991
|
+
//#region src/components/C_Tree/data.d.ts
|
|
992
|
+
declare const presetConfigs: Record<TreeMode, Partial<Omit<TreeProps$1, 'data' | 'treeProps' | 'actions'>> & {
|
|
993
|
+
actions?: Omit<ActionConfig, 'show'>[];
|
|
994
|
+
}>;
|
|
995
|
+
//#endregion
|
|
996
|
+
//#region src/components/C_Tree/composables/useTreeOperations.d.ts
|
|
997
|
+
type EmitFn$1<T extends object> = <E extends keyof TreeEmits<T>>(event: E, ...args: TreeEmits<T>[E]) => void;
|
|
998
|
+
/** State coordination only; checking, filtering, keyboard and loading stay native. */
|
|
999
|
+
declare function useTreeOperations<T extends object = TreeNodeData>(props: TreeProps$1<T>, emit: EmitFn$1<T>, slots?: TreeSlots<T>): {
|
|
1000
|
+
internalSearchPattern: Ref<string, string>;
|
|
1001
|
+
expandedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
|
|
1002
|
+
selectedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
|
|
1003
|
+
checkedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
|
|
1004
|
+
isAllExpanded: vue.ComputedRef<boolean>;
|
|
1005
|
+
treeData: vue.ComputedRef<readonly T[]>;
|
|
1006
|
+
currentSearchPattern: vue.WritableComputedRef<string, string>;
|
|
1007
|
+
renderPrefix: (info: TreeRenderContext<T>) => any;
|
|
1008
|
+
renderLabel: (info: TreeRenderContext<T>) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
1009
|
+
[key: string]: any;
|
|
1010
|
+
}> | vue.VNodeArrayChildren | null;
|
|
1011
|
+
renderSuffix: (info: TreeRenderContext<T>) => any;
|
|
1012
|
+
treeBindings: vue.ComputedRef<TreeProps>;
|
|
1013
|
+
treeRef: vue.ShallowRef<TreeInst | undefined, TreeInst | undefined>;
|
|
1014
|
+
density: vue.ComputedRef<ResolvedComponentDensity>;
|
|
1015
|
+
toggleExpandAll: () => void;
|
|
1016
|
+
handleExpandedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
|
|
1017
|
+
handleSelectedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
|
|
1018
|
+
handleCheckedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
|
|
1019
|
+
handleDrop: (info: DropInfo<T>) => void;
|
|
1020
|
+
handleAdd: () => void;
|
|
1021
|
+
handleRefresh: () => void;
|
|
1022
|
+
expose: Omit<TreeExpose<T>, "selectedKeys" | "expandedKeys" | "checkedKeys"> & {
|
|
1023
|
+
expandedKeys: Ref<TreeKey[]>;
|
|
1024
|
+
selectedKeys: Ref<TreeKey[]>;
|
|
1025
|
+
checkedKeys: Ref<TreeKey[]>;
|
|
1026
|
+
};
|
|
1027
|
+
};
|
|
1028
|
+
//#endregion
|
|
1029
|
+
//#region src/components/C_FormModal/types.d.ts
|
|
1030
|
+
type FormModalMode = 'create' | 'edit';
|
|
1031
|
+
/**
|
|
1032
|
+
* Structural editor contract. It intentionally does not depend on request-core,
|
|
1033
|
+
* so any headless CRUD implementation can drive the modal.
|
|
1034
|
+
*/
|
|
1035
|
+
interface FormModalEditor<T extends object = FormRecord> {
|
|
1036
|
+
visible: Ref<boolean>;
|
|
1037
|
+
mode: Ref<FormModalMode>;
|
|
1038
|
+
model: Ref<T | null>;
|
|
1039
|
+
title: Ref<string>;
|
|
1040
|
+
loading: Ref<boolean> | ComputedRef<boolean>;
|
|
1041
|
+
setModel(model: T): void;
|
|
1042
|
+
close(): void;
|
|
1043
|
+
submit(model?: T): Promise<boolean>;
|
|
1044
|
+
}
|
|
1045
|
+
interface FormModalProps<T extends object = FormRecord> {
|
|
1046
|
+
editor: FormModalEditor<T>;
|
|
1047
|
+
options: FormOption<T>[];
|
|
1048
|
+
config?: FormConfig<T>;
|
|
1049
|
+
width?: number | string;
|
|
1050
|
+
createText?: string;
|
|
1051
|
+
saveText?: string;
|
|
1052
|
+
cancelText?: string;
|
|
1053
|
+
closable?: boolean;
|
|
1054
|
+
maskClosable?: boolean;
|
|
1055
|
+
closeOnEsc?: boolean;
|
|
1056
|
+
}
|
|
1057
|
+
interface FormModalEmits<T extends object = FormRecord> {
|
|
1058
|
+
submit: [payload: SubmitEventPayload<T>, saved: boolean];
|
|
1059
|
+
close: [];
|
|
1060
|
+
}
|
|
1061
|
+
//#endregion
|
|
1062
|
+
//#region src/components/C_FormModal/index.vue.d.ts
|
|
1063
|
+
declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
1064
|
+
props: vue.PublicProps & __VLS_PrettifyLocal<FormModalProps<T> & {
|
|
1065
|
+
onSubmit?: ((payload: SubmitEventPayload<T>, saved: boolean) => any) | undefined;
|
|
1066
|
+
onClose?: (() => any) | undefined;
|
|
1067
|
+
}> & (typeof globalThis extends {
|
|
1068
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
1069
|
+
} ? P : {});
|
|
1070
|
+
expose: (exposed: {}) => void;
|
|
1071
|
+
attrs: any;
|
|
1072
|
+
slots: {
|
|
1073
|
+
[x: string]: ((props: any) => any) | undefined;
|
|
1074
|
+
};
|
|
1075
|
+
emit: ((evt: "submit", payload: SubmitEventPayload<T>, saved: boolean) => void) & ((evt: "close") => void);
|
|
1076
|
+
}>) => vue.VNode & {
|
|
1077
|
+
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
1078
|
+
};
|
|
1079
|
+
declare const _default: typeof __VLS_export;
|
|
1080
|
+
type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
|
|
1081
|
+
//#endregion
|
|
1082
|
+
//#region src/utils/storage.d.ts
|
|
1083
|
+
/** SSR-safe localStorage helpers. Storage failures never break component state. */
|
|
1084
|
+
/** Store a value. Returns false when storage is unavailable or full. */
|
|
1085
|
+
declare function setItem<T>(key: string, value: T): boolean;
|
|
1086
|
+
/** Read and safely deserialize a value. */
|
|
1087
|
+
declare function getItem<T = unknown>(key: string): T | null;
|
|
1088
|
+
/** Remove one value. Returns whether the storage operation was available. */
|
|
1089
|
+
declare function removeItem(key: string): boolean;
|
|
1090
|
+
/**
|
|
1091
|
+
* Clear localStorage for backward compatibility.
|
|
1092
|
+
* Prefer `removeItem` in components so unrelated application data is preserved.
|
|
1093
|
+
*/
|
|
1094
|
+
declare function removeAllItem(): boolean;
|
|
1095
|
+
//#endregion
|
|
722
1096
|
//#region src/components/C_Form/composables/useFormState.d.ts
|
|
723
1097
|
type FormEmit = {
|
|
724
1098
|
(event: 'update:modelValue', model: FormModel): void;
|
|
@@ -733,7 +1107,8 @@ declare function useFormState(options: ComputedRef<FormOption[]>, config: Comput
|
|
|
733
1107
|
visibleOptions: ComputedRef<FormOption[]>;
|
|
734
1108
|
initialize: () => void;
|
|
735
1109
|
handleFieldChange: (field: string) => void;
|
|
736
|
-
setFormItemRef: (field: string, instance: FormItemInst | null) => void;
|
|
1110
|
+
setFormItemRef: (field: string, instance: FormItemInst | null) => void; /** 复用 Naive 表单项的实例引用;不把 DOM 查找扩散到 document。 */
|
|
1111
|
+
getFormItemElement: (field: string) => HTMLElement | null;
|
|
737
1112
|
validate: () => Promise<void>;
|
|
738
1113
|
validateField: (field: string | string[]) => Promise<void>;
|
|
739
1114
|
validateStep: (step: number | string) => Promise<boolean>;
|
|
@@ -758,6 +1133,8 @@ declare function useFormState(options: ComputedRef<FormOption[]>, config: Comput
|
|
|
758
1133
|
asyncOptionsCache: Ref<Record<string, OptionItem[]>, Record<string, OptionItem[]>>;
|
|
759
1134
|
asyncLoadingMap: Ref<Record<string, boolean>, Record<string, boolean>>;
|
|
760
1135
|
asyncErrorMap: Ref<Record<string, unknown>, Record<string, unknown>>;
|
|
1136
|
+
getDictionaryOptions: (key: string) => readonly DictionaryOption[];
|
|
1137
|
+
isDictionaryLoading: (key: string) => boolean;
|
|
761
1138
|
reloadOptions: (field?: string) => Promise<void>;
|
|
762
1139
|
};
|
|
763
1140
|
//#endregion
|
|
@@ -817,4 +1194,4 @@ type DynamicFormStateType = DynamicFormController;
|
|
|
817
1194
|
*/
|
|
818
1195
|
declare const DYNAMIC_FORM_STATE_KEY: unique symbol;
|
|
819
1196
|
//#endregion
|
|
820
|
-
export {
|
|
1197
|
+
export { HighlightAPI as $, TreeNativeProps as A, useTableQuery as B, IconConfig as C, TreeExpose as D, TreeEmits as E, TreeSlots as F, useTableExpand as G, useCellEdit as H, TreeUpdateMeta as I, useTableColumns as J, useTableManager as K, TableQueryContext as L, TreeOption$1 as M, TreeProps$1 as N, TreeKey as O, TreeRenderContext as P, _default$2 as Q, TableQueryResult as R, DropInfo as S, useComponentLocale as St, StatusType as T, usePagination as U, useModalEdit as V, useTableActions as W, defineTableConfig as X, defineTableColumns as Y, validateTableRowKeys as Z, useTreeOperations as _, createFormRendererRegistry as _t, UseFormDirtyReturn as a, UseCFormReturn as at, ActionConfig as b, useFormRenderer as bt, getItem as c, useCForm as ct, setItem as d, FORM_RENDERER_REGISTRY_KEY as dt, HighlightPluginOptions as et, _default as f, FormRenderer as ft, FormModalProps as g, UseFormRendererOptions as gt, FormModalMode as h, RendererProps as ht, useDynamicFormState as i, UseCFormOptions as it, TreeNodeData as j, TreeMode as k, removeAllItem as l, _default$3 as lt, FormModalEmits as m, FormRendererRegistry as mt, DynamicFormStateType as n, setupHighlight as nt, useFormDirty as o, defineFormConfig as ot, FormModalEditor as p, FormRendererContext as pt, useRowEdit as q, FIELD_TYPE_OPTIONS as r, useHighlight as rt, useFormState as s, defineFormOptions as st, DYNAMIC_FORM_STATE_KEY as t, createHighlight as tt, removeItem as u, ComponentMap as ut, presetConfigs as v, registerRenderer as vt, StatusConfig as w, ButtonType as x, useComponentFeedback as xt, _default$1 as y, unregisterRenderer as yt, UseTableQueryOptions as z };
|