提交 cb35341b 编写于 作者: V Vben

fix(form): ensure that the DateTime component checked properly,fix #511

上级 16ecf718
......@@ -170,8 +170,8 @@
if (component.includes('Input') || component.includes('Textarea')) {
rule.whitespace = true;
}
setComponentRuleType(rule, component);
const valueFormat = unref(getComponentsProps)?.valueFormat;
setComponentRuleType(rule, component, valueFormat);
}
}
......@@ -203,9 +203,7 @@
if (propsData[eventKey]) {
propsData[eventKey](e);
}
const target = e ? e.target : null;
const value = target ? (isCheck ? target.checked : target.value) : e;
props.setFormModel(field, value);
},
......
import type { ValidationRule } from 'ant-design-vue/lib/form/Form';
import type { ComponentType } from './types/index';
import { useI18n } from '/@/hooks/web/useI18n';
import { isNumber } from '/@/utils/is';
import { dateUtil } from '/@/utils/dateUtil';
import { isNumber, isObject } from '/@/utils/is';
const { t } = useI18n();
......@@ -28,13 +29,19 @@ export function createPlaceholderMessage(component: ComponentType) {
return '';
}
const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'];
function genType() {
return ['DatePicker', 'MonthPicker', 'RangePicker', 'WeekPicker', 'TimePicker'];
return [...DATE_TYPE, 'RangePicker'];
}
export function setComponentRuleType(rule: ValidationRule, component: ComponentType) {
export function setComponentRuleType(
rule: ValidationRule,
component: ComponentType,
valueFormat: string
) {
if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component)) {
rule.type = 'object';
rule.type = valueFormat ? 'string' : 'object';
} else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component)) {
rule.type = 'array';
} else if (['InputNumber'].includes(component)) {
......@@ -42,6 +49,15 @@ export function setComponentRuleType(rule: ValidationRule, component: ComponentT
}
}
export function processDateValue(attr: Recordable, component: string) {
const { valueFormat, value } = attr;
if (valueFormat) {
attr.value = isObject(value) ? dateUtil(value).format(valueFormat) : value;
} else if (DATE_TYPE.includes(component) && value) {
attr.value = dateUtil(attr.value);
}
}
export function handleInputNumberValue(component?: ComponentType, val?: any) {
if (!component) return val;
if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) {
......
......@@ -73,7 +73,12 @@ export function useFormEvents({
}
formModel[key] = arr;
} else {
formModel[key] = value ? dateUtil(value) : null;
const { componentProps } = schema || {};
let _props = componentProps as any;
if (typeof componentProps === 'function') {
_props = _props();
}
formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null;
}
} else {
formModel[key] = value;
......
......@@ -55,6 +55,18 @@
},
required: true,
},
{
field: 'field33',
component: 'DatePicker',
label: '字段33',
colProps: {
span: 8,
},
componentProps: {
valueFormat: 'YYYY-MM-DD',
},
rules: [{ required: true, type: 'string' }],
},
{
field: 'field44',
component: 'InputCountDown',
......@@ -95,7 +107,7 @@
],
},
{
field: 'field44',
field: 'field441',
component: 'Input',
label: '自定义校验',
colProps: {
......@@ -198,6 +210,8 @@
field1: 1111,
field5: ['1'],
field7: '1',
field33: '2020-12-12',
field3: '2020-12-12',
});
}
return {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册