@veltra/desktop 1.7.9 → 1.7.10

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 (34) hide show
  1. package/dist/components/batch-edit/batch-edit-form.js +7 -3
  2. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  3. package/dist/components/batch-edit/batch-edit.js +1 -0
  4. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  5. package/dist/components/batch-edit/use-edit-state.js.map +1 -1
  6. package/dist/components/form/form.js.map +1 -1
  7. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +31 -6
  8. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/form/is-field-modified.js +12 -0
  10. package/dist/components/form/is-field-modified.js.map +1 -0
  11. package/dist/components/form/style2.css +37 -1
  12. package/dist/components/form/use-form-fields.js +11 -6
  13. package/dist/components/form/use-form-fields.js.map +1 -1
  14. package/dist/components/form-item/form-item.js.map +1 -1
  15. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +18 -5
  16. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/types/batch-edit.d.ts +2 -0
  18. package/dist/types/form-item.d.ts +4 -1
  19. package/dist/types/form.d.ts +10 -1
  20. package/package.json +6 -6
  21. package/src/components/batch-edit/__test__/batch-edit.test.ts +138 -0
  22. package/src/components/batch-edit/batch-edit-form.vue +18 -4
  23. package/src/components/batch-edit/use-edit-state.ts +1 -1
  24. package/src/components/form/__test__/form.test.ts +80 -0
  25. package/src/components/form/__test__/is-field-modified.test.ts +37 -0
  26. package/src/components/form/form.vue +28 -4
  27. package/src/components/form/is-field-modified.ts +16 -0
  28. package/src/components/form/style.scss +53 -2
  29. package/src/components/form/use-form-fields.ts +20 -6
  30. package/src/components/form-item/__test__/form-item.test.ts +90 -0
  31. package/src/components/form-item/form-item.vue +42 -7
  32. package/src/types/batch-edit.ts +2 -0
  33. package/src/types/form-item.ts +4 -1
  34. package/src/types/form.ts +10 -2
@@ -17,7 +17,7 @@
17
17
 
18
18
  <section :class="cls.e('wrapper')">
19
19
  <div :class="cls.e('content')">
20
- <slot></slot>
20
+ <ContentSlot />
21
21
  </div>
22
22
 
23
23
  <!-- 只有表单控件处于非只读状态时,才显示错误提示 -->
@@ -37,9 +37,18 @@ import { o } from '@cat-kit/core'
37
37
  import { useConfig, useFallbackProps } from '@veltra/compositions'
38
38
  import { bem, withUnit } from '@veltra/utils'
39
39
  import { injectFormContext } from '@veltra/utils'
40
- import { type CSSProperties, computed, onBeforeUnmount, shallowRef, watch } from 'vue'
41
-
42
- import type { FormItemProps, ComponentSize } from '../../types'
40
+ import {
41
+ type CSSProperties,
42
+ type VNode,
43
+ cloneVNode,
44
+ computed,
45
+ onBeforeUnmount,
46
+ shallowRef,
47
+ useSlots,
48
+ watch
49
+ } from 'vue'
50
+
51
+ import type { FormItemEmits, FormItemProps, ComponentSize } from '../../types'
43
52
  import { UGridItem } from '../grid'
44
53
  import { UTip } from '../tip'
45
54
  import { formItemCls as cls, defineField } from './helper'
@@ -49,6 +58,10 @@ defineOptions({ name: 'UFormItem' })
49
58
 
50
59
  const props = withDefaults(defineProps<FormItemProps>(), { readonly: undefined })
51
60
 
61
+ const emit = defineEmits<FormItemEmits>()
62
+
63
+ const slots = useSlots()
64
+
52
65
  defineSlots<{
53
66
  /** 标签插槽 */
54
67
  label?: () => any
@@ -56,8 +69,30 @@ defineSlots<{
56
69
  }>()
57
70
 
58
71
  /** 表单组件上下文 */
59
- const { formProps, registerField, unregisterField, shouldValidate, handleFieldChange } =
60
- injectFormContext()
72
+ const {
73
+ formProps,
74
+ registerField,
75
+ unregisterField,
76
+ shouldValidate,
77
+ handleFieldUpdate,
78
+ handleFieldChange
79
+ } = injectFormContext()
80
+
81
+ function wrapControlChange(node: VNode) {
82
+ if (!node || typeof node.type === 'symbol') return node
83
+
84
+ return cloneVNode(node, {
85
+ onChange: (...args: any[]) => {
86
+ emit('change', ...args)
87
+ if (props.field) handleFieldChange?.(props.field, ...args)
88
+ }
89
+ })
90
+ }
91
+
92
+ function ContentSlot() {
93
+ const nodes = slots.default?.() ?? []
94
+ return nodes.map(wrapControlChange)
95
+ }
61
96
 
62
97
  const { config } = useConfig()
63
98
 
@@ -137,7 +172,7 @@ watch(
137
172
  stopWatchFieldValue = watch(
138
173
  () => o(model).get(field),
139
174
  (value) => {
140
- handleFieldChange?.(field, value)
175
+ handleFieldUpdate?.(field, value)
141
176
  fieldItem.validate()
142
177
  }
143
178
  )
@@ -115,6 +115,8 @@ export interface BatchEditProps extends TableProps {
115
115
 
116
116
  /** 批量编辑组件定义的事件 */
117
117
  export interface BatchEditEmits extends TableEmits {
118
+ /** 表单控件 change,透传自 UForm */
119
+ (e: 'field:change', field: string, ...args: any[]): void
118
120
  /** 更新数据 */
119
121
  (e: 'update:data', value: Record<string, any>[]): void
120
122
  /** 点击底部「新增一行」 */
@@ -9,7 +9,10 @@ export interface FormItemProps extends FormComponentProps {
9
9
  }
10
10
 
11
11
  /** 组件项组件定义的事件 */
12
- export interface FormItemEmits {}
12
+ export interface FormItemEmits {
13
+ /** 内部控件 change,参数与控件一致 */
14
+ (e: 'change', ...args: any[]): void
15
+ }
13
16
 
14
17
  /** 组件项组件暴露的属性和方法 */
15
18
  export interface FormItemExposed {}
package/src/types/form.ts CHANGED
@@ -10,7 +10,12 @@ export interface FormProps extends ComponentProps {
10
10
  cols?: number
11
11
  /** 表单数据 */
12
12
  model?: Record<string, any>
13
- // showModified?: boolean
13
+ /** 开启后,字段当前值与基准值不同时,在控件下方展示「变更前」 */
14
+ showModified?: boolean
15
+ /** 「变更前」标签文案,默认「变更前:」 */
16
+ modifiedLabel?: string
17
+ /** 变更前基准数据;未传时回退到 model 引用首次传入时的快照(与 reset 一致) */
18
+ initialModel?: Record<string, any>
14
19
  /** 表单项label宽度 */
15
20
  labelWidth?: string | number
16
21
  /** 表单项 label 位置 */
@@ -24,7 +29,10 @@ export interface FormProps extends ComponentProps {
24
29
  }
25
30
 
26
31
  export interface FormEmits {
27
- (e: 'field:change', field: string, value: any): void
32
+ /** 控件 change 事件,仅用户操作触发 */
33
+ (e: 'field:change', field: string, ...args: any[]): void
34
+ /** model 字段值更新,含编程写入 */
35
+ (e: 'field:update', field: string, value: any): void
28
36
  }
29
37
 
30
38
  export interface _FormExposed {