From 7c7fd001ddea452f51b390905c6ad6076c75718c Mon Sep 17 00:00:00 2001 From: wangxk Date: Fri, 23 May 2025 13:39:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=BA=E9=99=B7bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/package.json | 1 + web/src/api/datamanagement/index.ts | 18 ++ web/src/api/document/index.ts | 24 ++ web/src/components/file/file/useFileUpload.js | 2 +- web/src/views/special/document/index.vue | 215 +++++++++++------- web/src/views/special/project/index.vue | 34 ++- .../views/testdata/datamanagement/index.vue | 135 +++++++---- .../testdata/fileSynchronization/index.vue | 16 +- web/src/views/testdata/testtask/index.vue | 155 +++++++++---- 9 files changed, 400 insertions(+), 200 deletions(-) diff --git a/web/package.json b/web/package.json index 6697950..7ac22d5 100644 --- a/web/package.json +++ b/web/package.json @@ -50,6 +50,7 @@ "jsencrypt": "^3.3.2", "jspdf": "^2.5.1", "leaflet": "^1.9.4", + "mammoth": "^1.9.0", "marked": "^4.0.17", "minimatch": "^5.1.0", "monaco-editor": "^0.36.1", diff --git a/web/src/api/datamanagement/index.ts b/web/src/api/datamanagement/index.ts index f3186be..8e1451b 100644 --- a/web/src/api/datamanagement/index.ts +++ b/web/src/api/datamanagement/index.ts @@ -201,5 +201,23 @@ export function batchModify(params:any){ method:'post', data:params, + }) +} +//试验数据扫描接口通过试验任务ID +export function testDataScanById(params:any){ + return request ({ + url:'/experimentalData/ts-nodes/testDataScanById', + method:'post', + params:params, + + }) +} +//获取异步信息 +export function obtaintestData(params:any){ + return request ({ + url:'/experimentalData/ts-nodes/obtaintestData', + method:'post', + params:params, + }) } \ No newline at end of file diff --git a/web/src/api/document/index.ts b/web/src/api/document/index.ts index 61e789e..974c101 100644 --- a/web/src/api/document/index.ts +++ b/web/src/api/document/index.ts @@ -77,4 +77,28 @@ export function deleteFilesByIds(queryParams:any) { method: 'post', params:queryParams }); +} +//专项文档管理扫描接口通过所属项目ID +export function specialScanById(queryParams:any) { + return request({ + url: '/specialDocument/sd_nodes/specialScanById', + method: 'post', + params:queryParams + }); +} +//专项文档管理文档上传接口通过所属项目ID +export function documentUploadById(queryParams:any) { + return request({ + url: '/specialDocument/sd_nodes/documentUploadById', + method: 'post', + params:queryParams + }); +} +//获取异步信息 +export function obtainInformationAsync(queryParams:any) { + return request({ + url: '/specialDocument/sd_nodes/obtainInformationAsync', + method: 'post', + params:queryParams + }); } \ No newline at end of file diff --git a/web/src/components/file/file/useFileUpload.js b/web/src/components/file/file/useFileUpload.js index b002885..5f0fa7a 100644 --- a/web/src/components/file/file/useFileUpload.js +++ b/web/src/components/file/file/useFileUpload.js @@ -444,7 +444,7 @@ export default function useFileUpload() { let s3UploadType = common.storageType.s3Type; let onedriveUploadType = common.storageType.micrsoftType; let storagea - if( param.storageKey === 'local'){ + if( param.storageKey === 'local'||param.storageKey === 'sdlocal' ){ storagea = 'local' }else if( param.storageKey === 'minio'){ storagea = 'minio' diff --git a/web/src/views/special/document/index.vue b/web/src/views/special/document/index.vue index 95d496c..d097b4c 100644 --- a/web/src/views/special/document/index.vue +++ b/web/src/views/special/document/index.vue @@ -12,7 +12,7 @@ import { Search } from '@element-plus/icons-vue' import Page from '@/components/Pagination/page.vue'; import AudioPlayer from '@/components/file/preview/AudioPlayer.vue'; import { batchDeleteReq } from "@/api/file-operator"; -import { projectList, getNodesTree, addNodes, updateNodes, deleteNodesById, getFilesPage, addFiles, updateFiles, deleteFilesById, deleteFilesByIds } from "@/api/document"; +import { projectList, documentUploadById,obtainInformationAsync,getNodesTree, addNodes, updateNodes, deleteNodesById, getFilesPage, addFiles, updateFiles, deleteFilesById, deleteFilesByIds, specialScanById } from "@/api/document"; import ZUpload from '@/components/file/ZUpload.vue' import useFileUpload from "@/components/file/file/useFileUpload"; import useHeaderStorageList from "@/components/header/useHeaderStorageList"; @@ -40,6 +40,7 @@ const { currentStorageKey } = useHeaderStorageList(); const { openRow } = useFileData(); onMounted(() => { getProject() + }); //拖动条 const vMove = { @@ -62,12 +63,15 @@ const vMove = { //左侧树的选择框 const projectId = ref() const projectArr = ref([]) +const projectName = ref('') //获取所有项目 function getProject() { projectList().then((res: any) => { projectArr.value = res.data projectId.value = projectArr.value[0].id - gettreedata() + projectName.value = projectArr.value[0].projectName + // gettreedata() + tonstatus() }) } //左侧树配置 @@ -81,14 +85,26 @@ const treeForm = ref({ projectId: '', nodeName: '', }) +//扫庙 +const buttonmsg = ref('扫描项目文档') +function scan() { + console.log('pathid.value') + specialScanById({ id: projectId.value }).then((res: any) => { + if (res.code == 0) { + tonstatus() + } + }) +} //获取树数据 const treeRef = ref(); +const filePath = ref('') function gettreedata() { treeloading.value = true treeForm.value.projectId = projectId.value getNodesTree(treeForm.value).then((res: any) => { treedata.value = res.data treeloading.value = false + filePath.value = res.data[0].path + res.data[0].nodeName +'/' if (treedata.value[0]) { pathid.value = treedata.value[0].id nextTick(() => { @@ -104,6 +120,7 @@ function gettreedata() { const pathid = ref() function handleNodeClick(data: any, node: any) { pathid.value = data.id + filePath.value = data.path + data.nodeName +'/' getdata() } //子项目配置 @@ -136,10 +153,13 @@ function addSubItem(row: any) { nodeName: "",//节点名称 } projectForme.value.projectId = projectId.value + if (row.nodeType == '00') { projectForme.value.parentId = '00' + projectForme.value.path = '/'+projectName.value+'/' } else { projectForme.value.parentId = row.id + projectForme.value.path = filePath.value } if (row.nodeType == '00') { title.value = "添加子项目" @@ -229,7 +249,7 @@ function delSubItem(row: any) { .then(() => { treeloading.value = true loading.value = true - deleteNodesById({ id: row.id }).then((res: any) => { + deleteNodesById({ id: row.id,path:row.path }).then((res: any) => { if (res.code == 0) { gettreedata() ElMessage({ @@ -295,8 +315,8 @@ const fileObj: any = ref({ const upfile = ref(false) function openFile() { title.value = "上传文件" - localStorage.setItem('filepath', findPathById(treedata.value, pathid.value)); - localStorage.setItem('storageKey', JSON.stringify(['minio'])); + localStorage.setItem('filepath', filePath.value); + localStorage.setItem('storageKey', JSON.stringify(['sdlocal'])); upfile.value = true fileObj.value = { projectId: '', //所属项目ID @@ -309,6 +329,23 @@ function openFile() { } judge.value = true } +//上传文件并扫描 +function upfileZip() { + title.value = "上传项目包并扫描" + localStorage.setItem('filepath', '/temporary'); + localStorage.setItem('storageKey', JSON.stringify(['sdlocal'])); + upfile.value = true + fileObj.value = { + projectId: '', //所属项目ID + nodeId: '', //节点ID + fileName: '', //文件名称 + filePath: '', //文件对象存储路径 + keywords: '', //关键字 + description: '', //文件描述 + fileSize: '', //M + } + judge.value = false +} //修改文件 const judge = ref(false) function editfile(row: any, item: any) { @@ -346,11 +383,11 @@ function delfileOne(row: any) { { name: row.name, password: "", - path: findPathById(treedata.value, pathid.value), + path: filePath.value, type: "FILE" } ], - storageKey: "minio" + storageKey: "sdlocal" } batchDeleteReq(JSON.stringify(parmas)).then((res) => { }) @@ -360,52 +397,62 @@ function bytesToMB(bytes: any) { return bytes / Math.pow(1024, 2); } //上传确定 -function submitfile() { - // console.log( ) - if (fileObj.value.id) { - updateFiles(fileObj.value).then((res: any) => { - if (res.code == 0) { - closeDialog() - ElMessage.success('修改成功') - getdata() +function submitfile() { + if (localStorage.getItem('filepath') == '/temporary'){ + documentUploadById({fileName:JSON.parse(localStorage.getItem('fileArr'))[0].name,id:projectId.value}).then((res:any)=>{ + if(res.code == 0){ + tonstatus() upfile.value = false } }) - } else { - let fileArr: any - if (localStorage.getItem('fileArr')) { - fileArr = JSON.parse(localStorage.getItem('fileArr')) + }else { + if (fileObj.value.id) { + updateFiles(fileObj.value).then((res: any) => { + if (res.code == 0) { + closeDialog() + ElMessage.success('修改成功') + getdata() + upfile.value = false + } + }) } else { - ElMessage.warning('请先选择文件') - return - } + let fileArr: any + if (localStorage.getItem('fileArr')) { + fileArr = JSON.parse(localStorage.getItem('fileArr')) + } else { + ElMessage.warning('请先选择文件') + return + } - let fileName = [] - let fileSize = [] - if (fileArr.length > 0) { - fileArr.forEach((item: any) => { - fileName.push(item.name) - fileSize.push(bytesToMB(item.size)) + let fileName = [] + let fileSize = [] + if (fileArr.length > 0) { + fileArr.forEach((item: any) => { + fileName.push(item.name) + fileSize.push(bytesToMB(item.size)) + }) + } + fileObj.value.projectId = projectId.value + fileObj.value.nodeId = pathid.value + fileObj.value.filePath = filePath.value + fileObj.value.fileName = fileName.join(',') + fileObj.value.fileSize = fileSize.join(',') + addFiles(fileObj.value).then((res: any) => { + if (res.code == 0) { + closeDialog() + ElMessage.success('增加成功') + getdata() + upfile.value = false + localStorage.setItem('fileArr', ''); + } }) } - fileObj.value.projectId = projectId.value - fileObj.value.nodeId = pathid.value - fileObj.value.filePath = findPathById(treedata.value, pathid.value) - fileObj.value.fileName = fileName.join(',') - fileObj.value.fileSize = fileSize.join(',') - addFiles(fileObj.value).then((res: any) => { - if (res.code == 0) { - closeDialog() - ElMessage.success('增加成功') - getdata() - upfile.value = false - localStorage.setItem('fileArr', ''); - } - }) } + + } //单个删除文件 function delfile(row: any) { @@ -518,32 +565,7 @@ const downloadFileUseIframeMode = (url: any) => { iframe.remove(); }, 5 * 60 * 1000); } -function findPathById(array: any, targetId: any) { - // 辅助函数,用于递归查找路径 - function recursiveSearch(items: any, target: any, path: any) { - for (let item of items) { - // 将当前对象的name添加到路径中 - let newPath = [...path, item.nodeName]; - // 检查当前对象的id是否匹配目标id - if (item.id === target) { - return newPath.join('/'); // 找到匹配项,返回路径字符串 - } - - // 如果没有找到匹配项,继续检查children数组 - if (item.children && item.children.length > 0) { - let result = recursiveSearch(item.children, target, newPath); - if (result) { // 如果在children中找到了匹配项,返回结果 - return result; - } - } - } - return null; // 如果没有找到匹配项,返回null - } - // 从顶层数组开始搜索 - let patharr = recursiveSearch(array, targetId, []) - return '/' + patharr; // 注意这里我们传入了一个空数组作为初始路径 -} // markdown viewer 组件懒加载, 节约首屏打开时间 const VMdPreview = defineAsyncComponent({ loader: () => { @@ -696,6 +718,34 @@ const fileIcon = (row: any) => { // // 通过 keyof 类型保护确保类型安全 // return Object.keys(FILE_ICONS).includes(fileExtension); // }; +const tonloading = ref(false) +const tonloading1 = ref(false) +const buttonmsg1 = ref('上传项目包并扫描') +function tonstatus(){ + //sao + obtainInformationAsync({id:projectId.value,type:'0'}).then((res:any)=>{ + if(res.msg == '1'){ + tonloading.value = false + buttonmsg.value = '扫描项目文档' + }else{ + tonloading.value = true + buttonmsg.value = '处理中...' + } + + }) + //chuan + obtainInformationAsync({id:projectId.value,type:'1'}).then((res:any)=>{ + tonloading1.value + if(res.msg == '1'){ + tonloading1.value = false + buttonmsg1.value = '上传项目包并扫描' + }else{ + tonloading1.value = true + buttonmsg1.value = '处理中...' + } + }) + gettreedata() +} - + + {{ buttonmsg }}
@@ -1646,7 +1681,7 @@ function texexceltClose() { title="修改" style="cursor: pointer;"> - @@ -1659,7 +1694,7 @@ function texexceltClose() { - @@ -1674,7 +1709,7 @@ function texexceltClose() { - 取消
- @@ -1725,7 +1760,7 @@ function texexceltClose() { -
覆盖({{ copyhandArr.length @@ -1751,7 +1786,7 @@ function texexceltClose() { - @@ -1766,7 +1801,7 @@ function texexceltClose() { - @@ -1787,7 +1822,7 @@ function texexceltClose() {