const fs = require('fs') const path = require('path') const assert = require('assert') function read(relativePath) { return fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8') } const personalDetail = read('src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue') const modelOutput = read('src/views/loanPricing/workflow/components/ModelOutputDisplay.vue') function extractCard(source, className) { const start = source.indexOf(``) const end = source.indexOf('', start) assert(start !== -1 && end !== -1, `缺少卡片: ${className}`) return source.slice(start, end) } const summaryCard = extractCard(personalDetail, 'summary-card') const detailCard = extractCard(personalDetail, 'detail-card') const businessInfoStart = detailCard.indexOf('

业务信息

') const basicInfo = detailCard.slice(0, businessInfoStart) const businessInfo = detailCard.slice(businessInfoStart) assert( !basicInfo.includes('label="借款期限"') && businessInfo.includes('label="借款期限"') && businessInfo.includes('detailData.loanTerm'), '个人详情页借款期限未展示在业务信息中' ) ;['期限', '担保方式', '产品最低利率下限'].forEach((label) => { assert(summaryCard.includes(`label="${label}"`), `个人流程详情关键信息缺少字段: ${label}`) }) ;['基准利率', '浮动BP', '最终测算利率'].forEach((label) => { assert(!summaryCard.includes(`label="${label}"`), `个人流程详情关键信息不应展示字段: ${label}`) }) assert( personalDetail.includes('formatRate(retailOutput && retailOutput.minRateProduct)'), '个人流程详情关键信息未展示产品最低利率下限' ) assert( personalDetail.includes(':guar-type="detailData.guarType"'), '个人模型输出未使用流程担保方式控制抵押物行' ) const requiredRetailFields = [ 'retailOutput.loanRateHistory', 'retailOutput.smoothRange', 'retailOutput.finalCalculateRate', 'retailOutput.referenceRate', 'retailOutput.branchBp', 'retailOutput.bpLoanUse', 'retailOutput.midPerGasDdc', 'retailOutput.bpPrinOverdue', 'retailOutput.bpIinterestOverdue', 'retailOutput.bpCardOverdue' ] requiredRetailFields.forEach((field) => { assert(modelOutput.includes(field), `模型输出缺少字段展示: ${field}`) }) assert( modelOutput.includes("this.resultItem('营业执照', this.formatBoolean(this.retailOutput.bizProof))"), '个人风险度缺少营业执照或 BP_贷款用途关联展示' ) assert( basicInfo.includes('label="灰名单客户"') && basicInfo.includes('retailOutput && retailOutput.greyCust') && basicInfo.includes('label="黑名单客户"') && basicInfo.includes('retailOutput && retailOutput.blackCust'), '个人流程详情基本信息缺少灰名单客户或黑名单客户' ) assert( !modelOutput.includes("this.resultItem('灰名单客户', this.formatBoolean(this.retailOutput.greyCust))") && !modelOutput.includes("this.resultItem('黑名单客户', this.formatBoolean(this.retailOutput.blackCust))") && !modelOutput.includes("'BP_灰名单与逾期', this.retailOutput.bpGreyOverdue"), '个人风险度不应继续展示灰黑客户或旧聚合BP' ) assert( !basicInfo.includes('label="基准利率"') && !basicInfo.includes('retailOutput && retailOutput.baseLoanRate'), '个人流程详情基本信息不应展示基准利率' ) assert( !detailCard.includes('label="运行模式"') && !modelOutput.includes('

基本信息

'), '个人详情仍展示运行模式或模型输出基本信息' ) console.log('retail display fields assertions passed')