优化FormItemsRenderer

master
LiuJiaNan 2025-11-24 09:38:02 +08:00
parent 75b8214df0
commit 0d857f7600
4 changed files with 60 additions and 11 deletions

View File

@ -94,11 +94,39 @@ const FormItemsRenderer = ({
// 获取验证规则
const getRules = (option) => {
if (!useAutoGenerateRequired)
return option.rules ? (Array.isArray(option.rules) ? option.rules : [option.rules]) : [];
if (option.render === FORM_ITEM_RENDER_ENUM.DIVIDER)
return [];
const rules = [];
/** @type {string | Function} */
const render = option.render || FORM_ITEM_RENDER_ENUM.INPUT;
switch (render) {
case FORM_ITEM_RENDER_ENUM.INPUT:
rules.push({ max: 50, message: "最多输入50字符" });
break;
case FORM_ITEM_RENDER_ENUM.TEXTAREA:
rules.push({ max: 500, message: "最多输入500字符" });
break;
case FORM_ITEM_RENDER_ENUM.INPUT_NUMBER:
case FORM_ITEM_RENDER_ENUM.NUMBER:
rules.push({ pattern: /^(\d+)(\.\d{1,2})?$/, message: "请输入正确的数字,最多保留两位小数" });
rules.push({
validator: (_, value) => {
if (value && Math.abs(parseFloat(value)) > Number.MAX_SAFE_INTEGER) {
return Promise.reject("输入数值超出安全范围");
}
return Promise.resolve();
}
});
break;
}
if (!useAutoGenerateRequired)
return option.rules ? (Array.isArray(option.rules) ? [...option.rules, ...rules] : [option.rules, ...rules]) : [];
// 支持动态计算 required
const required = typeof option.required === "function"
? option.required(getFormValues())
@ -112,12 +140,7 @@ const FormItemsRenderer = ({
FORM_ITEM_RENDER_ENUM.NUMBER,
].includes(option.render);
const rules = [
{
required: true,
message: `${isBlurTrigger ? "请输入" : "请选择"}${option.label}`,
},
];
rules.push({ required: true, message: `${isBlurTrigger ? "请输入" : "请选择"}${option.label}` });
if (option.rules) {
if (Array.isArray(option.rules)) {
@ -127,10 +150,11 @@ const FormItemsRenderer = ({
rules.push(option.rules);
}
}
return rules;
}
return option.rules ? (Array.isArray(option.rules) ? option.rules : [option.rules]) : [];
return option.rules ? (Array.isArray(option.rules) ? [...option.rules, ...rules] : [option.rules, ...rules]) : [];
};
// 获取key
@ -148,10 +172,10 @@ const FormItemsRenderer = ({
switch (render) {
case FORM_ITEM_RENDER_ENUM.INPUT:
return <Input placeholder={placeholder} {...componentProps} />;
return <Input placeholder={placeholder} max={50} {...componentProps} />;
case FORM_ITEM_RENDER_ENUM.TEXTAREA:
return <TextArea placeholder={placeholder} rows={3} {...componentProps} />;
return <TextArea placeholder={placeholder} max={500} showCount={true} rows={3} {...componentProps} />;
case FORM_ITEM_RENDER_ENUM.INPUT_NUMBER:
case FORM_ITEM_RENDER_ENUM.NUMBER:

View File

@ -76,6 +76,7 @@ export const UPLOAD_FILE_TYPE_ENUM = {
144: 144, // safety_environmental_inspection_defense_signature - 安全环保检查-申辩签字
146: 146, // safety_environmental_inspection_acceptance - 安全环保检查-验收
145: 145, // qualified_list_inspection - 清单检查合格
147: 147, // hidden_qualified_listInspection_signature - 隐患清单排查签字
};
/**
@ -153,4 +154,5 @@ export const UPLOAD_FILE_PATH_ENUM = {
144: "safety_environmental_inspection_defense_signature",
145: "qualified_list_inspection",
146: "safety_environmental_inspection_acceptance",
147: "hidden_qualified_listInspection_signature",
};

7
utils/index.d.ts vendored
View File

@ -325,3 +325,10 @@ export function processTreeDataForOnlyLastLevel(
/** 子节点 */
[key: string]: any;
}[];
/**
*
*/
export function validatorEndTime(timeStart: string): {
validator: (_: any, value: any) => Promise<void | string>;
};

View File

@ -507,6 +507,22 @@ export const processTreeDataForOnlyLastLevel = (options) => {
});
};
/**
* 验证结束时间是否大于开始时间
*/
export const validatorEndTime = (timeStart) => {
return {
validator: (_, value) => {
if (value && timeStart && value < timeStart) {
return Promise.reject("结束时间不能早于开始时间");
}
else {
return Promise.resolve();
}
},
}
}
/**
* 获取文件url
*/