From 0d857f7600babc54cdc68210db2f2ec67d2ecfe7 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Mon, 24 Nov 2025 09:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96FormItemsRenderer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/FormBuilder/FormItemsRenderer.js | 46 ++++++++++++++++----- enum/uploadFile/gwj/index.js | 2 + utils/index.d.ts | 7 ++++ utils/index.js | 16 +++++++ 4 files changed, 60 insertions(+), 11 deletions(-) diff --git a/components/FormBuilder/FormItemsRenderer.js b/components/FormBuilder/FormItemsRenderer.js index cb3816e..e13da12 100644 --- a/components/FormBuilder/FormItemsRenderer.js +++ b/components/FormBuilder/FormItemsRenderer.js @@ -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 ; + return ; case FORM_ITEM_RENDER_ENUM.TEXTAREA: - return