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 0000000..3b54fb7 Binary files /dev/null and b/web/src/assets/MenuIcon/xia.png differ diff --git a/web/src/assets/MenuIcon/xia1.png b/web/src/assets/MenuIcon/xia1.png new file mode 100644 index 0000000..f3def11 Binary files /dev/null and b/web/src/assets/MenuIcon/xia1.png differ 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; // 注意这里我们传入了一个空数组作为初始路径 } + @@ -294,36 +496,43 @@ function findPathById(array:any, targetId:any) { - - - + + + 搜索 - 上传 - 删除 - 下载 + 上传 + 删除 + 下载 - - - - - - + + + + + + + - - + style="display: flex;display: -webkit-flex;justify-content: space-between;-webkit-justify-content: space-between; "> + + + @@ -348,17 +557,32 @@ function findPathById(array:any, targetId:any) { - - - 上传文件 - 上传文件夹 - - + + + 上传文件 + 上传文件夹 + + + + + + + + + + + + + + 确定 + 取消 + + + - - @@ -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 }} - edittree(data)"> + edittree(data)"> - remove(data)"> + remove(data)">