1、修复切换不同项目后还显示上个项目信息的问题
This commit is contained in:
@@ -1,11 +1,8 @@
|
||||
import { ref } from 'vue';
|
||||
import { getTableConfig } from './tableCommon';
|
||||
|
||||
const navigationItems = ref([]);
|
||||
|
||||
// 初始化导航项
|
||||
export function initNavigationItems() {
|
||||
navigationItems.value = Array.from({ length: 11 }, (_, index) => {
|
||||
export function createNavigationItems() {
|
||||
return Array.from({ length: 11 }, (_, index) => {
|
||||
const config = getTableConfig(index);
|
||||
return {
|
||||
number: getChineseNumber(index + 1),
|
||||
@@ -29,8 +26,6 @@ export function initNavigationItems() {
|
||||
rows: 8
|
||||
};
|
||||
});
|
||||
|
||||
return navigationItems;
|
||||
}
|
||||
|
||||
// 获取中文数字
|
||||
@@ -39,10 +34,6 @@ function getChineseNumber(num) {
|
||||
return chineseNumbers[num - 1] || num;
|
||||
}
|
||||
|
||||
// 导出初始化的导航项
|
||||
export default function useNavigationItems() {
|
||||
if (navigationItems.value.length === 0) {
|
||||
initNavigationItems();
|
||||
}
|
||||
return navigationItems;
|
||||
return ref(createNavigationItems());
|
||||
}
|
||||
|
||||
@@ -543,7 +543,7 @@
|
||||
import EvidenceModal from '@/views/pwl/pwlProject/components/components/EvidenceModal.vue';
|
||||
import EditModal from './EditModal.vue';
|
||||
|
||||
import useNavigationItems from './data/navigationItems';
|
||||
import useNavigationItems, { createNavigationItems } from './data/navigationItems';
|
||||
import {
|
||||
tableConfigs,
|
||||
getTableConfig,
|
||||
@@ -739,6 +739,111 @@
|
||||
});
|
||||
|
||||
const { resetFields } = useForm(form);
|
||||
let initVersion = 0;
|
||||
|
||||
const resetNavigationState = () => {
|
||||
navigationItems.value = createNavigationItems();
|
||||
currentSection.value = 0;
|
||||
currentSectionIndex.value = 0;
|
||||
};
|
||||
|
||||
const clearProjectState = () => {
|
||||
resetFields();
|
||||
combinedKbIds.value = '';
|
||||
currentCompanyId.value = undefined;
|
||||
evidenceModalVisible.value = false;
|
||||
showHistory.value = false;
|
||||
currentInterfaceName.value = '';
|
||||
resetNavigationState();
|
||||
|
||||
Object.keys(tableData).forEach((key) => {
|
||||
delete tableData[key];
|
||||
});
|
||||
Object.keys(tableGenerationData).forEach((key) => {
|
||||
delete tableGenerationData[key];
|
||||
});
|
||||
Object.keys(selectedRowsMap).forEach((key) => {
|
||||
delete selectedRowsMap[key as any];
|
||||
});
|
||||
Object.keys(selectedRowKeysMap).forEach((key) => {
|
||||
delete selectedRowKeysMap[key as any];
|
||||
});
|
||||
Object.keys(generatingEvidenceStates).forEach((key) => {
|
||||
delete generatingEvidenceStates[key as any];
|
||||
});
|
||||
Object.keys(exportStates).forEach((key) => {
|
||||
delete exportStates[key as any];
|
||||
});
|
||||
Object.keys(savingStates).forEach((key) => {
|
||||
delete savingStates[key as any];
|
||||
});
|
||||
Object.keys(tableFileSelectionMap).forEach((key) => {
|
||||
delete tableFileSelectionMap[key];
|
||||
});
|
||||
|
||||
tripleOneData.value = null;
|
||||
stateAssetsData.value = null;
|
||||
currentFileSelectionKey.value = '';
|
||||
selectedDocList.value = [];
|
||||
selectedFileList.value = [];
|
||||
selectedFileKeys.value = [];
|
||||
checkedDirKeys.value = [];
|
||||
evidenceSelectedRows.value = [];
|
||||
evidenceBaseInfo.caseIndex = '';
|
||||
evidenceBaseInfo.projectName = '';
|
||||
evidenceBaseInfo.auditedTarget = '';
|
||||
evidenceBaseInfo.auditMatter = '';
|
||||
evidenceBaseInfo.auditMatterType = '';
|
||||
};
|
||||
|
||||
const initializeProjectData = async (projectData: PwlProject) => {
|
||||
const version = ++initVersion;
|
||||
clearProjectState();
|
||||
loading.value = true;
|
||||
assignObject(form, projectData);
|
||||
|
||||
if (projectData.libraryIds && projectData.libraryIds?.length > 0) {
|
||||
try {
|
||||
const result = await getPwlProjectLibraryByIds(projectData.libraryIds);
|
||||
if (version !== initVersion) return;
|
||||
const kbIds = result.map((lib) => lib.kbId).filter((kbId) => kbId);
|
||||
if (form.kbId) {
|
||||
kbIds.unshift(form.kbId);
|
||||
}
|
||||
combinedKbIds.value = kbIds.join(',');
|
||||
} catch (error) {
|
||||
console.error('获取知识库失败:', error);
|
||||
if (version !== initVersion) return;
|
||||
combinedKbIds.value = form.kbId || '';
|
||||
}
|
||||
} else {
|
||||
combinedKbIds.value = form.kbId || '';
|
||||
}
|
||||
|
||||
currentCompanyId.value = projectData.companyId;
|
||||
|
||||
for (let i = 0; i < navigationItems.value.length; i++) {
|
||||
const section: any = navigationItems.value[i];
|
||||
if (section.tableOptions.length > 0) {
|
||||
const tableOption = section.tableOptions[section.currentTableIndex];
|
||||
if (typeof tableOption.columns === 'function') {
|
||||
try {
|
||||
const module = await tableOption.columns();
|
||||
if (version !== initVersion) return;
|
||||
section.columns = module.default || module;
|
||||
} catch (error) {
|
||||
console.error(`加载表格${i}列配置失败:`, error);
|
||||
section.columns = [];
|
||||
}
|
||||
} else {
|
||||
section.columns = tableOption.columns;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (version !== initVersion) return;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
// ========== 计算属性 ==========
|
||||
const hasTripleOneData = computed(() => {
|
||||
@@ -2155,97 +2260,29 @@
|
||||
// ========== 观察者 ==========
|
||||
|
||||
watch(
|
||||
() => props.visible,
|
||||
async (visible) => {
|
||||
if (visible) {
|
||||
if (props.data) {
|
||||
loading.value = true;
|
||||
assignObject(form, props.data);
|
||||
() => [props.visible, props.data?.id] as const,
|
||||
async ([visible, projectId], oldValue) => {
|
||||
const [prevVisible, prevProjectId] = oldValue ?? [];
|
||||
|
||||
// 获取知识库并拼接 kbIds
|
||||
if (props.data.libraryIds && props.data.libraryIds?.length > 0) {
|
||||
try {
|
||||
const result = await getPwlProjectLibraryByIds(
|
||||
props.data.libraryIds
|
||||
);
|
||||
const kbIds = result
|
||||
.map((lib) => lib.kbId)
|
||||
.filter((kbId) => kbId);
|
||||
if (form.kbId) {
|
||||
kbIds.unshift(form.kbId);
|
||||
}
|
||||
combinedKbIds.value = kbIds.join(',');
|
||||
} catch (error) {
|
||||
console.error('获取知识库失败:', error);
|
||||
combinedKbIds.value = form.kbId || '';
|
||||
}
|
||||
} else {
|
||||
combinedKbIds.value = form.kbId || '';
|
||||
}
|
||||
|
||||
// 设置当前公司ID用于文档管理
|
||||
currentCompanyId.value = props.data.companyId;
|
||||
|
||||
// 初始化所有表格的列配置
|
||||
for (let i = 0; i < navigationItems.value.length; i++) {
|
||||
const section: any = navigationItems.value[i];
|
||||
if (section.tableOptions.length > 0) {
|
||||
const tableOption =
|
||||
section.tableOptions[section.currentTableIndex];
|
||||
if (typeof tableOption.columns === 'function') {
|
||||
try {
|
||||
const module = await tableOption.columns();
|
||||
section.columns = module.default || module;
|
||||
} catch (error) {
|
||||
console.error(`加载表格${i}列配置失败:`, error);
|
||||
section.columns = [];
|
||||
}
|
||||
} else {
|
||||
section.columns = tableOption.columns;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 重置到第一个章节
|
||||
currentSection.value = 0;
|
||||
loading.value = false;
|
||||
}
|
||||
} else {
|
||||
resetFields();
|
||||
combinedKbIds.value = '';
|
||||
evidenceModalVisible.value = false;
|
||||
// 清空表格数据
|
||||
Object.keys(tableData).forEach((key) => {
|
||||
delete tableData[key];
|
||||
});
|
||||
// 清空表格生成数据
|
||||
Object.keys(tableGenerationData).forEach((key) => {
|
||||
delete tableGenerationData[key];
|
||||
});
|
||||
// 清空特殊数据
|
||||
tripleOneData.value = null;
|
||||
stateAssetsData.value = null;
|
||||
// 清空选中行
|
||||
Object.keys(selectedRowsMap).forEach((key) => {
|
||||
delete selectedRowsMap[key as any];
|
||||
});
|
||||
Object.keys(selectedRowKeysMap).forEach((key) => {
|
||||
delete selectedRowKeysMap[key as any];
|
||||
});
|
||||
// 清空生成取证单状态
|
||||
Object.keys(generatingEvidenceStates).forEach((key) => {
|
||||
delete generatingEvidenceStates[key as any];
|
||||
});
|
||||
Object.keys(tableFileSelectionMap).forEach((key) => {
|
||||
delete tableFileSelectionMap[key];
|
||||
});
|
||||
currentFileSelectionKey.value = '';
|
||||
selectedDocList.value = [];
|
||||
selectedFileList.value = [];
|
||||
selectedFileKeys.value = [];
|
||||
checkedDirKeys.value = [];
|
||||
if (!visible) {
|
||||
initVersion++;
|
||||
loading.value = false;
|
||||
clearProjectState();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!props.data) {
|
||||
initVersion++;
|
||||
loading.value = false;
|
||||
clearProjectState();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!prevVisible || projectId !== prevProjectId) {
|
||||
await initializeProjectData(props.data);
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
const handleFilePreview = (fileItem: any) => {
|
||||
|
||||
@@ -135,22 +135,35 @@
|
||||
</a-card>
|
||||
|
||||
<!-- 编辑弹窗 -->
|
||||
<Edit v-model:visible="showEdit" :data="current" @done="reload" />
|
||||
<Edit
|
||||
v-if="showEdit"
|
||||
v-model:visible="showEdit"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
<!-- 生成报告 -->
|
||||
<Report v-model:visible="showReport" :data="current" @done="reload" />
|
||||
<Report
|
||||
v-if="showReport"
|
||||
v-model:visible="showReport"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
<ReportContent
|
||||
v-if="showReportContent"
|
||||
v-model:visible="showReportContent"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
<!-- 审计报告查看 -->
|
||||
<ReportView
|
||||
v-if="showReportView"
|
||||
v-model:visible="showReportView"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
<!-- 审计核查弹窗 -->
|
||||
<AuditCheck
|
||||
v-if="showAuditCheck"
|
||||
v-model:visible="showAuditCheck"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
@@ -158,6 +171,7 @@
|
||||
|
||||
<!-- 文档管理弹窗 -->
|
||||
<a-modal
|
||||
v-if="showDocManage"
|
||||
v-model:visible="showDocManage"
|
||||
:title="`文档管理 - ${currentKbName}`"
|
||||
width="80%"
|
||||
@@ -272,7 +286,8 @@
|
||||
:href="getDocFileUrl(record)"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>{{ renderDocText(record, ['fileName', 'name']) }}</a>
|
||||
>{{ renderDocText(record, ['fileName', 'name']) }}</a
|
||||
>
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-space>
|
||||
@@ -294,6 +309,7 @@
|
||||
|
||||
<!-- 导入弹窗 -->
|
||||
<Import2
|
||||
v-if="showImport"
|
||||
v-model:visible="showImport"
|
||||
@done="loadCloudFiles"
|
||||
:doc="selectedDoc"
|
||||
@@ -301,6 +317,7 @@
|
||||
|
||||
<!-- 新增/编辑目录弹窗 -->
|
||||
<a-modal
|
||||
v-if="showDirModal"
|
||||
v-model:visible="showDirModal"
|
||||
:title="dirModalTitle"
|
||||
width="400px"
|
||||
@@ -362,10 +379,7 @@
|
||||
updateAiCloudDoc,
|
||||
removeAiCloudDoc
|
||||
} from '@/api/ai/aiCloudDoc';
|
||||
import {
|
||||
pageAiCloudFile,
|
||||
removeAiCloudFile
|
||||
} from '@/api/ai/aiCloudFile';
|
||||
import { pageAiCloudFile, removeAiCloudFile } from '@/api/ai/aiCloudFile';
|
||||
import type { AiCloudDoc } from '@/api/ai/aiCloudDoc/model';
|
||||
import type { AiCloudFile } from '@/api/ai/aiCloudFile/model';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user