1、修复切换不同项目后还显示上个项目信息的问题
This commit is contained in:
@@ -1,11 +1,8 @@
|
|||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { getTableConfig } from './tableCommon';
|
import { getTableConfig } from './tableCommon';
|
||||||
|
|
||||||
const navigationItems = ref([]);
|
export function createNavigationItems() {
|
||||||
|
return Array.from({ length: 11 }, (_, index) => {
|
||||||
// 初始化导航项
|
|
||||||
export function initNavigationItems() {
|
|
||||||
navigationItems.value = Array.from({ length: 11 }, (_, index) => {
|
|
||||||
const config = getTableConfig(index);
|
const config = getTableConfig(index);
|
||||||
return {
|
return {
|
||||||
number: getChineseNumber(index + 1),
|
number: getChineseNumber(index + 1),
|
||||||
@@ -29,8 +26,6 @@ export function initNavigationItems() {
|
|||||||
rows: 8
|
rows: 8
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
return navigationItems;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取中文数字
|
// 获取中文数字
|
||||||
@@ -39,10 +34,6 @@ function getChineseNumber(num) {
|
|||||||
return chineseNumbers[num - 1] || num;
|
return chineseNumbers[num - 1] || num;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导出初始化的导航项
|
|
||||||
export default function useNavigationItems() {
|
export default function useNavigationItems() {
|
||||||
if (navigationItems.value.length === 0) {
|
return ref(createNavigationItems());
|
||||||
initNavigationItems();
|
|
||||||
}
|
|
||||||
return navigationItems;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -543,7 +543,7 @@
|
|||||||
import EvidenceModal from '@/views/pwl/pwlProject/components/components/EvidenceModal.vue';
|
import EvidenceModal from '@/views/pwl/pwlProject/components/components/EvidenceModal.vue';
|
||||||
import EditModal from './EditModal.vue';
|
import EditModal from './EditModal.vue';
|
||||||
|
|
||||||
import useNavigationItems from './data/navigationItems';
|
import useNavigationItems, { createNavigationItems } from './data/navigationItems';
|
||||||
import {
|
import {
|
||||||
tableConfigs,
|
tableConfigs,
|
||||||
getTableConfig,
|
getTableConfig,
|
||||||
@@ -739,6 +739,111 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { resetFields } = useForm(form);
|
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(() => {
|
const hasTripleOneData = computed(() => {
|
||||||
@@ -2155,97 +2260,29 @@
|
|||||||
// ========== 观察者 ==========
|
// ========== 观察者 ==========
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => [props.visible, props.data?.id] as const,
|
||||||
async (visible) => {
|
async ([visible, projectId], oldValue) => {
|
||||||
if (visible) {
|
const [prevVisible, prevProjectId] = oldValue ?? [];
|
||||||
if (props.data) {
|
|
||||||
loading.value = true;
|
|
||||||
assignObject(form, props.data);
|
|
||||||
|
|
||||||
// 获取知识库并拼接 kbIds
|
if (!visible) {
|
||||||
if (props.data.libraryIds && props.data.libraryIds?.length > 0) {
|
initVersion++;
|
||||||
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;
|
loading.value = false;
|
||||||
|
clearProjectState();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
resetFields();
|
if (!props.data) {
|
||||||
combinedKbIds.value = '';
|
initVersion++;
|
||||||
evidenceModalVisible.value = false;
|
loading.value = false;
|
||||||
// 清空表格数据
|
clearProjectState();
|
||||||
Object.keys(tableData).forEach((key) => {
|
return;
|
||||||
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 (!prevVisible || projectId !== prevProjectId) {
|
||||||
|
await initializeProjectData(props.data);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleFilePreview = (fileItem: any) => {
|
const handleFilePreview = (fileItem: any) => {
|
||||||
|
|||||||
@@ -135,22 +135,35 @@
|
|||||||
</a-card>
|
</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
|
<ReportContent
|
||||||
|
v-if="showReportContent"
|
||||||
v-model:visible="showReportContent"
|
v-model:visible="showReportContent"
|
||||||
:data="current"
|
:data="current"
|
||||||
@done="reload"
|
@done="reload"
|
||||||
/>
|
/>
|
||||||
<!-- 审计报告查看 -->
|
<!-- 审计报告查看 -->
|
||||||
<ReportView
|
<ReportView
|
||||||
|
v-if="showReportView"
|
||||||
v-model:visible="showReportView"
|
v-model:visible="showReportView"
|
||||||
:data="current"
|
:data="current"
|
||||||
@done="reload"
|
@done="reload"
|
||||||
/>
|
/>
|
||||||
<!-- 审计核查弹窗 -->
|
<!-- 审计核查弹窗 -->
|
||||||
<AuditCheck
|
<AuditCheck
|
||||||
|
v-if="showAuditCheck"
|
||||||
v-model:visible="showAuditCheck"
|
v-model:visible="showAuditCheck"
|
||||||
:data="current"
|
:data="current"
|
||||||
@done="reload"
|
@done="reload"
|
||||||
@@ -158,6 +171,7 @@
|
|||||||
|
|
||||||
<!-- 文档管理弹窗 -->
|
<!-- 文档管理弹窗 -->
|
||||||
<a-modal
|
<a-modal
|
||||||
|
v-if="showDocManage"
|
||||||
v-model:visible="showDocManage"
|
v-model:visible="showDocManage"
|
||||||
:title="`文档管理 - ${currentKbName}`"
|
:title="`文档管理 - ${currentKbName}`"
|
||||||
width="80%"
|
width="80%"
|
||||||
@@ -272,7 +286,8 @@
|
|||||||
:href="getDocFileUrl(record)"
|
:href="getDocFileUrl(record)"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noreferrer"
|
rel="noreferrer"
|
||||||
>{{ renderDocText(record, ['fileName', 'name']) }}</a>
|
>{{ renderDocText(record, ['fileName', 'name']) }}</a
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<a-space>
|
<a-space>
|
||||||
@@ -294,6 +309,7 @@
|
|||||||
|
|
||||||
<!-- 导入弹窗 -->
|
<!-- 导入弹窗 -->
|
||||||
<Import2
|
<Import2
|
||||||
|
v-if="showImport"
|
||||||
v-model:visible="showImport"
|
v-model:visible="showImport"
|
||||||
@done="loadCloudFiles"
|
@done="loadCloudFiles"
|
||||||
:doc="selectedDoc"
|
:doc="selectedDoc"
|
||||||
@@ -301,6 +317,7 @@
|
|||||||
|
|
||||||
<!-- 新增/编辑目录弹窗 -->
|
<!-- 新增/编辑目录弹窗 -->
|
||||||
<a-modal
|
<a-modal
|
||||||
|
v-if="showDirModal"
|
||||||
v-model:visible="showDirModal"
|
v-model:visible="showDirModal"
|
||||||
:title="dirModalTitle"
|
:title="dirModalTitle"
|
||||||
width="400px"
|
width="400px"
|
||||||
@@ -362,10 +379,7 @@
|
|||||||
updateAiCloudDoc,
|
updateAiCloudDoc,
|
||||||
removeAiCloudDoc
|
removeAiCloudDoc
|
||||||
} from '@/api/ai/aiCloudDoc';
|
} from '@/api/ai/aiCloudDoc';
|
||||||
import {
|
import { pageAiCloudFile, removeAiCloudFile } from '@/api/ai/aiCloudFile';
|
||||||
pageAiCloudFile,
|
|
||||||
removeAiCloudFile
|
|
||||||
} from '@/api/ai/aiCloudFile';
|
|
||||||
import type { AiCloudDoc } from '@/api/ai/aiCloudDoc/model';
|
import type { AiCloudDoc } from '@/api/ai/aiCloudDoc/model';
|
||||||
import type { AiCloudFile } from '@/api/ai/aiCloudFile/model';
|
import type { AiCloudFile } from '@/api/ai/aiCloudFile/model';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user