Show final calculate rate in workflow list

This commit is contained in:
wkc
2026-05-18 10:56:25 +08:00
parent a4f927fdcb
commit a6e7ef6105
21 changed files with 209 additions and 34 deletions

View File

@@ -0,0 +1,32 @@
# 贷款定价单脚本部署改造实施记录
## 保存路径检查
- 参考脚本:`/Users/wkc/Desktop/ccdi/ccdi/deploy/ccdi_function.sh`
- 新增脚本保存路径:`bin/prod/loan_pricing_function.sh`
- 实施记录保存路径:`doc/implementation-report-2026-05-13-loan-pricing-function-script.md`
## 修改内容
- 新增 `loan_pricing_function.sh`,按 `ccdi_function.sh``deploy``restart``stop` 三命令结构改造为贷款定价可用脚本。
- 按贷款定价现有生产目录约定调整:
- 后端 Jar`backend/ruoyi-admin.jar`
- 前端静态目录:`frontend/dist/`
- 日志目录:`logs/backend-console.log`
- PID 文件:`run/backend.pid`
- 临时目录:`tmp/loan-pricing-function/`
- 备份目录:`backup/YYYYMMDDHHMMSS/`
- 按贷款定价运行参数调整:
- Java 默认目录:`/home/webapp/env/java`
- 后端进程标记:`-Dloan.pricing.home=<脚本目录>`
- Spring Profile`uat`
- 后端端口:`63310`
- 上线包结构固定为根层包含:
- `ruoyi-admin.jar`
- `dist.zip`
- 前端 `dist.zip` 解压后必须包含 `dist/index.html`,部署时写入 `frontend/dist/`
- 默认保持参考脚本的启动后持续输出日志行为,并支持 `FOLLOW_LOGS=0` 供自动化验证跳过持续日志输出。
## 验证结果
- 已执行 `sh -n bin/prod/loan_pricing_function.sh`,语法校验通过。
- 已在临时目录构造 `backend/``frontend/dist/`、根层发布 zip 和假 Java 进程,验证 `deploy` 可完成备份、替换、启动和日志落盘。
- 已验证 `stop` 可停止脚本标记的后端进程并清理 PID 文件。
- 验证过程中产生的临时测试目录已删除,未新增仓库内测试文件。

View File

@@ -0,0 +1,22 @@
# 浏览器页签标题调整实施记录
## 修改时间
2026-05-15
## 修改内容
- 将前端浏览器页签标题从“上虞利率定价系统”调整为“贷款利率定价系统”。
- 同步更新开发、测试、生产环境的 `VUE_APP_TITLE` 配置,确保本地运行和打包产物标题一致。
## 涉及文件
- `ruoyi-ui/.env.development`
- `ruoyi-ui/.env.staging`
- `ruoyi-ui/.env.production`
## 验证情况
- 已通过源码检索确认 `ruoyi-ui` 中页面标题配置已统一为“贷款利率定价系统”。
- 已使用 browser-use 打开 `http://localhost:9527/login` 进行真实页面验证,浏览器标签页标题与 `document.title` 均为“贷款利率定价系统”。
- 验证时仅启动前端服务;因本地后端 `localhost:63310` 未启动,验证码接口代理返回 `ECONNREFUSED`,不影响本次页签标题验证。

View File

