From fb6a9be8553cb5f8ecb8a7eda8dc613e0e13239a Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Mon, 15 Dec 2025 15:26:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96FormBuilder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/FormBuilder/FormBuilder.js | 2 +- components/FormBuilder/FormItemsRenderer.d.ts | 2 ++ components/FormBuilder/FormItemsRenderer.js | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/components/FormBuilder/FormBuilder.js b/components/FormBuilder/FormBuilder.js index 4ead1e1..8d30286 100644 --- a/components/FormBuilder/FormBuilder.js +++ b/components/FormBuilder/FormBuilder.js @@ -1,4 +1,4 @@ -import { Button, Col, Form, Row, Space, Spin, message } from "antd"; +import { Button, Col, Form, message, Row, Space, Spin } from "antd"; import FormItemsRenderer from "./FormItemsRenderer"; /** diff --git a/components/FormBuilder/FormItemsRenderer.d.ts b/components/FormBuilder/FormItemsRenderer.d.ts index d1f2d0c..863db52 100644 --- a/components/FormBuilder/FormItemsRenderer.d.ts +++ b/components/FormBuilder/FormItemsRenderer.d.ts @@ -77,6 +77,8 @@ export interface FormOption { required?: boolean | ((formValues: FormValues) => boolean); /** 验证规则 */ rules?: Rule | Rule[]; + /** 是否使用字符验证限制 */ + useConstraints?: boolean; /** 占位符文本,默认会根据传入的 render 类型自动判断(请选择、请输入)和 label 组合 */ placeholder?: ReactNode; /** 提示信息,传入将在 label 右侧生成图标展示 tooltip */ diff --git a/components/FormBuilder/FormItemsRenderer.js b/components/FormBuilder/FormItemsRenderer.js index 88159c3..7fbba07 100644 --- a/components/FormBuilder/FormItemsRenderer.js +++ b/components/FormBuilder/FormItemsRenderer.js @@ -147,17 +147,17 @@ const FormItemsRenderer = ({ const render = option.render || FORM_ITEM_RENDER_ENUM.INPUT; switch (render) { case FORM_ITEM_RENDER_ENUM.INPUT: - rules.push({ max: 50, message: "最多输入50字符" }); + option.useConstraints !== false && rules.push({ max: 50, message: "最多输入50字符" }); break; case FORM_ITEM_RENDER_ENUM.TEXTAREA: - rules.push({ max: 500, message: "最多输入500字符" }); + option.useConstraints !== false && 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({ + option.useConstraints !== false && rules.push({ pattern: /^(\d+)(\.\d{1,2})?$/, message: "请输入正确的数字,最多保留两位小数" }); + option.useConstraints !== false && rules.push({ validator: (_, value) => { if (value && Math.abs(Number.parseFloat(value)) > 999999999) { return Promise.reject("输入数值超出安全范围"); @@ -235,7 +235,7 @@ const FormItemsRenderer = ({ const itemsFieldKey = getItemsFieldKey(option); /** @type {string | Function} */ const render = option.render || FORM_ITEM_RENDER_ENUM.INPUT; - const placeholder = option.placeholder || `请${render === FORM_ITEM_RENDER_ENUM.SELECT || render === FORM_ITEM_RENDER_ENUM.RADIO || render === FORM_ITEM_RENDER_ENUM.CHECKBOX ? "选择" : "输入"}${option.label}`; + const placeholder = option.placeholder || `请${[FORM_ITEM_RENDER_ENUM.INPUT, FORM_ITEM_RENDER_ENUM.TEXTAREA, FORM_ITEM_RENDER_ENUM.INPUT_NUMBER, FORM_ITEM_RENDER_ENUM.NUMBER].includes(render) ? "输入" : "选择"}${option.label}`; switch (render) { case FORM_ITEM_RENDER_ENUM.INPUT: