Commit 1db72c8fe13384f24e9cc1bdc839d5e4176ea9b4
1 parent
db0bfc88
fix: fix form validate error
Showing
5 changed files
with
60 additions
and
31 deletions
CHANGELOG.en_US.md
1 | +## Wip | ||
2 | + | ||
3 | +### ⚡ Performance Improvements | ||
4 | + | ||
5 | +- Menu performance continues to be optimized and smoother | ||
6 | +- Optimize lazy loading components and examples | ||
7 | + | ||
8 | +### 🎫 Chores | ||
9 | + | ||
10 | +- Delete menu background image | ||
11 | +- Update the version of ʻant-design-vue`to`beta13` | ||
12 | +- Update `vite` version to `rc.9` | ||
13 | +- Exception page adjustment | ||
14 | +- `BasicTitle` Color blocks are not displayed by default | ||
15 | + | ||
16 | +### 🐛 Bug Fixes | ||
17 | + | ||
18 | +- Fix table type problem after upgrade | ||
19 | +- Fix the problem that the last submenu continues to be displayed when the menu is divided and there is no data in the left menu | ||
20 | +- Fix the issue of ʻuseMessage` type | ||
21 | +- Fix the problem that the form item setting `disabled` does not take effect | ||
22 | +- Fix that ʻuseECharts`can't adapt when`resize`, and an error is reported | ||
23 | +- Fix that `resize` is not deleted after ʻuseWatermark` is cleared | ||
24 | +- Fix form verification problem | ||
25 | + | ||
1 | ## 2.0.0-rc.8 (2020-11-2) | 26 | ## 2.0.0-rc.8 (2020-11-2) |
2 | 27 | ||
3 | ### ✨ Features | 28 | ### ✨ Features |
CHANGELOG.zh_CN.md
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | - 更新`ant-design-vue`版本为`beta13` | 11 | - 更新`ant-design-vue`版本为`beta13` |
12 | - 更新`vite`版本为`rc.9` | 12 | - 更新`vite`版本为`rc.9` |
13 | - 异常页调整 | 13 | - 异常页调整 |
14 | -- `BasicTitle` Color blocks are not displayed by default | 14 | +- `BasicTitle` 色块默认不显示 |
15 | 15 | ||
16 | ### 🐛 Bug Fixes | 16 | ### 🐛 Bug Fixes |
17 | 17 | ||
@@ -21,6 +21,7 @@ | @@ -21,6 +21,7 @@ | ||
21 | - 修复表单项设置`disabled`不生效问题 | 21 | - 修复表单项设置`disabled`不生效问题 |
22 | - 修复`useECharts`在`resize`时不能自适应,报错 | 22 | - 修复`useECharts`在`resize`时不能自适应,报错 |
23 | - 修复`useWatermark`在清空后`resize`未删除 | 23 | - 修复`useWatermark`在清空后`resize`未删除 |
24 | +- 修复表单校验问题 | ||
24 | 25 | ||
25 | ## 2.0.0-rc.8 (2020-11-2) | 26 | ## 2.0.0-rc.8 (2020-11-2) |
26 | 27 |
src/components/Form/src/BasicForm.vue
@@ -28,16 +28,7 @@ | @@ -28,16 +28,7 @@ | ||
28 | import type { Ref } from 'vue'; | 28 | import type { Ref } from 'vue'; |
29 | import type { ValidateFields } from 'ant-design-vue/lib/form/interface'; | 29 | import type { ValidateFields } from 'ant-design-vue/lib/form/interface'; |
30 | 30 | ||
31 | - import { | ||
32 | - defineComponent, | ||
33 | - reactive, | ||
34 | - ref, | ||
35 | - computed, | ||
36 | - unref, | ||
37 | - toRef, | ||
38 | - onMounted, | ||
39 | - watchEffect, | ||
40 | - } from 'vue'; | 31 | + import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue'; |
41 | import { Form, Row } from 'ant-design-vue'; | 32 | import { Form, Row } from 'ant-design-vue'; |
42 | import FormItem from './FormItem'; | 33 | import FormItem from './FormItem'; |
43 | import { basicProps } from './props'; | 34 | import { basicProps } from './props'; |
@@ -153,10 +144,16 @@ | @@ -153,10 +144,16 @@ | ||
153 | actionState, | 144 | actionState, |
154 | }); | 145 | }); |
155 | 146 | ||
156 | - watchEffect(() => { | ||
157 | - if (!unref(getMergePropsRef).model) return; | ||
158 | - setFieldsValue(unref(getMergePropsRef).model); | ||
159 | - }); | 147 | + watch( |
148 | + () => unref(getMergePropsRef).model, | ||
149 | + () => { | ||
150 | + if (!unref(getMergePropsRef).model) return; | ||
151 | + setFieldsValue(unref(getMergePropsRef).model); | ||
152 | + }, | ||
153 | + { | ||
154 | + immediate: true, | ||
155 | + } | ||
156 | + ); | ||
160 | 157 | ||
161 | /** | 158 | /** |
162 | * @description:设置表单 | 159 | * @description:设置表单 |
src/components/Form/src/FormItem.tsx
@@ -14,6 +14,8 @@ import { createPlaceholderMessage } from './helper'; | @@ -14,6 +14,8 @@ import { createPlaceholderMessage } from './helper'; | ||
14 | import { upperFirst, cloneDeep } from 'lodash-es'; | 14 | import { upperFirst, cloneDeep } from 'lodash-es'; |
15 | 15 | ||
16 | import { useItemLabelWidth } from './hooks/useLabelWidth'; | 16 | import { useItemLabelWidth } from './hooks/useLabelWidth'; |
17 | +import { ComponentType } from './types'; | ||
18 | +import { isNumber } from '../../../utils/is'; | ||
17 | 19 | ||
18 | export default defineComponent({ | 20 | export default defineComponent({ |
19 | name: 'BasicFormItem', | 21 | name: 'BasicFormItem', |
@@ -145,6 +147,14 @@ export default defineComponent({ | @@ -145,6 +147,14 @@ export default defineComponent({ | ||
145 | return rules; | 147 | return rules; |
146 | } | 148 | } |
147 | 149 | ||
150 | + function handleValue(component: ComponentType, field: string) { | ||
151 | + const val = (props.formModel as any)[field]; | ||
152 | + if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) { | ||
153 | + return isNumber(val) && val ? `${val}` : val; | ||
154 | + } | ||
155 | + return val; | ||
156 | + } | ||
157 | + | ||
148 | function renderComponent() { | 158 | function renderComponent() { |
149 | const { | 159 | const { |
150 | componentProps, | 160 | componentProps, |
@@ -162,11 +172,7 @@ export default defineComponent({ | @@ -162,11 +172,7 @@ export default defineComponent({ | ||
162 | if (propsData[eventKey]) { | 172 | if (propsData[eventKey]) { |
163 | propsData[eventKey](e); | 173 | propsData[eventKey](e); |
164 | } | 174 | } |
165 | - if (e && e.target) { | ||
166 | - (props.formModel as any)[field] = e.target.value; | ||
167 | - } else { | ||
168 | - (props.formModel as any)[field] = e; | ||
169 | - } | 175 | + (props.formModel as any)[field] = e && e.target ? e.target.value : e; |
170 | }, | 176 | }, |
171 | }; | 177 | }; |
172 | const Comp = componentMap.get(component); | 178 | const Comp = componentMap.get(component); |
@@ -190,9 +196,8 @@ export default defineComponent({ | @@ -190,9 +196,8 @@ export default defineComponent({ | ||
190 | propsData.placeholder = placeholder; | 196 | propsData.placeholder = placeholder; |
191 | propsData.codeField = field; | 197 | propsData.codeField = field; |
192 | propsData.formValues = unref(getValuesRef); | 198 | propsData.formValues = unref(getValuesRef); |
193 | - | ||
194 | const bindValue = { | 199 | const bindValue = { |
195 | - [isCheck ? 'checked' : 'value']: (props.formModel as any)[field], | 200 | + [isCheck ? 'checked' : 'value']: handleValue(component, field), |
196 | }; | 201 | }; |
197 | if (!renderComponentContent) { | 202 | if (!renderComponentContent) { |
198 | return <Comp {...propsData} {...on} {...bindValue} />; | 203 | return <Comp {...propsData} {...on} {...bindValue} />; |
src/components/Form/src/hooks/useFormAction.ts
@@ -43,8 +43,6 @@ export function useFormAction({ | @@ -43,8 +43,6 @@ export function useFormAction({ | ||
43 | Object.keys(formModel).forEach((key) => { | 43 | Object.keys(formModel).forEach((key) => { |
44 | (formModel as any)[key] = defaultValueRef.value[key]; | 44 | (formModel as any)[key] = defaultValueRef.value[key]; |
45 | }); | 45 | }); |
46 | - // @ts-ignore | ||
47 | - // TODO 官方组件库类型定义错误,可以不传参数 | ||
48 | formEl.clearValidate(); | 46 | formEl.clearValidate(); |
49 | emit('reset', toRaw(formModel)); | 47 | emit('reset', toRaw(formModel)); |
50 | // return values; | 48 | // return values; |
@@ -58,10 +56,12 @@ export function useFormAction({ | @@ -58,10 +56,12 @@ export function useFormAction({ | ||
58 | const fields = unref(getSchema) | 56 | const fields = unref(getSchema) |
59 | .map((item) => item.field) | 57 | .map((item) => item.field) |
60 | .filter(Boolean); | 58 | .filter(Boolean); |
61 | - const formEl = unref(formElRef); | 59 | + // const formEl = unref(formElRef); |
60 | + | ||
61 | + const validKeys: string[] = []; | ||
62 | Object.keys(values).forEach((key) => { | 62 | Object.keys(values).forEach((key) => { |
63 | const element = values[key]; | 63 | const element = values[key]; |
64 | - if (fields.includes(key) && element !== undefined && element !== null) { | 64 | + if (element !== undefined && element !== null && fields.includes(key)) { |
65 | // 时间 | 65 | // 时间 |
66 | if (itemIsDateType(key)) { | 66 | if (itemIsDateType(key)) { |
67 | if (Array.isArray(element)) { | 67 | if (Array.isArray(element)) { |
@@ -76,11 +76,12 @@ export function useFormAction({ | @@ -76,11 +76,12 @@ export function useFormAction({ | ||
76 | } else { | 76 | } else { |
77 | (formModel as any)[key] = element; | 77 | (formModel as any)[key] = element; |
78 | } | 78 | } |
79 | - if (formEl) { | ||
80 | - formEl.validateFields([key]); | ||
81 | - } | 79 | + validKeys.push(key); |
82 | } | 80 | } |
83 | }); | 81 | }); |
82 | + // if (formEl) { | ||
83 | + // formEl.validateFields(validKeys); | ||
84 | + // } | ||
84 | } | 85 | } |
85 | /** | 86 | /** |
86 | * @description: 根据字段名删除 | 87 | * @description: 根据字段名删除 |
@@ -151,8 +152,8 @@ export function useFormAction({ | @@ -151,8 +152,8 @@ export function useFormAction({ | ||
151 | updateData.forEach((item) => { | 152 | updateData.forEach((item) => { |
152 | unref(getSchema).forEach((val) => { | 153 | unref(getSchema).forEach((val) => { |
153 | if (val.field === item.field) { | 154 | if (val.field === item.field) { |
154 | - const newScheam = deepMerge(val, item); | ||
155 | - schema.push(newScheam as FormSchema); | 155 | + const newSchema = deepMerge(val, item); |
156 | + schema.push(newSchema as FormSchema); | ||
156 | } else { | 157 | } else { |
157 | schema.push(val); | 158 | schema.push(val); |
158 | } | 159 | } |