基础信息修改

dev-tmp1
huwei 2026-08-08 14:41:32 +08:00
parent 026d86b082
commit c55b856c34
1 changed files with 46 additions and 18 deletions

View File

@ -18,17 +18,38 @@ import "./index.less";
// 3) 所有字段均加红星必填标注(含资质证书编号); // 3) 所有字段均加红星必填标注(含资质证书编号);
// 4) 边框容器 .card 居中、内容居左;保留 Steps 三步流程与 orgInfoSave/syncUserToGBS 提交逻辑。 // 4) 边框容器 .card 居中、内容居左;保留 Steps 三步流程与 orgInfoSave/syncUserToGBS 提交逻辑。
// 变更理由:最小侵入,样式与原型一一对应;响应式 @media(max-width:760px) 单列适配。 // 变更理由:最小侵入,样式与原型一一对应;响应式 @media(max-width:760px) 单列适配。
// 业务范围选项(原型固定 7 项,多选) // 业务范围选项(与后端枚举 code 严格匹配OrgBusinessScopeDeviceRefDO 等定义的行业 code
// 2026-08-08 改为 {value,label}value 用后端枚举 code存储/渲染的值label 仅作展示,
// 不再以中文名作为存储值,保证与后端枚举一致。
const BUSINESS_SCOPE_OPTIONS = [ 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 // 初始表单(字段名对齐后端 OrgInfo
const INITIAL_FORM = { const INITIAL_FORM = {
unitName: "", unitName: "",
@ -179,8 +200,11 @@ const validate = (formData, registerUserId) => {
errors.registeredEngineerCount = "请输入非负整数"; errors.registeredEngineerCount = "请输入非负整数";
else if (Number(formData.registeredEngineerCount) > MAX_INT32) else if (Number(formData.registeredEngineerCount) > MAX_INT32)
errors.registeredEngineerCount = "数值过大"; // int 上限 errors.registeredEngineerCount = "数值过大"; // int 上限
if (required("applyBusinessScope", "请至少选择一项业务范围")) { // 2026-08-08 校验前先清洗为 code兼容历史中文 label 混存),避免以 label 长度误判
} else if (formData.applyBusinessScope.join(",").length > 500) const normalizedScope = normalizeBusinessScope(formData.applyBusinessScope);
if (normalizedScope.length === 0) {
errors.applyBusinessScope = "请至少选择一项业务范围";
} else if (normalizedScope.join(",").length > 500)
errors.applyBusinessScope = "业务范围总字数不能超过500字"; // varchar(500) errors.applyBusinessScope = "业务范围总字数不能超过500字"; // varchar(500)
if (required("orgIntro", "请输入单位基本情况介绍")) { if (required("orgIntro", "请输入单位基本情况介绍")) {
} else if (formData.orgIntro.length > 2000) } else if (formData.orgIntro.length > 2000)
@ -230,9 +254,12 @@ const RegisterMore = (props) => {
// 2026-08-08 主键 id 以字符串保留id 为后端 Long19位超过 JS Number.MAX_SAFE_INTEGER // 2026-08-08 主键 id 以字符串保留id 为后端 Long19位超过 JS Number.MAX_SAFE_INTEGER
// 用 Number() 转换会丢失末位精度(如 ...87938 → ...88000),故保持字符串,由后端 Long 反序列化解析。 // 用 Number() 转换会丢失末位精度(如 ...87938 → ...88000),故保持字符串,由后端 Long 反序列化解析。
id: res.data.id != null ? String(res.data.id) : undefined, // 写回主键,使保存走更新分支更精确(后端仍按 registerUserId 兜底) id: res.data.id != null ? String(res.data.id) : undefined, // 写回主键,使保存走更新分支更精确(后端仍按 registerUserId 兜底)
applyBusinessScope: res.data.applyBusinessScope // 2026-08-08 回显时清洗历史中文 label 为 code保证 formData 中只存枚举值
applyBusinessScope: normalizeBusinessScope(
res.data.applyBusinessScope
? String(res.data.applyBusinessScope).split(",").filter(Boolean) ? String(res.data.applyBusinessScope).split(",").filter(Boolean)
: [], : [],
),
attachmentUrls: res.data.attachmentUrls attachmentUrls: res.data.attachmentUrls
? (() => { ? (() => {
try { try {
@ -355,7 +382,8 @@ const RegisterMore = (props) => {
registerUserId: String(resolvedRegisterUserId), registerUserId: String(resolvedRegisterUserId),
contactName, contactName,
contactPhone, contactPhone,
applyBusinessScope: formData.applyBusinessScope.join(","), // 2026-08-08 提交前清洗历史中文 label 为 code确保只传枚举值拼接不传 label
applyBusinessScope: normalizeBusinessScope(formData.applyBusinessScope).join(","),
attachmentUrls: formData.attachmentUrls.length attachmentUrls: formData.attachmentUrls.length
? JSON.stringify(formData.attachmentUrls) ? JSON.stringify(formData.attachmentUrls)
: null, : null,
@ -756,14 +784,14 @@ const RegisterMore = (props) => {
> >
<div className="register-more-scope"> <div className="register-more-scope">
{BUSINESS_SCOPE_OPTIONS.map((opt) => ( {BUSINESS_SCOPE_OPTIONS.map((opt) => (
<label key={opt}> <label key={opt.value}>
<input <input
type="checkbox" type="checkbox"
checked={formData.applyBusinessScope.includes(opt)} checked={formData.applyBusinessScope.includes(opt.value)}
disabled={!hasRegisterContext} disabled={!hasRegisterContext}
onChange={() => toggleScope(opt)} onChange={() => toggleScope(opt.value)}
/> />
{opt} {opt.label}
</label> </label>
))} ))}
</div> </div>