提交 1db72c8f 编写于 作者: V vben

fix: fix form validate error

上级 db0bfc88
## Wip
### ⚡ Performance Improvements
- Menu performance continues to be optimized and smoother
- Optimize lazy loading components and examples
### 🎫 Chores
- Delete menu background image
- Update the version of ʻant-design-vue`to`beta13`
- Update `vite` version to `rc.9`
- Exception page adjustment
- `BasicTitle` Color blocks are not displayed by default
### 🐛 Bug Fixes
- Fix table type problem after upgrade
- 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
- Fix the issue of ʻuseMessage` type
- Fix the problem that the form item setting `disabled` does not take effect
- Fix that ʻuseECharts`can't adapt when`resize`, and an error is reported
- Fix that `resize` is not deleted after ʻuseWatermark` is cleared
- Fix form verification problem
## 2.0.0-rc.8 (2020-11-2) ## 2.0.0-rc.8 (2020-11-2)
### ✨ Features ### ✨ Features
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
- 更新`ant-design-vue`版本为`beta13` - 更新`ant-design-vue`版本为`beta13`
- 更新`vite`版本为`rc.9` - 更新`vite`版本为`rc.9`
- 异常页调整 - 异常页调整
- `BasicTitle` Color blocks are not displayed by default - `BasicTitle` 色块默认不显示
### 🐛 Bug Fixes ### 🐛 Bug Fixes
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
- 修复表单项设置`disabled`不生效问题 - 修复表单项设置`disabled`不生效问题
- 修复`useECharts``resize`时不能自适应,报错 - 修复`useECharts``resize`时不能自适应,报错
- 修复`useWatermark`在清空后`resize`未删除 - 修复`useWatermark`在清空后`resize`未删除
- 修复表单校验问题
## 2.0.0-rc.8 (2020-11-2) ## 2.0.0-rc.8 (2020-11-2)
......
...@@ -28,16 +28,7 @@ ...@@ -28,16 +28,7 @@
import type { Ref } from 'vue'; import type { Ref } from 'vue';
import type { ValidateFields } from 'ant-design-vue/lib/form/interface'; import type { ValidateFields } from 'ant-design-vue/lib/form/interface';
import { import { defineComponent, reactive, ref, computed, unref, toRef, onMounted, watch } from 'vue';
defineComponent,
reactive,
ref,
computed,
unref,
toRef,
onMounted,
watchEffect,
} from 'vue';
import { Form, Row } from 'ant-design-vue'; import { Form, Row } from 'ant-design-vue';
import FormItem from './FormItem'; import FormItem from './FormItem';
import { basicProps } from './props'; import { basicProps } from './props';
...@@ -153,10 +144,16 @@ ...@@ -153,10 +144,16 @@
actionState, actionState,
}); });
watchEffect(() => { watch(
if (!unref(getMergePropsRef).model) return; () => unref(getMergePropsRef).model,
setFieldsValue(unref(getMergePropsRef).model); () => {
}); if (!unref(getMergePropsRef).model) return;
setFieldsValue(unref(getMergePropsRef).model);
},
{
immediate: true,
}
);
/** /**
* @description:设置表单 * @description:设置表单
......
...@@ -14,6 +14,8 @@ import { createPlaceholderMessage } from './helper'; ...@@ -14,6 +14,8 @@ import { createPlaceholderMessage } from './helper';
import { upperFirst, cloneDeep } from 'lodash-es'; import { upperFirst, cloneDeep } from 'lodash-es';
import { useItemLabelWidth } from './hooks/useLabelWidth'; import { useItemLabelWidth } from './hooks/useLabelWidth';
import { ComponentType } from './types';
import { isNumber } from '../../../utils/is';
export default defineComponent({ export default defineComponent({
name: 'BasicFormItem', name: 'BasicFormItem',
...@@ -145,6 +147,14 @@ export default defineComponent({ ...@@ -145,6 +147,14 @@ export default defineComponent({
return rules; return rules;
} }
function handleValue(component: ComponentType, field: string) {
const val = (props.formModel as any)[field];
if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) {
return isNumber(val) && val ? `${val}` : val;
}
return val;
}
function renderComponent() { function renderComponent() {
const { const {
componentProps, componentProps,
...@@ -162,11 +172,7 @@ export default defineComponent({ ...@@ -162,11 +172,7 @@ export default defineComponent({
if (propsData[eventKey]) { if (propsData[eventKey]) {
propsData[eventKey](e); propsData[eventKey](e);
} }
if (e && e.target) { (props.formModel as any)[field] = e && e.target ? e.target.value : e;
(props.formModel as any)[field] = e.target.value;
} else {
(props.formModel as any)[field] = e;
}
}, },
}; };
const Comp = componentMap.get(component); const Comp = componentMap.get(component);
...@@ -190,9 +196,8 @@ export default defineComponent({ ...@@ -190,9 +196,8 @@ export default defineComponent({
propsData.placeholder = placeholder; propsData.placeholder = placeholder;
propsData.codeField = field; propsData.codeField = field;
propsData.formValues = unref(getValuesRef); propsData.formValues = unref(getValuesRef);
const bindValue = { const bindValue = {
[isCheck ? 'checked' : 'value']: (props.formModel as any)[field], [isCheck ? 'checked' : 'value']: handleValue(component, field),
}; };
if (!renderComponentContent) { if (!renderComponentContent) {
return <Comp {...propsData} {...on} {...bindValue} />; return <Comp {...propsData} {...on} {...bindValue} />;
......
...@@ -43,8 +43,6 @@ export function useFormAction({ ...@@ -43,8 +43,6 @@ export function useFormAction({
Object.keys(formModel).forEach((key) => { Object.keys(formModel).forEach((key) => {
(formModel as any)[key] = defaultValueRef.value[key]; (formModel as any)[key] = defaultValueRef.value[key];
}); });
// @ts-ignore
// TODO 官方组件库类型定义错误,可以不传参数
formEl.clearValidate(); formEl.clearValidate();
emit('reset', toRaw(formModel)); emit('reset', toRaw(formModel));
// return values; // return values;
...@@ -58,10 +56,12 @@ export function useFormAction({ ...@@ -58,10 +56,12 @@ export function useFormAction({
const fields = unref(getSchema) const fields = unref(getSchema)
.map((item) => item.field) .map((item) => item.field)
.filter(Boolean); .filter(Boolean);
const formEl = unref(formElRef); // const formEl = unref(formElRef);
const validKeys: string[] = [];
Object.keys(values).forEach((key) => { Object.keys(values).forEach((key) => {
const element = values[key]; const element = values[key];
if (fields.includes(key) && element !== undefined && element !== null) { if (element !== undefined && element !== null && fields.includes(key)) {
// 时间 // 时间
if (itemIsDateType(key)) { if (itemIsDateType(key)) {
if (Array.isArray(element)) { if (Array.isArray(element)) {
...@@ -76,11 +76,12 @@ export function useFormAction({ ...@@ -76,11 +76,12 @@ export function useFormAction({
} else { } else {
(formModel as any)[key] = element; (formModel as any)[key] = element;
} }
if (formEl) { validKeys.push(key);
formEl.validateFields([key]);
}
} }
}); });
// if (formEl) {
// formEl.validateFields(validKeys);
// }
} }
/** /**
* @description: 根据字段名删除 * @description: 根据字段名删除
...@@ -151,8 +152,8 @@ export function useFormAction({ ...@@ -151,8 +152,8 @@ export function useFormAction({
updateData.forEach((item) => { updateData.forEach((item) => {
unref(getSchema).forEach((val) => { unref(getSchema).forEach((val) => {
if (val.field === item.field) { if (val.field === item.field) {
const newScheam = deepMerge(val, item); const newSchema = deepMerge(val, item);
schema.push(newScheam as FormSchema); schema.push(newSchema as FormSchema);
} else { } else {
schema.push(val); schema.push(val);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册