文档管理增删查改

This commit is contained in:
wangxk 2025-02-13 09:10:39 +08:00
parent 33c13838a1
commit 637d6aa67d
6 changed files with 298 additions and 49 deletions

View File

@ -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
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

View File

@ -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];

View File

@ -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];
// idid
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; //
}
</script>
<template>
@ -294,36 +496,43 @@ function findPathById(array:any, targetId:any) {
<section class="silderRight">
<div class="sou_title">
<div class="sou_title_left">
<el-input style="margin-right: 10px ;" v-model="queryParams.name" clearable @change="getdata()"
placeholder="项目编号"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.name" clearable @change="getdata()"
placeholder="项目类型"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.name" clearable @change="getdata()"
placeholder="项目名称"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.fileName" clearable @change="getdata()"
placeholder="文件名称"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.keywords" clearable @change="getdata()"
placeholder="关键字"></el-input>
<el-date-picker v-model="dataarr" type="daterange" @change="getdata()"
style="width: 150%;margin-right: 10px ;" start-placeholder="开始时间" end-placeholder="结束时间"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" range-separator="至" />
<el-button type="primary" @click="getdata()">搜索</el-button>
</div>
<div>
<!-- :disabled="pathid.value" -->
<el-button type="primary" :disabled="!pathid" @click="openFile" >上传</el-button>
<el-button type="primary">删除</el-button>
<el-button type="primary">下载</el-button>
<el-button type="primary" :disabled="!pathid" @click="openFile">上传</el-button>
<el-button type="primary" @click="delprojectArr()" :disabled="tableIdarr.length == 0">删除</el-button>
<el-button type="primary" @click="xiafilemony()" :disabled="tableIdarr.length == 0">下载</el-button>
</div>
</div>
<el-table v-loading="loading" :data="tableData"
<el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"
:header-cell-style="{ background: 'rgb(250 250 250)', height: '50px' }"
style="width: 100%; height: calc(100vh - 275px);margin-bottom: 20px;" border>
<el-table-column type="index" label="序号" width="70" align="center"></el-table-column>
<el-table-column prop="usercode" label="文件名称"></el-table-column>
<el-table-column prop="username" label="关键字"></el-table-column>
<el-table-column prop="requestip" label="上传人"></el-table-column>
<el-table-column prop="requestip" label="上传时间"></el-table-column>
<el-table-column type="selection" width="40" />
<!-- <el-table-column type="index" label="序号" width="70" align="center"></el-table-column> -->
<el-table-column prop="fileName" label="文件名称"></el-table-column>
<el-table-column prop="keywords" label="关键字"></el-table-column>
<el-table-column prop="description" label="文件描述"></el-table-column>
<el-table-column prop="uploader" width="80" label="上传人"></el-table-column>
<el-table-column prop="uploadTime" width="170" label="上传时间"></el-table-column>
<el-table-column fixed="right" label="操作" width="80" align="center">
<template #default="scope">
<span
style="display: flex;display: -webkit-flex;justify-content: space-around;-webkit-justify-content: space-around; ">
<img src="@/assets/MenuIcon/lbcz_xg.png" alt="" title="修改" style="cursor: pointer;">
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" title="删除" style="cursor: pointer;">
style="display: flex;display: -webkit-flex;justify-content: space-between;-webkit-justify-content: space-between; ">
<img src="@/assets/MenuIcon/lbcz_xg.png" alt="" @click="editfile(scope.row)" title="修改"
style="cursor: pointer;">
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" @click="delfile(scope.row)" title="删除"
style="cursor: pointer;">
<img src="@/assets/MenuIcon/xia1.png" alt="" @click="xiafile(scope.row)" title="下载"
style="cursor: pointer;">
</span>
</template>
</el-table-column>
@ -348,17 +557,32 @@ function findPathById(array:any, targetId:any) {
</el-form-item>
</el-form>
</el-dialog>
<div class="upload">
<el-dialog title="上传文件" v-model="upfile" width="15%" :before-close="fileClose" top="30px" draggable
<el-dialog title="上传文件" v-model="upfile" width="35%" :before-close="fileClose" top="30px" draggable
destroy-on-close>
<el-button @click="openUploadDialog" type="primary">上传文件</el-button>
<el-button @click="openUploadFolderDialog" type="primary">上传文件夹</el-button>
<!-- <div style="cursor: pointer;">上传文件</div>
<div style="cursor: pointer;">上传文件夹</div> -->
<ZUpload />
<el-form ref="ruleFormRef" style="max-width: 600px" :model="fileObj" :rules="moderules" label-width="auto"
class="demo-ruleForm" status-icon>
<el-form-item v-if="!fileObj.id" label="文件:" prop="taskCode">
<el-button @click="openUploadDialog" type="primary">上传文件</el-button>
<el-button @click="openUploadFolderDialog" type="primary">上传文件夹</el-button>
<ZUpload />
</el-form-item>
<el-form-item v-else label="文件名称:">
<el-input v-model="fileObj.fileName" />
</el-form-item>
<el-form-item label="关键字:" prop="taskName">
<el-input v-model="fileObj.keywords" />
</el-form-item>
<el-form-item label="描述:">
<el-input v-model="fileObj.description" :rows="2" type="textarea" />
</el-form-item>
<el-form-item>
<div style="width: 100%;display: flex;justify-content: end;">
<el-button type="primary" @click="submitfile">确定</el-button>
<el-button @click="fileClose">取消</el-button>
</div>
</el-form-item>
</el-form>
</el-dialog>
</div>
</div>
</template>
@ -459,9 +683,4 @@ function findPathById(array:any, targetId:any) {
}
}
}
.upload{
:deep(.el-dialog__header) {
text-align: center;
}
}
</style>

View File

@ -383,10 +383,10 @@ const vMove = {
<span class="custom-tree-node">
<span>{{ node.label }}</span>
<span style="font-size: 16px;">
<el-icon v-hasPerm="['update:org']" class="treeediticon" title="修改" @click="() => edittree(data)">
<el-icon class="treeediticon" title="修改" @click="() => edittree(data)">
<EditPen />
</el-icon>
<el-icon v-hasPerm="['del:org']" class="treedelicon" title="删除" @click="() => remove(data)">
<el-icon class="treedelicon" title="删除" @click="() => remove(data)">
<Delete />
</el-icon>
</span>