@antsoo-lib/core 2.0.0 → 2.0.3

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 (73) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/core.css +1 -0
  3. package/dist/index.cjs +57 -0
  4. package/dist/index.js +4154 -0
  5. package/dist/types/BaseSearch/index.d.ts +59 -0
  6. package/dist/types/BaseTable/index.d.ts +204 -0
  7. package/dist/types/Form/CoreForm.d.ts +82 -0
  8. package/dist/types/Form/types.d.ts +57 -0
  9. package/dist/types/SSelectPage/index.d.ts +102 -0
  10. package/dist/types/index.d.ts +13 -0
  11. package/dist/types/render/AreaCascader.d.ts +5 -0
  12. package/dist/types/render/AutoComplete.d.ts +4 -0
  13. package/dist/types/render/Button.d.ts +4 -0
  14. package/dist/types/render/Cascader.d.ts +5 -0
  15. package/dist/types/render/Checkbox.d.ts +4 -0
  16. package/dist/types/render/CheckboxGroup.d.ts +4 -0
  17. package/dist/types/render/Custom.d.ts +8 -0
  18. package/dist/types/render/DatePicker.d.ts +4 -0
  19. package/dist/types/render/Input.d.ts +4 -0
  20. package/dist/types/render/InputGroup.d.ts +5 -0
  21. package/dist/types/render/InputNumber.d.ts +4 -0
  22. package/dist/types/render/InputPassword.d.ts +4 -0
  23. package/dist/types/render/InputRange.d.ts +9 -0
  24. package/dist/types/render/RadioGroup.d.ts +4 -0
  25. package/dist/types/render/Select.d.ts +4 -0
  26. package/dist/types/render/SselectPage.d.ts +4 -0
  27. package/dist/types/render/Switch.d.ts +4 -0
  28. package/dist/types/render/Tree.d.ts +9 -0
  29. package/dist/types/render/TreeSelect.d.ts +4 -0
  30. package/dist/types/render/Upload.d.ts +4 -0
  31. package/dist/types/render/helper.d.ts +10 -0
  32. package/dist/types/render/index.d.ts +43 -0
  33. package/dist/types/render/registry.d.ts +9 -0
  34. package/dist/types/render/state.d.ts +19 -0
  35. package/dist/types/render/types.d.ts +435 -0
  36. package/dist/types/utils/attrMapping.d.ts +26 -0
  37. package/package.json +10 -12
  38. package/src/BaseSearch/index.vue +371 -0
  39. package/src/BaseTable/index.vue +62 -36
  40. package/src/Form/CoreForm.vue +782 -0
  41. package/src/Form/types.ts +86 -0
  42. package/src/SSelectPage/index.vue +607 -0
  43. package/src/index.ts +15 -1
  44. package/src/{BaseTable/renderers → render}/AreaCascader.tsx +3 -3
  45. package/src/{BaseTable/renderers → render}/AutoComplete.tsx +3 -3
  46. package/src/{BaseTable/renderers → render}/Button.tsx +2 -2
  47. package/src/{BaseTable/renderers → render}/Cascader.tsx +3 -3
  48. package/src/{BaseTable/renderers → render}/Checkbox.tsx +2 -2
  49. package/src/{BaseTable/renderers → render}/CheckboxGroup.tsx +2 -2
  50. package/src/render/Custom.tsx +19 -0
  51. package/src/{BaseTable/renderers → render}/DatePicker.tsx +2 -2
  52. package/src/{BaseTable/renderers → render}/Input.tsx +3 -3
  53. package/src/{BaseTable/renderers → render}/InputGroup.tsx +3 -3
  54. package/src/{BaseTable/renderers → render}/InputNumber.tsx +3 -3
  55. package/src/{BaseTable/renderers → render}/InputPassword.tsx +3 -3
  56. package/src/render/InputRange.tsx +154 -0
  57. package/src/{BaseTable/renderers → render}/RadioGroup.tsx +2 -2
  58. package/src/{BaseTable/renderers → render}/Select.tsx +2 -2
  59. package/src/{BaseTable/renderers → render}/SselectPage.tsx +3 -3
  60. package/src/{BaseTable/renderers → render}/Switch.tsx +2 -2
  61. package/src/render/Tree.tsx +136 -0
  62. package/src/{BaseTable/renderers → render}/TreeSelect.tsx +2 -2
  63. package/src/{BaseTable/renderers → render}/Upload.tsx +4 -5
  64. package/src/{BaseTable/utils.tsx → render/helper.tsx} +86 -9
  65. package/src/{BaseTable/renderers → render}/index.ts +45 -4
  66. package/src/{BaseTable → render}/types.ts +62 -2
  67. package/src/utils/attrMapping.ts +106 -0
  68. package/vite.config.ts +15 -2
  69. package/index.css +0 -2
  70. package/index.ts +0 -21
  71. package/src/BaseTable/helpers.tsx +0 -91
  72. /package/src/{BaseTable → render}/registry.ts +0 -0
  73. /package/src/{BaseTable → render}/state.ts +0 -0
