fix(BasicForm): setFieldsValue not work in form when use date comp (#3819)

* fix(BasicForm): setFieldsValue not work in form when use date comp

* fix(BasicForm): add lost time component
This commit is contained in:
Electrolux 2024-05-09 09:12:36 +08:00 committed by GitHub
parent 88e77dbf99
commit 7538c57db7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 14 deletions

View File

@ -32,7 +32,7 @@ export function createPlaceholderMessage(component: ComponentType) {
const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker']; const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'];
function genType() { function genType() {
return [...DATE_TYPE, 'RangePicker']; return [...DATE_TYPE, 'RangePicker',"TimeRangePicker"];
} }
export function setComponentRuleType( export function setComponentRuleType(

View File

@ -6,7 +6,7 @@ import { isArray, isFunction, isObject, isString, isNil } from '@/utils/is';
import { deepMerge } from '@/utils'; import { deepMerge } from '@/utils';
import { dateItemType, defaultValueComponents, isIncludeSimpleComponents } from '../helper'; import { dateItemType, defaultValueComponents, isIncludeSimpleComponents } from '../helper';
import { dateUtil } from '@/utils/dateUtil'; import { dateUtil } from '@/utils/dateUtil';
import { cloneDeep, has, uniqBy, get } from 'lodash-es'; import { cloneDeep, has, uniqBy, get, set } from 'lodash-es';
import { error } from '@/utils/log'; import { error } from '@/utils/log';
interface UseFormActionContext { interface UseFormActionContext {
@ -20,6 +20,23 @@ interface UseFormActionContext {
handleFormValues: Fn; handleFormValues: Fn;
} }
function tryConstructArray(field: string, values: Recordable = {}): any[] | undefined {
const pattern = /^\[(.+)\]$/;
if (pattern.test(field)) {
const match = field.match(pattern);
if (match && match[1]) {
const keys = match[1].split(',');
if (!keys.length) {
return undefined;
}
const result = [];
keys.forEach((k, index) => {
set(result, index, values[k.trim()]);
});
return result.filter(Boolean).length ? result : undefined;
}
}
}
export function useFormEvents({ export function useFormEvents({
emit, emit,
getProps, getProps,
@ -83,28 +100,36 @@ export function useFormEvents({
}); });
} }
const constructValue = get(value, key); let constructValue
const setDateFieldValue = (v) => { const setDateFieldValue = (v) => {
return v ? (_props?.valueFormat ? v : dateUtil(v)) : null; return v ? (_props?.valueFormat ? v : dateUtil(v)) : null;
}; };
// 0| '' is allow
if (hasKey || !!constructValue) { // Adapt date component
const fieldValue = constructValue || value; if(itemIsDateComponent(schema?.component)){
// time type constructValue = tryConstructArray(key, values) ;
if (itemIsDateType(key)) { if(!!constructValue){
const fieldValue = constructValue || value;
if (Array.isArray(fieldValue)) { if (Array.isArray(fieldValue)) {
const arr: any[] = []; const arr: any[] = [];
for (const ele of fieldValue) { for (const ele of fieldValue) {
arr.push(setDateFieldValue(ele)); arr.push(setDateFieldValue(ele));
} }
unref(formModel)[key] = arr; unref(formModel)[key] = arr;
validKeys.push(key);
} else { } else {
unref(formModel)[key] = setDateFieldValue(fieldValue); unref(formModel)[key] = setDateFieldValue(fieldValue);
validKeys.push(key);
} }
} else {
unref(formModel)[key] = fieldValue;
} }
}
// Adapt common component
if (hasKey) {
constructValue = get(value, key);
const fieldValue = constructValue || value;
unref(formModel)[key] = fieldValue;
if (_props?.onChange) { if (_props?.onChange) {
_props?.onChange(fieldValue); _props?.onChange(fieldValue);
} }
@ -295,10 +320,8 @@ export function useFormEvents({
/** /**
* @description: Is it time * @description: Is it time
*/ */
function itemIsDateType(key: string) { function itemIsDateComponent(key: string) {
return unref(getSchema).some((item) => { return dateItemType.includes(key);
return item.field === key && item.component ? dateItemType.includes(item.component) : false;
});
} }
async function validateFields(nameList?: NamePath[] | undefined) { async function validateFields(nameList?: NamePath[] | undefined) {