From 637d6aa67d4dd148098f646327a346b0f2b2eb2a Mon Sep 17 00:00:00 2001 From: wangxk Date: Thu, 13 Feb 2025 09:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E7=AE=A1=E7=90=86=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E6=9F=A5=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/api/document/index.ts | 32 ++ web/src/assets/MenuIcon/xia.png | Bin 0 -> 317 bytes web/src/assets/MenuIcon/xia1.png | Bin 0 -> 280 bytes web/src/components/file/file/useFileUpload.js | 10 +- web/src/views/special/document/index.vue | 301 +++++++++++++++--- web/src/views/system/dept/index.vue | 4 +- 6 files changed, 298 insertions(+), 49 deletions(-) create mode 100644 web/src/assets/MenuIcon/xia.png create mode 100644 web/src/assets/MenuIcon/xia1.png diff --git a/web/src/api/document/index.ts b/web/src/api/document/index.ts index 3698f7a..61e789e 100644 --- a/web/src/api/document/index.ts +++ b/web/src/api/document/index.ts @@ -45,4 +45,36 @@ export function getFilesPage(queryParams:any) { method: 'get', params:queryParams }); +} +//新增专项文档管理文档内容 +export function addFiles(queryParams:any) { + return request({ + url: '/specialDocument/sd_files/addFiles', + method: 'post', + data:queryParams + }); +} +//修改专项文档管理文档内容 +export function updateFiles(queryParams:any) { + return request({ + url: '/specialDocument/sd_files/updateFiles', + method: 'post', + data:queryParams + }); +} +//根据ID删除专项文档管理文档内容 +export function deleteFilesById(queryParams:any) { + return request({ + url: '/specialDocument/sd_files/deleteFilesById', + method: 'post', + params:queryParams + }); +} +//批量删除专项文档管理文档内容 +export function deleteFilesByIds(queryParams:any) { + return request({ + url: '/specialDocument/sd_files/deleteFilesByIds', + method: 'post', + params:queryParams + }); } \ No newline at end of file diff --git a/web/src/assets/MenuIcon/xia.png b/web/src/assets/MenuIcon/xia.png new file mode 100644 index 0000000000000000000000000000000000000000..3b54fb76c4d8569a6fdaef3d3084b969add74b3b GIT binary patch literal 317 zcmV-D0mA-?P)Px#_en%SR5(x7k}*!hKoCXWtnAQp0b=NBD5#JUi55|Xjv5JyY)$|-h*JcKnlhq5 zv=pYK;0R&i6iC^~1MA3^iEJsNW1Ero|G$6!>Jvj^R|0d7e=Xj5cCM-#M|WcmvH6saS1vFnSl<%RDo?^ALPp0 z?rk~Y!Z8}VUZ~4al6BJefg<<77VrfaLC+UvC* z8xeD@O22Sy`s{e}c@Qu^+<7b8YZd;y^kQ08DKGAGnjAOY+N#xh=uOq%kyLp*O5@R$ P00000NkvXXu0mjfy_1Vn literal 0 HcmV?d00001 diff --git a/web/src/assets/MenuIcon/xia1.png b/web/src/assets/MenuIcon/xia1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3def114ee2ddd13c3c78ab71643d17cfb33570a GIT binary patch literal 280 zcmV+z0q6dSP)Px#(n&-?R5(xVk|7SlKoCX$w5K5?RTvD}CRhvt&k}BdKyV8}@dykSvKs^rQvs); zLuRvSN@+JFBq+v=nEzj9_YWaZYQswz+ZnmuR1^ecY#cyS`Um{-4X=02?D?ashyMk3J@}vvz84m0Qw&R efUDKi6YUcrZe|hHS1Wh`0000 literal 0 HcmV?d00001 diff --git a/web/src/components/file/file/useFileUpload.js b/web/src/components/file/file/useFileUpload.js index 5d2e526..5e04a78 100644 --- a/web/src/components/file/file/useFileUpload.js +++ b/web/src/components/file/file/useFileUpload.js @@ -52,7 +52,6 @@ const uploadFileTypeSortMap = { }; export default function useFileUpload() { - let { storageKey, currentPath } = useRouterData(); const maxFileUploads = storageConfigStore.globalConfig.maxFileUploads; @@ -385,14 +384,14 @@ export default function useFileUpload() { } }) } - let param = { storageKey: 'minio', path: localStorage.getItem('filepath'), name: file.name, size: file.size } - + fileArr.value.push(param) + localStorage.setItem('fileArr',JSON.stringify(fileArr.value) ); console.log('当前上传信息:', param, ', 当前同时上传文件数:',uploadProgressInfoStatistics.value.totalUploading, '限制同时上传文件数:', maxFileUploads); if (uploadProgressInfoStatistics.value.totalUploading >= maxFileUploads) { console.log(`上传文件数超出 ${maxFileUploads}, 等待上传`); @@ -439,7 +438,6 @@ export default function useFileUpload() { let proxyUploadType = common.storageType.proxyType; let s3UploadType = common.storageType.s3Type; let onedriveUploadType = common.storageType.micrsoftType; - if (proxyUploadType.includes( param.storageKey)) { fileProxyUpload(file, res.data, fileIndex); } else if (s3UploadType.includes( param.storageKey)) { @@ -453,7 +451,6 @@ export default function useFileUpload() { baseOnUploadError(fileIndex, err) }); } - // 服务器代理上传 const fileProxyUpload = (file, uploadUrl, fileIndex) => { let formData = new FormData(); @@ -720,8 +717,9 @@ export default function useFileUpload() { cancelTokenSourceMap.delete(fileIndex); } } - + const fileArr = ref([]) const clearALlFinishedUploadFile = () => { + fileArr.value.length = 0 let deleteCount = 0; for (let i = uploadingFileList.length - 1; i >= 0; i--) { let item = uploadingFileList[i]; diff --git a/web/src/views/special/document/index.vue b/web/src/views/special/document/index.vue index cdbc659..dcf34f9 100644 --- a/web/src/views/special/document/index.vue +++ b/web/src/views/special/document/index.vue @@ -9,7 +9,7 @@ import { ref, onMounted, nextTick } from "vue"; import { useAppStore } from '@/store/modules/app'; import { ElMessageBox, ElMessage } from "element-plus"; import Page from '@/components/Pagination/page.vue'; -import { projectList, getNodesTree, addNodes, updateNodes, deleteNodesById,getFilesPage } from "@/api/document"; +import { projectList, getNodesTree, addNodes, updateNodes, deleteNodesById, getFilesPage, addFiles, updateFiles, deleteFilesById, deleteFilesByIds } from "@/api/document"; import ZUpload from '@/components/file/ZUpload.vue' import useFileUpload from "@/components/file/file/useFileUpload"; import useHeaderStorageList from "@/components/header/useHeaderStorageList"; @@ -70,6 +70,7 @@ function gettreedata() { const pathid = ref() function handleNodeClick(data: any, node: any) { pathid.value = data.id + getdata() } //子项目配置 const frame = ref(false) @@ -204,8 +205,14 @@ function delSubItem(row: any) { const queryParams: any = ref({ current: 1, size: 20, - name: '' + fileName: '', + startDate: '', + endDate: '', + keywords: '', + nodeId: '',//节点ID + projectId: '',//项目Id }); +const dataarr = ref([]) //定义表格数据 const tableData: any = ref([]); const total = ref(0); @@ -213,29 +220,223 @@ const total = ref(0); const loading = ref(false) //获取表格数据 function getdata() { - + loading.value = true + console.log(dataarr.value) + if (dataarr.value && dataarr.value.length > 0) { + queryParams.value.startDate = dataarr.value[0] + queryParams.value.endDate = dataarr.value[1] + } else { + queryParams.value.startDate = '' + queryParams.value.endDate = '' + } + queryParams.value.nodeId = pathid.value + queryParams.value.projectId = projectId.value + getFilesPage(queryParams.value).then((res: any) => { + queryParams.value.current = res.data.current + queryParams.value.size = res.data.size + total.value = res.data.total + loading.value = false + tableData.value = res.data.records + }) } +//新增文件对象 +const fileObj: any = ref({ + projectId: '', //所属项目ID + nodeId: '', //节点ID + fileName: '', //文件名称 + filePath: '', //文件对象存储路径 + keywords: '', //关键字 + description: '', //文件描述 + fileSize: '', //M +}) //上传组件 const upfile = ref(false) function openFile() { - localStorage.setItem('filepath', findPathById(treedata.value,pathid.value)); + localStorage.setItem('filepath', findPathById(treedata.value, pathid.value)); upfile.value = true + fileObj.value = { + projectId: '', //所属项目ID + nodeId: '', //节点ID + fileName: '', //文件名称 + filePath: '', //文件对象存储路径 + keywords: '', //关键字 + description: '', //文件描述 + fileSize: '', //M + } +} +//修改文件 +function editfile(row: any) { + upfile.value = true + fileObj.value = JSON.parse(JSON.stringify(row)) } function fileClose() { upfile.value = false } -function findPathById(array:any, targetId:any) { +//字节转mb +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) { + ElMessage.success('修改成功') + getdata() + upfile.value = false + } + }) + } else { + let fileArr = JSON.parse(localStorage.getItem('fileArr')) + 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 = 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) { + ElMessage.success('增加成功') + getdata() + upfile.value = false + } + }) + } + + +} +//单个删除文件 +function delfile(row: any) { + ElMessageBox.confirm( + '您确定要删除该文件吗?', + '警告', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + .then(() => { + deleteFilesById({ id: row.id }).then((res: any) => { + if (res.code == 0) { + getdata() + ElMessage({ + type: 'success', + message: '删除成功', + }) + } + + }) + + }) +} +//多个删除文件 +//表格多选 +const tableIdarr = ref([]) +function handleSelectionChange(val: any) { + tableIdarr.value = val +} +//多选删除 +function delprojectArr() { + const ids = [] + tableIdarr.value.forEach((item: any) => { + ids.push(item.id) + }) + ElMessageBox.confirm( + '您确定要删除这些项目吗?', + '警告', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + .then(() => { + deleteFilesByIds({ ids: ids.join(',') }).then((res: any) => { + if (res.code == 0) { + ElMessage({ + type: 'success', + message: '删除成功', + }) + getdata() + } + + }) + + }) +} +//下载 +function xiafile(row: any) { + ElMessageBox.confirm( + '您确定要下载该文件吗?', + '警告', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + .then(() => { + window.open(row.url); + }) + + +} +//多选下载 +function xiafilemony() { + ElMessageBox.confirm( + '您确定要下载这些项目吗?', + '警告', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + .then(() => { + tableIdarr.value.forEach((item: any) => { + if(item.url){ + downloadFileUseIframeMode(item.url); + } + }) + }) +} + /** + * 使用 iframe 模式下载文件 + * + * @param url 下载文件 url + */ + const downloadFileUseIframeMode = (url:any) => { + const iframe:any = document.createElement("iframe"); + iframe.style.display = "none"; // 防止影响页面 + iframe.style.height = 0; // 防止影响页面 + iframe.src = url; + document.body.appendChild(iframe); + setTimeout(()=>{ + iframe.remove(); + }, 5 * 60 * 1000); + } +function findPathById(array: any, targetId: any) { // 辅助函数,用于递归查找路径 - function recursiveSearch(items:any, target:any, path: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); @@ -248,8 +449,9 @@ function findPathById(array:any, targetId:any) { } // 从顶层数组开始搜索 let patharr = recursiveSearch(array, targetId, []) - return '/'+patharr; // 注意这里我们传入了一个空数组作为初始路径 + return '/' + patharr; // 注意这里我们传入了一个空数组作为初始路径 } + @@ -459,9 +683,4 @@ function findPathById(array:any, targetId:any) { } } } -.upload{ - :deep(.el-dialog__header) { - text-align: center; - } -} diff --git a/web/src/views/system/dept/index.vue b/web/src/views/system/dept/index.vue index a10061b..a816c2d 100644 --- a/web/src/views/system/dept/index.vue +++ b/web/src/views/system/dept/index.vue @@ -383,10 +383,10 @@ const vMove = { {{ node.label }} - + - +