@antsoo-lib/core 3.0.0 → 3.0.1
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 +6 -0
- package/dist/core.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +6 -5
- package/dist/types/BaseSearch/index.d.ts +1 -1
- package/dist/types/BaseTable/index.d.ts +5 -475
- package/dist/types/Form/CoreForm.d.ts +82 -0
- package/dist/types/SSelectPage/index.d.ts +102 -0
- package/package.json +3 -3
- package/src/BaseSearch/index.vue +371 -371
- package/src/BaseTable/index.vue +910 -910
- package/src/Form/CoreForm.vue +782 -782
- package/src/Form/types.ts +86 -86
- package/src/SSelectPage/index.vue +607 -607
- package/src/index.ts +17 -17
- package/src/render/AreaCascader.tsx +64 -64
- package/src/render/AutoComplete.tsx +101 -101
- package/src/render/Button.tsx +62 -62
- package/src/render/Cascader.tsx +45 -45
- package/src/render/Checkbox.tsx +65 -65
- package/src/render/CheckboxGroup.tsx +57 -57
- package/src/render/Custom.tsx +19 -19
- package/src/render/DatePicker.tsx +83 -83
- package/src/render/Input.tsx +140 -140
- package/src/render/InputGroup.tsx +115 -115
- package/src/render/InputNumber.tsx +205 -205
- package/src/render/InputPassword.tsx +81 -81
- package/src/render/InputRange.tsx +154 -154
- package/src/render/RadioGroup.tsx +63 -63
- package/src/render/Select.tsx +96 -96
- package/src/render/SselectPage.tsx +107 -107
- package/src/render/Switch.tsx +60 -60
- package/src/render/Tree.tsx +136 -136
- package/src/render/TreeSelect.tsx +81 -81
- package/src/render/Upload.tsx +91 -91
- package/src/render/helper.tsx +221 -221
- package/src/render/index.ts +108 -108
- package/src/render/registry.ts +20 -20
- package/src/render/state.ts +37 -37
- package/src/render/types.ts +567 -567
- package/src/utils/attrMapping.ts +106 -106
- package/vite.config.ts +61 -61
- package/.turbo/turbo-build.log +0 -40
package/src/render/types.ts
CHANGED
|
@@ -1,567 +1,567 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ButtonProps,
|
|
3
|
-
CascaderProps,
|
|
4
|
-
CheckboxGroupProps,
|
|
5
|
-
CheckboxProps,
|
|
6
|
-
ColProps,
|
|
7
|
-
DatePickerProps,
|
|
8
|
-
InputNumberProps,
|
|
9
|
-
InputProps,
|
|
10
|
-
RadioGroupProps,
|
|
11
|
-
RowProps,
|
|
12
|
-
SelectProps,
|
|
13
|
-
SwitchProps,
|
|
14
|
-
TreeProps,
|
|
15
|
-
TreeSelectProps,
|
|
16
|
-
UploadProps,
|
|
17
|
-
} from '@antsoo-lib/components'
|
|
18
|
-
import type { AnyObject, VoidFunction } from '@antsoo-lib/shared'
|
|
19
|
-
|
|
20
|
-
import type { VNode } from 'vue'
|
|
21
|
-
|
|
22
|
-
import type { CustomToolbarItem } from './Custom'
|
|
23
|
-
import type { ToolbarState } from './state'
|
|
24
|
-
|
|
25
|
-
// 事件处理函数类型定义
|
|
26
|
-
export type ToolbarEventHandler = VoidFunction
|
|
27
|
-
|
|
28
|
-
// 基础事件接口
|
|
29
|
-
export interface BaseEvents {
|
|
30
|
-
[key: string]: ToolbarEventHandler | undefined
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface BaseToolbarItem {
|
|
34
|
-
key?: string
|
|
35
|
-
label?: string
|
|
36
|
-
permission?: string
|
|
37
|
-
beforeCreate?: boolean | ((toolbarState: ToolbarState) => boolean)
|
|
38
|
-
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
39
|
-
props?: Record<string, any>
|
|
40
|
-
events?: BaseEvents
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// 按钮工具栏项目
|
|
44
|
-
export interface ButtonToolbarItem extends BaseToolbarItem {
|
|
45
|
-
type: 'button'
|
|
46
|
-
props?: Partial<ButtonProps> & { loading?: boolean; disabled?: boolean }
|
|
47
|
-
events?: BaseEvents & {
|
|
48
|
-
onClick?: (
|
|
49
|
-
loadingControl: { setLoading: (loading: boolean) => void; getLoading: () => boolean },
|
|
50
|
-
allValues: AnyObject,
|
|
51
|
-
toolbarState: ToolbarState,
|
|
52
|
-
...args: any[]
|
|
53
|
-
) => void
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// 插槽配置接口
|
|
58
|
-
export interface SlotConfig {
|
|
59
|
-
// 插槽内容可以是组件配置或渲染函数
|
|
60
|
-
content?:
|
|
61
|
-
| {
|
|
62
|
-
component: any // 组件
|
|
63
|
-
key: string // 主表字段
|
|
64
|
-
props?: AnyObject // 组件属性
|
|
65
|
-
events?: Record<string, VoidFunction> // 组件事件
|
|
66
|
-
options?: Array<{ label: string; value: any }> // 选项数据(用于select等)
|
|
67
|
-
}
|
|
68
|
-
| ((toolbarState: ToolbarState) => VNode)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// 输入框工具栏项目
|
|
72
|
-
export interface InputToolbarItem extends BaseToolbarItem {
|
|
73
|
-
type: 'input'
|
|
74
|
-
props?: Partial<InputProps> & { value?: string; autoFocus?: boolean }
|
|
75
|
-
events?: BaseEvents & {
|
|
76
|
-
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
77
|
-
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
78
|
-
onFocus?: VoidFunction
|
|
79
|
-
onFocusCapture?: VoidFunction
|
|
80
|
-
onBlur?: VoidFunction
|
|
81
|
-
onBlurCapture?: VoidFunction
|
|
82
|
-
}
|
|
83
|
-
textarea?: boolean
|
|
84
|
-
// 插槽配置
|
|
85
|
-
slots?: {
|
|
86
|
-
addonBefore?: SlotConfig
|
|
87
|
-
addonAfter?: SlotConfig
|
|
88
|
-
prefix?: SlotConfig
|
|
89
|
-
suffix?: SlotConfig
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// 单选框工具栏项目
|
|
94
|
-
export interface RadioGroupToolbarItem extends BaseToolbarItem {
|
|
95
|
-
type: 'radioGroup'
|
|
96
|
-
props?: Partial<RadioGroupProps> & { value?: any }
|
|
97
|
-
events?: BaseEvents & {
|
|
98
|
-
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
99
|
-
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 复选框工具栏项目
|
|
104
|
-
export interface CheckboxToolbarItem extends BaseToolbarItem {
|
|
105
|
-
type: 'checkbox'
|
|
106
|
-
props?: Partial<CheckboxProps> & { checked?: boolean; value?: boolean }
|
|
107
|
-
events?: BaseEvents & {
|
|
108
|
-
'onUpdate:checked'?: (
|
|
109
|
-
checked: boolean,
|
|
110
|
-
allValues: AnyObject,
|
|
111
|
-
toolbarState: ToolbarState,
|
|
112
|
-
) => void
|
|
113
|
-
onChange?: (event: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
114
|
-
'onUpdate:value'?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
115
|
-
}
|
|
116
|
-
label?: string // 复选框后面显示的文案
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// 开关工具栏项目
|
|
120
|
-
export interface SwitchToolbarItem extends BaseToolbarItem {
|
|
121
|
-
type: 'switch'
|
|
122
|
-
props?: Partial<SwitchProps> & { checked?: boolean }
|
|
123
|
-
events?: BaseEvents & {
|
|
124
|
-
'onUpdate:checked'?: (
|
|
125
|
-
checked: boolean,
|
|
126
|
-
allValues: AnyObject,
|
|
127
|
-
toolbarState: ToolbarState,
|
|
128
|
-
) => void
|
|
129
|
-
onChange?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// 复选框组工具栏项目
|
|
134
|
-
export interface CheckboxGroupToolbarItem extends BaseToolbarItem {
|
|
135
|
-
type: 'checkboxGroup'
|
|
136
|
-
props?: Partial<CheckboxGroupProps> & { value?: any[] }
|
|
137
|
-
events?: BaseEvents & {
|
|
138
|
-
'onUpdate:value'?: (value: any[], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
139
|
-
onChange?: (checkedValues: any[], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// 日期选择器工具栏项目
|
|
144
|
-
export interface DatePickerToolbarItem extends BaseToolbarItem {
|
|
145
|
-
type: 'datePicker'
|
|
146
|
-
props?: Partial<DatePickerProps> & { value?: any; autoFocus?: boolean }
|
|
147
|
-
events?: BaseEvents & {
|
|
148
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
149
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
150
|
-
onFocus?: VoidFunction
|
|
151
|
-
}
|
|
152
|
-
range?: boolean
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export interface SelectToolbarItem extends BaseToolbarItem {
|
|
156
|
-
type: 'select'
|
|
157
|
-
props?: Partial<SelectProps> & {
|
|
158
|
-
value?: any
|
|
159
|
-
options?: any[] | ((values: AnyObject) => any[])
|
|
160
|
-
}
|
|
161
|
-
events?: BaseEvents & {
|
|
162
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
163
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// 级联选择器工具栏项目
|
|
168
|
-
export interface CascaderToolbarItem extends BaseToolbarItem {
|
|
169
|
-
type: 'cascader'
|
|
170
|
-
props?: Partial<CascaderProps> & { value?: any }
|
|
171
|
-
events?: BaseEvents & {
|
|
172
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
173
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// 地区级联选择器属性定义
|
|
178
|
-
export interface AreaCascaderProps {
|
|
179
|
-
value?: any[]
|
|
180
|
-
placeholder?: string
|
|
181
|
-
disabled?: boolean
|
|
182
|
-
allowClear?: boolean
|
|
183
|
-
[key: string]: any
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// 地区级联选择器工具栏项目
|
|
187
|
-
export interface AreaCascaderToolbarItem extends BaseToolbarItem {
|
|
188
|
-
type: 'areaCascader'
|
|
189
|
-
props?: AreaCascaderProps
|
|
190
|
-
attr?: Record<string, any>
|
|
191
|
-
events?: BaseEvents & {
|
|
192
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
193
|
-
selectedArea?: (area: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// 树选择器工具栏项目
|
|
198
|
-
export interface TreeSelectToolbarItem extends BaseToolbarItem {
|
|
199
|
-
type: 'treeSelect'
|
|
200
|
-
props?: Partial<TreeSelectProps> & {
|
|
201
|
-
value?: any
|
|
202
|
-
options?: any[] | ((values: AnyObject) => any[])
|
|
203
|
-
}
|
|
204
|
-
events?: BaseEvents & {
|
|
205
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
206
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
export interface TreeToolbarItem extends BaseToolbarItem {
|
|
211
|
-
type: 'tree'
|
|
212
|
-
props?: Partial<TreeProps> & {
|
|
213
|
-
checkedKeys?: any[]
|
|
214
|
-
expandedKeys?: any[]
|
|
215
|
-
}
|
|
216
|
-
events?: BaseEvents & {
|
|
217
|
-
'onUpdate:checkedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
218
|
-
'onUpdate:expandedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
219
|
-
onCheck?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
220
|
-
onExpand?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
221
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
export interface InputRangeToolbarItem extends BaseToolbarItem {
|
|
226
|
-
type: 'inputRange'
|
|
227
|
-
props?: {
|
|
228
|
-
startProps?: Record<string, unknown>
|
|
229
|
-
endProps?: Record<string, unknown>
|
|
230
|
-
separator?: string
|
|
231
|
-
startPlaceholder?: string
|
|
232
|
-
endPlaceholder?: string
|
|
233
|
-
style?: AnyObject
|
|
234
|
-
className?: string
|
|
235
|
-
allowClear?: boolean
|
|
236
|
-
}
|
|
237
|
-
attr?: string[]
|
|
238
|
-
events?: BaseEvents & {
|
|
239
|
-
'onUpdate:value'?: (
|
|
240
|
-
value: [string, string],
|
|
241
|
-
allValues: AnyObject,
|
|
242
|
-
toolbarState: ToolbarState,
|
|
243
|
-
) => void
|
|
244
|
-
onChange?: (value: [string, string], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
245
|
-
onStartChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
246
|
-
onEndChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export interface InputNumberToolbarItem extends BaseToolbarItem {
|
|
251
|
-
type: 'inputNumber'
|
|
252
|
-
props?: Partial<InputNumberProps> & {
|
|
253
|
-
value?: any
|
|
254
|
-
autoFocus?: boolean
|
|
255
|
-
xmoney?: boolean
|
|
256
|
-
xprice?: boolean
|
|
257
|
-
xweight?: boolean
|
|
258
|
-
xtaxrate?: boolean
|
|
259
|
-
xnumber?: boolean
|
|
260
|
-
}
|
|
261
|
-
events?: BaseEvents & {
|
|
262
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
263
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
264
|
-
onStep?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
265
|
-
onFocus?: VoidFunction
|
|
266
|
-
onFocusCapture?: VoidFunction
|
|
267
|
-
onBlur?: VoidFunction
|
|
268
|
-
onBlurCapture?: VoidFunction
|
|
269
|
-
}
|
|
270
|
-
slots?: {
|
|
271
|
-
addonBefore?: SlotConfig
|
|
272
|
-
addonAfter?: SlotConfig
|
|
273
|
-
prefix?: SlotConfig
|
|
274
|
-
suffix?: SlotConfig
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
export interface InputPasswordToolbarItem extends BaseToolbarItem {
|
|
279
|
-
type: 'inputPassword'
|
|
280
|
-
props?: Partial<InputProps> & { value?: string }
|
|
281
|
-
events?: BaseEvents & {
|
|
282
|
-
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
283
|
-
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
284
|
-
}
|
|
285
|
-
textarea?: boolean
|
|
286
|
-
// 插槽配置
|
|
287
|
-
slots?: {
|
|
288
|
-
addonBefore?: SlotConfig
|
|
289
|
-
addonAfter?: SlotConfig
|
|
290
|
-
prefix?: SlotConfig
|
|
291
|
-
suffix?: SlotConfig
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
export interface UploadToolbarItem extends BaseToolbarItem {
|
|
296
|
-
type: 'upload'
|
|
297
|
-
props?: Partial<UploadProps> & {
|
|
298
|
-
value?: any[]
|
|
299
|
-
// 基础属性
|
|
300
|
-
placeholder?: string
|
|
301
|
-
allowClear?: boolean
|
|
302
|
-
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
303
|
-
multiple?: boolean
|
|
304
|
-
maxCount?: number
|
|
305
|
-
listType?: 'text' | 'picture' | 'picture-card'
|
|
306
|
-
|
|
307
|
-
// 接口配置
|
|
308
|
-
api?: {
|
|
309
|
-
url: string
|
|
310
|
-
method?: 'GET' | 'POST'
|
|
311
|
-
headers?: Record<string, string>
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// 额外参数配置
|
|
315
|
-
extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject)
|
|
316
|
-
|
|
317
|
-
// 数据映射配置
|
|
318
|
-
dataMapping?: {
|
|
319
|
-
list?: string // 文件列表字段路径
|
|
320
|
-
url?: string // 文件URL字段
|
|
321
|
-
name?: string // 文件名字段
|
|
322
|
-
status?: string // 文件状态字段
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// UI 配置
|
|
326
|
-
buttonText?: string // 上传按钮文本,默认为"点击上传"
|
|
327
|
-
placeholderSrc?: string // picture-card 模式下的占位符图片地址
|
|
328
|
-
placeholderAlt?: string // 占位符图片的 alt 属性
|
|
329
|
-
placeholderClass?: string // 占位符图片的 CSS 类名
|
|
330
|
-
placeholderStyle?: AnyObject // 占位符图片的内联样式
|
|
331
|
-
|
|
332
|
-
// 其他配置
|
|
333
|
-
transformData?: (data: any) => any
|
|
334
|
-
beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean>
|
|
335
|
-
onPreview?: (file: any) => void
|
|
336
|
-
onRemove?: (file: any) => boolean | Promise<boolean>
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// 文件类型限制配置
|
|
340
|
-
passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string
|
|
341
|
-
|
|
342
|
-
events?: BaseEvents & {
|
|
343
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
344
|
-
onChange?: (info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
345
|
-
onSuccess?: (response: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
346
|
-
onError?: (error: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// SselectPage 属性定义
|
|
351
|
-
export interface SselectPageProps {
|
|
352
|
-
value?: any
|
|
353
|
-
placeholder?: string
|
|
354
|
-
allowClear?: boolean
|
|
355
|
-
showSearch?: boolean
|
|
356
|
-
disabled?: boolean
|
|
357
|
-
maxTagCount?: number | 'responsive'
|
|
358
|
-
size?: 'large' | 'middle' | 'small'
|
|
359
|
-
mode?: 'multiple' | 'tags'
|
|
360
|
-
params?: AnyObject
|
|
361
|
-
api: {
|
|
362
|
-
url: string
|
|
363
|
-
method?: 'GET' | 'POST'
|
|
364
|
-
headers?: Record<string, string>
|
|
365
|
-
params?: AnyObject
|
|
366
|
-
data?: AnyObject
|
|
367
|
-
request?: (config: {
|
|
368
|
-
method?: 'GET' | 'POST'
|
|
369
|
-
url: string
|
|
370
|
-
headers?: Record<string, string>
|
|
371
|
-
params?: AnyObject
|
|
372
|
-
data?: AnyObject
|
|
373
|
-
}) => Promise<any>
|
|
374
|
-
}
|
|
375
|
-
dataMapping?: {
|
|
376
|
-
list?: string
|
|
377
|
-
total?: string
|
|
378
|
-
value?: string
|
|
379
|
-
label?: string
|
|
380
|
-
}
|
|
381
|
-
pagination?: boolean
|
|
382
|
-
paginationConfig?: {
|
|
383
|
-
pageField?: string
|
|
384
|
-
pageSizeField?: string
|
|
385
|
-
searchField?: string
|
|
386
|
-
searchContains?: string
|
|
387
|
-
}
|
|
388
|
-
pageSize?: number
|
|
389
|
-
searchDelay?: number
|
|
390
|
-
extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject)
|
|
391
|
-
transformData?: (data: any) => any
|
|
392
|
-
autoLoad?: boolean
|
|
393
|
-
autoFocus?: boolean
|
|
394
|
-
attr?: Record<string, string>
|
|
395
|
-
[key: string]: any
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
export interface SselectPageToolbarItem extends BaseToolbarItem {
|
|
399
|
-
type: 'sselectPage'
|
|
400
|
-
props?: SselectPageProps & {
|
|
401
|
-
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
402
|
-
}
|
|
403
|
-
events?: BaseEvents & {
|
|
404
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
405
|
-
onChange?: (
|
|
406
|
-
value: any,
|
|
407
|
-
option: any,
|
|
408
|
-
allOptions: any,
|
|
409
|
-
allValues: AnyObject,
|
|
410
|
-
toolbarState: ToolbarState,
|
|
411
|
-
) => void
|
|
412
|
-
onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
413
|
-
onClear?: (allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
export interface AutoCompleteProps {
|
|
418
|
-
value?: any
|
|
419
|
-
options?: any[]
|
|
420
|
-
placeholder?: string
|
|
421
|
-
disabled?: boolean
|
|
422
|
-
allowClear?: boolean
|
|
423
|
-
[key: string]: any
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
export interface AutoCompleteToolbarItem extends BaseToolbarItem {
|
|
427
|
-
type: 'autoComplete'
|
|
428
|
-
props?: AutoCompleteProps
|
|
429
|
-
events?: BaseEvents & {
|
|
430
|
-
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
431
|
-
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
432
|
-
onSelect?: (value: any, option: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
433
|
-
onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
// ------------------------------
|
|
438
|
-
// Input.Group 渲染器配置定义
|
|
439
|
-
// ------------------------------
|
|
440
|
-
export type InputGroupSize = 'large' | 'middle' | 'small' | 'default'
|
|
441
|
-
export interface InputGroupPropsLike {
|
|
442
|
-
size?: InputGroupSize
|
|
443
|
-
compact?: boolean
|
|
444
|
-
prefixCls?: string
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
// 允许在工具栏中直接使用预设描述项(xtype)
|
|
448
|
-
export type PresetXtype = 'add' | 'edit' | 'dels' | 'export' | 'print' | 'files'
|
|
449
|
-
|
|
450
|
-
export interface FilesCategoryOption {
|
|
451
|
-
label: string
|
|
452
|
-
value: string
|
|
453
|
-
[key: string]: any
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
export interface FilesPresetConfig {
|
|
457
|
-
title?: string
|
|
458
|
-
// 单据类型:决定附件归属(UploadPopup 内部请求依赖该字段)
|
|
459
|
-
billtypeCode: string | ((row: AnyObject) => string)
|
|
460
|
-
// 分类下拉:UploadPopup 打开后默认选第一个,并按 category 拉历史列表
|
|
461
|
-
categoryOptions: FilesCategoryOption[] | ((row: AnyObject) => FilesCategoryOption[])
|
|
462
|
-
// objId 从行对象取值的字段名,默认 id
|
|
463
|
-
objIdKey?: string
|
|
464
|
-
accept?: string
|
|
465
|
-
passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string
|
|
466
|
-
maxFileSizeMB?: number
|
|
467
|
-
maxCount?: number
|
|
468
|
-
// 上传成功后是否刷新表格(由 SearchTable.openFilesPopup 控制)
|
|
469
|
-
refreshOnSuccess?: boolean
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
export interface PresetBaseToolbarItem extends BaseToolbarItem {
|
|
473
|
-
xtype: PresetXtype
|
|
474
|
-
permission?: string
|
|
475
|
-
label?: string
|
|
476
|
-
events?: any
|
|
477
|
-
props?: any
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
export interface PresetDelsToolbarItem extends PresetBaseToolbarItem {
|
|
481
|
-
xtype: 'dels'
|
|
482
|
-
api?: {
|
|
483
|
-
url?: string
|
|
484
|
-
method?: 'get' | 'post'
|
|
485
|
-
useParams?: boolean
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
export interface PresetExportToolbarItem extends PresetBaseToolbarItem {
|
|
490
|
-
xtype: 'export'
|
|
491
|
-
filename?: string
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
export interface PresetFilesToolbarItem extends PresetBaseToolbarItem {
|
|
495
|
-
xtype: 'files'
|
|
496
|
-
// 附件预设配置:由 SearchTable 内置 UploadPopup 消费
|
|
497
|
-
files: FilesPresetConfig
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
export type PresetToolbarItem =
|
|
501
|
-
| PresetDelsToolbarItem
|
|
502
|
-
| PresetExportToolbarItem
|
|
503
|
-
| PresetFilesToolbarItem
|
|
504
|
-
|
|
505
|
-
// Renderable items (those with a 'type' property)
|
|
506
|
-
export type RenderableToolbarItem =
|
|
507
|
-
| ButtonToolbarItem
|
|
508
|
-
| InputToolbarItem
|
|
509
|
-
| RadioGroupToolbarItem
|
|
510
|
-
| CheckboxToolbarItem
|
|
511
|
-
| SwitchToolbarItem
|
|
512
|
-
| CheckboxGroupToolbarItem
|
|
513
|
-
| DatePickerToolbarItem
|
|
514
|
-
| UploadToolbarItem
|
|
515
|
-
| InputNumberToolbarItem
|
|
516
|
-
| SelectToolbarItem
|
|
517
|
-
| TreeToolbarItem
|
|
518
|
-
| TreeSelectToolbarItem
|
|
519
|
-
| InputPasswordToolbarItem
|
|
520
|
-
| SselectPageToolbarItem
|
|
521
|
-
| AutoCompleteToolbarItem
|
|
522
|
-
| InputGroupToolbarItem
|
|
523
|
-
| CascaderToolbarItem
|
|
524
|
-
| AreaCascaderToolbarItem
|
|
525
|
-
| InputRangeToolbarItem
|
|
526
|
-
| CustomToolbarItem
|
|
527
|
-
|
|
528
|
-
export type ToolbarItem = RenderableToolbarItem | PresetToolbarItem
|
|
529
|
-
|
|
530
|
-
export type InputGroupChild = RenderableToolbarItem & {
|
|
531
|
-
// 当使用 Row 布局时的列宽设置
|
|
532
|
-
span?: number // 24 栅格系统
|
|
533
|
-
flex?: string // 可选:flex 布局
|
|
534
|
-
class?: string
|
|
535
|
-
style?: AnyObject
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
export interface InputGroupToolbarItem extends BaseToolbarItem {
|
|
539
|
-
[x: string]: any
|
|
540
|
-
type: 'inputGroup'
|
|
541
|
-
props?: Partial<InputGroupPropsLike>
|
|
542
|
-
// 布局控制:compact(紧凑)/ row(栅格)/ none(默认)
|
|
543
|
-
layout?: {
|
|
544
|
-
type?: 'compact' | 'row' | 'none'
|
|
545
|
-
rowProps?: Partial<RowProps>
|
|
546
|
-
// 针对每个子项的列设置(仅当 type=row 时生效)
|
|
547
|
-
cols?: Array<Partial<ColProps> & { span?: number }>
|
|
548
|
-
}
|
|
549
|
-
children: InputGroupChild[]
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// 工具栏配置类型
|
|
553
|
-
export interface ToolbarConfig {
|
|
554
|
-
items: ToolbarItem[]
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
export type {
|
|
558
|
-
ButtonProps,
|
|
559
|
-
DatePickerProps,
|
|
560
|
-
InputNumberProps,
|
|
561
|
-
InputProps,
|
|
562
|
-
RadioGroupProps,
|
|
563
|
-
SelectProps,
|
|
564
|
-
SwitchProps,
|
|
565
|
-
TreeSelectProps,
|
|
566
|
-
UploadProps,
|
|
567
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
ButtonProps,
|
|
3
|
+
CascaderProps,
|
|
4
|
+
CheckboxGroupProps,
|
|
5
|
+
CheckboxProps,
|
|
6
|
+
ColProps,
|
|
7
|
+
DatePickerProps,
|
|
8
|
+
InputNumberProps,
|
|
9
|
+
InputProps,
|
|
10
|
+
RadioGroupProps,
|
|
11
|
+
RowProps,
|
|
12
|
+
SelectProps,
|
|
13
|
+
SwitchProps,
|
|
14
|
+
TreeProps,
|
|
15
|
+
TreeSelectProps,
|
|
16
|
+
UploadProps,
|
|
17
|
+
} from '@antsoo-lib/components'
|
|
18
|
+
import type { AnyObject, VoidFunction } from '@antsoo-lib/shared'
|
|
19
|
+
|
|
20
|
+
import type { VNode } from 'vue'
|
|
21
|
+
|
|
22
|
+
import type { CustomToolbarItem } from './Custom'
|
|
23
|
+
import type { ToolbarState } from './state'
|
|
24
|
+
|
|
25
|
+
// 事件处理函数类型定义
|
|
26
|
+
export type ToolbarEventHandler = VoidFunction
|
|
27
|
+
|
|
28
|
+
// 基础事件接口
|
|
29
|
+
export interface BaseEvents {
|
|
30
|
+
[key: string]: ToolbarEventHandler | undefined
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface BaseToolbarItem {
|
|
34
|
+
key?: string
|
|
35
|
+
label?: string
|
|
36
|
+
permission?: string
|
|
37
|
+
beforeCreate?: boolean | ((toolbarState: ToolbarState) => boolean)
|
|
38
|
+
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
39
|
+
props?: Record<string, any>
|
|
40
|
+
events?: BaseEvents
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 按钮工具栏项目
|
|
44
|
+
export interface ButtonToolbarItem extends BaseToolbarItem {
|
|
45
|
+
type: 'button'
|
|
46
|
+
props?: Partial<ButtonProps> & { loading?: boolean; disabled?: boolean }
|
|
47
|
+
events?: BaseEvents & {
|
|
48
|
+
onClick?: (
|
|
49
|
+
loadingControl: { setLoading: (loading: boolean) => void; getLoading: () => boolean },
|
|
50
|
+
allValues: AnyObject,
|
|
51
|
+
toolbarState: ToolbarState,
|
|
52
|
+
...args: any[]
|
|
53
|
+
) => void
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// 插槽配置接口
|
|
58
|
+
export interface SlotConfig {
|
|
59
|
+
// 插槽内容可以是组件配置或渲染函数
|
|
60
|
+
content?:
|
|
61
|
+
| {
|
|
62
|
+
component: any // 组件
|
|
63
|
+
key: string // 主表字段
|
|
64
|
+
props?: AnyObject // 组件属性
|
|
65
|
+
events?: Record<string, VoidFunction> // 组件事件
|
|
66
|
+
options?: Array<{ label: string; value: any }> // 选项数据(用于select等)
|
|
67
|
+
}
|
|
68
|
+
| ((toolbarState: ToolbarState) => VNode)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// 输入框工具栏项目
|
|
72
|
+
export interface InputToolbarItem extends BaseToolbarItem {
|
|
73
|
+
type: 'input'
|
|
74
|
+
props?: Partial<InputProps> & { value?: string; autoFocus?: boolean }
|
|
75
|
+
events?: BaseEvents & {
|
|
76
|
+
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
77
|
+
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
78
|
+
onFocus?: VoidFunction
|
|
79
|
+
onFocusCapture?: VoidFunction
|
|
80
|
+
onBlur?: VoidFunction
|
|
81
|
+
onBlurCapture?: VoidFunction
|
|
82
|
+
}
|
|
83
|
+
textarea?: boolean
|
|
84
|
+
// 插槽配置
|
|
85
|
+
slots?: {
|
|
86
|
+
addonBefore?: SlotConfig
|
|
87
|
+
addonAfter?: SlotConfig
|
|
88
|
+
prefix?: SlotConfig
|
|
89
|
+
suffix?: SlotConfig
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 单选框工具栏项目
|
|
94
|
+
export interface RadioGroupToolbarItem extends BaseToolbarItem {
|
|
95
|
+
type: 'radioGroup'
|
|
96
|
+
props?: Partial<RadioGroupProps> & { value?: any }
|
|
97
|
+
events?: BaseEvents & {
|
|
98
|
+
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
99
|
+
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 复选框工具栏项目
|
|
104
|
+
export interface CheckboxToolbarItem extends BaseToolbarItem {
|
|
105
|
+
type: 'checkbox'
|
|
106
|
+
props?: Partial<CheckboxProps> & { checked?: boolean; value?: boolean }
|
|
107
|
+
events?: BaseEvents & {
|
|
108
|
+
'onUpdate:checked'?: (
|
|
109
|
+
checked: boolean,
|
|
110
|
+
allValues: AnyObject,
|
|
111
|
+
toolbarState: ToolbarState,
|
|
112
|
+
) => void
|
|
113
|
+
onChange?: (event: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
114
|
+
'onUpdate:value'?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
115
|
+
}
|
|
116
|
+
label?: string // 复选框后面显示的文案
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// 开关工具栏项目
|
|
120
|
+
export interface SwitchToolbarItem extends BaseToolbarItem {
|
|
121
|
+
type: 'switch'
|
|
122
|
+
props?: Partial<SwitchProps> & { checked?: boolean }
|
|
123
|
+
events?: BaseEvents & {
|
|
124
|
+
'onUpdate:checked'?: (
|
|
125
|
+
checked: boolean,
|
|
126
|
+
allValues: AnyObject,
|
|
127
|
+
toolbarState: ToolbarState,
|
|
128
|
+
) => void
|
|
129
|
+
onChange?: (checked: boolean, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// 复选框组工具栏项目
|
|
134
|
+
export interface CheckboxGroupToolbarItem extends BaseToolbarItem {
|
|
135
|
+
type: 'checkboxGroup'
|
|
136
|
+
props?: Partial<CheckboxGroupProps> & { value?: any[] }
|
|
137
|
+
events?: BaseEvents & {
|
|
138
|
+
'onUpdate:value'?: (value: any[], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
139
|
+
onChange?: (checkedValues: any[], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 日期选择器工具栏项目
|
|
144
|
+
export interface DatePickerToolbarItem extends BaseToolbarItem {
|
|
145
|
+
type: 'datePicker'
|
|
146
|
+
props?: Partial<DatePickerProps> & { value?: any; autoFocus?: boolean }
|
|
147
|
+
events?: BaseEvents & {
|
|
148
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
149
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
150
|
+
onFocus?: VoidFunction
|
|
151
|
+
}
|
|
152
|
+
range?: boolean
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface SelectToolbarItem extends BaseToolbarItem {
|
|
156
|
+
type: 'select'
|
|
157
|
+
props?: Partial<SelectProps> & {
|
|
158
|
+
value?: any
|
|
159
|
+
options?: any[] | ((values: AnyObject) => any[])
|
|
160
|
+
}
|
|
161
|
+
events?: BaseEvents & {
|
|
162
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
163
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 级联选择器工具栏项目
|
|
168
|
+
export interface CascaderToolbarItem extends BaseToolbarItem {
|
|
169
|
+
type: 'cascader'
|
|
170
|
+
props?: Partial<CascaderProps> & { value?: any }
|
|
171
|
+
events?: BaseEvents & {
|
|
172
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
173
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// 地区级联选择器属性定义
|
|
178
|
+
export interface AreaCascaderProps {
|
|
179
|
+
value?: any[]
|
|
180
|
+
placeholder?: string
|
|
181
|
+
disabled?: boolean
|
|
182
|
+
allowClear?: boolean
|
|
183
|
+
[key: string]: any
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// 地区级联选择器工具栏项目
|
|
187
|
+
export interface AreaCascaderToolbarItem extends BaseToolbarItem {
|
|
188
|
+
type: 'areaCascader'
|
|
189
|
+
props?: AreaCascaderProps
|
|
190
|
+
attr?: Record<string, any>
|
|
191
|
+
events?: BaseEvents & {
|
|
192
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
193
|
+
selectedArea?: (area: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// 树选择器工具栏项目
|
|
198
|
+
export interface TreeSelectToolbarItem extends BaseToolbarItem {
|
|
199
|
+
type: 'treeSelect'
|
|
200
|
+
props?: Partial<TreeSelectProps> & {
|
|
201
|
+
value?: any
|
|
202
|
+
options?: any[] | ((values: AnyObject) => any[])
|
|
203
|
+
}
|
|
204
|
+
events?: BaseEvents & {
|
|
205
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
206
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export interface TreeToolbarItem extends BaseToolbarItem {
|
|
211
|
+
type: 'tree'
|
|
212
|
+
props?: Partial<TreeProps> & {
|
|
213
|
+
checkedKeys?: any[]
|
|
214
|
+
expandedKeys?: any[]
|
|
215
|
+
}
|
|
216
|
+
events?: BaseEvents & {
|
|
217
|
+
'onUpdate:checkedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
218
|
+
'onUpdate:expandedKeys'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
219
|
+
onCheck?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
220
|
+
onExpand?: (value: any, info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
221
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export interface InputRangeToolbarItem extends BaseToolbarItem {
|
|
226
|
+
type: 'inputRange'
|
|
227
|
+
props?: {
|
|
228
|
+
startProps?: Record<string, unknown>
|
|
229
|
+
endProps?: Record<string, unknown>
|
|
230
|
+
separator?: string
|
|
231
|
+
startPlaceholder?: string
|
|
232
|
+
endPlaceholder?: string
|
|
233
|
+
style?: AnyObject
|
|
234
|
+
className?: string
|
|
235
|
+
allowClear?: boolean
|
|
236
|
+
}
|
|
237
|
+
attr?: string[]
|
|
238
|
+
events?: BaseEvents & {
|
|
239
|
+
'onUpdate:value'?: (
|
|
240
|
+
value: [string, string],
|
|
241
|
+
allValues: AnyObject,
|
|
242
|
+
toolbarState: ToolbarState,
|
|
243
|
+
) => void
|
|
244
|
+
onChange?: (value: [string, string], allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
245
|
+
onStartChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
246
|
+
onEndChange?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface InputNumberToolbarItem extends BaseToolbarItem {
|
|
251
|
+
type: 'inputNumber'
|
|
252
|
+
props?: Partial<InputNumberProps> & {
|
|
253
|
+
value?: any
|
|
254
|
+
autoFocus?: boolean
|
|
255
|
+
xmoney?: boolean
|
|
256
|
+
xprice?: boolean
|
|
257
|
+
xweight?: boolean
|
|
258
|
+
xtaxrate?: boolean
|
|
259
|
+
xnumber?: boolean
|
|
260
|
+
}
|
|
261
|
+
events?: BaseEvents & {
|
|
262
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
263
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
264
|
+
onStep?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
265
|
+
onFocus?: VoidFunction
|
|
266
|
+
onFocusCapture?: VoidFunction
|
|
267
|
+
onBlur?: VoidFunction
|
|
268
|
+
onBlurCapture?: VoidFunction
|
|
269
|
+
}
|
|
270
|
+
slots?: {
|
|
271
|
+
addonBefore?: SlotConfig
|
|
272
|
+
addonAfter?: SlotConfig
|
|
273
|
+
prefix?: SlotConfig
|
|
274
|
+
suffix?: SlotConfig
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export interface InputPasswordToolbarItem extends BaseToolbarItem {
|
|
279
|
+
type: 'inputPassword'
|
|
280
|
+
props?: Partial<InputProps> & { value?: string }
|
|
281
|
+
events?: BaseEvents & {
|
|
282
|
+
'onUpdate:value'?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
283
|
+
onChange?: (event: Event, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
284
|
+
}
|
|
285
|
+
textarea?: boolean
|
|
286
|
+
// 插槽配置
|
|
287
|
+
slots?: {
|
|
288
|
+
addonBefore?: SlotConfig
|
|
289
|
+
addonAfter?: SlotConfig
|
|
290
|
+
prefix?: SlotConfig
|
|
291
|
+
suffix?: SlotConfig
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export interface UploadToolbarItem extends BaseToolbarItem {
|
|
296
|
+
type: 'upload'
|
|
297
|
+
props?: Partial<UploadProps> & {
|
|
298
|
+
value?: any[]
|
|
299
|
+
// 基础属性
|
|
300
|
+
placeholder?: string
|
|
301
|
+
allowClear?: boolean
|
|
302
|
+
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
303
|
+
multiple?: boolean
|
|
304
|
+
maxCount?: number
|
|
305
|
+
listType?: 'text' | 'picture' | 'picture-card'
|
|
306
|
+
|
|
307
|
+
// 接口配置
|
|
308
|
+
api?: {
|
|
309
|
+
url: string
|
|
310
|
+
method?: 'GET' | 'POST'
|
|
311
|
+
headers?: Record<string, string>
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// 额外参数配置
|
|
315
|
+
extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject)
|
|
316
|
+
|
|
317
|
+
// 数据映射配置
|
|
318
|
+
dataMapping?: {
|
|
319
|
+
list?: string // 文件列表字段路径
|
|
320
|
+
url?: string // 文件URL字段
|
|
321
|
+
name?: string // 文件名字段
|
|
322
|
+
status?: string // 文件状态字段
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// UI 配置
|
|
326
|
+
buttonText?: string // 上传按钮文本,默认为"点击上传"
|
|
327
|
+
placeholderSrc?: string // picture-card 模式下的占位符图片地址
|
|
328
|
+
placeholderAlt?: string // 占位符图片的 alt 属性
|
|
329
|
+
placeholderClass?: string // 占位符图片的 CSS 类名
|
|
330
|
+
placeholderStyle?: AnyObject // 占位符图片的内联样式
|
|
331
|
+
|
|
332
|
+
// 其他配置
|
|
333
|
+
transformData?: (data: any) => any
|
|
334
|
+
beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean>
|
|
335
|
+
onPreview?: (file: any) => void
|
|
336
|
+
onRemove?: (file: any) => boolean | Promise<boolean>
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// 文件类型限制配置
|
|
340
|
+
passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string
|
|
341
|
+
|
|
342
|
+
events?: BaseEvents & {
|
|
343
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
344
|
+
onChange?: (info: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
345
|
+
onSuccess?: (response: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
346
|
+
onError?: (error: any, file: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// SselectPage 属性定义
|
|
351
|
+
export interface SselectPageProps {
|
|
352
|
+
value?: any
|
|
353
|
+
placeholder?: string
|
|
354
|
+
allowClear?: boolean
|
|
355
|
+
showSearch?: boolean
|
|
356
|
+
disabled?: boolean
|
|
357
|
+
maxTagCount?: number | 'responsive'
|
|
358
|
+
size?: 'large' | 'middle' | 'small'
|
|
359
|
+
mode?: 'multiple' | 'tags'
|
|
360
|
+
params?: AnyObject
|
|
361
|
+
api: {
|
|
362
|
+
url: string
|
|
363
|
+
method?: 'GET' | 'POST'
|
|
364
|
+
headers?: Record<string, string>
|
|
365
|
+
params?: AnyObject
|
|
366
|
+
data?: AnyObject
|
|
367
|
+
request?: (config: {
|
|
368
|
+
method?: 'GET' | 'POST'
|
|
369
|
+
url: string
|
|
370
|
+
headers?: Record<string, string>
|
|
371
|
+
params?: AnyObject
|
|
372
|
+
data?: AnyObject
|
|
373
|
+
}) => Promise<any>
|
|
374
|
+
}
|
|
375
|
+
dataMapping?: {
|
|
376
|
+
list?: string
|
|
377
|
+
total?: string
|
|
378
|
+
value?: string
|
|
379
|
+
label?: string
|
|
380
|
+
}
|
|
381
|
+
pagination?: boolean
|
|
382
|
+
paginationConfig?: {
|
|
383
|
+
pageField?: string
|
|
384
|
+
pageSizeField?: string
|
|
385
|
+
searchField?: string
|
|
386
|
+
searchContains?: string
|
|
387
|
+
}
|
|
388
|
+
pageSize?: number
|
|
389
|
+
searchDelay?: number
|
|
390
|
+
extraParams?: AnyObject | ((allValues: AnyObject, toolbarState: ToolbarState) => AnyObject)
|
|
391
|
+
transformData?: (data: any) => any
|
|
392
|
+
autoLoad?: boolean
|
|
393
|
+
autoFocus?: boolean
|
|
394
|
+
attr?: Record<string, string>
|
|
395
|
+
[key: string]: any
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export interface SselectPageToolbarItem extends BaseToolbarItem {
|
|
399
|
+
type: 'sselectPage'
|
|
400
|
+
props?: SselectPageProps & {
|
|
401
|
+
disabled?: boolean | ((allValues: AnyObject, toolbarState: ToolbarState) => boolean)
|
|
402
|
+
}
|
|
403
|
+
events?: BaseEvents & {
|
|
404
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
405
|
+
onChange?: (
|
|
406
|
+
value: any,
|
|
407
|
+
option: any,
|
|
408
|
+
allOptions: any,
|
|
409
|
+
allValues: AnyObject,
|
|
410
|
+
toolbarState: ToolbarState,
|
|
411
|
+
) => void
|
|
412
|
+
onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
413
|
+
onClear?: (allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export interface AutoCompleteProps {
|
|
418
|
+
value?: any
|
|
419
|
+
options?: any[]
|
|
420
|
+
placeholder?: string
|
|
421
|
+
disabled?: boolean
|
|
422
|
+
allowClear?: boolean
|
|
423
|
+
[key: string]: any
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export interface AutoCompleteToolbarItem extends BaseToolbarItem {
|
|
427
|
+
type: 'autoComplete'
|
|
428
|
+
props?: AutoCompleteProps
|
|
429
|
+
events?: BaseEvents & {
|
|
430
|
+
'onUpdate:value'?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
431
|
+
onChange?: (value: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
432
|
+
onSelect?: (value: any, option: any, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
433
|
+
onSearch?: (value: string, allValues: AnyObject, toolbarState: ToolbarState) => void
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// ------------------------------
|
|
438
|
+
// Input.Group 渲染器配置定义
|
|
439
|
+
// ------------------------------
|
|
440
|
+
export type InputGroupSize = 'large' | 'middle' | 'small' | 'default'
|
|
441
|
+
export interface InputGroupPropsLike {
|
|
442
|
+
size?: InputGroupSize
|
|
443
|
+
compact?: boolean
|
|
444
|
+
prefixCls?: string
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// 允许在工具栏中直接使用预设描述项(xtype)
|
|
448
|
+
export type PresetXtype = 'add' | 'edit' | 'dels' | 'export' | 'print' | 'files'
|
|
449
|
+
|
|
450
|
+
export interface FilesCategoryOption {
|
|
451
|
+
label: string
|
|
452
|
+
value: string
|
|
453
|
+
[key: string]: any
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
export interface FilesPresetConfig {
|
|
457
|
+
title?: string
|
|
458
|
+
// 单据类型:决定附件归属(UploadPopup 内部请求依赖该字段)
|
|
459
|
+
billtypeCode: string | ((row: AnyObject) => string)
|
|
460
|
+
// 分类下拉:UploadPopup 打开后默认选第一个,并按 category 拉历史列表
|
|
461
|
+
categoryOptions: FilesCategoryOption[] | ((row: AnyObject) => FilesCategoryOption[])
|
|
462
|
+
// objId 从行对象取值的字段名,默认 id
|
|
463
|
+
objIdKey?: string
|
|
464
|
+
accept?: string
|
|
465
|
+
passage?: 'image' | 'pdf' | 'word' | 'excel' | 'video' | 'audio' | string
|
|
466
|
+
maxFileSizeMB?: number
|
|
467
|
+
maxCount?: number
|
|
468
|
+
// 上传成功后是否刷新表格(由 SearchTable.openFilesPopup 控制)
|
|
469
|
+
refreshOnSuccess?: boolean
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
export interface PresetBaseToolbarItem extends BaseToolbarItem {
|
|
473
|
+
xtype: PresetXtype
|
|
474
|
+
permission?: string
|
|
475
|
+
label?: string
|
|
476
|
+
events?: any
|
|
477
|
+
props?: any
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
export interface PresetDelsToolbarItem extends PresetBaseToolbarItem {
|
|
481
|
+
xtype: 'dels'
|
|
482
|
+
api?: {
|
|
483
|
+
url?: string
|
|
484
|
+
method?: 'get' | 'post'
|
|
485
|
+
useParams?: boolean
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
export interface PresetExportToolbarItem extends PresetBaseToolbarItem {
|
|
490
|
+
xtype: 'export'
|
|
491
|
+
filename?: string
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
export interface PresetFilesToolbarItem extends PresetBaseToolbarItem {
|
|
495
|
+
xtype: 'files'
|
|
496
|
+
// 附件预设配置:由 SearchTable 内置 UploadPopup 消费
|
|
497
|
+
files: FilesPresetConfig
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export type PresetToolbarItem =
|
|
501
|
+
| PresetDelsToolbarItem
|
|
502
|
+
| PresetExportToolbarItem
|
|
503
|
+
| PresetFilesToolbarItem
|
|
504
|
+
|
|
505
|
+
// Renderable items (those with a 'type' property)
|
|
506
|
+
export type RenderableToolbarItem =
|
|
507
|
+
| ButtonToolbarItem
|
|
508
|
+
| InputToolbarItem
|
|
509
|
+
| RadioGroupToolbarItem
|
|
510
|
+
| CheckboxToolbarItem
|
|
511
|
+
| SwitchToolbarItem
|
|
512
|
+
| CheckboxGroupToolbarItem
|
|
513
|
+
| DatePickerToolbarItem
|
|
514
|
+
| UploadToolbarItem
|
|
515
|
+
| InputNumberToolbarItem
|
|
516
|
+
| SelectToolbarItem
|
|
517
|
+
| TreeToolbarItem
|
|
518
|
+
| TreeSelectToolbarItem
|
|
519
|
+
| InputPasswordToolbarItem
|
|
520
|
+
| SselectPageToolbarItem
|
|
521
|
+
| AutoCompleteToolbarItem
|
|
522
|
+
| InputGroupToolbarItem
|
|
523
|
+
| CascaderToolbarItem
|
|
524
|
+
| AreaCascaderToolbarItem
|
|
525
|
+
| InputRangeToolbarItem
|
|
526
|
+
| CustomToolbarItem
|
|
527
|
+
|
|
528
|
+
export type ToolbarItem = RenderableToolbarItem | PresetToolbarItem
|
|
529
|
+
|
|
530
|
+
export type InputGroupChild = RenderableToolbarItem & {
|
|
531
|
+
// 当使用 Row 布局时的列宽设置
|
|
532
|
+
span?: number // 24 栅格系统
|
|
533
|
+
flex?: string // 可选:flex 布局
|
|
534
|
+
class?: string
|
|
535
|
+
style?: AnyObject
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
export interface InputGroupToolbarItem extends BaseToolbarItem {
|
|
539
|
+
[x: string]: any
|
|
540
|
+
type: 'inputGroup'
|
|
541
|
+
props?: Partial<InputGroupPropsLike>
|
|
542
|
+
// 布局控制:compact(紧凑)/ row(栅格)/ none(默认)
|
|
543
|
+
layout?: {
|
|
544
|
+
type?: 'compact' | 'row' | 'none'
|
|
545
|
+
rowProps?: Partial<RowProps>
|
|
546
|
+
// 针对每个子项的列设置(仅当 type=row 时生效)
|
|
547
|
+
cols?: Array<Partial<ColProps> & { span?: number }>
|
|
548
|
+
}
|
|
549
|
+
children: InputGroupChild[]
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// 工具栏配置类型
|
|
553
|
+
export interface ToolbarConfig {
|
|
554
|
+
items: ToolbarItem[]
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
export type {
|
|
558
|
+
ButtonProps,
|
|
559
|
+
DatePickerProps,
|
|
560
|
+
InputNumberProps,
|
|
561
|
+
InputProps,
|
|
562
|
+
RadioGroupProps,
|
|
563
|
+
SelectProps,
|
|
564
|
+
SwitchProps,
|
|
565
|
+
TreeSelectProps,
|
|
566
|
+
UploadProps,
|
|
567
|
+
}
|