@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.
Files changed (321) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +9 -5
  3. package/README_EN.md +9 -5
  4. package/dist/C_ActionBar.d.cts +2 -1
  5. package/dist/C_ActionBar.d.ts +2 -1
  6. package/dist/C_AntV2.cjs +3 -3
  7. package/dist/C_AntV2.js +3 -3
  8. package/dist/C_BatchResult.cjs +1 -0
  9. package/dist/C_BatchResult.css +32 -0
  10. package/dist/C_BatchResult.d.cts +2 -0
  11. package/dist/C_BatchResult.d.ts +2 -0
  12. package/dist/C_BatchResult.js +1 -0
  13. package/dist/C_BatchResult2.cjs +1 -0
  14. package/dist/C_BatchResult2.js +1 -0
  15. package/dist/C_Breadcrumb.d.cts +2 -2
  16. package/dist/C_Breadcrumb.d.ts +1 -1
  17. package/dist/C_Captcha.d.ts +2 -0
  18. package/dist/C_Cascade.d.cts +1 -1
  19. package/dist/C_Cascade.d.ts +1 -1
  20. package/dist/C_Chat.d.cts +1 -1
  21. package/dist/C_Chat.d.ts +1 -1
  22. package/dist/C_City.d.cts +1 -1
  23. package/dist/C_City.d.ts +1 -1
  24. package/dist/C_Code.d.cts +1 -1
  25. package/dist/C_Code.d.ts +1 -1
  26. package/dist/C_ContextMenu.d.cts +1 -1
  27. package/dist/C_ContextMenu.d.ts +1 -1
  28. package/dist/C_DataPicker.cjs +1 -0
  29. package/dist/C_DataPicker.css +54 -0
  30. package/dist/C_DataPicker.d.cts +2 -0
  31. package/dist/C_DataPicker.d.ts +5 -0
  32. package/dist/C_DataPicker.js +1 -0
  33. package/dist/C_DataPicker2.cjs +1 -0
  34. package/dist/C_DataPicker2.js +1 -0
  35. package/dist/C_Date.d.cts +1 -1
  36. package/dist/C_Date.d.ts +1 -1
  37. package/dist/C_Density.cjs +1 -0
  38. package/dist/C_Density.css +1 -0
  39. package/dist/C_Density.d.cts +3 -0
  40. package/dist/C_Density.d.ts +3 -0
  41. package/dist/C_Density.js +1 -0
  42. package/dist/C_Density2.cjs +1 -0
  43. package/dist/C_Density2.js +1 -0
  44. package/dist/C_Editor.d.cts +1 -1
  45. package/dist/C_Editor.d.ts +1 -1
  46. package/dist/C_ErrorSummary.cjs +1 -0
  47. package/dist/C_ErrorSummary.css +29 -0
  48. package/dist/C_ErrorSummary.d.cts +3 -0
  49. package/dist/C_ErrorSummary.d.ts +3 -0
  50. package/dist/C_ErrorSummary.js +1 -0
  51. package/dist/C_ErrorSummary2.cjs +1 -0
  52. package/dist/C_ErrorSummary2.js +1 -0
  53. package/dist/C_Form.base.css +150 -148
  54. package/dist/C_Form.cjs +1 -1
  55. package/dist/C_Form.css +151 -253
  56. package/dist/C_Form.d.cts +3 -1
  57. package/dist/C_Form.d.ts +19 -1
  58. package/dist/C_Form.js +1 -1
  59. package/dist/C_FormModal.css +11 -12
  60. package/dist/C_FormModal.d.cts +1 -1
  61. package/dist/C_FormModal.d.ts +18 -2
  62. package/dist/C_FormModal2.cjs +1 -1
  63. package/dist/C_FormModal2.js +1 -1
  64. package/dist/C_FormSearch.cjs +1 -1
  65. package/dist/C_FormSearch.css +128 -56
  66. package/dist/C_FormSearch.d.cts +3 -3
  67. package/dist/C_FormSearch.d.ts +5 -3
  68. package/dist/C_FormSearch.js +1 -1
  69. package/dist/C_FormulaEditor.d.cts +1 -1
  70. package/dist/C_FormulaEditor.d.ts +1 -1
  71. package/dist/C_Guide.d.cts +1 -1
  72. package/dist/C_Guide.d.ts +1 -1
  73. package/dist/C_Icon.d.cts +1 -1
  74. package/dist/C_Icon.d.ts +1 -1
  75. package/dist/C_Language.d.cts +1 -1
  76. package/dist/C_Language.d.ts +1 -1
  77. package/dist/C_Loading.d.cts +1 -1
  78. package/dist/C_Loading.d.ts +1 -1
  79. package/dist/C_Login.d.cts +1 -1
  80. package/dist/C_Login.d.ts +4 -1
  81. package/dist/C_Markdown.d.cts +1 -1
  82. package/dist/C_Markdown.d.ts +1 -1
  83. package/dist/C_Menu.d.cts +2 -2
  84. package/dist/C_Menu.d.ts +1 -1
  85. package/dist/C_OrgChart.d.cts +1 -1
  86. package/dist/C_OrgChart.d.ts +1 -1
  87. package/dist/C_Progress.d.cts +1 -1
  88. package/dist/C_Progress.d.ts +1 -1
  89. package/dist/C_SectionNav.cjs +1 -0
  90. package/dist/C_SectionNav.css +46 -0
  91. package/dist/C_SectionNav.d.cts +2 -0
  92. package/dist/C_SectionNav.d.ts +2 -0
  93. package/dist/C_SectionNav.js +1 -0
  94. package/dist/C_SectionNav2.cjs +1 -0
  95. package/dist/C_SectionNav2.js +1 -0
  96. package/dist/C_Skeleton.d.cts +1 -1
  97. package/dist/C_Skeleton.d.ts +1 -1
  98. package/dist/C_Steps.d.cts +1 -1
  99. package/dist/C_Steps.d.ts +1 -1
  100. package/dist/C_Table.base.css +258 -256
  101. package/dist/C_Table.cjs +1 -1
  102. package/dist/C_Table.css +109 -1283
  103. package/dist/C_Table.d.cts +2 -1
  104. package/dist/C_Table.d.ts +11 -7
  105. package/dist/C_Table.js +1 -1
  106. package/dist/C_Table2.cjs +3 -0
  107. package/dist/C_Table2.js +3 -0
  108. package/dist/C_Tabs.cjs +1 -1
  109. package/dist/C_Tabs.d.cts +1 -1
  110. package/dist/C_Tabs.d.ts +1 -1
  111. package/dist/C_Tabs.js +1 -1
  112. package/dist/C_TagsView.d.cts +1 -1
  113. package/dist/C_Theme.d.cts +1 -1
  114. package/dist/C_Theme.d.ts +1 -1
  115. package/dist/C_Timeline.d.cts +1 -1
  116. package/dist/C_Timeline.d.ts +1 -1
  117. package/dist/C_Transfer.d.cts +1 -1
  118. package/dist/C_Transfer.d.ts +1 -1
  119. package/dist/C_Tree.d.cts +1 -1
  120. package/dist/C_Tree.d.ts +10 -6
  121. package/dist/C_Upload.d.cts +1 -1
  122. package/dist/C_Upload.d.ts +1 -1
  123. package/dist/C_WorkFlow2.cjs +1 -1
  124. package/dist/C_WorkFlow2.js +1 -1
  125. package/dist/Card.cjs +1 -1
  126. package/dist/Card.js +1 -1
  127. package/dist/Steps.cjs +1 -1
  128. package/dist/Steps.js +1 -1
  129. package/dist/Tabs.cjs +1 -1
  130. package/dist/Tabs.js +1 -1
  131. package/dist/batchPatch.cjs +1 -0
  132. package/dist/batchPatch.d.cts +26 -0
  133. package/dist/batchPatch.d.ts +26 -0
  134. package/dist/batchPatch.js +1 -0
  135. package/dist/config.cjs +1 -1
  136. package/dist/config.d.cts +7 -1
  137. package/dist/config.d.ts +7 -1
  138. package/dist/config.js +1 -1
  139. package/dist/config2.d.ts +14 -0
  140. package/dist/constants.d.cts +3 -3
  141. package/dist/constants.d.ts +3 -3
  142. package/dist/constants2.d.cts +402 -173
  143. package/dist/constants2.d.ts +402 -173
  144. package/dist/constants3.d.cts +3 -3
  145. package/dist/constants3.d.ts +3 -3
  146. package/dist/constants4.d.cts +173 -402
  147. package/dist/constants4.d.ts +173 -402
  148. package/dist/constants5.d.cts +2 -2
  149. package/dist/constants5.d.ts +2 -2
  150. package/dist/data.cjs +1 -1
  151. package/dist/data.d.cts +5 -108
  152. package/dist/data.d.ts +5 -108
  153. package/dist/data.js +1 -1
  154. package/dist/data2.cjs +1 -1
  155. package/dist/data2.d.cts +108 -0
  156. package/dist/data2.d.ts +108 -0
  157. package/dist/data2.js +1 -1
  158. package/dist/data3.cjs +1 -0
  159. package/dist/data3.js +1 -0
  160. package/dist/dateRange.d.cts +108 -13
  161. package/dist/dateRange.d.ts +108 -13
  162. package/dist/density.cjs +1 -1
  163. package/dist/density.js +1 -1
  164. package/dist/dictionary.cjs +1 -0
  165. package/dist/dictionary.d.cts +38 -0
  166. package/dist/dictionary.d.ts +38 -0
  167. package/dist/dictionary.js +1 -0
  168. package/dist/helpers.cjs +1 -1
  169. package/dist/helpers.js +1 -1
  170. package/dist/index.cjs +1 -1
  171. package/dist/index.d.cts +65 -53
  172. package/dist/index.d.ts +73 -57
  173. package/dist/index.js +1 -1
  174. package/dist/index.vue.d.cts +1 -1
  175. package/dist/index.vue.d.ts +1 -1
  176. package/dist/index10.vue.d.cts +37 -80
  177. package/dist/index10.vue.d.ts +77 -53
  178. package/dist/index11.vue.d.cts +77 -53
  179. package/dist/index11.vue.d.ts +1117 -45
  180. package/dist/index12.vue.d.cts +1117 -45
  181. package/dist/index12.vue.d.ts +17 -128
  182. package/dist/index13.vue.d.cts +17 -128
  183. package/dist/index13.vue.d.ts +57 -53
  184. package/dist/index14.vue.d.cts +57 -53
  185. package/dist/index14.vue.d.ts +16 -25
  186. package/dist/index15.vue.d.cts +16 -25
  187. package/dist/index15.vue.d.ts +52 -12
  188. package/dist/index16.vue.d.cts +52 -12
  189. package/dist/index16.vue.d.ts +13 -129
  190. package/dist/index17.vue.d.cts +13 -129
  191. package/dist/index17.vue.d.ts +123 -74
  192. package/dist/index18.vue.d.cts +123 -74
  193. package/dist/index18.vue.d.ts +48 -71
  194. package/dist/index19.vue.d.cts +40 -91
  195. package/dist/index19.vue.d.ts +36 -96
  196. package/dist/index2.vue.d.cts +2 -2
  197. package/dist/index2.vue.d.ts +2 -2
  198. package/dist/index20.vue.d.cts +38 -47
  199. package/dist/index20.vue.d.ts +13 -48
  200. package/dist/index21.vue.d.cts +12 -96
  201. package/dist/index21.vue.d.ts +25 -95
  202. package/dist/index22.vue.d.cts +20 -32
  203. package/dist/index22.vue.d.ts +75 -37
  204. package/dist/index23.vue.d.cts +77 -13
  205. package/dist/index23.vue.d.ts +71 -13
  206. package/dist/index24.vue.d.cts +2 -2
  207. package/dist/index24.vue.d.ts +1 -1
  208. package/dist/index25.vue.d.cts +116 -90
  209. package/dist/index25.vue.d.ts +116 -90
  210. package/dist/index26.vue.d.cts +94 -59
  211. package/dist/index26.vue.d.ts +94 -59
  212. package/dist/index27.vue.d.cts +75 -0
  213. package/dist/index27.vue.d.ts +75 -0
  214. package/dist/index28.vue.d.cts +103 -0
  215. package/dist/index28.vue.d.ts +103 -0
  216. package/dist/index29.vue.d.cts +105 -0
  217. package/dist/index29.vue.d.ts +105 -0
  218. package/dist/index3.vue.d.cts +4 -4
  219. package/dist/index3.vue.d.ts +4 -4
  220. package/dist/index30.vue.d.cts +28 -0
  221. package/dist/index30.vue.d.ts +28 -0
  222. package/dist/index4.vue.d.cts +19 -128
  223. package/dist/index4.vue.d.ts +17 -34
  224. package/dist/index5.vue.d.cts +127 -35
  225. package/dist/index5.vue.d.ts +30 -19
  226. package/dist/index6.vue.d.cts +30 -19
  227. package/dist/index6.vue.d.ts +22 -118
  228. package/dist/index7.vue.d.cts +22 -118
  229. package/dist/index7.vue.d.ts +112 -18
  230. package/dist/index8.vue.d.cts +112 -18
  231. package/dist/index8.vue.d.ts +24 -35
  232. package/dist/index9.vue.d.cts +24 -35
  233. package/dist/index9.vue.d.ts +37 -80
  234. package/dist/mapUtils.d.cts +4 -4
  235. package/dist/mapUtils.d.ts +4 -4
  236. package/dist/numberCodec.cjs +1 -0
  237. package/dist/numberCodec.d.cts +25 -0
  238. package/dist/numberCodec.d.ts +25 -0
  239. package/dist/numberCodec.js +1 -0
  240. package/dist/observer.cjs +1 -0
  241. package/dist/observer.js +1 -0
  242. package/dist/presets.d.cts +3 -66
  243. package/dist/presets.d.ts +3 -66
  244. package/dist/resolver.cjs +1 -1
  245. package/dist/resolver.d.cts +1 -1
  246. package/dist/resolver.d.ts +1 -1
  247. package/dist/resolver.js +1 -1
  248. package/dist/serializeSearch.cjs +1 -0
  249. package/dist/serializeSearch.js +1 -0
  250. package/dist/style.css +561 -322
  251. package/dist/types.d.cts +60 -103
  252. package/dist/types.d.ts +62 -52
  253. package/dist/types2.d.cts +104 -51
  254. package/dist/types2.d.ts +56 -0
  255. package/dist/types3.d.cts +56 -0
  256. package/dist/useCalendarEvents.d.cts +1 -1
  257. package/dist/useCalendarEvents.d.ts +1 -1
  258. package/dist/useCollapsePanel.d.cts +6 -6
  259. package/dist/useCollapsePanel.d.ts +6 -6
  260. package/dist/useComponentLocale.cjs +1 -1
  261. package/dist/useComponentLocale.js +1 -1
  262. package/dist/useCropperCore.d.cts +13 -13
  263. package/dist/useCropperCore.d.ts +13 -13
  264. package/dist/useDataResource.cjs +1 -0
  265. package/dist/useDataResource.js +1 -0
  266. package/dist/useDictionary.cjs +1 -0
  267. package/dist/useDictionary.js +1 -0
  268. package/dist/useDynamicFormState.d.cts +959 -582
  269. package/dist/useDynamicFormState.d.ts +951 -584
  270. package/dist/useEdgeInteraction.d.cts +3 -3
  271. package/dist/useEdgeInteraction.d.ts +3 -3
  272. package/dist/useFormArray.cjs +1 -0
  273. package/dist/useFormArray.d.cts +69 -0
  274. package/dist/useFormArray.d.ts +69 -0
  275. package/dist/useFormArray.js +1 -0
  276. package/dist/useFormConfig.cjs +1 -0
  277. package/dist/useFormConfig.d.cts +590 -0
  278. package/dist/useFormConfig.d.ts +590 -0
  279. package/dist/useFormConfig.js +1 -0
  280. package/dist/useFullscreen.d.cts +3 -3
  281. package/dist/useFullscreen.d.ts +3 -3
  282. package/dist/useGridWidth.cjs +1 -0
  283. package/dist/useGridWidth.js +1 -0
  284. package/dist/useInfiniteScroll.d.cts +2 -2
  285. package/dist/useInfiniteScroll.d.ts +2 -2
  286. package/dist/useQRCode.d.cts +3 -3
  287. package/dist/useQRCode.d.ts +3 -3
  288. package/dist/useSignatureHistory.d.cts +4 -4
  289. package/dist/useSignatureHistory.d.ts +4 -4
  290. package/dist/useSplitResize.d.cts +5 -5
  291. package/dist/useSplitResize.d.ts +5 -5
  292. package/dist/useTableGlobalConfig.cjs +1 -0
  293. package/dist/useTableGlobalConfig.js +1 -0
  294. package/dist/useTableQuery.cjs +1 -3
  295. package/dist/useTableQuery.js +1 -3
  296. package/dist/useWorkflowValidation.d.cts +6 -6
  297. package/dist/useWorkflowValidation.d.ts +6 -6
  298. package/dist/validation.cjs +1 -0
  299. package/dist/validation.d.cts +18 -0
  300. package/dist/validation.d.ts +18 -0
  301. package/dist/validation.js +1 -0
  302. package/dist/verification.d.cts +4 -4
  303. package/dist/verification.d.ts +4 -4
  304. package/dist/workflows.cjs +1 -0
  305. package/dist/workflows.d.cts +2 -0
  306. package/dist/workflows.d.ts +2 -0
  307. package/dist/workflows.js +1 -0
  308. package/docs/components.en.md +13 -1
  309. package/docs/components.md +13 -1
  310. package/docs/guides/batch-results.md +47 -0
  311. package/docs/guides/data-picker.md +65 -0
  312. package/docs/guides/data-workflows.md +123 -0
  313. package/docs/guides/form-density.en.md +56 -3
  314. package/docs/guides/form-density.md +56 -3
  315. package/docs/guides/search-workflows.md +164 -0
  316. package/docs/guides/usage.en.md +1 -1
  317. package/package.json +21 -1
  318. package/dist/C_FormSearch2.cjs +0 -1
  319. package/dist/C_FormSearch2.js +0 -1
  320. package/dist/useTableQuery.d.cts +0 -1957
  321. package/dist/useTableQuery.d.ts +0 -1957
