UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

104 lines (95 loc) 2.78 kB
/** @format */ import { unref } from 'vue'; import type { Ref, ComputedRef } from 'vue'; import { isArray, isFunction, isPlainObject, isString, isUndefined, isNull, } from '@fe6/shared'; import { dateUtil } from '../date'; import type { FormSchema, FormProps } from '../types/form'; interface UseFormValuesContext { defaultValueRef: Ref<any>; getSchema: ComputedRef<FormSchema[]>; formModel: Recordable; getProps: ComputedRef<FormProps>; } export function useFormValues({ defaultValueRef, getSchema, formModel, getProps, }: UseFormValuesContext) { // Processing form values function handleFormValues(values: Recordable) { if (!isPlainObject(values)) { return {}; } const { transformDateFunc } = unref(getProps); const res: Recordable = {}; for (const item of Object.entries(values)) { let [, value] = item; const [key] = item; if ((isArray(value) && value.length === 0) || isFunction(value)) { continue; } const schemaItem = getSchema.value.find((gsItem: any) => gsItem.field === key); if (isPlainObject(value)) { value = transformDateFunc(value, schemaItem); } if ( isArray(value) && value.length > 0 ) { value = value.map((item: any) => { return item?._isAMomentObject ? transformDateFunc(item, schemaItem) : item; }); } // Remove spaces if (isString(value)) { value = value.trim(); } res[key] = value; } return handleRangeTimeValue(res); } /** * @description: Processing time interval parameters */ function handleRangeTimeValue(values: Recordable) { const { fieldMapToTime } = unref(getProps); if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) { return values; } for (const [ field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD', ] of fieldMapToTime) { if (!field || !startTimeKey || !endTimeKey || !values[field]) { continue; } const [startTime, endTime]: string[] = values[field]; values[startTimeKey] = isString(startTime) ? startTime : dateUtil(startTime).format(format); values[endTimeKey] = isString(endTime) ? endTime : dateUtil(endTime).format(format); Reflect.deleteProperty(values, field); } return values; } function initDefault() { const schemas = unref(getSchema); const obj: Recordable = {}; schemas.forEach((item) => { const { defaultValue } = item; if (!isUndefined(defaultValue) && !isNull(defaultValue)) { obj[item.field] = defaultValue; formModel[item.field] = defaultValue; } }); defaultValueRef.value = obj; } return { handleFormValues, initDefault }; }