From 2cb4481c3b2445ff794f637447aa4ab19562c4fd Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Sat, 28 Mar 2026 16:13:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=A3=8E=E9=99=A9=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=91=98=E5=B7=A5=E8=B4=9F=E9=9D=A2=E5=BE=81=E4=BF=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CcdiProjectOverviewController.java | 13 ++ ...ProjectEmployeeCreditNegativeQueryDTO.java | 16 +++ ...diProjectEmployeeCreditNegativeItemVO.java | 29 +++++ ...diProjectEmployeeCreditNegativePageVO.java | 16 +++ .../mapper/CcdiProjectOverviewMapper.java | 14 +++ .../service/ICcdiProjectOverviewService.java | 14 +++ .../impl/CcdiProjectOverviewServiceImpl.java | 22 ++++ .../project/CcdiProjectOverviewMapper.xml | 19 +++ ...ProjectOverviewControllerContractTest.java | 27 +++++ .../CcdiProjectOverviewControllerTest.java | 43 +++++++ .../CcdiProjectOverviewMapperSqlTest.java | 12 ++ ...diProjectOverviewServiceStructureTest.java | 4 + ...viewServiceEmployeeCreditNegativeTest.java | 93 +++++++++++++++ ...employee-credit-negative-implementation.md | 80 +++++++++++++ ruoyi-ui/src/api/ccdi/projectOverview.js | 12 ++ .../components/detail/PreliminaryCheck.vue | 10 +- .../components/detail/RiskDetailSection.vue | 112 +++++++++++++++++- .../detail/preliminaryCheck.mock.js | 47 +++++++- .../preliminary-check-api-integration.test.js | 8 +- ...iminary-check-credit-negative-load.test.js | 24 ++++ .../tests/unit/project-overview-api.test.js | 14 +++ ...il-employee-credit-negative-layout.test.js | 26 ++++ ...mployee-credit-negative-pagination.test.js | 22 ++++ 23 files changed, 672 insertions(+), 5 deletions(-) create mode 100644 ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectEmployeeCreditNegativeQueryDTO.java create mode 100644 ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativeItemVO.java create mode 100644 ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativePageVO.java create mode 100644 ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceEmployeeCreditNegativeTest.java create mode 100644 docs/reports/implementation/2026-03-28-risk-detail-employee-credit-negative-implementation.md create mode 100644 ruoyi-ui/tests/unit/preliminary-check-credit-negative-load.test.js create mode 100644 ruoyi-ui/tests/unit/risk-detail-employee-credit-negative-layout.test.js create mode 100644 ruoyi-ui/tests/unit/risk-detail-employee-credit-negative-pagination.test.js diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java index 95a0fe1d..52dd88ce 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java @@ -1,9 +1,11 @@ package com.ruoyi.ccdi.project.controller; +import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO; import com.ruoyi.ccdi.project.domain.excel.CcdiProjectSuspiciousTransactionExcel; +import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativePageVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO; @@ -115,6 +117,17 @@ public class CcdiProjectOverviewController extends BaseController { return AjaxResult.success(pageVO); } + /** + * 查询项目员工负面征信 + */ + @GetMapping("/employee-credit-negative") + @Operation(summary = "查询项目员工负面征信") + @PreAuthorize("@ss.hasPermi('ccdi:project:query')") + public AjaxResult getEmployeeCreditNegative(CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO) { + CcdiProjectEmployeeCreditNegativePageVO pageVO = overviewService.getEmployeeCreditNegative(queryDTO); + return AjaxResult.success(pageVO); + } + /** * 导出涉疑交易明细 */ diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectEmployeeCreditNegativeQueryDTO.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectEmployeeCreditNegativeQueryDTO.java new file mode 100644 index 00000000..a1bc0873 --- /dev/null +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectEmployeeCreditNegativeQueryDTO.java @@ -0,0 +1,16 @@ +package com.ruoyi.ccdi.project.domain.dto; + +import lombok.Data; + +/** + * 项目员工负面征信查询 DTO + */ +@Data +public class CcdiProjectEmployeeCreditNegativeQueryDTO { + + private Long projectId; + + private Integer pageNum; + + private Integer pageSize; +} diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativeItemVO.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativeItemVO.java new file mode 100644 index 00000000..c19f9884 --- /dev/null +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativeItemVO.java @@ -0,0 +1,29 @@ +package com.ruoyi.ccdi.project.domain.vo; + +import java.math.BigDecimal; +import lombok.Data; + +/** + * 项目员工负面征信行 + */ +@Data +public class CcdiProjectEmployeeCreditNegativeItemVO { + + private String personName; + + private String personId; + + private String queryDate; + + private Integer civilCnt; + + private BigDecimal civilLmt; + + private Integer enforceCnt; + + private BigDecimal enforceLmt; + + private Integer admCnt; + + private BigDecimal admLmt; +} diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativePageVO.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativePageVO.java new file mode 100644 index 00000000..c28d0ad5 --- /dev/null +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativePageVO.java @@ -0,0 +1,16 @@ +package com.ruoyi.ccdi.project.domain.vo; + +import java.util.ArrayList; +import java.util.List; +import lombok.Data; + +/** + * 项目员工负面征信分页结果 + */ +@Data +public class CcdiProjectEmployeeCreditNegativePageVO { + + private List rows = new ArrayList<>(); + + private Long total = 0L; +} diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java index dd402041..8669199d 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapper.java @@ -2,9 +2,11 @@ package com.ruoyi.ccdi.project.mapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.CcdiProject; +import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; +import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativeItemVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisBasicInfoVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisObjectRecordVO; @@ -79,6 +81,18 @@ public interface CcdiProjectOverviewMapper { @Param("query") CcdiProjectSuspiciousTransactionQueryDTO query ); + /** + * 分页查询项目员工负面征信 + * + * @param page 分页参数 + * @param query 查询条件 + * @return 分页结果 + */ + Page selectEmployeeCreditNegativePage( + Page page, + @Param("query") CcdiProjectEmployeeCreditNegativeQueryDTO query + ); + /** * 查询涉疑交易导出列表 * diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java index d3d6a919..1b6cca10 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectOverviewService.java @@ -1,9 +1,11 @@ package com.ruoyi.ccdi.project.service; +import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO; import com.ruoyi.ccdi.project.domain.excel.CcdiProjectSuspiciousTransactionExcel; +import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativePageVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO; @@ -97,6 +99,18 @@ public interface ICcdiProjectOverviewService { return List.of(); } + /** + * 查询项目员工负面征信 + * + * @param queryDTO 查询条件 + * @return 分页结果 + */ + default CcdiProjectEmployeeCreditNegativePageVO getEmployeeCreditNegative( + CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO + ) { + return new CcdiProjectEmployeeCreditNegativePageVO(); + } + /** * 重算结果总览员工结果并同步项目风险人数 * diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java index 14e235c4..a4b9379f 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.ccdi.project.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.ccdi.project.domain.CcdiProject; +import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO; import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO; @@ -9,6 +10,8 @@ import com.ruoyi.ccdi.project.domain.excel.CcdiProjectSuspiciousTransactionExcel import com.ruoyi.ccdi.project.domain.entity.CcdiProjectOverviewEmployeeResult; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO; import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementHitTagVO; +import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativeItemVO; +import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativePageVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisAbnormalDetailVO; import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisAbnormalGroupVO; @@ -208,6 +211,25 @@ public class CcdiProjectOverviewServiceImpl implements ICcdiProjectOverviewServi .toList(); } + @Override + public CcdiProjectEmployeeCreditNegativePageVO getEmployeeCreditNegative( + CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO + ) { + ensureProjectExists(queryDTO.getProjectId()); + + Page page = new Page<>( + defaultPageNum(queryDTO.getPageNum()), + defaultPageSize(queryDTO.getPageSize()) + ); + Page resultPage = + overviewMapper.selectEmployeeCreditNegativePage(page, queryDTO); + + CcdiProjectEmployeeCreditNegativePageVO result = new CcdiProjectEmployeeCreditNegativePageVO(); + result.setRows(defaultList(resultPage == null ? null : resultPage.getRecords())); + result.setTotal(resultPage == null ? 0L : resultPage.getTotal()); + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public void refreshOverviewEmployeeResults(Long projectId, String operator) { diff --git a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml index d127218a..6a287d47 100644 --- a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml +++ b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml @@ -590,6 +590,25 @@ order by final_result.trxDate desc, final_result.bankStatementId desc + + page = new Page<>(1, 5); + page.setRecords(List.of(item)); + page.setTotal(1L); + when(overviewMapper.selectEmployeeCreditNegativePage(any(Page.class), any(CcdiProjectEmployeeCreditNegativeQueryDTO.class))) + .thenReturn(page); + + CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO = new CcdiProjectEmployeeCreditNegativeQueryDTO(); + queryDTO.setProjectId(40L); + queryDTO.setPageNum(1); + queryDTO.setPageSize(5); + + CcdiProjectEmployeeCreditNegativePageVO result = service.getEmployeeCreditNegative(queryDTO); + + assertEquals(1, result.getRows().size()); + assertEquals(1L, result.getTotal()); + assertEquals("李四", result.getRows().getFirst().getPersonName()); + verify(overviewMapper).selectEmployeeCreditNegativePage( + any(Page.class), + argThat(query -> query.getProjectId().equals(40L)) + ); + } + + @Test + void shouldThrowWhenEmployeeCreditNegativeProjectDoesNotExist() { + when(projectMapper.selectById(99L)).thenReturn(null); + + CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO = new CcdiProjectEmployeeCreditNegativeQueryDTO(); + queryDTO.setProjectId(99L); + + assertThrows(ServiceException.class, () -> service.getEmployeeCreditNegative(queryDTO)); + } +} diff --git a/docs/reports/implementation/2026-03-28-risk-detail-employee-credit-negative-implementation.md b/docs/reports/implementation/2026-03-28-risk-detail-employee-credit-negative-implementation.md new file mode 100644 index 00000000..64dec171 --- /dev/null +++ b/docs/reports/implementation/2026-03-28-risk-detail-employee-credit-negative-implementation.md @@ -0,0 +1,80 @@ +# 风险明细员工负面征信实施记录 + +## 本次改动 + +### 后端 + +- 新增项目员工负面征信查询 DTO: + - `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiProjectEmployeeCreditNegativeQueryDTO.java` +- 新增项目员工负面征信分页 VO: + - `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativeItemVO.java` + - `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectEmployeeCreditNegativePageVO.java` +- 在结果总览链路新增接口: + - `GET /ccdi/project/overview/employee-credit-negative` +- 在 `CcdiProjectOverviewMapper.xml` 新增 `selectEmployeeCreditNegativePage` +- 查询口径固定为: + - 员工范围来自 `ccdi_project_overview_employee_result` + - 仅关联 `ccdi_credit_negative_info` + - 不接入 `ccdi_debts_info` + - 排序按 `query_date desc, person_id asc` + +### 前端 + +- 在 `ruoyi-ui/src/api/ccdi/projectOverview.js` 新增 `getOverviewEmployeeCreditNegative` +- 在 `PreliminaryCheck.vue` 初次加载时并行拉取员工负面征信初始数据 +- 在 `preliminaryCheck.mock.js` 补齐员工负面征信 mock 结构与归一化函数 +- 在 `RiskDetailSection.vue` 新增 `员工负面征信信息` 区块 +- 新区块支持独立分页、空态和金额展示 +- 不新增详情弹窗,不做展开,不混入负债明细 + +## 测试与验证 + +### 后端验证 + +执行命令: + +```bash +mvn -pl ccdi-project -am -Dsurefire.failIfNoSpecifiedTests=false \ + -Dtest=CcdiProjectOverviewServiceStructureTest,CcdiProjectOverviewControllerContractTest,CcdiProjectOverviewControllerTest,CcdiProjectOverviewServiceEmployeeCreditNegativeTest,CcdiProjectOverviewMapperSqlTest \ + test +``` + +结果: + +- 通过 + +### 前端验证 + +执行命令: + +```bash +node ruoyi-ui/tests/unit/project-overview-api.test.js +node ruoyi-ui/tests/unit/preliminary-check-api-integration.test.js +node ruoyi-ui/tests/unit/preliminary-check-credit-negative-load.test.js +node ruoyi-ui/tests/unit/risk-detail-employee-credit-negative-layout.test.js +node ruoyi-ui/tests/unit/risk-detail-employee-credit-negative-pagination.test.js +node ruoyi-ui/tests/unit/risk-detail-suspicious-transaction-layout.test.js +node ruoyi-ui/tests/unit/risk-detail-suspicious-transaction-detail-dialog.test.js +``` + +结果: + +- 通过 + +### 构建验证 + +执行命令: + +```bash +cd ruoyi-ui && npm run build:prod +``` + +结果: + +- 构建成功 +- 存在仓库既有 bundle 体积告警,但无新增编译错误 + +## 备注 + +- 本次未启动前端 dev server 或后端本地服务,因此无需额外清理测试进程 +- `.DS_Store` 与 `.superpowers/` 临时文件未纳入本次提交 diff --git a/ruoyi-ui/src/api/ccdi/projectOverview.js b/ruoyi-ui/src/api/ccdi/projectOverview.js index 0ca3ce91..06a51916 100644 --- a/ruoyi-ui/src/api/ccdi/projectOverview.js +++ b/ruoyi-ui/src/api/ccdi/projectOverview.js @@ -63,3 +63,15 @@ export function getOverviewSuspiciousTransactions(params) { } }) } + +export function getOverviewEmployeeCreditNegative(params) { + return request({ + url: '/ccdi/project/overview/employee-credit-negative', + method: 'get', + params: { + projectId: params.projectId, + pageNum: params.pageNum, + pageSize: params.pageSize + } + }) +} diff --git a/ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue b/ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue index 6b429498..f9bee4f3 100644 --- a/ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue +++ b/ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue @@ -54,6 +54,7 @@ import { } from "./preliminaryCheck.mock"; import { getOverviewDashboard, + getOverviewEmployeeCreditNegative, getOverviewRiskPeople, getOverviewRiskModelCards, getOverviewSuspiciousTransactions, @@ -198,7 +199,7 @@ export default { this.selectedModelCodes = []; this.resetProjectAnalysisDialog(); try { - const [dashboardRes, riskPeopleRes, riskModelCardsRes, suspiciousRes] = await Promise.all([ + const [dashboardRes, riskPeopleRes, riskModelCardsRes, suspiciousRes, creditNegativeRes] = await Promise.all([ getOverviewDashboard(this.projectId), getOverviewRiskPeople(this.projectId), getOverviewRiskModelCards(this.projectId), @@ -208,11 +209,17 @@ export default { pageNum: 1, pageSize: 5, }), + getOverviewEmployeeCreditNegative({ + projectId: this.projectId, + pageNum: 1, + pageSize: 5, + }), ]); const dashboardData = (dashboardRes && dashboardRes.data) || {}; const riskPeopleData = (riskPeopleRes && riskPeopleRes.data) || {}; const riskModelCardsData = (riskModelCardsRes && riskModelCardsRes.data) || {}; const suspiciousData = (suspiciousRes && suspiciousRes.data) || {}; + const creditNegativeData = (creditNegativeRes && creditNegativeRes.data) || {}; this.realData = createOverviewLoadedData({ projectId: this.projectId, @@ -220,6 +227,7 @@ export default { riskPeopleData, riskModelCardsData, suspiciousData, + creditNegativeData, }); const hasOverviewData = Boolean( diff --git a/ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue b/ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue index b620860b..549578fc 100644 --- a/ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue +++ b/ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue @@ -131,6 +131,60 @@ /> +
+
+
+
员工负面征信信息
+
展示当前项目员工的负面征信信息
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
@@ -265,7 +319,10 @@