diff --git a/src/views/vehicle/customer-archive.vue b/src/views/vehicle/customer-archive.vue index fec1acd..42531ce 100644 --- a/src/views/vehicle/customer-archive.vue +++ b/src/views/vehicle/customer-archive.vue @@ -655,7 +655,7 @@ - + item.prop === field); return column?.label || field; }, + normalizeChangeFieldValue(value) { + if (typeof value !== 'string') return value; + const text = value.trim(); + if (!text || (!text.startsWith('[') && !text.startsWith('{') && text !== 'null')) { + return value; + } + try { + return JSON.parse(text); + } catch (error) { + return value; + } + }, + isEmptyChangeValue(value) { + const normalized = this.normalizeChangeFieldValue(value); + if (normalized === undefined || normalized === null || normalized === '' || normalized === '-1') { + return true; + } + if (Array.isArray(normalized)) return normalized.length === 0; + if (typeof normalized === 'object') return Object.keys(normalized).length === 0; + return false; + }, + formatScoreChangeValue(value) { + const scores = Array.isArray(value) ? value : [value]; + const categoryNames = { basic: '基础得分项', plus: '加分项目', minus: '减分项目' }; + return scores + .filter(item => item && typeof item === 'object') + .map((score, index) => { + const summary = [ + score.scoreDate && `评分日期:${score.scoreDate}`, + score.selfScore !== undefined && score.selfScore !== '' + ? `自评得分:${this.formatScoreValue(score.selfScore)}` + : '', + score.reviewScore !== undefined && score.reviewScore !== '' + ? `复评得分:${this.formatScoreValue(score.reviewScore)}` + : '', + score.finalScore !== undefined && score.finalScore !== '' + ? `最终得分:${this.formatScoreValue(score.finalScore)}` + : '', + score.creditLevel ? `信用等级:${score.creditLevel}` : '', + ].filter(Boolean); + const scoreDetails = this.normalizeChangeFieldValue(score.details); + const details = (Array.isArray(scoreDetails) ? scoreDetails : []) + .map(detail => { + const category = + detail.categoryName || + categoryNames[this.getScoreDetailCategoryCode(detail)] || + ''; + const itemName = detail.itemName || '评分项目'; + const option = detail.selectedOption || detail.scoreDescription || ''; + const points = [ + detail.selfScore !== undefined && detail.selfScore !== '' + ? `自评${this.formatScoreValue(detail.selfScore)}分` + : '', + detail.reviewScore !== undefined && detail.reviewScore !== '' + ? `复评${this.formatScoreValue(detail.reviewScore)}分` + : '', + ].filter(Boolean); + if ( + !points.length && + detail.score !== undefined && + detail.score !== '' && + detail.score !== -1 && + detail.score !== '-1' + ) { + points.push(`得分${this.formatScoreValue(detail.score)}分`); + } + const label = `${category ? `${category}-` : ''}${itemName}`; + return `${label}${option ? `:${option}` : ''}${points.length ? `(${points.join(',')})` : ''}`; + }) + .filter(Boolean); + if (details.length) summary.push(`评分明细:${details.join(';')}`); + return summary.length ? summary.join(';') : `第${index + 1}条评分`; + }) + .join(';'); + }, formatChangeFieldValue(field, value) { + value = this.normalizeChangeFieldValue(value); if (value === undefined || value === null || value === '' || value === '-1') return '空'; const normalizedField = { 准入类型: 'accessType', @@ -1931,6 +2007,9 @@ export default { 状态: 'status', 客户类型: 'customerType', }[field] || field; + if (normalizedField === '评分信息' || normalizedField === 'scores') { + return this.formatScoreChangeValue(value) || '空'; + } const valueMap = { accessType: { temporary: '临时', formal: '正式' }, approvalStatus: { @@ -1962,7 +2041,11 @@ export default { const afterData = this.parseChangeData(row.afterData); const fields = [...new Set([...Object.keys(beforeData), ...Object.keys(afterData)])]; const details = fields - .filter(field => field !== '变更内容') + .filter( + field => + field !== '变更内容' && + !(this.isEmptyChangeValue(beforeData[field]) && this.isEmptyChangeValue(afterData[field])) + ) .map(field => { const before = this.formatChangeFieldValue(field, beforeData[field]); const after = this.formatChangeFieldValue(field, afterData[field]);