From 2500540933b5c1e2bbb2466712faf2862e116823 Mon Sep 17 00:00:00 2001 From: weicw1996 Date: Fri, 9 Oct 2026 10:01:19 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BB=8E=E4=B8=9A=E8=B5=84=E6=A0=BC?= =?UTF-8?q?=E8=AF=81=E5=AD=97=E6=AE=B5=E6=94=B9=E5=90=8D=E5=90=8E=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E9=A1=B5=E5=85=BC=E5=AE=B9=E6=97=A7=E9=94=AE=EF=BC=8C?= =?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=B0=81=E9=9D=A2/=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E9=A1=B5=E4=B8=8E=E6=9C=89=E6=95=88=E6=9C=9F=E8=B5=B7=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从业资格证信息组原先只列证号、照片、有效期止三项,且照片用的是字段改名前的旧键 qualificationUrl。改名之前提交的记录里仍存旧键,只读新键会得到空值,审核页把已填的 封面页显示成「—」,审核员据此以为对方没传材料。现按 VehicleCertSubmitRequest 的 字段名补全该组,并新增 readFieldValue 统一兼容旧键,新旧键并存时以新键为准。 旧键已并入所属字段展示,knownKeys 同步登记,避免同一张封面页出现两行。 --- src/utils/cert-audit.js | 48 +++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/src/utils/cert-audit.js b/src/utils/cert-audit.js index d57cb9b..331eced 100644 --- a/src/utils/cert-audit.js +++ b/src/utils/cert-audit.js @@ -139,9 +139,23 @@ const CERT_SNAPSHOT_GROUPS = { { title: '从业资格证信息', fields: [ + { key: 'qualificationType', label: '从业资格认证类型' }, { key: 'qualificationNo', label: '从业资格证号' }, - { key: 'qualificationUrl', label: '从业资格证照片', type: TYPE_IMAGE }, - { key: 'qualificationValidEnd', label: '从业资格证有效期止', type: TYPE_DATE }, + { + key: 'qualificationFront', + label: '从业资格证封面页', + type: TYPE_IMAGE, + legacyKeys: ['qualificationUrl'], + }, + { key: 'qualificationBack', label: '从业资格证内容页', type: TYPE_IMAGE }, + { key: 'qualificationValidStart', label: '从业资格证有效期起', type: TYPE_DATE }, + { + key: 'qualificationValidEnd', + label: '从业资格证有效期止', + type: TYPE_DATE, + longTermKey: 'qualificationLongTerm', + }, + { key: 'qualificationLongTerm', label: '从业资格证长期有效', type: TYPE_LONG_TERM }, ], }, ], @@ -268,9 +282,28 @@ const normalizeDate = value => { return text; }; +/** + * 取字段值,兼容字段改名前的旧键 + * + * 后端把某字段改名后,改名之前提交的记录里存的仍是旧键(例:从业资格证封面页 + * 由 `qualificationUrl` 改为 `qualificationFront`)。只读新键会得到空, + * 审核页就把已填的封面页显示成「—」,误导审核员以为对方没传。 + * 新旧键都存在时以新键为准。 + */ +const readFieldValue = (snapshot, field) => { + if (!snapshot) return undefined; + const value = snapshot[field.key]; + if (!isEmptyValue(value)) return value; + const legacyKeys = field.legacyKeys || []; + for (let i = 0; i < legacyKeys.length; i += 1) { + if (!isEmptyValue(snapshot[legacyKeys[i]])) return snapshot[legacyKeys[i]]; + } + return value; +}; + /** 比较用的归一化取值:展示相同即视为未变更 */ const canonicalOf = (snapshot, field) => { - const value = snapshot ? snapshot[field.key] : undefined; + const value = readFieldValue(snapshot, field); if (field.type === TYPE_LONG_TERM) { if (isEmptyValue(value)) return ''; return isLongTermOn(value) ? '1' : '0'; @@ -286,7 +319,7 @@ const canonicalOf = (snapshot, field) => { /** 展示文案:日期型受「长期有效」影响,图片型返回 URL 由组件渲染缩略图 */ const textOf = (snapshot, field) => { - const value = snapshot ? snapshot[field.key] : undefined; + const value = readFieldValue(snapshot, field); if (field.type === TYPE_IMAGE) { return isEmptyValue(value) ? '' : String(value); } @@ -323,11 +356,11 @@ const buildRow = (field, pendingSnapshot, effectiveSnapshot, hasBaseline) => { label: field.label, type, effective: { - raw: effectiveSnapshot ? effectiveSnapshot[field.key] : undefined, + raw: readFieldValue(effectiveSnapshot, target), text: textOf(effectiveSnapshot, target), }, pending: { - raw: pendingSnapshot ? pendingSnapshot[field.key] : undefined, + raw: readFieldValue(pendingSnapshot, target), text: textOf(pendingSnapshot, target), }, changed: Boolean(changeType), @@ -363,7 +396,8 @@ export const buildSnapshotDiff = (bizType, pendingJson, effectiveJson) => { const groups = groupsConfig.map(group => { const rows = group.fields.map(field => { - knownKeys.push(field.key); + // 旧键已由所属字段并入展示,不能再作为独立字段出现,否则同一张封面页会出现两行 + knownKeys.push(field.key, ...(field.legacyKeys || [])); return buildRow(field, pending.value, effective.value, hasBaseline); }); return {