@@ -1,58 +1,1130 @@
1
- import { D as FormConfig, X as FormOption, Z as FormRecord, ut as SubmitEventPayload } from "./useDynamicFormState.js";
1
+ import { o as ActionItem, t as ActionBarConfig } from "./types.js";
2
+ import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.js";
3
+ import { t as DictionaryBinding } from "./dictionary.js";
4
+ import { t as ComponentDensity } from "./density.js";
2
5
  import * as vue from "vue";
3
- import { ComputedRef, Ref } from "vue";
6
+ import { ComputedRef, InjectionKey, MaybeRef, MaybeRefOrGetter, Ref, VNodeChild } from "vue";
7
+ import { DataTableBaseColumn, DataTableRowKey, FormItemRule, PaginationProps } from "naive-ui";
4
8
 
5
- //#region src/components/C_FormModal/types.d.ts
6
- type FormModalMode = 'create' | 'edit';
7
- /**
8
- * Structural editor contract. It intentionally does not depend on request-core,
9
- * so any headless CRUD implementation can drive the modal.
10
- */
11
- interface FormModalEditor<T extends object = FormRecord> {
12
- visible: Ref<boolean>;
13
- mode: Ref<FormModalMode>;
14
- model: Ref<T | null>;
15
- title: Ref<string>;
16
- loading: Ref<boolean> | ComputedRef<boolean>;
17
- setModel(model: T): void;
18
- close(): void;
19
- submit(model?: T): Promise<boolean>;
20
- }
21
- interface FormModalProps<T extends object = FormRecord> {
22
- editor: FormModalEditor<T>;
23
- options: FormOption<T>[];
24
- config?: FormConfig<T>;
9
+ //#region src/components/C_Table/composables/usePrintWatermark.d.ts
10
+ interface WatermarkConfig {
11
+ text: string;
12
+ textSize?: number;
13
+ textColor?: string;
14
+ font?: string;
15
+ opacity?: number;
16
+ rotate?: number;
17
+ position?: 'center' | 'repeat' | 'corner' | 'diagonal';
18
+ xGap?: number;
19
+ yGap?: number;
20
+ }
21
+ interface CaptureConfig {
22
+ scale?: number;
23
+ quality?: number;
24
+ format?: 'png' | 'jpeg' | 'webp';
25
+ backgroundColor?: string;
26
+ logging?: boolean;
27
+ allowTaint?: boolean;
28
+ useCORS?: boolean;
29
+ }
30
+ interface PrintConfig {
31
+ orientation?: 'portrait' | 'landscape';
32
+ paperSize?: 'A4' | 'A3' | 'Letter' | string;
33
+ margin?: string;
34
+ style?: string;
35
+ header?: string;
36
+ footer?: string;
37
+ showModal?: boolean;
38
+ modalMessage?: string;
39
+ onLoadingStart?: () => void;
40
+ onLoadingEnd?: () => void;
41
+ onPrintDialogClose?: () => void;
42
+ }
43
+ interface PrintWatermarkOptions {
44
+ watermark?: WatermarkConfig;
45
+ capture?: CaptureConfig;
46
+ print?: PrintConfig;
47
+ }
48
+ /**
49
+ *
50
+ */
51
+ declare function drawWatermark(canvas: HTMLCanvasElement, config: WatermarkConfig): HTMLCanvasElement;
52
+ /**
53
+ *
54
+ */
55
+ declare function captureElement(element: HTMLElement, config?: CaptureConfig): Promise<HTMLCanvasElement>;
56
+ /**
57
+ *
58
+ */
59
+ declare function canvasToDataURL(canvas: HTMLCanvasElement, format?: 'png' | 'jpeg' | 'webp', quality?: number): string;
60
+ /**
61
+ *
62
+ */
63
+ declare function downloadCanvas(canvas: HTMLCanvasElement, filename?: string, format?: 'png' | 'jpeg' | 'webp'): void;
64
+ /**
65
+ *
66
+ */
67
+ declare function printImage(imageDataURL: string, config?: PrintConfig): Promise<void>;
68
+ /**
69
+ *
70
+ */
71
+ declare function usePrintWatermark(): {
72
+ loading: vue.Ref<boolean, boolean>;
73
+ progress: vue.Ref<number, number>;
74
+ captureWithWatermark: (element: HTMLElement, options?: PrintWatermarkOptions) => Promise<string>;
75
+ printWithWatermark: (element: HTMLElement, options?: PrintWatermarkOptions) => Promise<void>;
76
+ downloadScreenshot: (element: HTMLElement, filename?: string, options?: PrintWatermarkOptions) => Promise<void>;
77
+ quickPrint: (element: HTMLElement, watermarkText?: string) => Promise<void>;
78
+ batchCapture: (elements: HTMLElement[], options?: PrintWatermarkOptions) => Promise<string[]>;
79
+ batchPrint: (elements: HTMLElement[], options?: PrintWatermarkOptions) => Promise<void>;
80
+ mergePrint: (elements: HTMLElement[], options?: PrintWatermarkOptions, mergeOptions?: {
81
+ orientation?: "horizontal" | "vertical";
82
+ spacing?: number;
83
+ backgroundColor?: string;
84
+ }) => Promise<void>;
85
+ createPreset: (name: string, options: PrintWatermarkOptions) => {
86
+ use: (element: HTMLElement) => Promise<void>;
87
+ download: (element: HTMLElement, filename?: string) => Promise<void>;
88
+ };
89
+ updateProgress: (value: number) => void;
90
+ utils: {
91
+ captureElement: typeof captureElement;
92
+ drawWatermark: typeof drawWatermark;
93
+ canvasToDataURL: typeof canvasToDataURL;
94
+ downloadCanvas: typeof downloadCanvas;
95
+ printImage: typeof printImage;
96
+ };
97
+ };
98
+ declare const printPresets: {
99
+ readonly table: {
100
+ readonly watermark: {
101
+ readonly text: "Robot Admin - 数据表格";
102
+ readonly position: "repeat";
103
+ readonly textColor: "rgba(100, 100, 100, 0.25)";
104
+ readonly textSize: 14;
105
+ readonly xGap: 250;
106
+ readonly yGap: 120;
107
+ };
108
+ readonly capture: {
109
+ readonly scale: 1.2;
110
+ };
111
+ readonly print: {
112
+ readonly orientation: "landscape";
113
+ readonly style: "@page { margin: 8mm; } body { font-family: Arial, sans-serif; }";
114
+ };
115
+ };
116
+ readonly form: {
117
+ readonly watermark: {
118
+ readonly text: "Robot Admin - 表单数据";
119
+ readonly position: "diagonal";
120
+ readonly textColor: "rgba(150, 150, 150, 0.2)";
121
+ readonly textSize: 16;
122
+ };
123
+ readonly print: {
124
+ readonly orientation: "portrait";
125
+ };
126
+ };
127
+ readonly report: {
128
+ readonly watermark: {
129
+ readonly text: "Robot Admin - 机密报告";
130
+ readonly position: "center";
131
+ readonly textColor: "rgba(200, 50, 50, 0.15)";
132
+ readonly textSize: 24;
133
+ };
134
+ readonly capture: {
135
+ readonly quality: 0.95;
136
+ readonly format: "png";
137
+ };
138
+ };
139
+ };
140
+ //#endregion
141
+ //#region src/components/C_Table/composables/useDynamicRow.d.ts
142
+ interface DynamicRowsBaseOptions<T extends object> {
143
+ /** 总开关;关闭时公开方法保持安全 no-op */
144
+ enabled?: boolean;
145
+ rowKey?: string | ((row: T) => DataTableRowKey);
146
+ /** 新增返回完整业务行;复制时可接收原行副本,函数 rowKey 需返回完整的新副本。 */
147
+ defaultRowData?: (source?: T) => T;
148
+ enableRadioSelection?: boolean;
149
+ enableAdd?: boolean;
150
+ enableInsert?: boolean;
151
+ enableDelete?: boolean;
152
+ enableCopy?: boolean;
153
+ enableMove?: boolean;
154
+ enablePrint?: boolean;
155
+ printOptions?: PrintWatermarkOptions;
156
+ printPreset?: 'table' | 'form' | 'report';
157
+ printWatermarkText?: string;
158
+ printTargetSelector?: string;
159
+ confirmDelete?: boolean;
160
+ deleteConfirmText?: string;
161
+ feedback?: ComponentFeedback;
162
+ locale?: ComponentLocale;
163
+ onRowChange?: (data: T[]) => void;
164
+ onSelectionChange?: (selectedKey: DataTableRowKey | null, selectedRow: T | null) => void;
165
+ onRowAdd?: (newRow: T) => void;
166
+ onRowDelete?: (deletedRow: T, index: number) => void;
167
+ onRowCopy?: (originalRow: T, newRow: T) => void;
168
+ onRowMove?: (row: T, fromIndex: number, toIndex: number) => void;
169
+ }
170
+ /** 明确业务模型必须由工厂创建完整记录;开放记录保留原有空行兼容入口。 */
171
+ type DynamicRowsOptions<T extends object = DataRecord> = DynamicRowsBaseOptions<T> & (string extends keyof T ? unknown : {
172
+ defaultRowData: (source?: T) => T;
173
+ });
174
+ interface DynamicRowsReturn<T extends object = DataRecord> {
175
+ selectedRowKey: Ref<DataTableRowKey | null>;
176
+ selectedRowData: Ref<T | null>;
177
+ selectedRowIndex: Ref<number>;
178
+ canMoveUp: Ref<boolean>;
179
+ canMoveDown: Ref<boolean>;
180
+ deleteConfirmVisible: Ref<boolean>;
181
+ printLoading: Ref<boolean>;
182
+ printProgress: Ref<number>;
183
+ addRow: () => void;
184
+ insertRow: () => void;
185
+ deleteRow: () => void;
186
+ confirmDelete: () => void;
187
+ copyRow: () => void;
188
+ moveRowUp: () => void;
189
+ moveRowDown: () => void;
190
+ selectRow: (key: DataTableRowKey) => void;
191
+ clearSelection: () => void;
192
+ handlePrint: (elementRef: Ref<HTMLElement | undefined>) => Promise<void>;
193
+ handleDownload: (elementRef: Ref<HTMLElement | undefined>, filename?: string) => Promise<void>;
194
+ handleQuickPrint: (elementRef: Ref<HTMLElement | undefined>) => Promise<void>;
195
+ enhanceColumns: (columns: TableColumn<T>[]) => TableColumn<T>[];
196
+ renderToolbar: (target?: HTMLElement) => VNodeChild;
197
+ renderConfirmModal: () => VNodeChild;
198
+ }
199
+ /**
200
+ * 表格动态行操作功能组合
201
+ */
202
+ declare function useDynamicRows<T extends object = DataRecord>(data: Readonly<Ref<T[]>>, ...args: string extends keyof T ? [options?: MaybeRefOrGetter<DynamicRowsOptions<T>>] : [options: MaybeRefOrGetter<DynamicRowsOptions<T>>]): DynamicRowsReturn<T>;
203
+ //#endregion
204
+ //#region src/components/C_Table/composables/useRowDrag.d.ts
205
+ interface RowDragConfig {
206
+ enabled?: boolean;
207
+ /** 拖拽手柄 CSS 选择器(不传则整行可拖) */
208
+ handleSelector?: string;
209
+ /** 动画时长(ms) */
210
+ animationDuration?: number;
211
+ /** 拖拽时 ghost 样式类 */
212
+ ghostClass?: string;
213
+ /** 拖拽中样式类 */
214
+ chosenClass?: string;
215
+ }
216
+ interface UseRowDragOptions<T extends object = DataRecord> {
217
+ /** 数据源(只读即可) */
218
+ data: Ref<T[]> | ComputedRef<T[]>;
219
+ /** 获取行键 */
220
+ rowKey: (row: T) => DataTableRowKey;
221
+ /** 配置 */
222
+ config: MaybeRefOrGetter<RowDragConfig | undefined>;
223
+ /** 数据重排回调(由外部处理数据更新) */
224
+ onReorder?: (newData: T[]) => void;
225
+ /** 排序变更回调 */
226
+ onSort?: (row: T, fromIndex: number, toIndex: number) => void;
227
+ }
228
+ interface UseRowDragReturn {
229
+ /** 初始化拖拽(需在 onMounted 中调用) */
230
+ initRowDrag: (wrapperEl: HTMLElement) => void;
231
+ /** 销毁拖拽实例 */
232
+ destroyRowDrag: () => void;
233
+ /** 是否正在拖拽 */
234
+ isDragging: Ref<boolean>;
235
+ }
236
+ /** 行拖拽排序组合式函数 */
237
+ declare function useRowDrag<T extends object = DataRecord>(options: UseRowDragOptions<T>): UseRowDragReturn;
238
+ //#endregion
239
+ //#region src/components/C_Table/composables/useCrossPageSelection.d.ts
240
+ interface CrossPageSelectionConfig {
241
+ enabled?: boolean;
242
+ /** Maximum selected rows, including previously visited remote pages. */
243
+ maxSelection?: number;
244
+ }
245
+ interface UseCrossPageSelectionOptions<T extends object = DataRecord> {
246
+ /** All local rows, or the loaded page when remote is enabled. */
247
+ allData: Ref<T[]> | ComputedRef<T[]>;
248
+ rowKey: (row: T) => DataTableRowKey;
249
+ config: MaybeRefOrGetter<CrossPageSelectionConfig | undefined>;
250
+ remote?: MaybeRefOrGetter<boolean>;
251
+ childrenKey?: MaybeRefOrGetter<string | undefined>;
252
+ rowCheckable?: (row: T) => boolean;
253
+ onSelectionChange?: (keys: DataTableRowKey[], rows: T[]) => void;
254
+ }
255
+ interface UseCrossPageSelectionReturn<T extends object = DataRecord> {
256
+ selectedKeys: Ref<Set<DataTableRowKey>>;
257
+ selectedCount: ComputedRef<number>;
258
+ getPageCheckedKeys: (pageData: T[]) => DataTableRowKey[];
259
+ handlePageSelectionChange: (keys: DataTableRowKey[], pageData: T[]) => void;
260
+ /** In remote mode, adds the currently loaded page; never claims to select unseen server rows. */
261
+ selectAll: () => void;
262
+ select: (key: DataTableRowKey) => boolean;
263
+ unselect: (key: DataTableRowKey) => void;
264
+ clearAll: () => void;
265
+ getSelectedRows: () => T[];
266
+ isSelected: (key: DataTableRowKey) => boolean;
267
+ }
268
+ /** Preserve selected identities and loaded row snapshots across local or remote pages. */
269
+ declare function useCrossPageSelection<T extends object = DataRecord>(options: UseCrossPageSelectionOptions<T>): UseCrossPageSelectionReturn<T>;
270
+ //#endregion
271
+ //#region src/components/C_Table/composables/useTableGlobalConfig.d.ts
272
+ type FormatterType = 'date' | 'datetime' | 'currency' | 'percent' | 'enum' | 'number';
273
+ interface FormatterConfig {
274
+ /** 日期格式 */
275
+ date?: {
276
+ format?: string;
277
+ };
278
+ /** 日期时间格式 */
279
+ datetime?: {
280
+ format?: string;
281
+ };
282
+ /** 货币格式 */
283
+ currency?: {
284
+ prefix?: string;
285
+ suffix?: string;
286
+ precision?: number;
287
+ };
288
+ /** 百分比格式 */
289
+ percent?: {
290
+ precision?: number;
291
+ suffix?: string;
292
+ };
293
+ /** 数字格式(千分位) */
294
+ number?: {
295
+ precision?: number;
296
+ };
297
+ }
298
+ /** 列级 formatter 配置 */
299
+ interface ColumnFormatter {
300
+ type: FormatterType;
301
+ /** enum mapping:{ male: '男', female: '女' } */
302
+ mapping?: Record<string, string>;
303
+ /** 自定义格式化函数(优先级最高) */
304
+ fn?: (value: unknown, row: DataRecord) => string;
305
+ /** 覆盖全局格式配置 */
306
+ config?: Record<string, unknown>;
307
+ }
308
+ interface TableGlobalConfig {
309
+ /** 任意 C_Table 配置的应用级默认值。 */
310
+ defaults?: TableConfig;
311
+ /** 表格显示默认值 */
312
+ display?: DisplayConfig;
313
+ /** 默认分页条数 */
314
+ pageSize?: number;
315
+ /** 空状态文案 */
316
+ emptyText?: string;
317
+ /** 全局格式化配置 */
318
+ formatter?: FormatterConfig;
319
+ /** 列配置持久化前缀 */
320
+ persistPrefix?: string;
321
+ /** 默认导出文件名 */
322
+ exportFilename?: string;
323
+ }
324
+ declare const TABLE_GLOBAL_CONFIG_KEY: InjectionKey<TableGlobalConfig>;
325
+ /** 根据 ColumnFormatter 配置格式化单元格值 */
326
+ declare function applyFormatter(value: unknown, row: DataRecord, formatter: ColumnFormatter, globalConfig?: FormatterConfig): string;
327
+ /** 在组件内获取全局配置(自动合并默认值) */
328
+ declare function useTableGlobalConfig(): TableGlobalConfig;
329
+ /** 合并全局配置到 TableConfig(局部 > 全局 > 默认) */
330
+ declare function mergeGlobalConfig(local: TableConfig, global: TableGlobalConfig): TableConfig;
331
+ //#endregion
332
+ //#region src/components/C_Table/composables/useTableExport.d.ts
333
+ interface ExportConfig {
334
+ /** Data scope used by C_Table; source preserves the legacy loaded-source behavior. */
335
+ scope?: 'source' | 'page' | 'selected';
336
+ /** Explicit server-side/full-data export request; invoked only when exporting. */
337
+ requestData?: () => DataRecord[] | Promise<DataRecord[]>;
338
+ /** 导出文件名(不含扩展名) */
339
+ filename?: string;
340
+ /** 导出格式 */
341
+ format?: 'csv' | 'xlsx';
342
+ /** 是否包含表头 */
343
+ includeHeader?: boolean;
344
+ /** 自定义选择导出列(传 key 数组) */
345
+ columnKeys?: string[];
346
+ /** CSV 分隔符 */
347
+ csvSeparator?: string;
348
+ /** 阻止表格软件把用户文本识别为公式,默认开启 */
349
+ preventFormulaInjection?: boolean;
350
+ /** 全局格式化配置(用于 formatter) */
351
+ formatterConfig?: FormatterConfig;
352
+ /** 请求格式不可用并自动降级时的通知。 */
353
+ onFallback?: (requested: 'xlsx', actual: 'csv', cause: unknown) => void;
354
+ }
355
+ /**
356
+ * 导出表格数据
357
+ */
358
+ declare function exportTableData(data: DataRecord[], columns: TableColumn[], config?: ExportConfig): Promise<void>;
359
+ //#endregion
360
+ //#region src/components/C_Table/composables/useTableConfig.d.ts
361
+ /**
362
+ * 可绑定到 C_Table 的 CRUD 对象接口(桥接类型)
363
+ *
364
+ * C_Table 内部会将外部 columns 规范化为自己的 TableColumn。
365
+ * columns 刻意使用 unknown[] 作为跨包边界,避免要求 CRUD 数据源与组件库
366
+ * 共享同一份 TableColumn 声明;直接使用 columns prop 时仍保留完整的强类型校验。
367
+ */
368
+ interface CrudBinding<T extends object = DataRecord> {
369
+ data: Ref<T[]>;
370
+ loading: Ref<boolean>;
371
+ columns: ComputedRef<readonly unknown[]>;
372
+ /** 提供 save 时 edit 函数只标记保存能力;自定义编辑入口放到 config.actions.edit。 */
373
+ actions?: ComputedRef<SimpleTableActions<T>>;
374
+ pagination?: ComputedRef<PaginationConfig | boolean | undefined>;
375
+ tableRef?: Ref<unknown>;
376
+ save?: (row: T, rowIndex?: number, columnKey?: string) => unknown | Promise<unknown>;
377
+ handleCancel?: () => void;
378
+ handlePaginationChange?: (page: number, pageSize: number) => void;
379
+ handleRowDelete?: (row: T, index?: number) => unknown | Promise<unknown>;
380
+ detail?: {
381
+ show: (row: T) => unknown;
382
+ };
383
+ }
384
+ /** C_Table :config prop 的类型 — 所有功能配置收拢在此 */
385
+ interface TableConfig<T extends object = DataRecord, C = unknown> {
386
+ /** 与 C_Form / C_FormSearch 共用密度;局部 display.size 等显式配置优先。 */
387
+ density?: ComponentDensity;
388
+ /** 组件级反馈适配器;未提供时尝试复用 Naive Provider,再安全降级 */
389
+ feedback?: ComponentFeedback;
390
+ /** 组件级文案与语言覆盖 */
391
+ locale?: ComponentLocale;
392
+ /** 校验缺失/重复行键;默认开启,超大或无状态表格可关闭。 */
393
+ validateRowKeys?: boolean;
394
+ /** 编辑配置 */
395
+ edit?: EditConfig<T> | EditMode | boolean;
396
+ /** 操作按钮 */
397
+ actions?: SimpleTableActions<T>;
398
+ /** 分页配置 */
399
+ pagination?: PaginationConfig | boolean;
400
+ /** 展开行配置 */
401
+ expand?: ExpandConfig$1<T, C> | boolean;
402
+ /** 选择配置 */
403
+ selection?: SelectionConfig$1<T, C> | boolean;
404
+ /** 动态行配置 */
405
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false);
406
+ /** 工具栏 */
407
+ toolbar?: ToolbarConfig;
408
+ /** 表格显示属性 */
409
+ display?: DisplayConfig;
410
+ /** 虚拟滚动配置(大数据量) */
411
+ virtualScroll?: VirtualScrollConfig | boolean;
412
+ /** 合计行配置(财务场景) */
413
+ summary?: SummaryConfig<T>;
414
+ /** 列拖拽排序 */
415
+ columnDrag?: ColumnDragConfig | boolean;
416
+ /** 树形表格 */
417
+ tree?: TreeConfig | boolean;
418
+ /** 当前页顶层行同层排序;树子行/详情内容不可拖拽,虚拟滚动模式下禁用。 */
419
+ rowDrag?: RowDragConfig | boolean;
420
+ /** 跨页多选 */
421
+ crossPageSelection?: CrossPageSelectionConfig | boolean;
422
+ /** 导出配置 */
423
+ export?: ExportConfig;
424
+ /** 列配置持久化 key(传入即启用 localStorage) */
425
+ persistKey?: string;
426
+ /** 全局格式化配置 */
427
+ formatterConfig?: FormatterConfig;
428
+ /** 错误状态配置 */
429
+ error?: ErrorConfig;
430
+ /** 批量操作配置 */
431
+ batchActions?: BatchActionsConfig<T>;
432
+ }
433
+ interface EditConfig<T extends object = DataRecord> {
434
+ enabled?: boolean;
435
+ mode?: EditMode;
436
+ showRowActions?: boolean;
437
+ modalTitle?: string;
438
+ modalWidth?: number;
439
+ /** 保存前回调;抛出异常会保留编辑态,便于修正或重试 */
440
+ onSave?: (rowData: T, rowIndex: number, columnKey?: string) => unknown;
441
+ /** 取消编辑回调 */
442
+ onCancel?: (rowData: T, rowIndex: number) => unknown;
443
+ /** 编辑或保存失败回调 */
444
+ onError?: (error: unknown) => void;
445
+ }
446
+ interface ExpandConfig$1<T extends object = DataRecord, C = unknown> {
447
+ enabled?: boolean;
448
+ defaultExpandedKeys?: DataTableRowKey[];
449
+ onLoadData?: (row: T) => Promise<C[]> | C[];
450
+ /** 展开数据加载失败回调 */
451
+ onError?: (error: unknown, row: T) => void;
452
+ renderContent?: (row: T, expandData: C[], loading: boolean, childSelection?: ChildSelectionState) => VNodeChild;
453
+ rowExpandable?: (row: T) => boolean;
454
+ }
455
+ interface SelectionConfig$1<T extends object = DataRecord, C = unknown> {
456
+ enabled?: boolean;
457
+ defaultCheckedKeys?: DataTableRowKey[];
458
+ rowCheckable?: (row: T) => boolean;
459
+ maxSelection?: number;
460
+ childSelection?: {
461
+ enabled?: boolean;
462
+ childRowCheckable?: (childRow: C, parentRow: T) => boolean;
463
+ };
464
+ parentChildLink?: {
465
+ enabled?: boolean;
466
+ mode?: ParentChildLinkMode;
467
+ };
468
+ }
469
+ interface ToolbarConfig {
470
+ /** 是否显示工具栏 */
471
+ show?: boolean;
472
+ /** 是否启用列设置 */
473
+ columnSettings?: boolean;
474
+ /** 左侧业务动作,统一交给 C_ActionBar 渲染。 */
475
+ actions?: ActionItem[];
476
+ /** 右侧业务动作,适合左侧存在标签页或查询条件的场景。 */
477
+ rightActions?: ActionItem[];
478
+ /** 透传给 C_ActionBar 的布局与尺寸配置。 */
479
+ actionBar?: ActionBarConfig;
480
+ }
481
+ interface DisplayConfig {
482
+ striped?: boolean;
483
+ bordered?: boolean;
484
+ singleLine?: boolean;
485
+ size?: 'small' | 'medium' | 'large';
486
+ maxHeight?: number | string;
487
+ scrollX?: number | string;
488
+ columnWidth?: number;
489
+ }
490
+ /** 虚拟滚动配置 */
491
+ interface VirtualScrollConfig {
492
+ enabled?: boolean;
493
+ /** 每行高度(px) */
494
+ itemHeight?: number;
495
+ /** 最大高度(px),用于滚动容器 */
496
+ maxHeight?: number;
497
+ }
498
+ /** 合计行配置 */
499
+ interface SummaryConfig<T extends object = DataRecord> {
500
+ /** 合计行位置 */
501
+ position?: 'top' | 'bottom';
502
+ /** 自定义合计函数,每列返回 { value, colSpan? } */
503
+ render?: (data: T[]) => Record<string, {
504
+ value: string | number;
505
+ colSpan?: number;
506
+ }>;
507
+ }
508
+ /** 列拖拽排序配置 */
509
+ interface ColumnDragConfig {
510
+ enabled?: boolean;
511
+ /** 拖拽手柄类名(默认拖拽头部区域) */
512
+ handleClass?: string;
513
+ /** 拖拽动画时长(ms) */
514
+ animationDuration?: number;
515
+ }
516
+ /** 树形表格配置 */
517
+ interface TreeConfig {
518
+ enabled?: boolean;
519
+ /** 子节点字段名 */
520
+ childrenKey?: string;
521
+ /** 缩进宽度(px) */
522
+ indent?: number;
523
+ /** 默认展开所有 */
524
+ defaultExpandAll?: boolean;
525
+ }
526
+ /** 错误状态配置 */
527
+ interface ErrorConfig {
528
+ /** 是否显示错误状态 */
529
+ show?: boolean;
530
+ /** 错误描述文案 */
531
+ message?: string;
532
+ /** 重试回调 */
533
+ onRetry?: () => unknown;
534
+ }
535
+ /** 批量操作配置 */
536
+ interface BatchActionsConfig<T extends object = DataRecord> {
537
+ enabled?: boolean;
538
+ /** 操作成功后清空选择,默认不清空 */
539
+ clearSelectionOnSuccess?: boolean;
540
+ /** 批量操作失败回调 */
541
+ onError?: (error: unknown, actionKey: string) => void;
542
+ /** 自定义批量操作按钮 */
543
+ actions?: Array<{
544
+ key: string;
545
+ label: string;
546
+ icon?: string;
547
+ type?: string;
548
+ onClick: (selectedKeys: DataTableRowKey[], selectedRows: T[]) => unknown;
549
+ }>;
550
+ }
551
+ interface ResolvedConfig {
552
+ density: ComponentDensity | undefined;
553
+ controlSize: 'small' | 'medium' | 'large';
554
+ feedback: ComponentFeedback | undefined;
555
+ locale: ComponentLocale | undefined;
556
+ editable: boolean;
557
+ editMode: EditMode;
558
+ showRowActions: boolean;
559
+ modalTitle: string;
560
+ modalWidth: number;
561
+ onEditSave: EditConfig['onSave'] | undefined;
562
+ onEditCancel: EditConfig['onCancel'] | undefined;
563
+ onEditError: EditConfig['onError'] | undefined;
564
+ expandable: boolean;
565
+ defaultExpandedKeys: DataTableRowKey[] | undefined;
566
+ onLoadExpandData: ((row: DataRecord) => Promise<unknown[]> | unknown[]) | undefined;
567
+ onExpandError: ((error: unknown, row: DataRecord) => void) | undefined;
568
+ renderExpandContent: ((row: DataRecord, expandData: unknown[], loading: boolean, childSelection?: ChildSelectionState) => VNodeChild) | undefined;
569
+ rowExpandable: ((row: DataRecord) => boolean) | undefined;
570
+ enableSelection: boolean;
571
+ defaultCheckedKeys: DataTableRowKey[] | undefined;
572
+ rowCheckable: ((row: DataRecord) => boolean) | undefined;
573
+ maxSelection: number | undefined;
574
+ enableChildSelection: boolean;
575
+ childRowCheckable: ((childRow: unknown, parentRow: DataRecord) => boolean) | undefined;
576
+ enableParentChildLink: boolean;
577
+ parentChildLinkMode: ParentChildLinkMode;
578
+ pagination: PaginationConfig | null;
579
+ dynamicRows: DynamicRowsOptions<DataRecord> | undefined;
580
+ striped: boolean;
581
+ bordered: boolean;
582
+ singleLine: boolean;
583
+ size: 'small' | 'medium' | 'large';
584
+ maxHeight: number | string | undefined;
585
+ scrollX: number | string | undefined;
586
+ columnWidth: number;
587
+ showToolbar: boolean;
588
+ enableColumnSettings: boolean;
589
+ toolbarActions: ActionItem[];
590
+ toolbarRightActions: ActionItem[];
591
+ toolbarActionBarConfig: ActionBarConfig;
592
+ /** 虚拟滚动 */
593
+ virtualScroll: boolean;
594
+ virtualItemHeight: number;
595
+ virtualMaxHeight: number;
596
+ /** 合计行 */
597
+ summaryPosition: 'top' | 'bottom' | undefined;
598
+ summaryRender: ((data: DataRecord[]) => Record<string, {
599
+ value: string | number;
600
+ colSpan?: number;
601
+ }>) | undefined;
602
+ /** 列拖拽 */
603
+ enableColumnDrag: boolean;
604
+ columnDragHandleClass: string | undefined;
605
+ columnDragAnimationDuration: number;
606
+ /** 树形表格 */
607
+ treeEnabled: boolean;
608
+ treeChildrenKey: string;
609
+ treeIndent: number;
610
+ treeDefaultExpandAll: boolean;
611
+ /** 行拖拽 */
612
+ rowDrag: RowDragConfig | undefined;
613
+ /** 跨页多选 */
614
+ crossPageSelection: CrossPageSelectionConfig | undefined;
615
+ /** 导出配置 */
616
+ exportConfig: ExportConfig | undefined;
617
+ /** 列持久化 key */
618
+ persistKey: string | undefined;
619
+ /** 全局格式化配置 */
620
+ formatterConfig: FormatterConfig | undefined;
621
+ /** 错误状态 */
622
+ error: ErrorConfig | undefined;
623
+ /** 批量操作 */
624
+ batchActions: BatchActionsConfig | undefined;
625
+ }
626
+ /**
627
+ * 将 config 单一对象解析为内部扁平化配置
628
+ */
629
+ declare function resolveConfig(config?: TableConfig): ResolvedConfig;
630
+ declare const createEditModeChecker: (config: ResolvedConfig) => {
631
+ isNonEditable: (column: TableColumn) => boolean;
632
+ isRowEditMode: () => boolean;
633
+ isCellEditMode: () => boolean;
634
+ };
635
+ //#endregion
636
+ //#region src/components/C_Table/types.d.ts
637
+ type RefLike<T> = {
638
+ value: T;
639
+ } | T;
640
+ type MaybeRefLike<T> = RefLike<T> | MaybeRef<T>;
641
+ type DataRecord = Record<string, unknown>;
642
+ type TableRowKey<T extends object = DataRecord> = Extract<keyof T, string> | ((row: T) => DataTableRowKey);
643
+ interface TableRowKeyIssue<T extends object = DataRecord> {
644
+ type: 'missing' | 'duplicate' | 'error';
645
+ row: T;
646
+ index: number;
647
+ key?: DataTableRowKey;
648
+ firstIndex?: number;
649
+ cause?: unknown;
650
+ }
651
+ type EditMode = 'row' | 'cell' | 'both' | 'modal' | 'none';
652
+ type EditType = 'input' | 'textarea' | 'select' | 'date' | 'number' | 'switch' | 'email' | 'mobile';
653
+ type ButtonType = 'default' | 'primary' | 'info' | 'success' | 'warning' | 'error';
654
+ type ParentChildLinkMode = 'strict' | 'loose';
655
+ interface PaginationConfig {
656
+ enabled?: boolean;
657
+ page?: number;
658
+ pageSize?: number;
659
+ total?: number;
660
+ showSizePicker?: boolean;
661
+ showQuickJumper?: boolean;
662
+ pageSizes?: number[];
663
+ simple?: boolean;
664
+ size?: 'small' | 'medium' | 'large';
665
+ remote?: boolean;
666
+ }
667
+ /** API 函数类型 */
668
+ type ApiFunction<T extends object = DataRecord> = (row: T, index: number) => unknown | Promise<unknown>;
669
+ /** 渲染函数类型 */
670
+ type RenderFunction<T extends object = DataRecord> = (row: T, index: number) => VNodeChild;
671
+ /** 自定义操作按钮配置 */
672
+ interface CustomAction<T extends object = DataRecord> {
673
+ /** 按钮唯一键 */
674
+ key: string;
675
+ /** 按钮显示文本 */
676
+ label: string | ((row: T, index: number) => string);
677
+ /** 按钮图标 */
678
+ icon: string | ((row: T, index: number) => string);
679
+ /** 按钮类型样式 */
680
+ type?: ButtonType | ((row: T, index: number) => ButtonType);
681
+ /** 点击事件处理器 */
682
+ onClick: (row: T, index: number) => unknown;
683
+ /** 条件显示函数(可选) */
684
+ show?: (row: T, index: number) => boolean;
685
+ /** 是否禁用(可选) */
686
+ disabled?: (row: T, index: number) => boolean;
687
+ /** 按钮提示文本(可选) */
688
+ tooltip?: string;
689
+ }
690
+ /** 简化的操作配置 - 二元法则 */
691
+ interface SimpleTableActions<T extends object = DataRecord> {
692
+ /** 编辑操作 - 直接传入函数 */
693
+ edit?: false | ApiFunction<T>;
694
+ /** 删除操作 - 直接传入函数 */
695
+ delete?: false | ApiFunction<T>;
696
+ /** 详情操作 - 直接传入函数 */
697
+ detail?: false | ApiFunction<T>;
698
+ /** 自定义操作按钮 */
699
+ custom?: CustomAction<T>[];
700
+ /** 完全自定义渲染 - 10%场景 */
701
+ render?: RenderFunction<T>;
702
+ }
703
+ /** Minimal edit-state contract consumed by the action renderer. */
704
+ interface TableActionsManager<T extends object = DataRecord> {
705
+ editStates: {
706
+ modalEdit: {
707
+ startEdit: (rowKey: DataTableRowKey, sourceData?: T) => boolean | void;
708
+ };
709
+ rowEdit: {
710
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
711
+ startEditRow: (rowKey: DataTableRowKey) => boolean | void;
712
+ cancelEditRow: () => void | Promise<void>;
713
+ saveEditRow: () => Promise<unknown>;
714
+ };
715
+ };
716
+ }
717
+ /** useTableActions Hook 选项类型 */
718
+ interface UseTableActionsOptions<T extends object = DataRecord> {
719
+ /** 操作配置 */
720
+ actions: Ref<SimpleTableActions<T>> | ComputedRef<SimpleTableActions<T>>;
721
+ /** 表格配置 */
722
+ config: Ref<{
723
+ editable: boolean;
724
+ editMode: string;
725
+ controlSize?: 'small' | 'medium' | 'large';
726
+ feedback?: ComponentFeedback;
727
+ locale?: ComponentLocale;
728
+ }> | ComputedRef<{
729
+ editable: boolean;
730
+ editMode: string;
731
+ controlSize?: 'small' | 'medium' | 'large';
732
+ feedback?: ComponentFeedback;
733
+ locale?: ComponentLocale;
734
+ }>;
735
+ /** 表格管理器 */
736
+ tableManager: TableActionsManager<T>;
737
+ /** 行键获取函数 */
738
+ rowKey: (row: T) => DataTableRowKey;
739
+ /** 事件发射器 */
740
+ /** Deletion action completion notification; kept separate from CRUD data mutation. */
741
+ onRowDeleted?: (row: T, index: number) => void;
742
+ /** A bound CRUD action may already report success or failure to the user. */
743
+ isDeleteFeedbackHandled?: (action: ApiFunction<T>) => boolean;
744
+ /** 查看详情回调 */
745
+ onViewDetail?: (data: T) => void;
746
+ }
747
+ /** useTableActions Hook 返回类型 */
748
+ interface UseTableActionsReturn<T extends object = DataRecord> {
749
+ /** 渲染操作列 */
750
+ renderActions: (rowData: T, rowIndex: number) => VNodeChild;
751
+ /** 检查操作是否启用 */
752
+ isActionEnabled: (actionKey: 'edit' | 'delete' | 'detail') => boolean;
753
+ }
754
+ interface BaseOption {
755
+ label: string;
756
+ value: string | number;
757
+ disabled?: boolean;
758
+ }
759
+ interface BaseConfig<T extends object = DataRecord> {
760
+ enabled?: boolean;
761
+ rowCheckable?: (row: T) => boolean;
762
+ }
763
+ type SelectOption = BaseOption;
764
+ interface EditProps {
765
+ min?: number;
766
+ max?: number;
767
+ step?: number;
768
+ showButton?: boolean;
769
+ type?: string;
770
+ rows?: number;
771
+ placeholder?: string;
772
+ options?: SelectOption[];
773
+ rules?: FormItemRule[];
774
+ format?: string;
775
+ valueFormat?: string;
776
+ clearable?: boolean;
777
+ disabled?: boolean;
778
+ readonly?: boolean;
779
+ }
780
+ /**
781
+ * ================= 列类型系统 =================
782
+ * 说明:
783
+ * - BaseTableColumn:去除了 naive 的 key/title/render,提供扩展位
784
+ * - NormalTableColumn:普通数据列,必须有 key + title
785
+ * - BuiltInTableColumn:内置列(selection/expand),不需要 key/title
786
+ * - TableColumn:以上二者联合
787
+ */
788
+ interface BaseTableColumn<T extends object = DataRecord> extends Omit<DataTableBaseColumn<T>, 'key' | 'title' | 'render' | 'type'> {
789
+ key?: DataTableRowKey;
790
+ title?: string;
791
+ visible?: boolean;
792
+ editable?: boolean;
793
+ required?: boolean;
794
+ editType?: EditType;
795
+ editProps?: EditProps;
796
+ editRender?: (value: unknown, rowData: T, rowIndex: number, context: {
797
+ onUpdate: (value: unknown) => void;
798
+ }) => VNodeChild;
799
+ render?: (rowData: T, rowIndex: number) => VNodeChild;
800
+ /** 声明式格式化器(优先级低于 render) */
801
+ formatter?: ColumnFormatter;
802
+ /** 字典显示低于 render/formatter;编辑时显式 editProps.options 优先。 */
803
+ dictionary?: DictionaryBinding;
804
+ fixed?: 'left' | 'right';
805
+ resizable?: boolean;
806
+ minWidth?: number;
807
+ maxWidth?: number;
808
+ }
809
+ interface NormalTableColumn<T extends object = DataRecord> extends BaseTableColumn<T> {
810
+ type?: never;
811
+ key: Extract<keyof T, DataTableRowKey> | DataTableRowKey;
812
+ title: string;
813
+ }
814
+ interface BuiltInTableColumn<T extends object = DataRecord> extends BaseTableColumn<T> {
815
+ /** 内置列类型:无需 key / title */
816
+ type: 'selection' | 'expand' | 'index';
817
+ /** 原生选择列禁用判定;与 config.selection.rowCheckable 一起生效。 */
818
+ disabled?: (row: T) => boolean;
819
+ /** 原生选择列是否多选;maxSelection=1 时仍使用单选。 */
820
+ multiple?: boolean;
821
+ /** 原生展开列判定;与 config.expand.rowExpandable 一起生效。 */
822
+ expandable?: (row: T) => boolean;
823
+ /** 展开行渲染函数(仅当 type = expand 时有效) */
824
+ renderExpand?: (rowData: T, rowIndex: number) => VNodeChild;
825
+ }
826
+ type TableColumn<T extends object = DataRecord> = NormalTableColumn<T> | BuiltInTableColumn<T>;
827
+ type StrictTableColumn<T extends object> = (Omit<NormalTableColumn<T>, 'key'> & {
828
+ key: Extract<keyof T, string>;
829
+ }) | BuiltInTableColumn<T>;
830
+ interface ChildSelectionState {
831
+ selectedKeys: DataTableRowKey[];
832
+ isAllChecked: boolean;
833
+ selectAll: () => void;
834
+ clearAll: () => void;
835
+ }
836
+ interface ExpandConfig<T extends object = DataRecord, C = DataRecord> {
837
+ onLoadData?: (row: T) => Promise<C[]> | C[];
838
+ onError?: (error: unknown, row: T) => void;
839
+ renderContent?: (row: T, expandData: C[], loading: boolean, childSelection?: ChildSelectionState) => VNodeChild;
840
+ rowExpandable?: (row: T) => boolean;
841
+ }
842
+ interface SelectionConfig<T extends object = DataRecord, C = DataRecord> extends BaseConfig<T> {
843
+ enableSelection?: boolean;
844
+ defaultCheckedKeys?: DataTableRowKey[];
845
+ maxSelection?: number;
846
+ enableChildSelection?: boolean;
847
+ childRowCheckable?: (childRow: C, parentRow: T) => boolean;
848
+ enableParentChildLink?: boolean;
849
+ parentChildLinkMode?: ParentChildLinkMode;
850
+ }
851
+ interface TableDisplayProps {
852
+ maxHeight?: number | string;
853
+ minHeight?: number | string;
854
+ scrollX?: number | string;
855
+ striped?: boolean;
856
+ bordered?: boolean;
857
+ singleLine?: boolean;
858
+ size?: 'small' | 'medium' | 'large';
859
+ }
860
+ /** 组件声明的实际属性;与 UI 壳共用,避免旧配置重新混入主契约。 */
861
+ interface TableRuntimeProps<T extends object = DataRecord, C = unknown> {
862
+ /** CRUD 模式自动提供列和数据,可省略。 */
863
+ columns?: TableColumn<T>[];
864
+ data?: MaybeRefLike<T[]>;
865
+ loading?: MaybeRefLike<boolean>;
866
+ rowKey?: TableRowKey<T>;
867
+ /** 功能配置的统一入口。 */
868
+ config?: TableConfig<T, C>;
869
+ /** CRUD 模式自动提供 columns / data / loading,可省略对应属性。 */
870
+ crud?: CrudBinding<T>;
871
+ /** 原生分页入口;声明后优先于 config.pagination。 */
872
+ pagination?: PaginationProps | false;
873
+ remote?: boolean;
874
+ virtualScrollX?: boolean;
875
+ /** 根容器 class,原生 class/style 仍转发到内部表格。 */
876
+ wrapperClass?: vue.HTMLAttributes['class'];
877
+ /** 填满确定高度的容器,保留工具栏和分页空间。 */
878
+ flexHeight?: boolean;
879
+ }
880
+ /** 事件监听与组件共用同一份事件参数,避免将有效监听器误当作旧功能配置。 */
881
+ type TableListeners<T extends object, C> = { [E in keyof TableEmits<T, C> as `on${Capitalize<E>}`]?: (...args: TableEmits<T, C>[E]) => unknown };
882
+ /** 业务功能统一使用 config;有效的原生显示属性继续由 $attrs 透传。 */
883
+ type TableProps<T extends object = DataRecord, C = unknown> = TableRuntimeProps<T, C> & Omit<TableDisplayProps, 'maxHeight' | 'scrollX'> & TableListeners<T, C>;
884
+ interface TableExpandEvents<T extends object = DataRecord> {
885
+ 'expand-change': [expandedKeys: DataTableRowKey[], row?: T, expanded?: boolean];
886
+ }
887
+ interface TableSelectionEvents<T extends object = DataRecord, C = DataRecord> {
888
+ 'selection-change': [checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]>];
889
+ 'child-selection-change': [parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]];
890
+ 'parent-child-link-change': [parentKey: DataTableRowKey, shouldSelect: boolean];
891
+ }
892
+ interface TableEditEvents<T extends object = DataRecord> {
893
+ 'update:data': [data: T[]];
894
+ save: [rowData: T, rowIndex: number, columnKey?: string];
895
+ cancel: [rowData: T, rowIndex: number];
896
+ 'edit-error': [error: unknown];
897
+ }
898
+ interface TableEmits<T extends object = DataRecord, C = DataRecord> extends TableExpandEvents<T>, TableSelectionEvents<T, C>, TableEditEvents<T> {
899
+ 'pagination-change': [page: number, pageSize: number];
900
+ 'row-delete': [deletedRow: T, index: number];
901
+ 'batch-action-error': [error: unknown, actionKey: string];
902
+ 'row-key-error': [issues: TableRowKeyIssue<T>[]];
903
+ 'row-add': [newRow: T];
904
+ 'row-copy': [originalRow: T, newRow: T];
905
+ 'row-move': [row: T, fromIndex: number, toIndex: number];
906
+ 'row-selection-change': [selectedKey: DataTableRowKey | null, selectedRow: T | null];
907
+ 'view-detail': [data: T];
908
+ 'column-change': [columns: TableColumn<T>[]];
909
+ }
910
+ interface TableEditMethods<T extends object = DataRecord> {
911
+ startEdit: (rowKey: DataTableRowKey, columnKey?: string) => void;
912
+ cancelEdit: () => void;
913
+ saveEdit: () => Promise<void>;
914
+ isEditing: (rowKey: DataTableRowKey, columnKey?: string) => boolean;
915
+ getEditingData: () => T | null;
916
+ }
917
+ interface TableExpandMethods {
918
+ expandRow: (rowKey: DataTableRowKey) => Promise<void>;
919
+ collapseRow: (rowKey: DataTableRowKey) => void;
920
+ toggleExpand: (rowKey: DataTableRowKey) => Promise<void>;
921
+ expandAll: () => Promise<void>;
922
+ collapseAll: () => void;
923
+ isExpanded: (rowKey: DataTableRowKey) => boolean;
924
+ retryExpand: (rowKey: DataTableRowKey) => Promise<void>;
925
+ invalidateExpand: (rowKey?: DataTableRowKey) => void;
926
+ }
927
+ interface TableSelectionMethods<T extends object = DataRecord, C = DataRecord> {
928
+ selectRow: (rowKey: DataTableRowKey) => boolean | void;
929
+ unselectRow: (rowKey: DataTableRowKey) => void;
930
+ selectAll: () => void;
931
+ clearSelection: () => void;
932
+ isRowSelected: (rowKey: DataTableRowKey) => boolean;
933
+ getSelectedRows: () => T[];
934
+ selectChildRow: (parentKey: DataTableRowKey, childKey: DataTableRowKey) => void;
935
+ unselectChildRow: (parentKey: DataTableRowKey, childKey: DataTableRowKey) => void;
936
+ selectAllChildren: (parentKey: DataTableRowKey) => void;
937
+ clearChildrenSelection: (parentKey: DataTableRowKey) => void;
938
+ getChildSelectedRows: (parentKey: DataTableRowKey) => C[];
939
+ clearAllSelections: () => void;
940
+ }
941
+ interface TableDynamicRowsMethods<T extends object = DataRecord> {
942
+ addRow: () => void;
943
+ insertRow: () => void;
944
+ deleteRow: () => void;
945
+ copyRow: () => void;
946
+ moveRowUp: () => void;
947
+ moveRowDown: () => void;
948
+ clearRowSelection: () => void;
949
+ getSelectedRowData: () => T | null;
950
+ printTable: (elementRef?: HTMLElement) => Promise<void>;
951
+ downloadTableScreenshot: (elementRef?: HTMLElement, filename?: string) => Promise<void>;
952
+ }
953
+ interface TablePaginationMethods {
954
+ resetToFirstPage: () => void;
955
+ getTotalPages: () => number;
956
+ }
957
+ /** 高级兼容入口的稳定契约;业务行类型与顶层实例保持一致。 */
958
+ interface TableManagerApi<T extends object = DataRecord, C = DataRecord> {
959
+ edit: {
960
+ start: TableEditMethods<T>['startEdit'];
961
+ cancel: TableEditMethods<T>['cancelEdit'];
962
+ save: TableEditMethods<T>['saveEdit'];
963
+ isEditing: TableEditMethods<T>['isEditing'];
964
+ getEditingData: () => T | null | undefined;
965
+ };
966
+ expand: {
967
+ row: TableExpandMethods['expandRow'];
968
+ collapse: TableExpandMethods['collapseRow'];
969
+ toggle: TableExpandMethods['toggleExpand'];
970
+ all: TableExpandMethods['expandAll'];
971
+ collapseAll: TableExpandMethods['collapseAll'];
972
+ isExpanded: TableExpandMethods['isExpanded'];
973
+ };
974
+ selection: {
975
+ select: TableSelectionMethods<T, C>['selectRow'];
976
+ unselect: TableSelectionMethods<T, C>['unselectRow'];
977
+ all: TableSelectionMethods<T, C>['selectAll'];
978
+ clear: TableSelectionMethods<T, C>['clearSelection'];
979
+ isSelected: TableSelectionMethods<T, C>['isRowSelected'];
980
+ getSelected: TableSelectionMethods<T, C>['getSelectedRows'];
981
+ };
982
+ childSelection: {
983
+ select: TableSelectionMethods<T, C>['selectChildRow'];
984
+ unselect: TableSelectionMethods<T, C>['unselectChildRow'];
985
+ selectAll: TableSelectionMethods<T, C>['selectAllChildren'];
986
+ clear: TableSelectionMethods<T, C>['clearChildrenSelection'];
987
+ getSelected: TableSelectionMethods<T, C>['getChildSelectedRows'];
988
+ };
989
+ dynamicRows: {
990
+ add: TableDynamicRowsMethods<T>['addRow'];
991
+ insert: TableDynamicRowsMethods<T>['insertRow'];
992
+ delete: TableDynamicRowsMethods<T>['deleteRow'];
993
+ copy: TableDynamicRowsMethods<T>['copyRow'];
994
+ moveUp: TableDynamicRowsMethods<T>['moveRowUp'];
995
+ moveDown: TableDynamicRowsMethods<T>['moveRowDown'];
996
+ clearSelection: TableDynamicRowsMethods<T>['clearRowSelection'];
997
+ getSelected: TableDynamicRowsMethods<T>['getSelectedRowData'];
998
+ print: TableDynamicRowsMethods<T>['printTable'];
999
+ download: TableDynamicRowsMethods<T>['downloadTableScreenshot'];
1000
+ };
1001
+ clearAllSelections: TableSelectionMethods<T, C>['clearAllSelections'];
1002
+ }
1003
+ interface TableInstance<T extends object = DataRecord, C = DataRecord> extends TableEditMethods<T>, TableExpandMethods, TableSelectionMethods<T, C>, TableDynamicRowsMethods<T>, TablePaginationMethods {
1004
+ exportData: () => Promise<void>;
1005
+ /** 高级兼容入口;常规操作优先使用实例上的选择、展开和编辑方法。 */
1006
+ getManager: () => TableManagerApi<T, C>;
1007
+ /** 此嵌套对象中的 Ref 保持响应式,读取时使用 .value。 */
1008
+ crossPageSelection: Pick<UseCrossPageSelectionReturn<T>, 'selectedKeys' | 'selectedCount' | 'select' | 'unselect' | 'selectAll' | 'clearAll' | 'getSelectedRows'> & {
1009
+ enabled: ComputedRef<boolean>;
1010
+ };
1011
+ }
1012
+ interface UseTableExpandOptions<T extends object = DataRecord, C = DataRecord> extends ExpandConfig<T, C>, SelectionConfig<T, C> {
1013
+ data: Ref<T[]> | ComputedRef<T[]>;
1014
+ rowKey: (row: T) => DataTableRowKey;
1015
+ childRowKey?: (child: C) => DataTableRowKey;
1016
+ /** Native tree children field; omitted for flat/detail-expansion tables. */
1017
+ childrenKey?: string;
1018
+ locale?: ComponentLocale;
1019
+ /** 展开数据等待时的加载内容,C_Table 内置统一 SVG;独立引擎可按需提供。 */
1020
+ renderLoading?: () => VNodeChild;
1021
+ defaultExpandedKeys?: DataTableRowKey[];
1022
+ onExpandChange?: (expandedKeys: DataTableRowKey[], row?: T, expanded?: boolean) => void;
1023
+ onSelectionChange?: (checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]>) => void;
1024
+ onChildSelectionChange?: (parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => void;
1025
+ }
1026
+ interface UseTableExpandReturn<T extends object = DataRecord, C = DataRecord> {
1027
+ expandedKeys: Ref<DataTableRowKey[]>;
1028
+ checkedKeys: Ref<DataTableRowKey[]>;
1029
+ childSelections: Ref<Map<DataTableRowKey, DataTableRowKey[]>>;
1030
+ expandDataMap: Ref<Map<DataTableRowKey, C[]>>;
1031
+ loadingMap: Ref<Map<DataTableRowKey, boolean>>;
1032
+ errorMap: Ref<Map<DataTableRowKey, unknown>>;
1033
+ retryExpand: (key: DataTableRowKey) => Promise<void>;
1034
+ invalidateExpand: (key?: DataTableRowKey) => void;
1035
+ selectedRowsCount: ComputedRef<number>;
1036
+ totalChildSelections: ComputedRef<number>;
1037
+ expandAll: () => Promise<void>;
1038
+ collapseAll: () => void;
1039
+ expandRow: (key: DataTableRowKey) => Promise<void>;
1040
+ handleExpandChange: (keys: DataTableRowKey[]) => void;
1041
+ selectAll: () => void;
1042
+ clearSelection: () => void;
1043
+ clearAllSelections: () => void;
1044
+ handleSelectionChange: (keys: DataTableRowKey[]) => void;
1045
+ getTableColumns: (originalColumns: TableColumn<T>[]) => unknown[];
1046
+ }
1047
+ /** 行操作按钮配置 */
1048
+ interface RowAction<T extends object = DataRecord> {
1049
+ label: string;
1050
+ icon?: string;
1051
+ type?: ButtonType;
1052
+ disabled?: boolean | ((row: T, index: number) => boolean);
1053
+ show?: boolean | ((row: T, index: number) => boolean);
1054
+ onClick?: (row: T, index: number) => unknown;
1055
+ tooltip?: string;
1056
+ }
1057
+ /**
1058
+ * 展平 TableColumn 联合类型以便直接访问 key/title/visible 等属性。
1059
+ * 各 composable 共用此类型,避免重复定义。
1060
+ */
1061
+ type ColumnWithKey = TableColumn & {
1062
+ key?: string;
1063
+ title?: string;
1064
+ visible?: boolean;
25
1065
  width?: number | string;
26
- createText?: string;
27
- saveText?: string;
28
- cancelText?: string;
29
- closable?: boolean;
30
- maskClosable?: boolean;
31
- closeOnEsc?: boolean;
32
- }
33
- interface FormModalEmits<T extends object = FormRecord> {
34
- submit: [payload: SubmitEventPayload<T>, saved: boolean];
35
- close: [];
36
- }
37
- //#endregion
38
- //#region src/components/C_FormModal/index.vue.d.ts
39
- 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<{
40
- props: vue.PublicProps & __VLS_PrettifyLocal<FormModalProps<T> & {
41
- onClose?: (() => any) | undefined;
42
- onSubmit?: ((payload: SubmitEventPayload<T>, saved: boolean) => any) | undefined;
1066
+ align?: string;
1067
+ titleAlign?: string;
1068
+ formatter?: ColumnFormatter;
1069
+ };
1070
+ //#endregion
1071
+ //#region src/components/C_DataPicker/types.d.ts
1072
+ type DataPickerValue = string | number;
1073
+ /** 接口、鉴权与实体映射只在应用中注册一次,组件不探测后端返回结构。 */
1074
+ interface DataPickerSource<T extends object> {
1075
+ rowKey: TableRowKey<T>;
1076
+ value: (row: T) => DataPickerValue;
1077
+ label: (row: T) => string;
1078
+ request: (query: {
1079
+ page: number;
1080
+ pageSize: number;
1081
+ search: string;
1082
+ signal: AbortSignal;
1083
+ }) => Promise<{
1084
+ rows: T[];
1085
+ total: number;
1086
+ }>;
1087
+ resolve?: (values: readonly DataPickerValue[], signal: AbortSignal) => Promise<readonly T[]>;
1088
+ }
1089
+ interface DataPickerProps<T extends object> {
1090
+ source: DataPickerSource<T>;
1091
+ columns: TableColumn<T>[];
1092
+ modelValue?: DataPickerValue | readonly DataPickerValue[] | null;
1093
+ multiple?: boolean;
1094
+ disabled?: boolean;
1095
+ readonly?: boolean;
1096
+ clearable?: boolean;
1097
+ title?: string;
1098
+ placeholder?: string;
1099
+ density?: ComponentDensity;
1100
+ locale?: ComponentLocale;
1101
+ pageSize?: number;
1102
+ }
1103
+ interface DataPickerEmits<T extends object> {
1104
+ 'update:modelValue': [value: DataPickerValue | DataPickerValue[] | null];
1105
+ /** 无 resolve 的未知初值保留原编码,此事件只包含已解析的行。 */
1106
+ select: [rows: T[]];
1107
+ }
1108
+ //#endregion
1109
+ //#region src/components/C_DataPicker/index.vue.d.ts
1110
+ declare const __VLS_export: <T extends object>(__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<{
1111
+ props: vue.PublicProps & __VLS_PrettifyLocal<DataPickerProps<T> & {
1112
+ onSelect?: ((rows: T[]) => any) | undefined;
1113
+ "onUpdate:modelValue"?: ((value: DataPickerValue | DataPickerValue[] | null) => any) | undefined;
43
1114
  }> & (typeof globalThis extends {
44
1115
  __VLS_PROPS_FALLBACK: infer P;
45
1116
  } ? P : {});
46
- expose: (exposed: {}) => void;
1117
+ expose: (exposed: vue.ShallowUnwrapRef<{
1118
+ open: () => void;
1119
+ close: () => void;
1120
+ }>) => void;
47
1121
  attrs: any;
48
- slots: {
49
- [x: string]: ((props: any) => any) | undefined;
50
- };
51
- emit: ((evt: "close") => void) & ((evt: "submit", payload: SubmitEventPayload<T>, saved: boolean) => void);
1122
+ slots: {};
1123
+ emit: ((evt: "select", rows: T[]) => void) & ((evt: "update:modelValue", value: DataPickerValue | DataPickerValue[] | null) => void);
52
1124
  }>) => vue.VNode & {
53
1125
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
54
1126
  };
55
1127
  declare const _default: typeof __VLS_export;
56
1128
  type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
57
1129
  //#endregion
58
- export { FormModalProps as a, FormModalMode as i, FormModalEditor as n, FormModalEmits as r, _default as t };
1130
+ export { FormatterConfig as $, UseTableActionsOptions as A, ExpandConfig$1 as B, TableEmits as C, TableRowKey as D, TableProps as E, ColumnDragConfig as F, ToolbarConfig as G, SelectionConfig$1 as H, CrudBinding as I, createEditModeChecker as J, TreeConfig as K, DisplayConfig as L, UseTableExpandOptions as M, UseTableExpandReturn as N, TableRowKeyIssue as O, BatchActionsConfig as P, ColumnFormatter as Q, EditConfig as R, TableColumn as S, TableManagerApi as T, SummaryConfig as U, ResolvedConfig as V, TableConfig as W, ExportConfig as X, resolveConfig as Y, exportTableData as Z, RenderFunction as _, PrintWatermarkOptions as _t, DataPickerValue as a, useTableGlobalConfig as at, SimpleTableActions as b, ChildSelectionState as c, UseCrossPageSelectionReturn as ct, DataRecord as d, UseRowDragOptions as dt, FormatterType as et, EditMode as f, UseRowDragReturn as ft, ParentChildLinkMode as g, useDynamicRows as gt, PaginationConfig as h, DynamicRowsReturn as ht, DataPickerSource as i, mergeGlobalConfig as it, UseTableActionsReturn as j, TableRuntimeProps as k, ColumnWithKey as l, useCrossPageSelection as lt, NormalTableColumn as m, DynamicRowsOptions as mt, DataPickerEmits as n, TableGlobalConfig as nt, ApiFunction as o, CrossPageSelectionConfig as ot, MaybeRefLike as p, useRowDrag as pt, VirtualScrollConfig as q, DataPickerProps as r, applyFormatter as rt, BuiltInTableColumn as s, UseCrossPageSelectionOptions as st, _default as t, TABLE_GLOBAL_CONFIG_KEY as tt, CustomAction as u, RowDragConfig as ut, RowAction as v, printPresets as vt, TableInstance as w, StrictTableColumn as x, SelectOption as y, usePrintWatermark as yt, ErrorConfig as z };