优化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) => { const getRules = (option) => {
if (!useAutoGenerateRequired)
return option.rules ? (Array.isArray(option.rules) ? option.rules : [option.rules]) : [];
if (option.render === FORM_ITEM_RENDER_ENUM.DIVIDER) if (option.render === FORM_ITEM_RENDER_ENUM.DIVIDER)
return []; 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 // 支持动态计算 required
const required = typeof option.required === "function" const required = typeof option.required === "function"
? option.required(getFormValues()) ? option.required(getFormValues())
@ -112,12 +140,7 @@ const FormItemsRenderer = ({
FORM_ITEM_RENDER_ENUM.NUMBER, FORM_ITEM_RENDER_ENUM.NUMBER,
].includes(option.render); ].includes(option.render);
const rules = [ rules.push({ required: true, message: `${isBlurTrigger ? "请输入" : "请选择"}${option.label}` });
{
required: true,
message: `${isBlurTrigger ? "请输入" : "请选择"}${option.label}`,
},
];
if (option.rules) { if (option.rules) {
if (Array.isArray(option.rules)) { if (Array.isArray(option.rules)) {
@ -127,10 +150,11 @@ const FormItemsRenderer = ({
rules.push(option.rules); rules.push(option.rules);
} }
} }
return 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 // 获取key
@ -148,10 +172,10 @@ const FormItemsRenderer = ({
switch (render) { switch (render) {
case FORM_ITEM_RENDER_ENUM.INPUT: case FORM_ITEM_RENDER_ENUM.INPUT:
return <Input placeholder={placeholder} {...componentProps} />; return <Input placeholder={placeholder} max={50} {...componentProps} />;
case FORM_ITEM_RENDER_ENUM.TEXTAREA: 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.INPUT_NUMBER:
case FORM_ITEM_RENDER_ENUM.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 - 安全环保检查-申辩签字 144: 144, // safety_environmental_inspection_defense_signature - 安全环保检查-申辩签字
146: 146, // safety_environmental_inspection_acceptance - 安全环保检查-验收 146: 146, // safety_environmental_inspection_acceptance - 安全环保检查-验收
145: 145, // qualified_list_inspection - 清单检查合格 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", 144: "safety_environmental_inspection_defense_signature",
145: "qualified_list_inspection", 145: "qualified_list_inspection",
146: "safety_environmental_inspection_acceptance", 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; [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 * 获取文件url
*/ */