实现项目列表重新分析交互

This commit is contained in:
wkc
2026-03-24 12:44:17 +08:00
parent f101990bb6
commit eda2bd1b16
3 changed files with 68 additions and 4 deletions

View File

@@ -120,6 +120,8 @@
size="mini"
type="text"
icon="el-icon-refresh"
:loading="reAnalyzeLoadingMap[String(scope.row.projectId)]"
:disabled="reAnalyzeLoadingMap[String(scope.row.projectId)]"
@click="handleReAnalyze(scope.row)"
>
重新分析
@@ -185,6 +187,10 @@ export default {
pageSize: 10,
}),
},
reAnalyzeLoadingMap: {
type: Object,
default: () => ({}),
},
},
methods: {
getStatusColor(status) {

View File

@@ -19,6 +19,7 @@
:data-list="projectList"
:total="total"
:page-params="queryParams"
:re-analyze-loading-map="reAnalyzeLoadingMap"
@pagination="handlePagination"
@enter="handleEnter"
@view-result="handleViewResult"
@@ -61,7 +62,7 @@
</template>
<script>
import {getStatusCounts, listProject} from '@/api/ccdiProject'
import {getStatusCounts, listProject, rebuildProjectTags} from '@/api/ccdiProject'
import SearchBar from './components/SearchBar'
import ProjectTable from './components/ProjectTable'
import QuickEntry from './components/QuickEntry'
@@ -113,6 +114,8 @@ export default {
// 归档确认弹窗
archiveDialogVisible: false,
currentArchiveProject: null,
// 重新分析按钮提交态
reAnalyzeLoadingMap: {},
};
},
created() {
@@ -242,9 +245,22 @@ export default {
});
},
/** 重新分析 */
handleReAnalyze(row) {
console.log("重新分析:", row);
this.$modal.msgSuccess("正在重新分析项目: " + row.projectName);
async handleReAnalyze(row) {
const projectKey = String(row.projectId)
if (this.reAnalyzeLoadingMap[projectKey]) {
return
}
this.$set(this.reAnalyzeLoadingMap, projectKey, true)
try {
await rebuildProjectTags({ projectId: row.projectId })
this.$modal.msgSuccess("已开始重新分析")
this.getList()
} catch (error) {
const message = error && error.message ? error.message : "重新分析失败,请稍后重试"
this.$modal.msgError(message)
} finally {
this.$set(this.reAnalyzeLoadingMap, projectKey, false)
}
},
/** 归档项目 */
handleArchive(row) {

View File

@@ -0,0 +1,42 @@
const assert = require("assert");
const fs = require("fs");
const path = require("path");
const pagePath = path.resolve(__dirname, "../../src/views/ccdiProject/index.vue");
const tablePath = path.resolve(__dirname, "../../src/views/ccdiProject/components/ProjectTable.vue");
const pageSource = fs.readFileSync(pagePath, "utf8");
const tableSource = fs.readFileSync(tablePath, "utf8");
assert(
pageSource.includes("rebuildProjectTags({ projectId: row.projectId })"),
"重新分析应调用真实重打标接口"
);
assert(
pageSource.includes('this.$modal.msgSuccess("已开始重新分析")') ||
pageSource.includes("this.$modal.msgSuccess('已开始重新分析')"),
"重新分析成功提示应统一为已开始重新分析"
);
assert(
/finally\s*\([\s\S]*?this\.getList\(/.test(pageSource) || pageSource.includes("this.getList()"),
"重新分析成功后应刷新列表"
);
assert(
tableSource.includes(':loading="reAnalyzeLoadingMap[String(scope.row.projectId)]"') ||
tableSource.includes(':loading="reAnalyzeLoadingMap[scope.row.projectId]"'),
"表格中的重新分析按钮应支持提交态"
);
assert(
pageSource.includes("重新分析失败,请稍后重试"),
"重新分析失败时应有统一兜底提示"
);
assert(
pageSource.includes("error.message"),
"有明确业务异常时应优先透传后端返回文案"
);
console.log("project-list-reanalyze-flow test passed");