From c55b856c346316b62ba8f1d12b1974f007c04699 Mon Sep 17 00:00:00 2001 From: huwei <3313749341@qq.com> Date: Sat, 8 Aug 2026 14:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Container/RegisterMore/index.js | 64 ++++++++++++++++------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/src/pages/Container/RegisterMore/index.js b/src/pages/Container/RegisterMore/index.js index 94cf93b..c5eb9ac 100644 --- a/src/pages/Container/RegisterMore/index.js +++ b/src/pages/Container/RegisterMore/index.js @@ -18,17 +18,38 @@ import "./index.less"; // 3) 所有字段均加红星必填标注(含资质证书编号); // 4) 边框容器 .card 居中、内容居左;保留 Steps 三步流程与 orgInfoSave/syncUserToGBS 提交逻辑。 // 变更理由:最小侵入,样式与原型一一对应;响应式 @media(max-width:760px) 单列适配。 -// 业务范围选项(原型固定 7 项,多选) +// 业务范围选项(与后端枚举 code 严格匹配:OrgBusinessScopeDeviceRefDO 等定义的行业 code) +// 2026-08-08 改为 {value,label}:value 用后端枚举 code(存储/渲染的值),label 仅作展示, +// 不再以中文名作为存储值,保证与后端枚举一致。 const BUSINESS_SCOPE_OPTIONS = [ - "煤炭开采业", - "金属、非金属矿及其他矿采选业", - "石油和天然气开采业", - "石油加工业,化学原料、化学品及医药制造业", - "烟花爆竹制造业", - "民用爆破器材制造业", - "金属冶炼业", + { value: "COAL_MINING", label: "煤炭开采业" }, + { value: "METAL_NONMETAL_MINING", label: "金属、非金属矿及其他矿采选业" }, + { value: "ONSHORE_OIL_GAS", label: "陆地石油和天然气开采业" }, + { value: "ONSHORE_OIL_GAS_PIPELINE", label: "陆上油气管道运输业" }, + { + value: "PETROCHEMICAL_CHEMICAL_PHARMACEUTICAL", + label: "石油加工业,化学原料、化学品及医药制造业", + }, + { value: "FIREWORKS_FIRECRACKERS", label: "烟花爆竹制造业" }, + { value: "METAL_SMELTING", label: "金属冶炼" }, ]; +// 2026-08-08 业务范围值清洗:兼容历史已存的中文 label,提交/回显时统一转换为后端枚举 code。 +// 原因:早期数据 apply_business_scope 存储的是中文名,现改为存 code;若历史中文与 code 混存, +// 提交前必须清洗为 code,避免请求体中出现 label 导致后端只应接收枚举值。 +function normalizeBusinessScope(arr) { + if (!Array.isArray(arr)) return []; + const labelToValue = Object.fromEntries( + BUSINESS_SCOPE_OPTIONS.map((opt) => [opt.label, opt.value]), + ); + return arr + .filter((v) => v != null && String(v).trim() !== "") + .map((v) => { + const trimmed = String(v).trim(); + return labelToValue[trimmed] || trimmed; + }); +} + // 初始表单(字段名对齐后端 OrgInfo) const INITIAL_FORM = { unitName: "", @@ -179,8 +200,11 @@ const validate = (formData, registerUserId) => { errors.registeredEngineerCount = "请输入非负整数"; else if (Number(formData.registeredEngineerCount) > MAX_INT32) errors.registeredEngineerCount = "数值过大"; // int 上限 - if (required("applyBusinessScope", "请至少选择一项业务范围")) { - } else if (formData.applyBusinessScope.join(",").length > 500) + // 2026-08-08 校验前先清洗为 code(兼容历史中文 label 混存),避免以 label 长度误判 + const normalizedScope = normalizeBusinessScope(formData.applyBusinessScope); + if (normalizedScope.length === 0) { + errors.applyBusinessScope = "请至少选择一项业务范围"; + } else if (normalizedScope.join(",").length > 500) errors.applyBusinessScope = "业务范围总字数不能超过500字"; // varchar(500) if (required("orgIntro", "请输入单位基本情况介绍")) { } else if (formData.orgIntro.length > 2000) @@ -230,9 +254,12 @@ const RegisterMore = (props) => { // 2026-08-08 主键 id 以字符串保留:id 为后端 Long(19位),超过 JS Number.MAX_SAFE_INTEGER, // 用 Number() 转换会丢失末位精度(如 ...87938 → ...88000),故保持字符串,由后端 Long 反序列化解析。 id: res.data.id != null ? String(res.data.id) : undefined, // 写回主键,使保存走更新分支更精确(后端仍按 registerUserId 兜底) - applyBusinessScope: res.data.applyBusinessScope - ? String(res.data.applyBusinessScope).split(",").filter(Boolean) - : [], + // 2026-08-08 回显时清洗历史中文 label 为 code,保证 formData 中只存枚举值 + applyBusinessScope: normalizeBusinessScope( + res.data.applyBusinessScope + ? String(res.data.applyBusinessScope).split(",").filter(Boolean) + : [], + ), attachmentUrls: res.data.attachmentUrls ? (() => { try { @@ -355,7 +382,8 @@ const RegisterMore = (props) => { registerUserId: String(resolvedRegisterUserId), contactName, contactPhone, - applyBusinessScope: formData.applyBusinessScope.join(","), + // 2026-08-08 提交前清洗历史中文 label 为 code,确保只传枚举值拼接,不传 label + applyBusinessScope: normalizeBusinessScope(formData.applyBusinessScope).join(","), attachmentUrls: formData.attachmentUrls.length ? JSON.stringify(formData.attachmentUrls) : null, @@ -756,14 +784,14 @@ const RegisterMore = (props) => { >
{BUSINESS_SCOPE_OPTIONS.map((opt) => ( -