@veltra/desktop 1.1.36 → 1.2.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 (191) hide show
  1. package/dist/components/action/action-group.vue.d.ts +1 -1
  2. package/dist/components/action/action.vue.d.ts +1 -1
  3. package/dist/components/auto-complete/auto-complete.js +1 -0
  4. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  5. package/dist/components/batch-edit/batch-edit-form.js +12 -5
  6. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  7. package/dist/components/batch-edit/batch-edit.js +8 -3
  8. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  9. package/dist/components/batch-edit/batch-edit.vue.d.ts +40 -35
  10. package/dist/components/batch-edit/di.js.map +1 -1
  11. package/dist/components/batch-edit/use-edit.js +41 -23
  12. package/dist/components/batch-edit/use-edit.js.map +1 -1
  13. package/dist/components/cascade/cascade.js +1 -0
  14. package/dist/components/cascade/cascade.js.map +1 -1
  15. package/dist/components/cascade/cascade.vue.d.ts +4 -4
  16. package/dist/components/checkbox/checkbox-button.js +1 -0
  17. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  18. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  19. package/dist/components/checkbox/checkbox.js +1 -0
  20. package/dist/components/checkbox/checkbox.js.map +1 -1
  21. package/dist/components/checkbox-group/checkbox-group.js +1 -0
  22. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  23. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
  24. package/dist/components/code-editor/code-editor.js +1 -0
  25. package/dist/components/code-editor/code-editor.js.map +1 -1
  26. package/dist/components/condition-editor/core/evaluator.js +3 -3
  27. package/dist/components/condition-editor/core/evaluator.js.map +1 -1
  28. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  29. package/dist/components/date-picker/date-picker.js +1 -0
  30. package/dist/components/date-picker/date-picker.js.map +1 -1
  31. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  32. package/dist/components/date-range-picker/date-range-picker.js +2 -0
  33. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  34. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  35. package/dist/components/empty/empty.vue.d.ts +1 -1
  36. package/dist/components/expression-editor/expression-editor.js +1 -0
  37. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  38. package/dist/components/file-picker/file-picker.js +1 -0
  39. package/dist/components/file-picker/file-picker.js.map +1 -1
  40. package/dist/components/form/form.js.map +1 -1
  41. package/dist/components/form/form.vue.d.ts +11 -19
  42. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +24 -26
  43. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/components/form/index.d.ts +0 -3
  45. package/dist/components/form/use-form-fields.js +88 -0
  46. package/dist/components/form/use-form-fields.js.map +1 -0
  47. package/dist/components/form/use-node-interceptor.js +19 -30
  48. package/dist/components/form/use-node-interceptor.js.map +1 -1
  49. package/dist/components/form-item/form-item.js.map +1 -1
  50. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +44 -18
  51. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/components/form-item/helper.js +4 -1
  53. package/dist/components/form-item/helper.js.map +1 -1
  54. package/dist/components/form-item/validate.d.ts +26 -0
  55. package/dist/components/form-item/validate.js +97 -0
  56. package/dist/components/form-item/validate.js.map +1 -0
  57. package/dist/components/group-input/group-input.js +1 -0
  58. package/dist/components/group-input/group-input.js.map +1 -1
  59. package/dist/components/index.d.ts +0 -3
  60. package/dist/components/index.js +0 -7
  61. package/dist/components/input/input.vue.d.ts +4 -4
  62. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js +1 -0
  63. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/multi-select/multi-select.js +1 -0
  65. package/dist/components/multi-select/multi-select.js.map +1 -1
  66. package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
  67. package/dist/components/multi-tree-select/multi-tree-select.js +1 -0
  68. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  69. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +4 -4
  70. package/dist/components/number-input/number-input.js +1 -0
  71. package/dist/components/number-input/number-input.js.map +1 -1
  72. package/dist/components/number-range-input/number-range-input.js +1 -0
  73. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  74. package/dist/components/number-range-input/number-range-input.vue.d.ts +1 -1
  75. package/dist/components/palette/palette.js +1 -0
  76. package/dist/components/palette/palette.js.map +1 -1
  77. package/dist/components/password-input/password-input.js +1 -0
  78. package/dist/components/password-input/password-input.js.map +1 -1
  79. package/dist/components/radio/radio.js +1 -0
  80. package/dist/components/radio/radio.js.map +1 -1
  81. package/dist/components/radio-group/radio-group.js +1 -0
  82. package/dist/components/radio-group/radio-group.js.map +1 -1
  83. package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
  84. package/dist/components/rich-text-editor/rich-text-editor.js +3 -2
  85. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  86. package/dist/components/rich-text-editor/toolbar.js +10 -7
  87. package/dist/components/rich-text-editor/toolbar.js.map +1 -1
  88. package/dist/components/select/select.js +6 -3
  89. package/dist/components/select/select.js.map +1 -1
  90. package/dist/components/select/select.vue.d.ts +2 -2
  91. package/dist/components/slider/slider.js +15 -2
  92. package/dist/components/slider/slider.js.map +1 -1
  93. package/dist/components/switch/switch.js +1 -0
  94. package/dist/components/switch/switch.js.map +1 -1
  95. package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
  96. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  97. package/dist/components/tabs/tabs.vue.d.ts +2 -2
  98. package/dist/components/textarea/textarea.js +1 -0
  99. package/dist/components/textarea/textarea.js.map +1 -1
  100. package/dist/components/tip/tip.vue.d.ts +3 -3
  101. package/dist/components/tree-select/tree-select.js +1 -0
  102. package/dist/components/tree-select/tree-select.js.map +1 -1
  103. package/dist/components/tree-select/tree-select.vue.d.ts +4 -4
  104. package/dist/index.d.ts +5 -6
  105. package/dist/index.js +1 -4
  106. package/dist/types/auto-complete.d.ts +3 -2
  107. package/dist/types/batch-edit.d.ts +4 -5
  108. package/dist/types/cascade.d.ts +3 -2
  109. package/dist/types/checkbox-group.d.ts +2 -2
  110. package/dist/types/checkbox.d.ts +4 -3
  111. package/dist/types/code-editor.d.ts +3 -2
  112. package/dist/types/date-picker.d.ts +3 -2
  113. package/dist/types/date-range-picker.d.ts +3 -2
  114. package/dist/types/expression-editor.d.ts +3 -2
  115. package/dist/types/file-picker.d.ts +3 -2
  116. package/dist/types/form-field.d.ts +12 -0
  117. package/dist/types/form-item.d.ts +2 -2
  118. package/dist/types/form.d.ts +9 -48
  119. package/dist/types/group-input.d.ts +3 -2
  120. package/dist/types/index.d.ts +4 -2
  121. package/dist/types/input.d.ts +3 -2
  122. package/dist/types/multi-select.d.ts +3 -2
  123. package/dist/types/multi-tree-select.d.ts +3 -2
  124. package/dist/types/palette.d.ts +3 -2
  125. package/dist/types/radio-group.d.ts +3 -2
  126. package/dist/types/radio.d.ts +3 -2
  127. package/dist/types/rich-text-editor.d.ts +3 -2
  128. package/dist/types/select.d.ts +3 -2
  129. package/dist/types/slider.d.ts +3 -2
  130. package/dist/types/switch.d.ts +3 -2
  131. package/dist/types/text-editor.d.ts +3 -2
  132. package/dist/types/textarea.d.ts +3 -2
  133. package/dist/types/tree-select.d.ts +3 -2
  134. package/package.json +6 -6
  135. package/src/components/batch-edit/batch-edit-form.vue +20 -13
  136. package/src/components/batch-edit/batch-edit.vue +7 -8
  137. package/src/components/batch-edit/di.ts +1 -2
  138. package/src/components/batch-edit/use-edit.ts +58 -36
  139. package/src/components/date-range-picker/date-range-picker.vue +2 -0
  140. package/src/components/form/form.vue +22 -38
  141. package/src/components/form/index.ts +0 -6
  142. package/src/components/form/use-form-fields.ts +126 -0
  143. package/src/components/form/use-node-interceptor.ts +27 -56
  144. package/src/components/form-item/form-item.vue +69 -18
  145. package/src/components/form-item/helper.ts +10 -4
  146. package/src/components/form-item/validate.ts +155 -0
  147. package/src/components/rich-text-editor/rich-text-editor.vue +28 -25
  148. package/src/components/rich-text-editor/toolbar.vue +23 -19
  149. package/src/components/select/select.vue +6 -4
  150. package/src/components/slider/slider.vue +12 -2
  151. package/src/types/auto-complete.ts +4 -2
  152. package/src/types/batch-edit.ts +4 -5
  153. package/src/types/cascade.ts +4 -2
  154. package/src/types/checkbox-group.ts +2 -2
  155. package/src/types/checkbox.ts +5 -3
  156. package/src/types/code-editor.ts +4 -2
  157. package/src/types/date-picker.ts +4 -2
  158. package/src/types/date-range-picker.ts +4 -2
  159. package/src/types/expression-editor.ts +4 -2
  160. package/src/types/file-picker.ts +4 -2
  161. package/src/types/form-field.ts +11 -0
  162. package/src/types/form-item.ts +2 -2
  163. package/src/types/form.ts +9 -82
  164. package/src/types/group-input.ts +4 -2
  165. package/src/types/index.ts +1 -0
  166. package/src/types/input.ts +4 -2
  167. package/src/types/multi-select.ts +4 -2
  168. package/src/types/multi-tree-select.ts +5 -2
  169. package/src/types/palette.ts +4 -2
  170. package/src/types/radio-group.ts +4 -2
  171. package/src/types/radio.ts +4 -2
  172. package/src/types/rich-text-editor.ts +4 -2
  173. package/src/types/select.ts +4 -2
  174. package/src/types/slider.ts +4 -2
  175. package/src/types/switch.ts +4 -2
  176. package/src/types/text-editor.ts +4 -2
  177. package/src/types/textarea.ts +4 -2
  178. package/src/types/tree-select.ts +5 -2
  179. package/dist/components/form/dynamic-form-model.d.ts +0 -73
  180. package/dist/components/form/dynamic-form-model.js +0 -184
  181. package/dist/components/form/dynamic-form-model.js.map +0 -1
  182. package/dist/components/form/form-model.d.ts +0 -73
  183. package/dist/components/form/form-model.js +0 -179
  184. package/dist/components/form/form-model.js.map +0 -1
  185. package/dist/components/form/helper.d.ts +0 -16
  186. package/dist/components/form/helper.js +0 -20
  187. package/dist/components/form/helper.js.map +0 -1
  188. package/src/components/form/__test__/form-model.test.ts +0 -190
  189. package/src/components/form/dynamic-form-model.ts +0 -258
  190. package/src/components/form/form-model.ts +0 -255
  191. package/src/components/form/helper.ts +0 -23
