diff --git a/src/api/doc/index.ts b/src/api/doc/index.ts index df9310a..52932c3 100644 --- a/src/api/doc/index.ts +++ b/src/api/doc/index.ts @@ -99,6 +99,23 @@ export function getMatterList( uid:string,data?: matterPage): AxiosPromise { +export function getRecyclingList( uid:string,data?: matterPage): AxiosPromise { + return request({ + url: '/hxpan/api/matter/recycling', + method: 'post', + headers: { + 'Identifier':uid, + 'Content-Type': 'application/x-www-form-urlencoded' + }, + data: data + }); +} + /** * 新建目录 */ diff --git a/src/views/doc/manage.vue b/src/views/doc/manage.vue index 8825cbc..f489804 100644 --- a/src/views/doc/manage.vue +++ b/src/views/doc/manage.vue @@ -7,7 +7,8 @@ import { getExpirTime, getFileIcon, readableSize,fileType} from "./tools" import sharePermission from './sharePermission.vue'; import { useUserStore } from "@/store/modules/user"; -import { getMatterList,postCreateDir,postDelMatter,postCreateShare,postMatterRename,postDelMatBatch,getMySpaces,doCreateSpace} from "@/api/doc/index" +import { getMatterList,postCreateDir,postDelMatter,postCreateShare,postMatterRename, + postDelMatBatch,getMySpaces,doCreateSpace,getRecyclingList} from "@/api/doc/index" import { matterPage,matterInfo,respCreateShare,matterTree, doFileUpload,matterPermit} from "@/api/doc/type" import { h } from 'vue' import router from "@/router"; @@ -22,7 +23,7 @@ import preview from './preview.vue'; import space from './space.vue'; import spacePermission from './spacePermission.vue'; import SvgIcon from "@/components/SvgIcon/index.vue"; -import {doDelSpace,doAccessManage} from "@/api/doc/space" +import {doDelSpace,doAccessManage,doCreateAiagent} from "@/api/doc/space" import Space from "./space.vue"; //TODO: add file icons done! @@ -69,6 +70,7 @@ const spaceTreeRef = ref(); //space的树树组件的引用 let spaceNodeUid="" //用来判断树组件的展开和关闭,如何只是展开和关闭的点击事件不在刷新,通currentNode的作用 const modListOrGrild=ref(true) +const modRecycling=ref(false) const Departs = computed(() => { return `${'p0'+userStore.userInfoCont.userId},${userStore.userInfoCont.company},${userStore.userInfoCont.department},${userStore.userInfoCont.organization}` @@ -182,8 +184,12 @@ function showShareMessage(row:respCreateShare){ } //---------------------------------------- + +function onDelNodeMatter(row:matterInfo){ + onDelMatter(row,true) +} //删除 -function onDelMatter(row:matterInfo){ +function onDelMatter(row:matterInfo,dir?:boolean){ if (row.uuid){ ElMessageBox.confirm(`确认删除( ${row.name}) ?删除后不可恢复!取消则放弃删除操作。`, "警告", { confirmButtonText: "确定", @@ -193,11 +199,12 @@ function onDelMatter(row:matterInfo){ postDelMatter(uid,{ "uuid":row.uuid }).then(()=>{ - if (row.dir) { - currentNode.value.uuid = row.puuid ?? "" - currentNode.value.name = row.path ? row.path.replace(`/${row.name}`,'').match(/[^/]+$/g)?.pop() :"上级目录" - - treeRef.value.remove(row.uuid) + if (row.dir || dir) { + const node = treeRef.value.getNode(row.uuid) + if (node) { + treeRef.value.remove(node) + } + currentNode.value.uuid = row.puuid ?? "root" } onLoadMatterList() }) @@ -282,6 +289,41 @@ function onSearchFile(name?:string){ }) } +//获取回收站文件 +function showRecycling(){ + modRecycling.value=true + currentNode.value={} //清空当前节点 + if(!PRIVATESPACE.value) { //共享空间模式要切换到个人空间 + PRIVATESPACE.value=true + } + + getRecyclingList(uid,{}).then((resp)=>{ + paginInfo.value={total:1,page:0} + matterList.value=resp.data + }) +} +//恢复删除文件 +function restoreMatter(row:matterInfo){ + if (row.uuid){ + ElMessageBox.confirm(`确认要恢复( ${row.name}) ?`, "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + }).then(()=>{ + postDelMatter(uid,{ + "uuid":row.uuid, + "restore":"true", + }).then(()=>{ + ElMessage({ + message: '已成功恢复文件,请在个人空间查看。', + type: 'success', + plain: true, + }) + }) + }) + } +} + //加载目录文件列表 function onLoadMatterList(){ let _page: matterPage = { @@ -349,45 +391,54 @@ function onDBclickMatter(row:matterInfo){ //树节点展开 function onNodeExpand(node: TreeNode, resolve: (data: matterTree[]) => void, reject: () => void) { + modRecycling.value=false + let cuuid ="root" if ((node.data as matterTree).uuid) { - const cuuid = (node.data as matterTree).uuid + cuuid= (node.data as matterTree).uuid currentNode.value = node.data - - let _page: matterPage = { - page: 0, - pageSize: 50, - orderCreateTime: "DESC", - orderDir: "DESC", - puuid: cuuid, - deleted: false - }; - - getMatterList(uid, _page).then((resp) => { - paginInfo.value = { total: resp.data.totalPages, page: resp.data.page } - matterList.value = resp.data.data - // .filter((item)=>{ - // return !item.dir - // }) - let node_data = resp.data.data.filter((item) => { - return item.dir - }).map((val) => { - const copy = structuredClone(val) - copy.dir = !copy.dir - return copy - }) - - resolve(node_data) - }).catch(() => reject()) } + + let _page: matterPage = { + page: 0, + pageSize: 50, + orderCreateTime: "DESC", + orderDir: "DESC", + puuid: cuuid, + deleted: false + }; + + getMatterList(uid, _page).then((resp) => { + paginInfo.value = { total: resp.data.totalPages, page: resp.data.page } + matterList.value = resp.data.data + // .filter((item)=>{ + // return !item.dir + // }) + let node_data = resp.data.data.filter((item) => { + return item.dir + }).map((val) => { + const copy = structuredClone(val) + copy.dir = !copy.dir + return copy + }) + + resolve(node_data) + }).catch(() => reject()) + } //树节点单击 function onNodeClick(data:matterTree,node:TreeNode,self:any,env:any){ + modRecycling.value=false if(!PRIVATESPACE.value) { PRIVATESPACE.value=true } - if (currentNode.value.uuid === data.uuid) return; - const cuuid = data.uuid - currentNode.value = data + if (data){ + if (currentNode.value.uuid === data.uuid) return; + //const cuuid = data.uuid + currentNode.value = data + }else{ + currentNode.value={uuid:"root"} + } + onLoadMatterList() return let _page: matterPage = { @@ -528,7 +579,7 @@ async function handleFolderFile(option:File){ const _path = option.webkitRelativePath const _dir=_path.replace(/\/[^/]+\w+$/,"") //只保留文件夹目录,[^/]就是用来限制,只能是最后一个目录 const node = matterList.value.filter((item)=>{ - return item.dir && item.path?.endsWith(_dir) + return item.dir && _dir.endsWith(item.name!) }) let puuid="" @@ -536,10 +587,11 @@ async function handleFolderFile(option:File){ if(node.length==0){ const subs= await doCreateMultyDir(_dir,currentNode.value.uuid) matterList.value.push(...subs) //这里如果子文件夹多的时候,可能会造成第一级路径多次创建,只是造成资源浪费,问题不大 - + const newnodes=matterList.value.filter((item)=>{ - return item.dir && item.path?.endsWith(_dir) + return item.dir && _dir.endsWith(item.name!) }) + if(newnodes.length>0){ puuid=newnodes[0].uuid }else{ @@ -567,6 +619,13 @@ async function doCreateMultyDir(path:string,uuid:string){ const list=[]; const dirs=path.split("/") for(let i=0;i{ + return item.dir && dirs[i].endsWith(item.name!) + }) + if(node.length>0) { + uuid = node[0].uuid + continue; + } await postCreateDir(uid,{ userUuid:uid, puuid:uuid, @@ -580,7 +639,7 @@ async function doCreateMultyDir(path:string,uuid:string){ } function handleMouseEnter(row:any){ - currentHoverRow.value=row.name + currentHoverRow.value=row.uuid } //上传成功 function handleSingleUpload(response:any){ @@ -626,6 +685,7 @@ function onNewSpace(){ function onSpaceNodeClick(data:matterTree,node:TreeNode,self:any,env:any){ if(PRIVATESPACE.value) { //如果打开了个人空间,突然点击共享空间,要及时切换状态 PRIVATESPACE.value=false + modRecycling.value=false } //如果在单个组件上重复点击,不在刷新请求 if(spaceNodeUid==data.uuid) return; @@ -719,15 +779,35 @@ function onSpacePManage(row:matterInfo){ }) } +//处理空间智能体创建 +function onAiAgent(row:matterInfo){ + if(row.agent){ + alert("当前目录已经是智能体目录") + return + } + + ElMessageBox.confirm(`确认创建智能体( ${row.name}) ?`, "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + }).then(()=>{ + doCreateAiagent(uid,{ + space:SpaceID.value.uuid, + matter:row.uuid + }).then(()=>{ + router.replace({ query: { t: Date.now() } }) + }) + }) +} //------------------------------------------------------ //http://172.20.2.87:6010/api/alien/preview/5a10aaf6-396e-4d9a-7e87-3c5c8029d4db/123.png?ir=fill_100_100 //渲染完页面再执行 onMounted(() => { - treeRef.value.append( - {name:'个人空间',uuid:'root',dir:false}, - currentNode.value.uuid - ) + // treeRef.value.append( + // {name:'个人空间',uuid:'root',dir:false}, + // currentNode.value.uuid + // ) //加载我的空间列表 getMySpaces(uid,{roles:Departs.value}).then((resp)=>{ resp.data.forEach((item)=>{ @@ -753,7 +833,10 @@ const handleSelectionChange = (val:matterInfo[]) => { +
+ 回收站 +
- + 回收站 + 根目录/ @@ -815,7 +915,7 @@ const handleSelectionChange = (val:matterInfo[]) => { - +
{ :row-style ="() => ({ lineHeight: '36px' })" @selection-change="handleSelectionChange" @cell-mouse-enter="handleMouseEnter"> - + @@ -711,7 +693,7 @@ function isOwner(){
  • 下载
  • 编辑
  • -
  • 重命名
  • +
  • 重命名
  • 删除
  • @@ -744,7 +726,7 @@ function isOwner(){ } .search{ margin-left: auto; - margin-right: 20px; + margin-right: -4px; display:inherit; }