@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.
- package/dist/components/batch-edit/batch-edit-form.js +7 -3
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +1 -0
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/use-edit-state.js.map +1 -1
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +31 -6
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/is-field-modified.js +12 -0
- package/dist/components/form/is-field-modified.js.map +1 -0
- package/dist/components/form/style2.css +37 -1
- package/dist/components/form/use-form-fields.js +11 -6
- package/dist/components/form/use-form-fields.js.map +1 -1
- package/dist/components/form-item/form-item.js.map +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +18 -5
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/types/batch-edit.d.ts +2 -0
- package/dist/types/form-item.d.ts +4 -1
- package/dist/types/form.d.ts +10 -1
- package/package.json +6 -6
- package/src/components/batch-edit/__test__/batch-edit.test.ts +138 -0
- package/src/components/batch-edit/batch-edit-form.vue +18 -4
- package/src/components/batch-edit/use-edit-state.ts +1 -1
- package/src/components/form/__test__/form.test.ts +80 -0
- package/src/components/form/__test__/is-field-modified.test.ts +37 -0
- package/src/components/form/form.vue +28 -4
- package/src/components/form/is-field-modified.ts +16 -0
- package/src/components/form/style.scss +53 -2
- package/src/components/form/use-form-fields.ts +20 -6
- package/src/components/form-item/__test__/form-item.test.ts +90 -0
- package/src/components/form-item/form-item.vue +42 -7
- package/src/types/batch-edit.ts +2 -0
- package/src/types/form-item.ts +4 -1
- 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
|
-
<
|
|
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 {
|
|
41
|
-
|
|
42
|
-
|
|
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 {
|
|
60
|
-
|
|
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
|
-
|
|
175
|
+
handleFieldUpdate?.(field, value)
|
|
141
176
|
fieldItem.validate()
|
|
142
177
|
}
|
|
143
178
|
)
|
package/src/types/batch-edit.ts
CHANGED
|
@@ -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
|
/** 点击底部「新增一行」 */
|
package/src/types/form-item.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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 {
|