@@ -0,0 +1,43 @@
1
+ import { AnyObject } from '../../packages/shared/index.ts';
2
+ import { VNode } from 'vue';
3
+ import { renderAreaCascader } from './AreaCascader';
4
+ import { renderAutoComplete } from './AutoComplete';
5
+ import { renderButton } from './Button';
6
+ import { renderCascader } from './Cascader';
7
+ import { renderCheckbox } from './Checkbox';
8
+ import { renderCheckboxGroup } from './CheckboxGroup';
9
+ import { renderDatePicker } from './DatePicker';
10
+ import { renderInput } from './Input';
11
+ import { renderInputGroup } from './InputGroup';
12
+ import { renderInputNumber } from './InputNumber';
13
+ import { renderInputPassword } from './InputPassword';
14
+ import { renderInputRange } from './InputRange';
15
+ import { renderRadioGroup } from './RadioGroup';
16
+ import { renderSelect } from './Select';
17
+ import { renderSselectPage } from './SselectPage';
18
+ import { renderSwitch } from './Switch';
19
+ import { renderTree } from './Tree';
20
+ import { renderTreeSelect } from './TreeSelect';
21
+ import { renderUpload } from './Upload';
22
+ import { ToolbarState } from './state';
23
+ import { ToolbarItem } from './types';
24
+ export type Renderer = (item: ToolbarItem, toolbarState: ToolbarState, formValues?: AnyObject) => VNode;
25
+ export declare const rendererMap: Record<string, Renderer>;
26
+ /**
27
+ * 注册自定义渲染器
28
+ * @param name 渲染器名称
29
+ * @param renderer 渲染函数
30
+ */
31
+ export declare function registerRenderer(name: string, renderer: Renderer): void;
32
+ /**
33
+ * 批量注册自定义渲染器
34
+ * @param renderers 渲染器映射对象
35
+ */
36
+ export declare function registerRenderers(renderers: Record<string, Renderer>): void;
37
+ /**
38
+ * 获取渲染器
39
+ * @param name 渲染器名称
40
+ * @returns 渲染函数
41
+ */
42
+ export declare function getRenderer(name: string): Renderer | undefined;
43
+ export { renderAreaCascader, renderAutoComplete, renderButton, renderCascader, renderCheckbox, renderCheckboxGroup, renderDatePicker, renderInput, renderInputGroup, renderInputNumber, renderInputPassword, renderInputRange, renderRadioGroup, renderSelect, renderSselectPage, renderSwitch, renderTree, renderTreeSelect, renderUpload, };
@@ -0,0 +1,9 @@
1
+ import { Component } from 'vue';
2
+ export declare function registerBaseTableComponents(components: {
3
+ SselectPage?: Component;
4
+ AutoComplete?: Component;
5
+ Cascader?: Component;
6
+ AreaCascader?: Component;
7
+ Upload?: Component;
8
+ }): void;
9
+ export declare function getRegisteredComponent(name: string): Component | undefined;
@@ -0,0 +1,19 @@
1
+ export interface ToolbarState {
2
+ [key: string]: any;
3
+ }
4
+ type ToolbarValue<T = any> = T | undefined;
5
+ /**
6
+ * 工具栏状态管理组合式API
7
+ */
8
+ export declare function useToolbarState(): {
9
+ state: {
10
+ readonly [x: string]: any;
11
+ };
12
+ setValue: (key: string, value: ToolbarValue) => void;
13
+ getValue: <T = any>(key: string) => ToolbarValue<T>;
14
+ clear: () => void;
15
+ getAllValues: () => {
16
+ [key: string]: any;
17
+ };
18
+ };
19
+ export {};
@@ -0,0 +1,435 @@
1
+ import { ButtonProps, CascaderProps, CheckboxGroupProps, CheckboxProps, ColProps, DatePickerProps, InputNumberProps, InputProps, RadioGroupProps, RowProps, SelectProps, SwitchProps, TreeProps, TreeSelectProps, UploadProps } from '../../packages/components/index.ts';
2
+ import { AnyObject, VoidFunction } from '../../packages/shared/index.ts';
3
+ import { VNode } from 'vue';
4
+ import { CustomToolbarItem } from './Custom';
5
+ import { ToolbarState } from './state';
6
+ export type ToolbarEventHandler = VoidFunction;
7
+ export interface BaseEvents {
8
+ [key: string]: ToolbarEventHandler | undefined;
9
+ }
10
+ export interface BaseToolbarItem {
11
+ key?: string;
12
+ label?: string;
13
+ permission?: string;
14
+ beforeCreate?: boolean | ((toolbarState: ToolbarState) => boolean);
15
+ disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean);
16
+ props?: Record<string, any>;
17
+ events?: BaseEvents;
18
+ }
19
+ export interface ButtonToolbarItem extends BaseToolbarItem {
20
+ type: 'button';
21
+ props?: Partial<ButtonProps> & {
22
+ loading?: boolean;
23
+ disabled?: boolean;
24
+ };
25
+ events?: BaseEvents & {
26
+ onClick?: (loadingControl: {
27
+ setLoading: (loading: boolean) => void;
28
+ getLoading: () => boolean;
29
+ }, allValues: AnyObject, toolbarState: ToolbarState, ...args: any[]) => void;
30
+ };
31
+ }
32
+ export interface SlotConfig {
33
+ content?: {
34
+ component: any;
35
+ key: string;
36
+ props?: AnyObject;
37
+ events?: Record<string, VoidFunction>;
38
+ options?: Array<{
39
+ label: string;
40
+ value: any;
41
+ }>;
42
+ } | ((toolbarState: ToolbarState) => VNode);
43
+ }
44
+ export interface InputToolbarItem extends BaseToolbarItem {
45
+ type: 'input';
46
+ props?: Partial<InputProps> & {
47
+ value?: string;
48
+ autoFocus?: boolean;
49
+ };
50
+ events?: BaseEvents & {
51
+ 'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
52
+ onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void;
53
+ onFocus?: VoidFunction;
54
+ onFocusCapture?: VoidFunction;
55
+ onBlur?: VoidFunction;
56
+ onBlurCapture?: VoidFunction;
57
+ };
58
+ textarea?: boolean;
59
+ slots?: {
60
+ addonBefore?: SlotConfig;
61
+ addonAfter?: SlotConfig;
62
+ prefix?: SlotConfig;
63
+ suffix?: SlotConfig;
64
+ };
65
+ }
66
+ export interface RadioGroupToolbarItem extends BaseToolbarItem {
67
+ type: 'radioGroup';
68
+ props?: Partial<RadioGroupProps> & {
69
+ value?: any;
70
+ };
71
+ events?: BaseEvents & {
72
+ 'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
73
+ onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void;
74
+ };
75
+ }
76
+ export interface CheckboxToolbarItem extends BaseToolbarItem {
77
+ type: 'checkbox';
78
+ props?: Partial<CheckboxProps> & {
79
+ checked?: boolean;
80
+ value?: boolean;
81
+ };
82
+ events?: BaseEvents & {
83
+ 'onUpdate:checked'?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void;
84
+ onChange?: (event: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
85
+ 'onUpdate:value'?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void;
86
+ };
87
+ label?: string;
88
+ }
89
+ export interface SwitchToolbarItem extends BaseToolbarItem {
90
+ type: 'switch';
91
+ props?: Partial<SwitchProps> & {
92
+ checked?: boolean;
93
+ };
94
+ events?: BaseEvents & {
95
+ 'onUpdate:checked'?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void;
96
+ onChange?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void;
97
+ };
98
+ }
99
+ export interface CheckboxGroupToolbarItem extends BaseToolbarItem {
100
+ type: 'checkboxGroup';
101
+ props?: Partial<CheckboxGroupProps> & {
102
+ value?: any[];
103
+ };
104
+ events?: BaseEvents & {
105
+ 'onUpdate:value'?: (value: any[], allValues: AnyObject, toolbarState: ToolbarState) => void;
106
+ onChange?: (checkedValues: any[], allValues: AnyObject, toolbarState: ToolbarState) => void;
107
+ };
108
+ }
109
+ export interface DatePickerToolbarItem extends BaseToolbarItem {
110
+ type: 'datePicker';
111
+ props?: Partial<DatePickerProps> & {
112
+ value?: any;
113
+ autoFocus?: boolean;
114
+ };
115
+ events?: BaseEvents & {
116
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
117
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
118
+ onFocus?: VoidFunction;
119
+ };
120
+ range?: boolean;
121
+ }
122
+ export interface SelectToolbarItem extends BaseToolbarItem {
123
+ type: 'select';
124
+ props?: Partial<SelectProps> & {
125
+ value?: any;
126
+ options?: any[] | ((values: AnyObject) => any[]);
127
+ };
128
+ events?: BaseEvents & {
129
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
130
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
131
+ };
132
+ }
133
+ export interface CascaderToolbarItem extends BaseToolbarItem {
134
+ type: 'cascader';
135
+ props?: Partial<CascaderProps> & {
136
+ value?: any;
137
+ };
138
+ events?: BaseEvents & {
139
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
140
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
141
+ };
142
+ }
143
+ export interface AreaCascaderProps {
144
+ value?: any[];
145
+ placeholder?: string;
146
+ disabled?: boolean;
147
+ allowClear?: boolean;
148
+ [key: string]: any;
149
+ }
150
+ export interface AreaCascaderToolbarItem extends BaseToolbarItem {
151
+ type: 'areaCascader';
152
+ props?: AreaCascaderProps;
153
+ attr?: Record<string, any>;
154
+ events?: BaseEvents & {
155
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
156
+ selectedArea?: (area: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
157
+ };
158
+ }
159
+ export interface TreeSelectToolbarItem extends BaseToolbarItem {
160
+ type: 'treeSelect';
161
+ props?: Partial<TreeSelectProps> & {
162
+ value?: any;
163
+ options?: any[] | ((values: AnyObject) => any[]);
164
+ };
165
+ events?: BaseEvents & {
166
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
167
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
168
+ };
169
+ }
170
+ export interface TreeToolbarItem extends BaseToolbarItem {
171
+ type: 'tree';
172
+ props?: Partial<TreeProps> & {
173
+ checkedKeys?: any[];
174
+ expandedKeys?: any[];
175
+ };
176
+ events?: BaseEvents & {
177
+ 'onUpdate:checkedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
178
+ 'onUpdate:expandedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
179
+ onCheck?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
180
+ onExpand?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
181
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
182
+ };
183
+ }
184
+ export interface InputRangeToolbarItem extends BaseToolbarItem {
185
+ type: 'inputRange';
186
+ props?: {
187
+ startProps?: Record<string, unknown>;
188
+ endProps?: Record<string, unknown>;
189
+ separator?: string;
190
+ startPlaceholder?: string;
191
+ endPlaceholder?: string;
192
+ style?: AnyObject;
193
+ className?: string;
194
+ allowClear?: boolean;
195
+ };
196
+ attr?: string[];
197
+ events?: BaseEvents & {
198
+ 'onUpdate:value'?: (value: [string, string], allValues: AnyObject, toolbarState: ToolbarState) => void;
199
+ onChange?: (value: [string, string], allValues: AnyObject, toolbarState: ToolbarState) => void;
200
+ onStartChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
201
+ onEndChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
202
+ };
203
+ }
204
+ export interface InputNumberToolbarItem extends BaseToolbarItem {
205
+ type: 'inputNumber';
206
+ props?: Partial<InputNumberProps> & {
207
+ value?: any;
208
+ autoFocus?: boolean;
209
+ xmoney?: boolean;
210
+ xprice?: boolean;
211
+ xweight?: boolean;
212
+ xtaxrate?: boolean;
213
+ xnumber?: boolean;
214
+ };
215
+ events?: BaseEvents & {
216
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
217
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
218
+ onStep?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
219
+ onFocus?: VoidFunction;
220
+ onFocusCapture?: VoidFunction;
221
+ onBlur?: VoidFunction;
222
+ onBlurCapture?: VoidFunction;
223
+ };
224
+ slots?: {
225
+ addonBefore?: SlotConfig;
226
+ addonAfter?: SlotConfig;
227
+ prefix?: SlotConfig;
228
+ suffix?: SlotConfig;
229
+ };
230
+ }
231
+ export interface InputPasswordToolbarItem extends BaseToolbarItem {
232
+ type: 'inputPassword';
233
+ props?: Partial<InputProps> & {
234
+ value?: string;
235
+ };
236
+ events?: BaseEvents & {
237
+ 'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
238
+ onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void;
239
+ };
240
+ textarea?: boolean;
241
+ slots?: {
242
+ addonBefore?: SlotConfig;
243
+ addonAfter?: SlotConfig;
244
+ prefix?: SlotConfig;
245
+ suffix?: SlotConfig;
246
+ };
247
+ }
248
+ export interface UploadToolbarItem extends BaseToolbarItem {
249
+ type: 'upload';
250
+ props?: Partial<UploadProps> & {
251
+ value?: any[];
252
+ placeholder?: string;
253
+ allowClear?: boolean;
254
+ disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean);
255
+ multiple?: boolean;
256
+ maxCount?: number;
257
+ listType?: 'text' | 'picture' | 'picture-card';
258
+ api?: {
259
+ url: string;
260
+ method?: 'GET' | 'POST';
261
+ headers?: Record<string, string>;
262
+ };
263
+ extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject);
264
+ dataMapping?: {
265
+ list?: string;
266
+ url?: string;
267
+ name?: string;
268
+ status?: string;
269
+ };
270
+ buttonText?: string;
271
+ placeholderSrc?: string;
272
+ placeholderAlt?: string;
273
+ placeholderClass?: string;
274
+ placeholderStyle?: AnyObject;
275
+ transformData?: (data: any) => any;
276
+ beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean>;
277
+ onPreview?: (file: any) => void;
278
+ onRemove?: (file: any) => boolean | Promise<boolean>;
279
+ };
280
+ passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string;
281
+ events?: BaseEvents & {
282
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
283
+ onChange?: (info: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
284
+ onSuccess?: (response: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
285
+ onError?: (error: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
286
+ };
287
+ }
288
+ export interface SselectPageProps {
289
+ value?: any;
290
+ placeholder?: string;
291
+ allowClear?: boolean;
292
+ showSearch?: boolean;
293
+ disabled?: boolean;
294
+ maxTagCount?: number | 'responsive';
295
+ size?: 'large' | 'middle' | 'small';
296
+ mode?: 'multiple' | 'tags';
297
+ params?: AnyObject;
298
+ api: {
299
+ url: string;
300
+ method?: 'GET' | 'POST';
301
+ headers?: Record<string, string>;
302
+ params?: AnyObject;
303
+ data?: AnyObject;
304
+ request?: (config: {
305
+ method?: 'GET' | 'POST';
306
+ url: string;
307
+ headers?: Record<string, string>;
308
+ params?: AnyObject;
309
+ data?: AnyObject;
310
+ }) => Promise<any>;
311
+ };
312
+ dataMapping?: {
313
+ list?: string;
314
+ total?: string;
315
+ value?: string;
316
+ label?: string;
317
+ };
318
+ pagination?: boolean;
319
+ paginationConfig?: {
320
+ pageField?: string;
321
+ pageSizeField?: string;
322
+ searchField?: string;
323
+ searchContains?: string;
324
+ };
325
+ pageSize?: number;
326
+ searchDelay?: number;
327
+ extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject);
328
+ transformData?: (data: any) => any;
329
+ autoLoad?: boolean;
330
+ autoFocus?: boolean;
331
+ attr?: Record<string, string>;
332
+ [key: string]: any;
333
+ }
334
+ export interface SselectPageToolbarItem extends BaseToolbarItem {
335
+ type: 'sselectPage';
336
+ props?: SselectPageProps & {
337
+ disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean);
338
+ };
339
+ events?: BaseEvents & {
340
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
341
+ onChange?: (value: any, option: any, allOptions: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
342
+ onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
343
+ onClear?: (allValues: AnyObject, toolbarState: ToolbarState) => void;
344
+ };
345
+ }
346
+ export interface AutoCompleteProps {
347
+ value?: any;
348
+ options?: any[];
349
+ placeholder?: string;
350
+ disabled?: boolean;
351
+ allowClear?: boolean;
352
+ [key: string]: any;
353
+ }
354
+ export interface AutoCompleteToolbarItem extends BaseToolbarItem {
355
+ type: 'autoComplete';
356
+ props?: AutoCompleteProps;
357
+ events?: BaseEvents & {
358
+ 'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
359
+ onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
360
+ onSelect?: (value: any, option: any, allValues: AnyObject, toolbarState: ToolbarState) => void;
361
+ onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void;
362
+ };
363
+ }
364
+ export type InputGroupSize = 'large' | 'middle' | 'small' | 'default';
365
+ export interface InputGroupPropsLike {
366
+ size?: InputGroupSize;
367
+ compact?: boolean;
368
+ prefixCls?: string;
369
+ }
370
+ export type PresetXtype = 'add' | 'edit' | 'dels' | 'export' | 'print' | 'files';
371
+ export interface FilesCategoryOption {
372
+ label: string;
373
+ value: string;
374
+ [key: string]: any;
375
+ }
376
+ export interface FilesPresetConfig {
377
+ title?: string;
378
+ billtypeCode: string | ((row: AnyObject) => string);
379
+ categoryOptions: FilesCategoryOption[] | ((row: AnyObject) => FilesCategoryOption[]);
380
+ objIdKey?: string;
381
+ accept?: string;
382
+ passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string;
383
+ maxFileSizeMB?: number;
384
+ maxCount?: number;
385
+ refreshOnSuccess?: boolean;
386
+ }
387
+ export interface PresetBaseToolbarItem extends BaseToolbarItem {
388
+ xtype: PresetXtype;
389
+ permission?: string;
390
+ label?: string;
391
+ events?: any;
392
+ props?: any;
393
+ }
394
+ export interface PresetDelsToolbarItem extends PresetBaseToolbarItem {
395
+ xtype: 'dels';
396
+ api?: {
397
+ url?: string;
398
+ method?: 'get' | 'post';
399
+ useParams?: boolean;
400
+ };
401
+ }
402
+ export interface PresetExportToolbarItem extends PresetBaseToolbarItem {
403
+ xtype: 'export';
404
+ filename?: string;
405
+ }
406
+ export interface PresetFilesToolbarItem extends PresetBaseToolbarItem {
407
+ xtype: 'files';
408
+ files: FilesPresetConfig;
409
+ }
410
+ export type PresetToolbarItem = PresetDelsToolbarItem | PresetExportToolbarItem | PresetFilesToolbarItem;
411
+ export type RenderableToolbarItem = ButtonToolbarItem | InputToolbarItem | RadioGroupToolbarItem | CheckboxToolbarItem | SwitchToolbarItem | CheckboxGroupToolbarItem | DatePickerToolbarItem | UploadToolbarItem | InputNumberToolbarItem | SelectToolbarItem | TreeToolbarItem | TreeSelectToolbarItem | InputPasswordToolbarItem | SselectPageToolbarItem | AutoCompleteToolbarItem | InputGroupToolbarItem | CascaderToolbarItem | AreaCascaderToolbarItem | InputRangeToolbarItem | CustomToolbarItem;
412
+ export type ToolbarItem = RenderableToolbarItem | PresetToolbarItem;
413
+ export type InputGroupChild = RenderableToolbarItem & {
414
+ span?: number;
415
+ flex?: string;
416
+ class?: string;
417
+ style?: AnyObject;
418
+ };
419
+ export interface InputGroupToolbarItem extends BaseToolbarItem {
420
+ [x: string]: any;
421
+ type: 'inputGroup';
422
+ props?: Partial<InputGroupPropsLike>;
423
+ layout?: {
424
+ type?: 'compact' | 'row' | 'none';
425
+ rowProps?: Partial<RowProps>;
426
+ cols?: Array<Partial<ColProps> & {
427
+ span?: number;
428
+ }>;
429
+ };
430
+ children: InputGroupChild[];
431
+ }
432
+ export interface ToolbarConfig {
433
+ items: ToolbarItem[];
434
+ }
435
+ export type { ButtonProps, DatePickerProps, InputNumberProps, InputProps, RadioGroupProps, SelectProps, SwitchProps, TreeSelectProps, UploadProps, };
@@ -0,0 +1,26 @@
1
+ import { AnyObject } from '../../packages/shared/index.ts';
2
+ /**
3
+ * 安全获取嵌套属性值,支持 a.b.c 路径
4
+ */
5
+ export declare function getByPath(obj: any, path?: string): any;
6
+ /**
7
+ * 根据 attr 规则从 formData 聚合初始值:
8
+ * - 数组:返回对应字段的值数组
9
+ * - 对象:返回 { [sourcePath]: formData[targetKey] } 结构,便于组件按源字段进行回显
10
+ */
11
+ export declare function buildValueFromAttr(formData: AnyObject, attr: string[] | AnyObject): any;
12
+ /**
13
+ * 按 attr 对象映射将选项数据写入 formData:
14
+ * - 支持单选与多选;
15
+ * - 优先使用 option.__raw 原始对象,其次使用 option 自身;
16
+ * - sourcePath 支持嵌套路径(例如 'data.id')。
17
+ */
18
+ export declare function applyAttrMapping(formData: AnyObject, toolbarState: {
19
+ setValue: (k: string, v: any) => void;
20
+ }, attr: Record<string, string>, value: any, option: any, isMultiple: boolean): void;
21
+ declare const _default: {
22
+ buildValueFromAttr: typeof buildValueFromAttr;
23
+ applyAttrMapping: typeof applyAttrMapping;
24
+ getByPath: typeof getByPath;
25
+ };
26
+ export default _default;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@antsoo-lib/core",
3
3
  "type": "module",
4
- "version": "2.0.0",
4
+ "version": "2.0.3",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "exports": {
@@ -20,23 +20,21 @@
20
20
  "registry": "https://registry.npmjs.com/"
21
21
  },
22
22
  "peerDependencies": {
23
+ "@ant-design/icons-svg": "^4.4.2",
24
+ "@types/lodash-es": "^4.17.12",
25
+ "@vxe-ui/plugin-export-xlsx": "^4.0.7",
26
+ "@vxe-ui/plugin-menu": "^4.0.2",
27
+ "@vxe-ui/plugin-render-wangeditor": "^4.0.2",
23
28
  "lodash-es": "^4.17.21",
24
29
  "vue": "^3.3.4",
25
- "@antsoo-lib/components": "1.0.0",
30
+ "vxe-pc-ui": "^4.12.31",
31
+ "vxe-table": "^4.17.48",
32
+ "xe-utils": "^4.0.0",
26
33
  "@antsoo-lib/icons": "0.2.0",
34
+ "@antsoo-lib/components": "1.0.0",
27
35
  "@antsoo-lib/shared": "0.1.0",
28
36
  "@antsoo-lib/utils": "0.2.0"
29
37
  },
30
- "dependencies": {
31
- "vxe-pc-ui": "^4.12.31",
32
- "vxe-table": "^4.17.48",
33
- "xe-utils": "^4.0.0"
34
- },
35
- "devDependencies": {
36
- "@ant-design/icons-svg": "^4.4.2",
37
- "@types/lodash-es": "^4.17.12",
38
- "lodash-es": "^4.17.21"
39
- },
40
38
  "scripts": {
41
39
  "dev": "vite build --watch",
42
40
  "build": "vite build",