@@ -0,0 +1,32 @@
# 利率前端两位小数展示实施记录
## 修改时间
- 2026-05-15
## 修改范围
- `ruoyi-ui/src/utils/rate.js`
- `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/ModelOutputDisplay.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/CorporateWorkflowDetail.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/HistoryContractSelector.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/PersonalCreateDialog.vue`
- `ruoyi-ui/src/views/loanPricing/workflow/components/CorporateCreateDialog.vue`
## 修改内容
- 新增 `formatRate` 前端格式化方法,统一将可解析的利率数值展示为小数点后两位。
- 利率定价流程列表的测算利率、执行利率改为通过 `formatRate` 展示。
- 个人/企业流程详情的基准利率、最终测算利率、执行利率初始展示值、历史贷款利率改为两位小数展示。
- 模型输出中的基准利率、测算利率、历史利率、产品最低利率下限、平滑幅度、参考利率、最终测算利率、派生率改为两位小数展示。
- 历史贷款合同选择弹窗和新增流程弹窗中的历史贷款利率展示改为两位小数。
## 影响说明
- 本次仅调整前端展示格式,不改后端接口、数据库字段和模型调用逻辑。
- 历史贷款利率在新增弹窗中仅格式化展示,表单内部仍保留接口返回的原始值。
## 验证
- 已执行 `source ~/.nvm/nvm.sh && nvm use 14.21.3 && npm run build:prod`,构建通过,仅存在资源体积 warning。
- 已启动后端 `http://localhost:63310` 和前端 `http://localhost:9527/`,通过 browser-use 打开真实页面验证。
- 流程列表接口原始返回中存在 `calculateRate = 3.932` 的数据,流程列表页面 `测算利率(%)` 展示为 `3.93`
- 流程列表页面 `执行利率(%)` 展示为 `3.88``6.18``-`,已确认非空利率均为小数点后两位。
- 流程详情页模型输出中,`finalCalculateRate = 3.732` 对应页面展示为 `3.73`,其他利率字段也按两位小数展示。

View File

@@ -0,0 +1,19 @@
# 流程列表客户内码字段实施记录
## 修改内容
- 后端流程列表查询 `selectWorkflowPageWithRates` 增加 `lpw.cust_isn AS custIsn`,确保列表接口返回客户内码。
- 流程列表返回对象 `LoanPricingWorkflowListVO` 增加 `custIsn` 字段,承接接口返回值。
- 前端流程列表页新增“客户内码”表格列,字段绑定 `custIsn`,支持超长内容 tooltip 展示。
## 影响范围
- 仅影响利率定价流程列表 `/loanPricing/workflow/list` 的返回字段和页面展示。
- 不修改新增流程、详情页、筛选条件和数据库结构。
## 验证记录
- `mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowListVOTest -Dsurefire.failIfNoSpecifiedTests=false test` 通过。
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 && node tests/customer-map-selection.test.js` 通过。
- 使用真实后端接口 `/loanPricing/workflow/list?pageNum=1&pageSize=3` 验证返回 `custIsn`,前三条返回值为 `81000529053``81000791269``81000769824`
- 使用 browser-use 打开真实流程列表页 `http://localhost:1024/index`,确认表头包含“客户内码”,前三条列表行客户内码展示为 `81000529053``81000791269``81000769824`

View File

@@ -0,0 +1,22 @@
# 流程列表最终测算利率展示实施记录
## 修改内容
- 流程列表联表查询中,企业客户分支由 `model_corp_output_fields.calculate_rate` 改为 `model_corp_output_fields.final_calculate_rate`
- 个人客户分支保持读取 `model_retail_output_fields.final_calculate_rate`
- 前端流程列表列名由“测算利率(%)”调整为“最终测算利率(%)”,继续复用列表接口字段 `calculateRate` 展示,避免扩大接口字段变更范围。
## 影响范围
- 仅影响利率定价流程列表 `/loanPricing/workflow/list` 的利率来源和列名展示。
- 不修改详情页、新增流程、执行利率和数据库结构。
## 验证记录
- 已更新 `LoanPricingWorkflowMapperXmlTest`,约束个人、企业流程列表均取 `final_calculate_rate`
- `mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowMapperXmlTest,LoanPricingWorkflowListVOTest -Dsurefire.failIfNoSpecifiedTests=false test` 通过。
- `source ~/.nvm/nvm.sh && nvm use 14.21.3 && node tests/customer-map-selection.test.js` 通过。
- 使用 Node 静态断言确认流程列表列名为“最终测算利率(%)”,并且不再展示旧列名“测算利率(%)”。
- `mvn -pl ruoyi-admin -am clean package -DskipTests` 打包通过,并重启本地 63310 后端。
- 使用真实后端接口 `/loanPricing/workflow/list?pageNum=1&pageSize=3` 验证返回值,前三条 `calculateRate` 分别为 `3.732``6.05``3.732`
- 使用 browser-use 打开真实流程列表页 `http://localhost:1024/index`,确认列名为“最终测算利率(%)”,前三条页面展示值为 `3.73``6.05``3.73`,旧列名未出现。

