From d45e9410effcb967a5974d76e3c98b30a4690da7 Mon Sep 17 00:00:00 2001
From: wkc <978997012@qq.com>
Date: Tue, 2 Jun 2026 17:17:49 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=BB=93=E6=9E=9C=E6=80=BB?=
=?UTF-8?q?=E8=A7=88=E8=AF=A6=E6=83=85=E8=B5=84=E4=BA=A7=E5=92=8C=E5=BE=81?=
=?UTF-8?q?=E4=BF=A1=E9=A1=B5=E7=AD=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...dit-detail-tabs-frontend-implementation.md | 28 ++++
...asset-credit-detail-tabs-implementation.md | 40 ++++++
ruoyi-ui/src/api/ccdiCreditInfo.js | 2 +-
.../components/CreditInfoDetail.vue | 114 +++++++++++++++
.../components/creditDetailViewModel.js | 25 ++++
ruoyi-ui/src/views/ccdiCreditInfo/index.vue | 60 ++------
.../detail/ProjectAnalysisDialog.vue | 136 +++++++++++++++++-
.../detail/preliminaryCheck.mock.js | 8 +-
.../unit/credit-info-api-contract.test.js | 1 +
.../unit/credit-info-date-display.test.js | 33 ++++-
.../tests/unit/credit-info-detail-ui.test.js | 30 +++-
.../unit/credit-info-page-layout.test.js | 3 +-
...oject-analysis-dialog-abnormal-tab.test.js | 2 +-
.../project-analysis-dialog-layout.test.js | 30 ++--
.../project-analysis-dialog-sidebar.test.js | 6 +-
15 files changed, 433 insertions(+), 85 deletions(-)
create mode 100644 docs/plans/frontend/2026-06-02-project-analysis-asset-credit-detail-tabs-frontend-implementation.md
create mode 100644 docs/reports/implementation/2026-06-02-project-analysis-asset-credit-detail-tabs-implementation.md
create mode 100644 ruoyi-ui/src/views/ccdiCreditInfo/components/CreditInfoDetail.vue
create mode 100644 ruoyi-ui/src/views/ccdiCreditInfo/components/creditDetailViewModel.js
diff --git a/docs/plans/frontend/2026-06-02-project-analysis-asset-credit-detail-tabs-frontend-implementation.md b/docs/plans/frontend/2026-06-02-project-analysis-asset-credit-detail-tabs-frontend-implementation.md
new file mode 100644
index 00000000..01936eeb
--- /dev/null
+++ b/docs/plans/frontend/2026-06-02-project-analysis-asset-credit-detail-tabs-frontend-implementation.md
@@ -0,0 +1,28 @@
+# 结果总览详情弹窗资产与征信页签前端实施计划
+
+## 目标
+
+在项目详情“结果总览 - 风险总览 - 查看详情”弹窗中,将资产分析和征信页签从占位展示改为真实详情展示。
+
+## 实施范围
+
+- `资产分析` 页签复用员工家庭资产负债专项核查中的资产详情展示组件。
+- `征信摘要` 页签改名为 `征信详情`,复用征信信息维护中的详情展示结构。
+- 不新增后端接口,不调整后端权限、SQL 或业务口径。
+
+## 前端改动
+
+- 抽取征信详情展示组件 `CreditInfoDetail`,并在征信信息维护详情弹窗中复用。
+- 新增征信详情标准化 helper,以详情接口返回的 `negativeInfo` 和 `debtList` 计算展示字段,不依赖征信列表行。
+- 在项目分析弹窗中按页签懒加载资产详情和征信详情:
+ - 资产详情调用 `getFamilyAssetLiabilityDetail(projectId, staffIdCard)`。
+ - 征信详情调用 `getCreditInfoDetail(staffIdCard)`。
+ - 同一次打开弹窗内已加载页签不重复请求。
+ - 缺少项目或人员身份证号时只展示页签内提示,不发起请求。
+- `getCreditInfoDetail` 使用 `encodeURIComponent(personId)` 拼接路径。
+
+## 验证计划
+
+- 使用 `nvm use` 后运行相关前端静态测试。
+- 运行前端生产构建验证组件引用与模板编译。
+- 启动真实前后端后,用浏览器进入项目详情页,在结果总览风险总览中点击“查看详情”,分别验证资产分析和征信详情页签。
diff --git a/docs/reports/implementation/2026-06-02-project-analysis-asset-credit-detail-tabs-implementation.md b/docs/reports/implementation/2026-06-02-project-analysis-asset-credit-detail-tabs-implementation.md
new file mode 100644
index 00000000..de37a312
--- /dev/null
+++ b/docs/reports/implementation/2026-06-02-project-analysis-asset-credit-detail-tabs-implementation.md
@@ -0,0 +1,40 @@
+# 结果总览详情弹窗资产与征信页签前端实施记录
+
+## 修改内容
+
+- 新增征信详情展示组件,统一展示征信摘要、负面信息和负债信息。
+- 征信信息维护详情弹窗改为复用征信详情展示组件,列表、上传和删除逻辑保持不变。
+- 项目分析弹窗中:
+ - `资产分析` 页签改为展示员工家庭资产负债专项核查资产详情。
+ - `征信摘要` 页签改名为 `征信详情`,改为展示征信信息维护详情。
+ - 资产与征信详情按页签懒加载,并在弹窗关闭、重新打开或人员切换时重置详情状态。
+- 征信详情接口路径拼接改为编码人员标识。
+- 同步更新结果总览弹窗静态页签文案和前端静态测试断言。
+
+## 影响范围
+
+- 前端页面:
+ - 结果总览项目分析弹窗
+ - 征信信息维护详情弹窗
+- 前端接口:
+ - `getCreditInfoDetail`
+ - `getFamilyAssetLiabilityDetail` 仅被结果总览弹窗新增复用
+- 后端接口、数据库和权限未改动。
+
+## 验证情况
+
+- 已执行前端聚焦静态测试:
+ - `project-analysis-dialog-*.test.js`
+ - `credit-info-*.test.js`
+ - `special-check-detail-*.test.js`
+ - `special-check-family-asset-liability-api.test.js`
+ - `special-check-family-table.test.js`
+- 已执行 `npm run build:prod`,构建通过;仅保留现有资源体积类提示。
+- 已使用真实浏览器验证项目详情页结果总览风险总览的 `查看详情` 弹窗:
+ - `资产分析` 页签展示员工家庭资产负债专项核查资产详情组件。
+ - `征信详情` 页签展示征信详情组件,包含征信摘要、负面信息和负债信息。
+ - 测试结束后已关闭本次启动的前端 dev server。
+
+## 备注
+
+- 当前仓库中已有的资金图谱相关后端改动不属于本次实施范围,未处理。
diff --git a/ruoyi-ui/src/api/ccdiCreditInfo.js b/ruoyi-ui/src/api/ccdiCreditInfo.js
index 0971c9c8..69bcb150 100644
--- a/ruoyi-ui/src/api/ccdiCreditInfo.js
+++ b/ruoyi-ui/src/api/ccdiCreditInfo.js
@@ -26,7 +26,7 @@ export function listCreditInfo(query) {
export function getCreditInfoDetail(personId) {
return request({
- url: '/ccdi/creditInfo/' + personId,
+ url: '/ccdi/creditInfo/' + encodeURIComponent(personId),
method: 'get'
})
}
diff --git a/ruoyi-ui/src/views/ccdiCreditInfo/components/CreditInfoDetail.vue b/ruoyi-ui/src/views/ccdiCreditInfo/components/CreditInfoDetail.vue
new file mode 100644
index 00000000..4e06dbe8
--- /dev/null
+++ b/ruoyi-ui/src/views/ccdiCreditInfo/components/CreditInfoDetail.vue
@@ -0,0 +1,114 @@
+
+
+
征信摘要
+
+ 征信查询日期:{{ formatQueryDate(detail.queryDate) }}
+ 负债笔数:{{ detail.debtCount || 0 }}
+ 负债总额:{{ formatAmount(detail.debtTotalAmount) }}
+
+
+
负面信息
+
+ 民事案件笔数:{{ detail.negativeInfo.civilCnt || 0 }}
+ 强制执行笔数:{{ detail.negativeInfo.enforceCnt || 0 }}
+ 行政处罚笔数:{{ detail.negativeInfo.admCnt || 0 }}
+
+
+ 民事案件金额:{{ formatAmount(detail.negativeInfo.civilLmt) }}
+ 强制执行金额:{{ formatAmount(detail.negativeInfo.enforceLmt) }}
+ 行政处罚金额:{{ formatAmount(detail.negativeInfo.admLmt) }}
+
+
+
负债信息
+
+
+
+
+
+
+
+
+
+
+ {{ formatAmount(scope.row.principalBalance) }}
+
+
+
+
+ {{ formatAmount(scope.row.debtTotalAmount) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/views/ccdiCreditInfo/components/creditDetailViewModel.js b/ruoyi-ui/src/views/ccdiCreditInfo/components/creditDetailViewModel.js
new file mode 100644
index 00000000..d88200c8
--- /dev/null
+++ b/ruoyi-ui/src/views/ccdiCreditInfo/components/creditDetailViewModel.js
@@ -0,0 +1,25 @@
+function sumDebtTotalAmount(debts) {
+ if (!Array.isArray(debts)) {
+ return 0;
+ }
+ return debts.reduce((total, item) => total + Number(item.debtTotalAmount || 0), 0);
+}
+
+export function normalizeCreditDetail(data = {}, row = {}) {
+ const negativeInfo = data.negativeInfo || {};
+ const debts = Array.isArray(data.debtList) ? data.debtList : [];
+ return {
+ personId: data.personId || row.idCard || "",
+ personName: data.personName || row.name || "",
+ idCard: data.idCard || data.personId || row.idCard || "",
+ queryDate: data.queryDate || negativeInfo.queryDate,
+ debtCount: debts.length,
+ debtTotalAmount: sumDebtTotalAmount(debts),
+ negativeInfo,
+ debts,
+ };
+}
+
+export function createEmptyCreditDetail() {
+ return normalizeCreditDetail();
+}
diff --git a/ruoyi-ui/src/views/ccdiCreditInfo/index.vue b/ruoyi-ui/src/views/ccdiCreditInfo/index.vue
index 038d364b..be6d17bc 100644
--- a/ruoyi-ui/src/views/ccdiCreditInfo/index.vue
+++ b/ruoyi-ui/src/views/ccdiCreditInfo/index.vue
@@ -122,35 +122,7 @@
- 征信摘要
-
- 征信查询日期:{{ formatQueryDate(detailForm.queryDate) }}
- 负债笔数:{{ detailForm.debtCount || 0 }}
- 负债总额:{{ detailForm.debtTotalAmount || 0 }}
-
-
- 负面信息
-
- 民事案件笔数:{{ detailForm.civilCnt || 0 }}
- 强制执行笔数:{{ detailForm.enforceCnt || 0 }}
- 行政处罚笔数:{{ detailForm.admCnt || 0 }}
-
-
- 民事案件金额:{{ detailForm.negativeInfo.civilLmt || 0 }}
- 强制执行金额:{{ detailForm.negativeInfo.enforceLmt || 0 }}
- 行政处罚金额:{{ detailForm.negativeInfo.admLmt || 0 }}
-
-
- 负债信息
-
-
-
-
-
-
-
-
-
+