diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 4a45d57..0230985 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -30,7 +30,12 @@ "Skill(superpowers:using-superpowers)", "Bash(tree:*)", "Skill(docx)", - "Bash(bash:*)" + "Bash(bash:*)", + "mcp__zai-mcp-server__analyze_image", + "Skill(frontend-design:frontend-design)", + "mcp__web-reader__webReader", + "mcp__fetch__imageFetch", + "Skill(frontend-design)" ] }, "enabledMcpjsonServers": [ diff --git a/doc/other/ScreenShot_2026-01-29_155814_876.png b/doc/other/ScreenShot_2026-01-29_155814_876.png deleted file mode 100644 index 703505e..0000000 Binary files a/doc/other/ScreenShot_2026-01-29_155814_876.png and /dev/null differ diff --git a/doc/other/ScreenShot_2026-01-30_091448_399.png b/doc/other/ScreenShot_2026-01-30_091448_399.png new file mode 100644 index 0000000..b1aa85f Binary files /dev/null and b/doc/other/ScreenShot_2026-01-30_091448_399.png differ diff --git a/ruoyi-ui/src/api/dpcProject.js b/ruoyi-ui/src/api/dpcProject.js new file mode 100644 index 0000000..5b5e3c2 --- /dev/null +++ b/ruoyi-ui/src/api/dpcProject.js @@ -0,0 +1,157 @@ +import request from '@/utils/request' + +// 查询初核项目列表 +export function listProject(query) { + return request({ + url: '/dpc/project/list', + method: 'get', + params: query + }) +} + +// 查询初核项目详细 +export function getProject(projectId) { + return request({ + url: '/dpc/project/' + projectId, + method: 'get' + }) +} + +// 新增初核项目 +export function addProject(data) { + return request({ + url: '/dpc/project', + method: 'post', + data: data + }) +} + +// 修改初核项目 +export function updateProject(data) { + return request({ + url: '/dpc/project', + method: 'put', + data: data + }) +} + +// 删除初核项目 +export function delProject(projectIds) { + return request({ + url: '/dpc/project/' + projectIds, + method: 'delete' + }) +} + +// 导出初核项目 +export function exportProject(query) { + return request({ + url: '/dpc/project/export', + method: 'get', + params: query + }) +} + +// 刷新项目预警人数 +export function refreshWarningCount(projectId) { + return request({ + url: '/dpc/project/' + projectId + '/warning', + method: 'post' + }) +} + +// 归档项目 +export function archiveProject(projectId) { + return request({ + url: '/dpc/project/' + projectId + '/archive', + method: 'post' + }) +} + +// 获取历史项目列表(用于导入) +export function listHistoryProjects(query) { + return request({ + url: '/dpc/project/history', + method: 'get', + params: query + }) +} + +// 从历史项目导入 +export function importFromHistory(data) { + return request({ + url: '/dpc/project/import', + method: 'post', + data: data + }) +} + +// Mock数据:获取项目列表 +export function getMockProjectList() { + return Promise.resolve({ + code: 200, + total: 3, + rows: [ + { + projectId: 1, + projectName: '2024年Q1初核', + projectDesc: '2024年第一季度纪检初核排查工作', + createTime: '2024-01-01', + projectStatus: '0', + targetCount: 500, + warningCount: 15, + startDate: '2024-01-01', + endDate: '2024-03-31' + }, + { + projectId: 2, + projectName: '2023年Q4初核', + projectDesc: '2023年第四季度纪检初核排查工作', + createTime: '2023-10-01', + projectStatus: '1', + targetCount: 480, + warningCount: 23, + startDate: '2023-10-01', + endDate: '2023-12-31' + }, + { + projectId: 3, + projectName: '2023年Q3初核', + projectDesc: '2023年第三季度纪检初核排查工作', + createTime: '2023-07-01', + projectStatus: '2', + targetCount: 450, + warningCount: 18, + startDate: '2023-07-01', + endDate: '2023-09-30' + } + ] + }) +} + +// Mock数据:获取历史项目列表 +export function getMockHistoryProjects() { + return Promise.resolve({ + code: 200, + data: [ + { + projectId: 3, + projectName: '2023年Q3初核', + projectDesc: '2023年第三季度纪检初核排查工作', + createTime: '2023-07-01', + projectStatus: '2', + targetCount: 450, + warningCount: 18 + }, + { + projectId: 4, + projectName: '2023年Q2初核', + projectDesc: '2023年第二季度纪检初核排查工作', + createTime: '2023-04-01', + projectStatus: '2', + targetCount: 420, + warningCount: 12 + } + ] + }) +} diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue index 84f4831..e6d539c 100644 --- a/ruoyi-ui/src/components/Breadcrumb/index.vue +++ b/ruoyi-ui/src/components/Breadcrumb/index.vue @@ -45,10 +45,6 @@ export default { } else { matched = router.matched.filter(item => item.meta && item.meta.title) } - // 判断是否为首页 - if (!this.isDashboard(matched[0])) { - matched = [{ path: "/index", meta: { title: "首页" } }].concat(matched) - } this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) }, findPathNum(str, char = "/") { diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue index f0b0837..b0e4cc0 100644 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -161,6 +161,10 @@ export default { } }, closeSelectedTag(view) { + // 如果只有一个标签且该标签不是固定标签,则不允许关闭 + if (this.visitedViews.length === 1 && !this.isAffix(view)) { + return + } this.$tab.closePage(view).then(({ visitedViews }) => { if (this.isActive(view)) { this.toLastView(visitedViews, view) diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index bbfd237..789cd1f 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -1,11 +1,10 @@ import Vue from 'vue' import Router from 'vue-router' - -Vue.use(Router) - /* Layout */ import Layout from '@/layout' +Vue.use(Router) + /** * Note: 路由配置项 * @@ -64,13 +63,13 @@ export const constantRoutes = [ { path: '', component: Layout, - redirect: 'index', + redirect: 'dpcProject', children: [ { - path: 'index', - component: () => import('@/views/index'), - name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } + path: 'dpcProject', + component: () => import('@/views/dpcProject/index'), + name: 'DpcProject', + meta: { title: '初核项目管理', icon: 'dashboard', affix: true } } ] }, diff --git a/ruoyi-ui/src/views/dpcIntermediary/test_edit_dialog_fix.html b/ruoyi-ui/src/views/dpcIntermediary/test_edit_dialog_fix.html deleted file mode 100644 index 84979e8..0000000 --- a/ruoyi-ui/src/views/dpcIntermediary/test_edit_dialog_fix.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - 中介黑名单编辑对话框修复测试 - - - -
-

中介黑名单编辑对话框修复测试报告 已修复

- -
-

问题描述

-

在中介黑名单列表中点击修改按钮时,该行的信息没有正确反显到输入框内。

- -

根本原因

- - -

修复方案

- -
- -

修复内容

- -
-

1. 添加 form.intermediaryType 监听器

-

文件: ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue

-
-watch: { - // 原有的 visible 和 form.intermediaryId 监听... - - // 新增:监听 form.intermediaryType 变化 - 'form.intermediaryType': { - handler(newVal) { - if (!this.isAddMode && newVal) { - // 修改模式下,类型加载后设置 selectedType - this.selectedType = newVal; - } - }, - immediate: true - } -} -
-
- -
-

2. 改进 initDialogState 方法

-

文件: ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue

-
-initDialogState() { - if (this.isAddMode) { - // 新增模式:重置选择状态 - this.selectedType = null; - this.tempSelectedType = null; - this.shouldAnimate = false; - this.form.intermediaryType = '1'; - } else { - // 修改模式:设置已选择的类型(添加存在性检查) - if (this.form.intermediaryType) { - this.selectedType = this.form.intermediaryType; - } - this.shouldAnimate = false; - } -} -
-
- -

测试场景

- -
-

场景 1:修改个人中介信息

-

步骤:

-
    -
  1. 打开中介黑名单列表页面
  2. -
  3. 找到一条个人类型的记录(intermediaryType = '1')
  4. -
  5. 点击"修改"按钮
  6. -
  7. 验证:对话框应直接显示个人信息表单
  8. -
  9. 验证:姓名、证件号等字段应正确反显
  10. -
-

预期结果: ✅ 个人信息表单正确显示,所有字段数据正确反显

-
- -
-

场景 2:修改机构中介信息

-

步骤:

-
    -
  1. 打开中介黑名单列表页面
  2. -
  3. 找到一条机构类型的记录(intermediaryType = '2')
  4. -
  5. 点击"修改"按钮
  6. -
  7. 验证:对话框应直接显示机构信息表单
  8. -
  9. 验证:机构名称、统一社会信用代码等字段应正确反显
  10. -
-

预期结果: ✅ 机构信息表单正确显示,所有字段数据正确反显

-
- -
-

场景 3:新增中介信息

-

步骤:

-
    -
  1. 打开中介黑名单列表页面
  2. -
  3. 点击"新增"按钮
  4. -
  5. 验证:对话框应显示类型选择卡片(个人/机构)
  6. -
  7. 选择类型后,显示对应表单
  8. -
-

预期结果: ✅ 类型选择卡片正确显示,选择后表单正常显示

-
- -

验证要点

- - -

相关文件

- -
- - diff --git a/ruoyi-ui/src/views/dpcProject/components/AddProjectDialog.vue b/ruoyi-ui/src/views/dpcProject/components/AddProjectDialog.vue new file mode 100644 index 0000000..e92bcd4 --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/AddProjectDialog.vue @@ -0,0 +1,333 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/components/ArchiveConfirmDialog.vue b/ruoyi-ui/src/views/dpcProject/components/ArchiveConfirmDialog.vue new file mode 100644 index 0000000..d009e47 --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/ArchiveConfirmDialog.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/components/ImportHistoryDialog.vue b/ruoyi-ui/src/views/dpcProject/components/ImportHistoryDialog.vue new file mode 100644 index 0000000..e103800 --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/ImportHistoryDialog.vue @@ -0,0 +1,428 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/components/ProjectTable.vue b/ruoyi-ui/src/views/dpcProject/components/ProjectTable.vue new file mode 100644 index 0000000..e30e55f --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/ProjectTable.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/components/QuickEntry.vue b/ruoyi-ui/src/views/dpcProject/components/QuickEntry.vue new file mode 100644 index 0000000..87062ab --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/QuickEntry.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/components/SearchBar.vue b/ruoyi-ui/src/views/dpcProject/components/SearchBar.vue new file mode 100644 index 0000000..21b8ca8 --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/components/SearchBar.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcProject/index.vue b/ruoyi-ui/src/views/dpcProject/index.vue new file mode 100644 index 0000000..a6e7ad7 --- /dev/null +++ b/ruoyi-ui/src/views/dpcProject/index.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/ruoyi-ui/src/views/index_v1.vue b/ruoyi-ui/src/views/index_v1.vue deleted file mode 100644 index d2d2ec6..0000000 --- a/ruoyi-ui/src/views/index_v1.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index dde986d..45329bc 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -62,9 +62,9 @@