BIN
ruoyi-admin/.DS_Store vendored

Binary file not shown.

View File

@@ -9,6 +9,8 @@ public class LoanPricingWorkflowListVO
{
private String serialNum;
private String custIsn;
private String custName;
private String custType;

View File

@@ -7,13 +7,14 @@
<select id="selectWorkflowPageWithRates" resultType="com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO">
SELECT
lpw.serial_num AS serialNum,
lpw.cust_isn AS custIsn,
lpw.cust_name AS custName,
lpw.cust_type AS custType,
lpw.guar_type AS guarType,
lpw.apply_amt AS applyAmt,
CASE
WHEN lpw.cust_type = '个人' THEN mr.final_calculate_rate
WHEN lpw.cust_type = '企业' THEN mc.calculate_rate
WHEN lpw.cust_type = '企业' THEN mc.final_calculate_rate
ELSE NULL
END AS calculateRate,
lpw.execute_rate AS executeRate,

View File

@@ -10,9 +10,11 @@ class LoanPricingWorkflowListVOTest
void shouldExposeCalculateRateAndExecuteRateFields()
{
LoanPricingWorkflowListVO vo = new LoanPricingWorkflowListVO();
vo.setCustIsn("CUST001");
vo.setCalculateRate("6.15");
vo.setExecuteRate("5.80");
assertEquals("CUST001", vo.getCustIsn());
assertEquals("6.15", vo.getCalculateRate());
assertEquals("5.80", vo.getExecuteRate());
}

View File

@@ -17,7 +17,7 @@ class LoanPricingWorkflowMapperXmlTest
String xml = StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8);
assertTrue(xml.contains("WHEN lpw.cust_type = '个人' THEN mr.final_calculate_rate"));
assertTrue(xml.contains("WHEN lpw.cust_type = '企业' THEN mc.calculate_rate"));
assertTrue(xml.contains("WHEN lpw.cust_type = '企业' THEN mc.final_calculate_rate"));
assertTrue(xml.contains("lpw.create_by = #{query.dataScopeCreateBy}"));
assertTrue(xml.contains("SUBSTRING_INDEX(lpw.create_by, '-', -1) LIKE CONCAT('%', #{query.createBy}, '%')"));
}

View File

@@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 上虞利率定价系统
VUE_APP_TITLE = 贷款利率定价系统
# 开发环境配置
ENV = 'development'

View File

@@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 上虞利率定价系统
VUE_APP_TITLE = 贷款利率定价系统
# 生产环境配置
ENV = 'production'

View File

@@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 上虞利率定价系统
VUE_APP_TITLE = 贷款利率定价系统
BABEL_ENV = production

View File

@@ -0,0 +1,14 @@
export function formatRate(value, emptyText = '-') {
if (value === null || value === undefined || value === '') {
return emptyText
}
const stringValue = String(value).trim()
if (stringValue === '') {
return emptyText
}
const numberValue = Number(stringValue)
if (Number.isNaN(numberValue)) {
return stringValue
}
return numberValue.toFixed(2)
}

View File

@@ -72,7 +72,7 @@
</el-col>
<el-col :span="12" v-if="isStockTransfer">
<el-form-item label="历史贷款利率" prop="loanRateHistory">
<el-input v-model="form.loanRateHistory" placeholder="请选择历史贷款合同" :readonly="true"/>
<el-input :value="formatRate(form.loanRateHistory, '')" placeholder="请选择历史贷款合同" :readonly="true"/>
</el-form-item>
</el-col>
</el-row>
@@ -130,6 +130,7 @@
<script>
import {createCorporateWorkflow, queryHistoryContracts} from "@/api/loanPricing/workflow"
import HistoryContractSelector from "./HistoryContractSelector"
import {formatRate} from "@/utils/rate"
export default {
name: "CorporateCreateDialog",
@@ -295,6 +296,7 @@ export default {
}
},
methods: {
formatRate,
/** 表单重置 */
reset() {
this.form = {

View File

@@ -81,7 +81,7 @@
<el-descriptions-item label="担保方式">{{ detailData.guarType }}</el-descriptions-item>
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} </el-descriptions-item>
<el-descriptions-item label="业务种类">{{ detailData.businessType || '-' }}</el-descriptions-item>
<el-descriptions-item label="历史贷款利率">{{ detailData.loanRateHistory || '-' }}</el-descriptions-item>
<el-descriptions-item label="历史贷款利率">{{ formatRate(detailData.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="绿色贷款">{{ formatBoolean(detailData.isGreenLoan) }}</el-descriptions-item>
<el-descriptions-item label="贸易和建筑业企业">{{ formatBoolean(detailData.isTradeBuildEnt) }}</el-descriptions-item>
<el-descriptions-item label="抵质押类型">{{ detailData.collType || '-' }}</el-descriptions-item>
@@ -110,6 +110,7 @@
import {setExecuteRate} from "@/api/loanPricing/workflow"
import ModelOutputDisplay from "./ModelOutputDisplay.vue"
import BargainingPoolDisplay from "./BargainingPoolDisplay.vue"
import {formatRate} from "@/utils/rate"
export default {
name: "CorporateWorkflowDetail",
@@ -140,12 +141,13 @@ export default {
watch: {
'detailData.executeRate': {
handler(newVal) {
this.executeRateInput = newVal || ''
this.executeRateInput = formatRate(newVal, '')
},
immediate: true
}
},
methods: {
formatRate,
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
@@ -154,7 +156,7 @@ export default {
},
/** 获取基准利率 */
getBaseLoanRate() {
return this.corpOutput?.baseLoanRate || '-'
return this.formatRate(this.corpOutput?.baseLoanRate)
},
/** 获取浮动BP */
getTotalBp() {
@@ -162,7 +164,7 @@ export default {
},
/** 获取最终测算利率 */
getCalculateRate() {
return this.corpOutput?.finalCalculateRate || '-'
return this.formatRate(this.corpOutput?.finalCalculateRate)
},
/** 设定执行利率 */
handleSetExecuteRate() {

View File

@@ -18,7 +18,11 @@
<el-table-column label="历史贷款合同号" prop="loan_contract_history" align="center" :show-overflow-tooltip="true"/>
<el-table-column label="历史贷款担保方式" prop="guar_type_history" align="center"/>
<el-table-column label="历史贷款产品代码" prop="product_code_history" align="center"/>
<el-table-column label="历史贷款利率" prop="loan_rate_history" align="center"/>
<el-table-column label="历史贷款利率" prop="loan_rate_history" align="center">
<template slot-scope="scope">
<span>{{ formatRate(scope.row.loan_rate_history) }}</span>
</template>
</el-table-column>
<el-table-column label="历史贷款金额" prop="loan_amount_history" align="center"/>
<el-table-column label="历史贷款签订时间" prop="loan_sign_date_history" align="center" width="150"/>
</el-table>
@@ -30,6 +34,8 @@
</template>
<script>
import {formatRate} from "@/utils/rate"
export default {
name: "HistoryContractSelector",
props: {
@@ -63,6 +69,7 @@ export default {
}
},
methods: {
formatRate,
contractRadioValue(row, index) {
return row.loan_contract_history || `${row.cust_isn || ''}-${index}`
},

View File

@@ -13,7 +13,7 @@
<el-descriptions-item label="客户名称">{{ retailOutput.custName || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件类型">{{ retailOutput.idType || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件号码">{{ retailOutput.idNum || '-' }}</el-descriptions-item>
<el-descriptions-item label="基准利率"><span class="rate-value">{{ retailOutput.baseLoanRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="基准利率"><span class="rate-value">{{ formatRate(retailOutput.baseLoanRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="灰黑名单客户">{{ formatOutputValue(retailOutput.greyBlackCust) }}</el-descriptions-item>
</el-descriptions>
</div>
@@ -22,12 +22,12 @@
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ retailOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ retailOutput.calculateRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ retailOutput.loanRateHistory || '-' }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ retailOutput.minRateProduct || '-' }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ retailOutput.smoothRange || '-' }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ retailOutput.referenceRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ retailOutput.finalCalculateRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(retailOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ formatRate(retailOutput.minRateProduct) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(retailOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(retailOutput.referenceRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(retailOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
@@ -49,7 +49,7 @@
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="存款年日均">{{ retailOutput.balanceAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="贷款年日均">{{ retailOutput.loanAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ retailOutput.derivationRate || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ formatRate(retailOutput.derivationRate) }}</el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_贡献度"><span class="total-bp-value">{{ retailOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
@@ -112,7 +112,7 @@
<el-descriptions-item label="客户名称">{{ corpOutput.custName || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件类型">{{ corpOutput.idType || '-' }}</el-descriptions-item>
<el-descriptions-item label="证件号码">{{ corpOutput.idNum || '-' }}</el-descriptions-item>
<el-descriptions-item label="基准利率"><span class="rate-value">{{ corpOutput.baseLoanRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="基准利率"><span class="rate-value">{{ formatRate(corpOutput.baseLoanRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
@@ -120,12 +120,12 @@
<h4 class="section-title">测算结果</h4>
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="浮动BP"><span class="total-bp-value">{{ corpOutput.totalBp || '-' }}</span></el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ corpOutput.calculateRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ corpOutput.loanRateHistory || '-' }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ corpOutput.minRateProduct || '-' }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ corpOutput.smoothRange || '-' }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ corpOutput.referenceRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ corpOutput.finalCalculateRate || '-' }}</span> %</el-descriptions-item>
<el-descriptions-item label="测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.calculateRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="历史利率">{{ formatRate(corpOutput.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="产品最低利率下限">{{ formatRate(corpOutput.minRateProduct) }}</el-descriptions-item>
<el-descriptions-item label="平滑幅度">{{ formatRate(corpOutput.smoothRange) }}</el-descriptions-item>
<el-descriptions-item label="参考利率"><span class="calculate-rate">{{ formatRate(corpOutput.referenceRate) }}</span> %</el-descriptions-item>
<el-descriptions-item label="最终测算利率"><span class="calculate-rate">{{ formatRate(corpOutput.finalCalculateRate) }}</span> %</el-descriptions-item>
</el-descriptions>
</div>
@@ -145,7 +145,7 @@
<el-descriptions :column="2" border size="small">
<el-descriptions-item label="存款年日均">{{ corpOutput.balanceAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="贷款年日均">{{ corpOutput.loanAvg || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ corpOutput.derivationRate || '-' }}</el-descriptions-item>
<el-descriptions-item label="派生率">{{ formatRate(corpOutput.derivationRate) }}</el-descriptions-item>
<el-descriptions-item label="TOTAL_BP_贡献度"><span class="total-bp-value">{{ corpOutput.totalBpContribution || '-' }}</span></el-descriptions-item>
</el-descriptions>
</div>
@@ -209,6 +209,8 @@
</template>
<script>
import {formatRate} from "@/utils/rate"
export default {
name: "ModelOutputDisplay",
props: {
@@ -226,6 +228,7 @@ export default {
}
},
methods: {
formatRate,
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true || value === '1' || value === 1) return '是'

View File

@@ -72,7 +72,7 @@
</el-col>
<el-col :span="12" v-if="isStockTransfer">
<el-form-item label="历史贷款利率" prop="loanRateHistory">
<el-input v-model="form.loanRateHistory" placeholder="请选择历史贷款合同" :readonly="true"/>
<el-input :value="formatRate(form.loanRateHistory, '')" placeholder="请选择历史贷款合同" :readonly="true"/>
</el-form-item>
</el-col>
</el-row>
@@ -122,6 +122,7 @@
<script>
import {createPersonalWorkflow, queryHistoryContracts} from "@/api/loanPricing/workflow"
import HistoryContractSelector from "./HistoryContractSelector"
import {formatRate} from "@/utils/rate"
export default {
name: "PersonalCreateDialog",
@@ -272,6 +273,7 @@ export default {
}
},
methods: {
formatRate,
/** 表单重置 */
reset() {
this.form = {

View File

@@ -81,7 +81,7 @@
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} </el-descriptions-item>
<el-descriptions-item label="贷款用途">{{ formatLoanPurpose(detailData.loanPurpose) }}</el-descriptions-item>
<el-descriptions-item label="业务种类">{{ detailData.businessType || '-' }}</el-descriptions-item>
<el-descriptions-item label="历史贷款利率">{{ detailData.loanRateHistory || '-' }}</el-descriptions-item>
<el-descriptions-item label="历史贷款利率">{{ formatRate(detailData.loanRateHistory) }}</el-descriptions-item>
<el-descriptions-item label="借款期限">{{ detailData.loanTerm || '-' }}</el-descriptions-item>
<el-descriptions-item label="是否有经营佐证">{{
formatBoolean(detailData.bizProof)
@@ -114,6 +114,7 @@
import {setExecuteRate} from "@/api/loanPricing/workflow"
import ModelOutputDisplay from "./ModelOutputDisplay.vue"
import BargainingPoolDisplay from "./BargainingPoolDisplay.vue"
import {formatRate} from "@/utils/rate"
export default {
name: "PersonalWorkflowDetail",
@@ -144,12 +145,13 @@ export default {
watch: {
'detailData.executeRate': {
handler(newVal) {
this.executeRateInput = newVal || ''
this.executeRateInput = formatRate(newVal, '')
},
immediate: true
}
},
methods: {
formatRate,
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
@@ -164,7 +166,7 @@ export default {
},
/** 获取基准利率 */
getBaseLoanRate() {
return this.retailOutput?.baseLoanRate || '-'
return this.formatRate(this.retailOutput?.baseLoanRate)
},
/** 获取浮动BP */
getTotalBp() {
@@ -172,7 +174,7 @@ export default {
},
/** 获取最终测算利率 */
getCalculateRate() {
return this.retailOutput?.finalCalculateRate || '-'
return this.formatRate(this.retailOutput?.finalCalculateRate)
},
/** 设定执行利率 */
handleSetExecuteRate() {

View File

@@ -46,12 +46,21 @@
<el-table v-loading="loading" :data="workflowList">
<el-table-column label="业务方流水号" align="center" prop="serialNum" width="180" :show-overflow-tooltip="true" />
<el-table-column label="客户内码" align="center" prop="custIsn" width="140" :show-overflow-tooltip="true" />
<el-table-column label="客户名称" align="center" prop="custName" :show-overflow-tooltip="true" />
<el-table-column label="客户类型" align="center" prop="custType" width="100" />
<el-table-column label="担保方式" align="center" prop="guarType" width="100" />
<el-table-column label="申请金额(元)" align="center" prop="applyAmt" width="120" />
<el-table-column label="测算利率(%)" align="center" prop="calculateRate" width="100" />
<el-table-column label="执行利率(%)" align="center" prop="executeRate" width="100" />
<el-table-column label="最终测算利率(%)" align="center" prop="calculateRate" width="120">
<template slot-scope="scope">
<span>{{ formatRate(scope.row.calculateRate) }}</span>
</template>
</el-table-column>
<el-table-column label="执行利率(%)" align="center" prop="executeRate" width="100">
<template slot-scope="scope">
<span>{{ formatRate(scope.row.executeRate) }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
@@ -110,6 +119,7 @@ import CustomerTypeSelector from "./components/CustomerTypeSelector"
import CustomerMapSelector from "./components/CustomerMapSelector"
import PersonalCreateDialog from "./components/PersonalCreateDialog"
import CorporateCreateDialog from "./components/CorporateCreateDialog"
import {formatRate} from "@/utils/rate"
export default {
name: "LoanPricingWorkflow",
@@ -170,6 +180,7 @@ export default {
}
},
methods: {
formatRate,
/** 查询利率定价流程列表 */
getList() {
this.loading = true