diff --git a/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md
new file mode 100644
index 0000000..0f77946
--- /dev/null
+++ b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-backend.md
@@ -0,0 +1,41 @@
+# 流程列表测算利率展示后端实施记录
+
+## 实施时间
+- 2026-03-28
+
+## 修改内容
+- 新增流程列表专用返回对象 `LoanPricingWorkflowListVO`
+- 将流程列表分页返回从 `LoanPricingWorkflow` 调整为列表专用 VO
+- 在 Mapper 中新增联表分页方法 `selectWorkflowPageWithRates`
+- 新增 `LoanPricingWorkflowMapper.xml`,通过联表 SQL 一次返回 `calculateRate` 与 `executeRate`
+- 保留现有详情页测算利率兼容逻辑,不回退工作区中已有的详情链路调整
+
+## 关键链路
+- 主表:`loan_pricing_workflow`
+- 个人客户测算利率来源:`model_retail_output_fields.calculate_rate`
+- 企业客户测算利率来源:`model_corp_output_fields.calculate_rate`
+- 统一返回字段:`calculateRate`
+
+## 修改文件
+- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java`
+- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java`
+- `ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml`
+- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java`
+- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java`
+- `ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java`
+- `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java`
+- `ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java`
+
+## 验证结果
+- 已执行 `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=LoanPricingWorkflowServiceImplTest test`
+- 结果为 `Tests run: 3, Failures: 0, Errors: 0, Skipped: 0`
+- 已执行 `mvn -pl ruoyi-loan-pricing -am -Dsurefire.failIfNoSpecifiedTests=false test`
+- 模块验证结果为 `Tests run: 4, Failures: 0, Errors: 0, Skipped: 0`
+- 已确认列表分页链路改为返回 `LoanPricingWorkflowListVO`
+- 已确认服务层会透传 `calculateRate`
+
+## 说明
+- 本次未修改数据库表结构,也未将测算利率回写到 `loan_pricing_workflow`
+- 单独执行 `-pl ruoyi-loan-pricing` 时会命中旧的上游构件,因此测试命令需带 `-am`
+- 本次未为验证额外启动新的后端进程
+- 本次未执行真实后端启动后的接口联调,请以后端模块测试结果作为本次主要验证依据
diff --git a/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md
new file mode 100644
index 0000000..acf44d0
--- /dev/null
+++ b/doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md
@@ -0,0 +1,30 @@
+# 流程列表测算利率展示前端实施记录
+
+## 实施时间
+- 2026-03-28
+
+## 修改内容
+- 在流程列表页新增“测算利率(%)”列
+- 新增列绑定后端返回字段 `calculateRate`
+- 保持“执行利率(%)”列继续绑定 `executeRate`
+- 保持“测算利率(%)”列位于“执行利率(%)”列之前
+
+## 修改文件
+- `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
+- `doc/implementation-report-2026-03-28-workflow-calculate-rate-list-frontend.md`
+
+## 验证方式
+1. 通过源码检查确认“测算利率(%)”列已新增
+2. 通过源码检查确认“测算利率(%)”列位于“执行利率(%)”之前
+3. 执行前端生产构建验证页面代码可正常打包
+
+## 验证结果
+- 已新增“测算利率(%)”列,绑定字段为 `calculateRate`
+- 已保留“执行利率(%)”列,绑定字段为 `executeRate`
+- 已确认“测算利率(%)”列位于“执行利率(%)”列之前
+- 已执行 `npm --prefix ruoyi-ui run build:prod`,构建成功,输出包含 `Build complete.`
+- 本次构建过程中仅出现项目原有的打包体积 warning,未出现新的构建错误
+
+## 说明
+- 本次只调整流程列表页,不改详情页展示逻辑
+- 本次未为验证额外启动新的前端进程
diff --git a/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md b/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md
new file mode 100644
index 0000000..3b281bd
--- /dev/null
+++ b/doc/implementation-report-2026-03-28-workflow-detail-calculate-rate-model-output.md
@@ -0,0 +1,37 @@
+# 流程详情测算利率改为模型输出表取数实施记录
+
+## 实施时间
+- 2026-03-28
+
+## 问题说明
+- 流程详情接口返回的 `loanPricingWorkflow.loanRate` 仍保留流程主表中的值
+- 当模型输出表中的 `calculateRate` 与流程主表中的 `loanRate` 不一致时,详情链路无法保证“测算利率”按模型输出表口径返回
+
+## 本次修改
+- 在 `LoanPricingWorkflowServiceImpl#selectLoanPricingBySerialNum` 中补充详情组装逻辑
+- 个人客户详情查询时,将 `model_retail_output_fields.calculate_rate` 回填到 `loanPricingWorkflow.loanRate`
+- 企业客户详情查询时,将 `model_corp_output_fields.calculate_rate` 回填到 `loanPricingWorkflow.loanRate`
+- 新增服务层单元测试,覆盖个人、企业两条详情查询分支
+- 为 `ruoyi-loan-pricing` 模块补充测试依赖 `spring-boot-starter-test`
+
+## 影响范围
+- 仅影响流程详情接口 `/loanPricing/workflow/{serialNum}` 的返回值组装
+- 不修改数据库表结构
+- 不修改模型输出表写入逻辑
+- 不修改流程列表接口
+
+## 验证方式
+1. 新增 `LoanPricingWorkflowServiceImplTest`
+2. 先执行失败用例,确认详情返回的 `loanRate` 未按模型输出表取值
+3. 修复详情组装逻辑后重新执行测试
+
+## 验证结果
+- 执行命令:
+```bash
+mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowServiceImplTest -Dsurefire.failIfNoSpecifiedTests=false test
+```
+- 结果:2 个测试全部通过
+
+## 备注
+- 验证时发现仅编译 `ruoyi-loan-pricing` 模块会引用到本地旧版 `ruoyi-common` 依赖,需使用 `-am` 让依赖模块一并参与构建
+- 本次未启动新的前后端进程
diff --git a/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md b/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md
new file mode 100644
index 0000000..1790d52
--- /dev/null
+++ b/doc/implementation-report-2026-03-28-workflow-execution-rate-label.md
@@ -0,0 +1,22 @@
+# 流程列表执行利率文案调整实施记录
+
+## 本次改动
+
+- 将流程列表中的列头文案由“贷款利率(%)”调整为“执行利率(%)”
+- 保持字段绑定 `loanRate`、列表接口和后端数据结构不变,仅调整前端展示文案
+
+## 修改文件
+
+- `ruoyi-ui/src/views/loanPricing/workflow/index.vue`
+
+## 执行方式
+
+1. 定位贷款定价流程列表页中的利率列定义
+2. 将列表列头文案从“贷款利率(%)”替换为“执行利率(%)”
+3. 通过源码断言和前端构建验证改动结果
+
+## 验证目标
+
+- 流程列表页不再出现“贷款利率(%)”列头
+- 流程列表页展示“执行利率(%)”列头
+- 前端项目可正常构建
diff --git a/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md b/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md
new file mode 100644
index 0000000..d5c0e56
--- /dev/null
+++ b/doc/implementation-report-2026-03-28-workflow-list-refresh-on-return.md
@@ -0,0 +1,33 @@
+# 流程详情返回后列表未刷新前端实施记录
+
+## 实施时间
+- 2026-03-28
+
+## 问题说明
+- 流程列表页 `workflow/index.vue` 仅在 `created()` 中调用 `getList()`
+- 该页面在布局层通过 `keep-alive` 缓存
+- 从流程详情页返回时,列表页实例会被重新激活而不是重新创建,因此不会自动刷新
+
+## 本次修改
+- 为流程列表页增加 `activated()` 生命周期
+- 页面从详情页返回并重新激活时,重新执行 `getList()`
+- 新增一个无需额外测试框架的 Node 校验脚本,验证列表页激活时会调用 `getList()`
+
+## 影响范围
+- 仅影响前端流程列表页返回时的刷新行为
+- 不修改详情页路由
+- 不修改后端接口和查询参数
+
+## 验证方式
+1. 先运行前端校验脚本,确认修复前组件缺少 `activated()`,测试失败
+2. 补充 `activated()` 后再次运行校验脚本
+
+## 验证结果
+- 执行命令:
+```bash
+node ruoyi-ui/tests/workflow-index-refresh.test.js
+```
+- 结果:校验通过
+
+## 备注
+- 本次未启动新的前后端进程
diff --git a/ruoyi-loan-pricing/pom.xml b/ruoyi-loan-pricing/pom.xml
index 23afa06..100c120 100644
--- a/ruoyi-loan-pricing/pom.xml
+++ b/ruoyi-loan-pricing/pom.xml
@@ -41,6 +41,12 @@
springdoc-openapi-starter-webmvc-ui
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java
index c795fd2..615d98c 100644
--- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java
+++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java
@@ -12,6 +12,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.loanpricing.domain.dto.CorporateLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO;
import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO;
import com.ruoyi.loanpricing.service.ILoanPricingWorkflowService;
import io.swagger.v3.oas.annotations.Operation;
@@ -68,8 +69,8 @@ public class LoanPricingWorkflowController extends BaseController
public TableDataInfo list(LoanPricingWorkflow loanPricingWorkflow)
{
PageDomain pageDomain = TableSupport.buildPageRequest();
- Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
- IPage result = loanPricingWorkflowService.selectLoanPricingPage(page, loanPricingWorkflow);
+ Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
+ IPage result = loanPricingWorkflowService.selectLoanPricingPage(page, loanPricingWorkflow);
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(200);
rspData.setMsg("查询成功");
diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java
new file mode 100644
index 0000000..80ef681
--- /dev/null
+++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java
@@ -0,0 +1,27 @@
+package com.ruoyi.loanpricing.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class LoanPricingWorkflowListVO
+{
+ private String serialNum;
+
+ private String custName;
+
+ private String custType;
+
+ private String guarType;
+
+ private String applyAmt;
+
+ private String calculateRate;
+
+ private String executeRate;
+
+ private Date createTime;
+
+ private String createBy;
+}
diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java
index 1df34f7..63746ef 100644
--- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java
+++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java
@@ -1,7 +1,11 @@
package com.ruoyi.loanpricing.mapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO;
+import org.apache.ibatis.annotations.Param;
/**
* 利率定价流程Mapper接口
@@ -11,5 +15,6 @@ import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
*/
public interface LoanPricingWorkflowMapper extends BaseMapper
{
-
+ IPage selectWorkflowPageWithRates(Page> page,
+ @Param("query") LoanPricingWorkflow query);
}
diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java
index 693e3a0..0f8cda2 100644
--- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java
+++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.loanpricing.domain.dto.CorporateLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO;
import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO;
import java.util.List;
@@ -48,7 +49,7 @@ public interface ILoanPricingWorkflowService
* @param loanPricingWorkflow 利率定价流程信息
* @return 分页结果
*/
- public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow);
+ public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow);
/**
* 查询利率定价流程详情
diff --git a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java
index a2635db..e559c05 100644
--- a/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java
+++ b/ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
import com.ruoyi.loanpricing.domain.entity.ModelCorpOutputFields;
import com.ruoyi.loanpricing.domain.entity.ModelRetailOutputFields;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO;
import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO;
import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper;
import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper;
@@ -126,12 +127,9 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
* @return 利率定价流程
*/
@Override
- public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow)
+ public IPage selectLoanPricingPage(Page page, LoanPricingWorkflow loanPricingWorkflow)
{
- LambdaQueryWrapper wrapper = buildQueryWrapper(loanPricingWorkflow);
- // 按更新时间倒序
- wrapper.orderByDesc(LoanPricingWorkflow::getUpdateTime);
- return loanPricingWorkflowMapper.selectPage(page, wrapper);
+ return loanPricingWorkflowMapper.selectWorkflowPageWithRates(page, loanPricingWorkflow);
}
/**
@@ -153,10 +151,18 @@ public class LoanPricingWorkflowServiceImpl implements ILoanPricingWorkflowServi
if (Objects.nonNull(loanPricingWorkflow.getModelOutputId())){
if (loanPricingWorkflow.getCustType().equals("个人")){
ModelRetailOutputFields modelRetailOutputFields = modelRetailOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId());
+ if (Objects.nonNull(modelRetailOutputFields))
+ {
+ loanPricingWorkflow.setLoanRate(modelRetailOutputFields.getCalculateRate());
+ }
loanPricingWorkflowVO.setModelRetailOutputFields(modelRetailOutputFields);
}
if (loanPricingWorkflow.getCustType().equals("企业")){
ModelCorpOutputFields modelCorpOutputFields = modelCorpOutputFieldsMapper.selectById(loanPricingWorkflow.getModelOutputId());
+ if (Objects.nonNull(modelCorpOutputFields))
+ {
+ loanPricingWorkflow.setLoanRate(modelCorpOutputFields.getCalculateRate());
+ }
loanPricingWorkflowVO.setModelCorpOutputFields(modelCorpOutputFields);
}
}
diff --git a/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml b/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml
new file mode 100644
index 0000000..d3e66c2
--- /dev/null
+++ b/ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java
new file mode 100644
index 0000000..cff31db
--- /dev/null
+++ b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java
@@ -0,0 +1,19 @@
+package com.ruoyi.loanpricing.domain.vo;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+class LoanPricingWorkflowListVOTest
+{
+ @Test
+ void shouldExposeCalculateRateAndExecuteRateFields()
+ {
+ LoanPricingWorkflowListVO vo = new LoanPricingWorkflowListVO();
+ vo.setCalculateRate("6.15");
+ vo.setExecuteRate("5.80");
+
+ assertEquals("6.15", vo.getCalculateRate());
+ assertEquals("5.80", vo.getExecuteRate());
+ }
+}
diff --git a/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java
new file mode 100644
index 0000000..b39f6f1
--- /dev/null
+++ b/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java
@@ -0,0 +1,99 @@
+package com.ruoyi.loanpricing.service.impl;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
+import com.ruoyi.loanpricing.domain.entity.ModelCorpOutputFields;
+import com.ruoyi.loanpricing.domain.entity.ModelRetailOutputFields;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowListVO;
+import com.ruoyi.loanpricing.domain.vo.LoanPricingWorkflowVO;
+import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper;
+import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper;
+import com.ruoyi.loanpricing.mapper.ModelRetailOutputFieldsMapper;
+import com.ruoyi.loanpricing.service.LoanPricingModelService;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
+class LoanPricingWorkflowServiceImplTest
+{
+ @Mock
+ private LoanPricingWorkflowMapper loanPricingWorkflowMapper;
+
+ @Mock
+ private LoanPricingModelService loanPricingModelService;
+
+ @Mock
+ private ModelRetailOutputFieldsMapper modelRetailOutputFieldsMapper;
+
+ @Mock
+ private ModelCorpOutputFieldsMapper modelCorpOutputFieldsMapper;
+
+ @InjectMocks
+ private LoanPricingWorkflowServiceImpl loanPricingWorkflowService;
+
+ @Test
+ void shouldReturnPagedWorkflowListWithCalculateRate()
+ {
+ LoanPricingWorkflowListVO row = new LoanPricingWorkflowListVO();
+ row.setCalculateRate("6.15");
+
+ Page pageResult = new Page<>(1, 10);
+ pageResult.setRecords(java.util.List.of(row));
+
+ when(loanPricingWorkflowMapper.selectWorkflowPageWithRates(any(), any())).thenReturn(pageResult);
+
+ IPage result = loanPricingWorkflowService.selectLoanPricingPage(new Page<>(1, 10), new LoanPricingWorkflow());
+
+ assertEquals("6.15", result.getRecords().get(0).getCalculateRate());
+ }
+
+ @Test
+ void shouldUseRetailModelOutputCalculateRateForWorkflowDetail()
+ {
+ LoanPricingWorkflow workflow = new LoanPricingWorkflow();
+ workflow.setSerialNum("P20260328001");
+ workflow.setCustType("个人");
+ workflow.setModelOutputId(11L);
+ workflow.setLoanRate("4.35");
+
+ ModelRetailOutputFields retailOutputFields = new ModelRetailOutputFields();
+ retailOutputFields.setCalculateRate("6.15");
+
+ when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow);
+ when(modelRetailOutputFieldsMapper.selectById(11L)).thenReturn(retailOutputFields);
+
+ LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("P20260328001");
+
+ assertEquals("6.15", result.getLoanPricingWorkflow().getLoanRate());
+ assertEquals("6.15", result.getModelRetailOutputFields().getCalculateRate());
+ }
+
+ @Test
+ void shouldUseCorporateModelOutputCalculateRateForWorkflowDetail()
+ {
+ LoanPricingWorkflow workflow = new LoanPricingWorkflow();
+ workflow.setSerialNum("C20260328001");
+ workflow.setCustType("企业");
+ workflow.setModelOutputId(22L);
+ workflow.setLoanRate("3.80");
+
+ ModelCorpOutputFields corpOutputFields = new ModelCorpOutputFields();
+ corpOutputFields.setCalculateRate("3.932");
+
+ when(loanPricingWorkflowMapper.selectOne(any())).thenReturn(workflow);
+ when(modelCorpOutputFieldsMapper.selectById(22L)).thenReturn(corpOutputFields);
+
+ LoanPricingWorkflowVO result = loanPricingWorkflowService.selectLoanPricingBySerialNum("C20260328001");
+
+ assertEquals("3.932", result.getLoanPricingWorkflow().getLoanRate());
+ assertEquals("3.932", result.getModelCorpOutputFields().getCalculateRate());
+ }
+}
diff --git a/ruoyi-ui/src/views/loanPricing/workflow/index.vue b/ruoyi-ui/src/views/loanPricing/workflow/index.vue
index b064c4a..0db58c4 100644
--- a/ruoyi-ui/src/views/loanPricing/workflow/index.vue
+++ b/ruoyi-ui/src/views/loanPricing/workflow/index.vue
@@ -50,6 +50,7 @@
+
@@ -130,6 +131,9 @@ export default {
created() {
this.getList()
},
+ activated() {
+ this.getList()
+ },
methods: {
/** 查询利率定价流程列表 */
getList() {
diff --git a/ruoyi-ui/tests/workflow-index-refresh.test.js b/ruoyi-ui/tests/workflow-index-refresh.test.js
new file mode 100644
index 0000000..b049447
--- /dev/null
+++ b/ruoyi-ui/tests/workflow-index-refresh.test.js
@@ -0,0 +1,52 @@
+const assert = require('assert')
+const fs = require('fs')
+const path = require('path')
+const vm = require('vm')
+
+function loadComponentOptions(filePath) {
+ const source = fs.readFileSync(filePath, 'utf8')
+ const scriptMatch = source.match(/