You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
2.5 KiB

import type { Rule as ValidationRule } from 'ant-design-vue/lib/form'
import type { ComponentType } from './types'
import { useI18n } from '@/hooks/web/useI18n'
import { dateUtil } from '@/utils/dateUtil'
import { isNumber, isObject } from '@/utils/is'
const { t } = useI18n()
/**
* @description: 生成placeholder
*/
export function createPlaceholderMessage(component: ComponentType) {
if (component.includes('Input') || component.includes('Complete'))
return t('common.inputText')
if (component.includes('Picker'))
return t('common.chooseText')
if (
component.includes('Select')
|| component.includes('Cascader')
|| component.includes('Checkbox')
|| component.includes('Radio')
|| component.includes('Switch')
) {
// return `请选择${label}`;
return t('common.chooseText')
}
return ''
}
const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker']
function genType() {
return [...DATE_TYPE, 'RangePicker']
}
export function setComponentRuleType(rule: ValidationRule, component: ComponentType, valueFormat: string) {
if (Reflect.has(rule, 'type'))
return
if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component))
rule.type = valueFormat ? 'string' : 'object'
else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component))
rule.type = 'array'
else if (['InputNumber'].includes(component))
rule.type = 'number'
}
export function processDateValue(attr: Recordable, component: string) {
const { valueFormat, value } = attr
if (valueFormat)
attr.value = isObject(value) ? dateUtil(value as unknown as Date).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))
return val && isNumber(val) ? `${val}` : val
return val
}
/**
* 时间字段
*/
export const dateItemType = genType()
export const defaultValueComponents = ['Input', 'InputPassword', 'InputSearch', 'InputTextArea']
// TODO 自定义组件封装会出现验证问题,因此这里目前改成手动触发验证
export const NO_AUTO_LINK_COMPONENTS: ComponentType[] = [
'Upload',
'ApiTransfer',
'ApiTree',
'ApiTreeSelect',
'ApiRadioGroup',
'ApiCascader',
'AutoComplete',
'RadioButtonGroup',
'ImageUpload',
]