基础信息修改
parent
026d86b082
commit
c55b856c34
|
|
@ -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 为后端 Long(19位),超过 JS Number.MAX_SAFE_INTEGER,
|
// 2026-08-08 主键 id 以字符串保留:id 为后端 Long(19位),超过 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 中只存枚举值
|
||||||
? String(res.data.applyBusinessScope).split(",").filter(Boolean)
|
applyBusinessScope: normalizeBusinessScope(
|
||||||
: [],
|
res.data.applyBusinessScope
|
||||||
|
? 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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue