1、文档新增批量删除

2、文档新增点击文件名预览
This commit is contained in:
2026-05-27 14:31:52 +08:00
parent f1a9f53099
commit c61328a81e
5 changed files with 289 additions and 142 deletions

View File

@@ -24,12 +24,14 @@
:tabBarStyle="{ margin: 0 }"
@change="handleSourceChange"
>
<a-tab-pane key="company" tab="公司文档" />
<a-tab-pane key="company" tab="项目文档" />
<a-tab-pane key="public" tab="公共库" />
</a-tabs>
</div>
<div class="dir-header">
<span>{{ activeSource === 'company' ? '公司文档目录' : '公共库目录' }}</span>
<span>{{
activeSource === 'company' ? '项目文档目录' : '公共库目录'
}}</span>
</div>
<div class="tree-container">
<a-tree
@@ -62,7 +64,10 @@
<span class="doc-tips"
>当前已选择 {{ checkedDirKeys.length }} 个目录,
{{ selectedFileList.length }} 个文件合计
{{ mergedDirKeys.length }} 个目录{{ mergedFileKeys.length }} 个文件</span
{{ mergedDirKeys.length }} 个目录{{
mergedFileKeys.length
}}
个文件</span
>
<a-space>
<a-button @click="clearSelection">清空当前</a-button>
@@ -79,9 +84,7 @@
:loading="docLoading"
rowKey="id"
:scroll="
activeSource === 'public'
? { x: 2300, y: 400 }
: { y: 400 }
activeSource === 'public' ? { x: 2300, y: 400 } : { y: 400 }
"
:pagination="pagination"
@change="handleTableChange"
@@ -307,7 +310,8 @@
width: 160,
ellipsis: true,
customRender: ({ record, text }: { record: AiCloudFile; text: any }) =>
text || renderDocText(record, ['version', 'versionNumber', 'versionName'])
text ||
renderDocText(record, ['version', 'versionNumber', 'versionName'])
},
{
title: '成文日期',
@@ -352,7 +356,12 @@
width: 220,
ellipsis: true,
customRender: ({ record, text }: { record: AiCloudFile; text: any }) =>
text || renderDocText(record, ['relatedDocuments', 'relatedDoc', 'relatedFiles'])
text ||
renderDocText(record, [
'relatedDocuments',
'relatedDoc',
'relatedFiles'
])
},
{
title: '适用区域',
@@ -382,7 +391,9 @@
];
const currentDocColumns = computed(() => {
return activeSource.value === 'public' ? publicDocColumns : companyDocColumns;
return activeSource.value === 'public'
? publicDocColumns
: companyDocColumns;
});
// 计算树形数据
@@ -406,12 +417,7 @@
return buildTree(0);
});
const selectionStateMap = ref<
Record<
string,
FileSelectionStatePayload
>
>({});
const selectionStateMap = ref<Record<string, FileSelectionStatePayload>>({});
const selectedDocList = ref<string[]>([]);
const selectedFileList = ref<string[]>([]);
const selectedFileKeys = ref<SelectionKey[]>([]);
@@ -491,7 +497,8 @@
sourceState.fileKeys = [...getAllSelectedFileKeys(sourceState)];
sourceState.currentDirKey =
selectedKeys.value[0] !== undefined ? selectedKeys.value[0] : undefined;
selectionStateMap.value[getSelectionStorageKey()] = getMergedSelectionPayload();
selectionStateMap.value[getSelectionStorageKey()] =
getMergedSelectionPayload();
};
const restoreSelectionState = () => {
@@ -528,9 +535,13 @@
const loadAllCloudDocs = async () => {
try {
const params = activeSource.value === 'public'
const params =
activeSource.value === 'public'
? { companyId: 0 }
: { companyId: props.currentCompanyId, projectId: props.currentProjectId };
: {
companyId: props.currentCompanyId,
projectId: props.currentProjectId
};
const result = await listAiCloudDoc(params);
allDirs.value = result || [];
@@ -541,10 +552,14 @@
sourceState.dirFileSelections || {}
).find((key) => {
const dirId = Number(key);
return sourceState.dirFileSelections[key]?.length > 0 && availableIds.has(dirId);
return (
sourceState.dirFileSelections[key]?.length > 0 &&
availableIds.has(dirId)
);
});
const preferredSelectedKey =
(selectedKeys.value[0] && availableIds.has(selectedKeys.value[0] as number)
(selectedKeys.value[0] &&
availableIds.has(selectedKeys.value[0] as number)
? selectedKeys.value[0]
: undefined) ||
(sourceState.currentDirKey !== undefined &&
@@ -640,7 +655,9 @@
addedKeys.map((key) => getDirFileKeys(key))
);
addedKeys.forEach((key, index) => {
sourceState.dirFileSelections[String(key)] = [...addedFileGroups[index]];
sourceState.dirFileSelections[String(key)] = [
...addedFileGroups[index]
];
});
removedKeys.forEach((key) => {
delete sourceState.dirFileSelections[String(key)];
@@ -679,9 +696,7 @@
};
// 文件选择变化
const onFileSelectionChange = (
selectedRowKeys: SelectionKey[]
) => {
const onFileSelectionChange = (selectedRowKeys: SelectionKey[]) => {
const currentDirKey = getCurrentDirKey();
if (!currentDirKey) return;
@@ -689,9 +704,7 @@
sourceState.dirFileSelections[currentDirKey] = [...selectedRowKeys];
sourceState.fileKeys = getAllSelectedFileKeys(sourceState);
selectedFileKeys.value = selectedRowKeys;
selectedFileList.value = sourceState.fileKeys.map((key) =>
key.toString()
);
selectedFileList.value = sourceState.fileKeys.map((key) => key.toString());
saveSelectionState();
};
@@ -766,5 +779,4 @@
};
defineExpose({ open });
</script>