@@ -1,255 +0,0 @@
1
- import { o } from '@cat-kit/core'
2
- import { middleProxy, Validator } from '@veltra/utils'
3
- import { nextTick, reactive, shallowReactive, watch, type Reactive } from 'vue'
4
-
5
- import type {
6
- ModelData,
7
- DataSettingConfig,
8
- IFormModel,
9
- FormModelItem,
10
- FormModelField
11
- } from '../../types'
12
-
13
- /**
14
- * 递归展平字段逻辑
15
- */
16
- function flattenFields(fields: Record<string, any>, prefix = ''): Record<string, FormModelItem> {
17
- const result: Record<string, FormModelItem> = {}
18
- for (const key in fields) {
19
- const item = fields[key]
20
- const fullPath = prefix ? `${prefix}.${key}` : key
21
- if (item && typeof item === 'object' && '__isNested' in item && item.__isNested) {
22
- Object.assign(result, flattenFields((item as any).fields, fullPath))
23
- } else {
24
- result[fullPath] = item
25
- }
26
- }
27
- return result
28
- }
29
-
30
- /**
31
- * 表单模型
32
- */
33
- export class FormModel<
34
- Fields extends Record<string, FormModelField> = Record<string, FormModelField>
35
- > implements IFormModel<Fields> {
36
- /** 表单数据 */
37
- data!: ModelData<Fields>
38
-
39
- /** 表单规则 */
40
- readonly fields: Fields
41
-
42
- /** 所有的键 */
43
- readonly allKeys: string[]
44
-
45
- /**
46
- * 不同表单所需要校验的字段
47
- * @description
48
- * 这个值会在表单组件渲染时由表单设置,因为只有真正渲染的组件才应该被校验
49
- */
50
- formKeys: Map<number, string[]> = new Map()
51
-
52
- /** 初始数据 */
53
- readonly initialData: ModelData<Fields>
54
-
55
- readonly errors: Map<string, string[] | undefined> = shallowReactive(new Map())
56
-
57
- private validator: Validator<Record<string, FormModelItem>>
58
-
59
- /**
60
- * 是否在表单值更新时校验
61
- */
62
- private validateOnFieldChange = true
63
-
64
- private modelChangeCallback: Set<(fields: string, val: any) => void> = new Set()
65
-
66
- constructor(fields: Fields) {
67
- this.fields = fields
68
- const flatFields = flattenFields(fields)
69
- const rawData = {} as ModelData<Fields>
70
- const allKeys: string[] = []
71
-
72
- for (const key in flatFields) {
73
- const fieldItem = flatFields[key]!
74
- allKeys.push(key)
75
- const { value } = fieldItem
76
- let v = value
77
-
78
- if (typeof value === 'function') {
79
- watch(value, (v) => {
80
- o(this.initialData).set(key, v)
81
- })
82
- v = value()
83
- }
84
-
85
- o(rawData).set(key, v)
86
- }
87
-
88
- this.allKeys = allKeys
89
- this.initialData = JSON.parse(JSON.stringify(rawData))
90
-
91
- this.setProxyData(reactive(rawData))
92
-
93
- this.validator = new Validator(flatFields)
94
-
95
- return shallowReactive(this)
96
- }
97
-
98
- /**
99
- * 设置响应式值, 替换掉原有的数据
100
- * @description 设置响应式值时,会自动监听值的变化,并进行校验
101
- * @param proxyData 响应式的值
102
- */
103
- setProxyData(proxyData: ModelData<Fields> | Reactive<ModelData<Fields>>): void {
104
- const data = middleProxy(proxyData, {
105
- set: (field, val) => {
106
- this.modelChangeCallback.forEach((cb) => cb(field, val))
107
- },
108
-
109
- changed: (fields) => {
110
- if (!this.validateOnFieldChange) {
111
- this.validateOnFieldChange = true
112
- return
113
- }
114
- this.validate(fields as any)
115
- }
116
- })
117
-
118
- this.data = data as ModelData<Fields>
119
- }
120
-
121
- private getValidateFields(fields?: string | string[]) {
122
- if (!fields) {
123
- if (this.formKeys.size) {
124
- let _fields: string[] = []
125
- this.formKeys.forEach((keys) => {
126
- _fields = _fields.concat(keys)
127
- })
128
- return _fields
129
- } else {
130
- return this.allKeys
131
- }
132
- }
133
-
134
- if (!Array.isArray(fields)) {
135
- return [fields]
136
- }
137
- return fields
138
- }
139
-
140
- /**
141
- * 模型校验
142
- * @param fields 需要校验的字段, 不传则校验所有字段
143
- * @returns
144
- */
145
- async validate(fields?: string | string[]): Promise<boolean> {
146
- const { errors, validator, data } = this
147
-
148
- const results = await validator.validate(data, this.getValidateFields(fields))
149
-
150
- // 全量校验
151
- if (!fields) {
152
- errors.clear()
153
-
154
- for (const field in results) {
155
- errors.set(field as any, results[field])
156
- }
157
- }
158
- // 局部校验
159
- else {
160
- ~(Array.isArray(fields) ? fields : [fields]).forEach((field) => {
161
- const errs = results[field as string]
162
- if (errs?.length) {
163
- errors.set(field, errs)
164
- } else {
165
- errors.delete(field)
166
- }
167
- })
168
- }
169
-
170
- if (errors.size > 0) {
171
- if (!fields) {
172
- nextTick(() => {
173
- document.querySelector('.u-form-item.is-error')?.scrollIntoView({ block: 'nearest' })
174
- })
175
- }
176
- return Promise.reject(false)
177
- }
178
-
179
- return true
180
- }
181
-
182
- /**
183
- * 重置数据
184
- * @param fields 需要重置的字段
185
- */
186
- resetData(keys?: string | string[]): void {
187
- if (typeof keys === 'string') {
188
- keys = [keys]
189
- } else if (Array.isArray(keys)) {
190
- } else {
191
- keys = this.allKeys
192
- }
193
-
194
- this.clearValidate()
195
-
196
- this.validateOnFieldChange = false
197
-
198
- keys.forEach((field) => {
199
- o(this.data).set(field as string, o(this.initialData).get(field as string))
200
- })
201
- }
202
-
203
- /**
204
- * 设置值
205
- * @param formData 表单值
206
- * @param options 配置
207
- */
208
- setData(formData: Partial<Record<string, any>>, config?: DataSettingConfig): FormModel<Fields> {
209
- const { validate = true } = config || {}
210
-
211
- if (!validate) {
212
- this.validateOnFieldChange = false
213
- }
214
-
215
- this.allKeys.forEach((key) => {
216
- const value = o(formData).get(key)
217
- if (value !== undefined) {
218
- o(this.data).set(key, value)
219
- }
220
- })
221
-
222
- return this
223
- }
224
-
225
- /**
226
- * 设置初始值
227
- * @description 初始值在重置数据和查看原始数据时会用到
228
- * @param data 初始值
229
- */
230
- setInitialData(data: Partial<ModelData<Fields>>): FormModel<Fields> {
231
- this.allKeys.forEach((key) => {
232
- o(this.initialData).set(key, o(data).get(key))
233
- })
234
-
235
- return this
236
- }
237
-
238
- /** 清除校验 */
239
- clearValidate(): void {
240
- this.errors.clear()
241
- }
242
-
243
- /**
244
- * 监听值变更
245
- * @param cb 回调
246
- */
247
- onChange(cb: (field: string, val: any) => void): void {
248
- this.modelChangeCallback.add(cb)
249
- }
250
-
251
- /** 关闭监听值变更 */
252
- offChange(cb: (field: string, val: any) => void): void {
253
- this.modelChangeCallback.delete(cb)
254
- }
255
- }
@@ -1,23 +0,0 @@
1
- import type { FormModelItem } from '../../types'
2
-
3
- /**
4
- * 定义表单项
5
- * @param item 表单项
6
- * @returns
7
- */
8
- export function formField<Val = unknown>(item?: FormModelItem<Val>): FormModelItem<Val> {
9
- if (!item) {
10
- return {}
11
- }
12
-
13
- return item
14
- }
15
-
16
- export interface NestedFieldMarker<T extends Record<string, any> = Record<string, any>> {
17
- __isNested: true
18
- fields: T
19
- }
20
-
21
- export function nestField<T extends Record<string, any>>(fields: T): NestedFieldMarker<T> {
22
- return { __isNested: true, fields }
23
- }