Просмотр исходного кода

宫格视图的展示和bug修改

“yueshang” 2 лет назад
Родитель
Сommit
ad41b3577b

+ 10 - 1
src/api/document/document.js

@@ -29,6 +29,14 @@ function addDocument(data) {
         data,
     })
 }
+// 修改文件夹
+function editFolerDocument(data) {
+    return request({
+        url: `/biz/dir`,
+        method: "put",
+        data,
+    })
+}
 // 修改
 function editDocument(data) {
     return request({
@@ -57,5 +65,6 @@ export default {
     editDocument,
     getTop,
     fileTree,
-    getALLdocumentByType
+    getALLdocumentByType,
+    editFolerDocument
 }

+ 39 - 3
src/layout/indexCommon.vue

@@ -629,22 +629,57 @@ const filePaneClick = (item) => {
 };
 // 创建文件的标签
 const addFileTab = (data, bool) => {
-  // console.log("fileTabdata", data);
-  console.log();
+  // console.log("addFileTab", data);
   const thisData = JSON.parse(JSON.stringify(toRaw(data)));
   const oldIFrameData = iFrameData.value;
   const canAdd = oldIFrameData.some((par) => par.src == ""); //是否达到上限
   if (!canAdd) return ElMessage.error("已到最大数量,请先关闭其他文件!");
   const hasThis = oldIFrameData.find((par) => par.docId == data.docId);//是否已存在
   if (hasThis) {
+    // 已存在打开当前的并且改变编辑状态
     const thisPane = toRaw(hasThis)
+    // 如果编辑状态改变了 先删除旧的 再新建
+    if(thisPane.src != `${window.location.origin}/fileEdit?clickRowId=${thisData.docId}&canEdit=${bool}` ){
+      // console.log('buyiyang',`${window.location.origin}/fileEdit?clickRowId=${thisData.docId}&canEdit=${bool}`);
+      const arr = oldIFrameData.map((par) => {
+          if (par.id === thisPane.id) {
+            par.src = "";
+            par.show = false;
+            par.name = "";
+            par.docId = ''
+          }
+          return toRaw(par);
+        });
+     iFrameData.value =  arr.map((par) => {
+        if (!par.src) {
+          if (thisData.docId) {
+            // par.src = `${window.location.origin}/fileEdit?clickRowId=${thisData.docId}`;
+            par.src = `${window.location.origin}/fileEdit?clickRowId=${thisData.docId}&canEdit=${bool}`;
+            par.name = data.fileName;
+            par.docId = data.docId
+            par.show = true
+            thisData.docId = "";
+            editableTabsValue.value = par.id// 新建时标签跳转
+            setTimeout(() => {
+
+              iframeSize(par.id)
+            }, 1000);
+          }
+        } else {
+          par.show = false
+        }
+        return toRaw(par);
+      });
+        isAlive.value = false;
+      return
+    }
     // console.log('hasThis',thisPane);
     const arr = oldIFrameData.map((par) => {
       if (par.id == thisPane.id) {
+        `${window.location.origin}/fileEdit?clickRowId=${thisData.docId}&canEdit=${bool}`
         par.show = true
         editableTabsValue.value = par.id// 标签跳转
         setTimeout(() => {
-
           iframeSize(par.id)
         }, 1000);
       } else {
@@ -656,6 +691,7 @@ const addFileTab = (data, bool) => {
     isAlive.value = false;
     return
   }
+  // 新增标签
   const arr = oldIFrameData.map((par) => {
     if (!par.src) {
       if (thisData.docId) {

+ 20 - 10
src/views/department/MyFile.vue

@@ -24,7 +24,7 @@
                     <!-- v-for盒子 -->
                     <div style="display: flex;justify-content: flex-start;align-items: flex-start;flex-wrap: wrap;align-content: flex-start;overflow-y: auto;">
                         <template v-for="(item, index) in fileMenu" :key="index">
-                            <div class="setBox" @click="changeFile(item, index)">
+                            <div class="setBox" >
                                 <el-dropdown trigger="click" class="selectChe">
                                     <span class="el-dropdown-link">
                                         ...
@@ -32,12 +32,12 @@
                                     <template #dropdown>
                                         <el-dropdown-menu>
                                             <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
-                                            <el-dropdown-item v-if="item.dirType == '2'" @click="upFirstFoler(item)">编辑</el-dropdown-item>
+                                            <el-dropdown-item v-if="item.dirType == '2' && isDept" @click="upFirstFoler(item)">编辑</el-dropdown-item>
                                             <el-dropdown-item v-if="item.dirType == '1'" @click="delName(item, index)">删除</el-dropdown-item>
                                         </el-dropdown-menu>
                                     </template>
                                 </el-dropdown>
-                            <div class="left_fileBox">
+                            <div class="left_fileBox" @click="changeFile(item, index)">
                                 <el-tooltip
                                     class="box-item tool-tip"
                                     effect="dark"
@@ -76,7 +76,7 @@
                 <div v-if="editOnline">
                     <!-- 众多功能 -->
                     <div class="manyUse">
-                        <div v-if="thisRole.some(item=>item == 'upload') || (thisFolder.dirType == '1' && isDept)"
+                        <div v-if="thisRole.some(item=>item == 'upload') || isDept"
                             style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
                             <div style="margin-left: 5px;">
                                 <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
@@ -123,7 +123,7 @@
                             </div>
                         </div>
                         <template v-for="(item, index) in useMenu" :key="index">
-                            <div :class="{ 'isCheck': ((haveCheck && isDept) || thisRole.some(item=>item == 'delete')) }"
+                            <div :class="{ 'isCheck': (haveCheck && thisRole.some(item=>item == 'delete')||haveCheck && isDept) }"
                                 style="display: flex;width: 82px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;cursor: pointer;"
                                 @click="getMenu(item, index)">
                                 <div style="margin-left: 5px;">
@@ -333,8 +333,8 @@
             <!-- 新增文件夹弹窗 -->
             <div>
                 <CreateFloder v-if="folderCase" :thisType="thisFolder" :thisRole="thisRole" :folderCase="folderCase" @getChildrenC="getChildrenC" :oneOrTwo="oneOrTwo"
-                    :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId" :thisFolderRole="thisFolderRole"
-                    :refreshFile="refreshFile">
+                    :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId" :upFolderData="upFolderData" :thisFolderRole="thisFolderRole"
+                    :refreshFile="getAllTop">
                 </CreateFloder>
             </div>
             <!-- 文件上传 -->
@@ -659,6 +659,8 @@ export default {
           fileGrid.value = fileGrids
           folderGrid.value = fileGrids;
         };
+        const upFolderData = ref()// 修改的文件夹的数据
+        // const isUpFolder = ref(false)
         // 获取文件夹,中栏,文件
         function getAllTop() {
             documents.getTop(2).then(res => {
@@ -937,6 +939,7 @@ export default {
             anyP.value = false
         }
         function createNewMenu(num) {
+            upFolderData.value  = null
             oneOrTwo.value = num
             folderCase.value = true
         }
@@ -1585,8 +1588,13 @@ export default {
             console.log('isDept',isDept.value);
         }
         //修改文件夹权限
-        const upFirstFoler = (item)=>{
-            console.log('upFirstFoler',item);
+        const upFirstFoler =async (item)=>{
+            // console.log('upFirstFoler',item);
+            const res = await  myfile.getDir(item.dirId)
+            console.log('upFirstFolerres = ',res);
+            upFolderData.value = toRaw(res.data)
+            oneOrTwo.value = 1
+            folderCase.value = true
         }
         onMounted(() => {
             getAllTop()
@@ -1814,7 +1822,8 @@ export default {
             upFirstFoler,
             //控制宫格展示
             changeShow,
-            isList
+            isList,
+            upFolderData
         }
     },
     watch: {
@@ -1909,6 +1918,7 @@ p {
     position: relative;
     .left_fileBox{
         position: relative;
+        margin-top: 10px;
         .levelImg{
             width: 32px;
             height: 32px;

+ 27 - 4
src/views/department/components/createTasnsfer.vue

@@ -28,8 +28,8 @@
       <div class="needLog">
         <el-scrollbar>
           <el-tag
-            v-for="(item, index) in chooseTagData"
-            :key="index"
+            v-for="(item) in chooseTagData"
+            :key="item.userId"
             class="tagtag"
             :closable="lastPeople"
             @close="handleClose(item)"
@@ -53,7 +53,8 @@ const allTreeData = ref([]);
 const chooseTagData = ref([]);
 const lastPeople = ref(false);
 const openTree = ref([]);
-const backScreen = ref([]);
+const backScreen = ref(props.checkUser);
+// console.log('backScreen',backScreen.value);
 const allTreeProps = {
   label: "label",
   children: "children",
@@ -67,6 +68,11 @@ const props = defineProps({
     type: Boolean,
     default: true,
   },
+  checkUser: {
+    type: Array,
+    required: true,
+    default: ()=>[],
+},
 });
 watch(
   () => props.openTrans,
@@ -125,8 +131,25 @@ function getAllUser() {
     });
   });
 }
-onMounted(() => {
+onMounted(async() => {
   getAllUser();
+  const checkUser = toRaw(props.checkUser)
+  // console.log('checkUser',checkUser);
+  // console.log('allTreeData.value',allTreeData.value);
+  //设置勾选项
+  const arr = checkUser.map(item=>{
+    return item.userId
+  })
+    backScreen.value = arr
+    // 设置右侧列表数据
+ chooseTagData.value =  checkUser.map(item=>{
+    return {
+      userId:item.userId,
+      userName:item.userName,
+      disabled:false
+    }
+  })
+    // console.log('arr',arr);
 });
 </script>
 

+ 68 - 22
src/views/department/modalComponebts/CreateFloder.vue

@@ -1,26 +1,28 @@
 <template>
     <div>
         <div>
-            <el-dialog v-model="addBoser" title="新建文件夹" width="30%" @close="diClose">
+            <el-dialog v-model="addBoser" :title="upFolderData?'修改':'新建文件夹'" width="30%" @close="diClose">
                 <el-form :model="boserForm" label-width="120px">
                     <el-form-item label="目录名称">
                         <el-input v-model="boserForm.dirName" />
                     </el-form-item>
                     <el-form-item label="目录分类" v-if="free || (!free && thisType.dirType != '2' )">
-                        <el-radio-group v-model="boserForm.dirType">
+                        <el-radio-group :disabled="upFolderData" v-model="boserForm.dirType">
                             <el-radio :label="1">公开目录</el-radio>
                             <el-radio :label="2">组织目录</el-radio>
                         </el-radio-group>
                     </el-form-item>
                    <template v-if="boserForm.dirType === 2 || thisType.dirType == '2'">
-                     <el-form-item label="是否加密" v-if="!FolderRole.levelCode || free">
+                    <template v-if="!upFolderData">
+                        <el-form-item label="是否加密" v-if="!FolderRole.levelCode || free">
                             <el-switch v-model="boserForm.isEncrypt" active-value="Y" inactive-value="N" />
-                    </el-form-item>
-                    <el-form-item label="加密等级" v-if=" (!FolderRole.levelCode || free) && boserForm.isEncrypt === 'Y'">
-                        <el-radio-group v-model="boserForm.encryptLevel">
-                            <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
+                        </el-form-item>
+                        <el-form-item label="加密等级" v-if=" (!FolderRole.levelCode || free) && boserForm.isEncrypt === 'Y'">
+                            <el-radio-group v-model="boserForm.encryptLevel">
+                                <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                    </template>
                         <template v-if="thisRole.length<1 || free">
                             <el-form-item label="成员权限">
                                 <el-checkbox-group v-model="boserForm.memberRoles">
@@ -29,14 +31,17 @@
                             </el-form-item>
                             <el-form-item label="选择成员" v-if="boserForm.dirType === 2">
                             </el-form-item>
-                            <CreateTasnsfer v-if="boserForm.dirType === 2" @setUsers="setUsers" :openTrans="openTrans"></CreateTasnsfer>
+                            <CreateTasnsfer v-if="boserForm.dirType === 2" :checkUser="upFolderData?upFolderData.users:null" @setUsers="setUsers" :openTrans="openTrans"></CreateTasnsfer>
                         </template>
                    </template>
                 </el-form>
                 <template #footer>
                     <span class="dialog-footer">
                         <el-button @click="addBack">取消</el-button>
-                        <el-button type="primary" @click="sureAddBoser">
+                        <el-button v-if="upFolderData" type="primary" @click="sureUpBoser">
+                            确认
+                        </el-button>
+                        <el-button v-else type="primary" @click="sureAddBoser">
                             确认
                         </el-button>
                     </span>
@@ -94,6 +99,11 @@ export default {
             required: true,
             default: ()=>{},
         },
+        upFolderData: {
+            type: Object,
+            required: true,
+            default: ()=>{},
+        },
         refreshFile: Function,
     },
     setup(props, { emit }) {
@@ -110,22 +120,24 @@ export default {
         let drId = props.impDirId
         let newspid = props.newSpaceId
         let newdrid = props.newDirId
+        let upFolderData = props.upFolderData
         const FolderRole =free?'': props.thisFolderRole
         const thisRole = free?'': props.thisRole
         const thisType = free?'': props.thisType
         const users = ref()
         const openTrans = ref(true)
-        console.log("FolderRole",FolderRole);
-        console.log("thisRole",thisRole);
-        console.log("thisType",thisType);
+        // console.log("FolderRole",FolderRole);
+        // console.log("thisRole",thisRole);
+        // console.log("thisType",thisType);
+        console.log("upFolderData",upFolderData);
         let addBoser = ref(false)
         let boserForm = ref({
-            dirName: "",
-            dirType:1,
-            isEncrypt:"Y",
-            encryptLevel:"L1",
-            memberRoles:[],
-            users:[]
+            dirName: upFolderData?upFolderData.dirName:"",
+            dirType:upFolderData?2:1,
+            isEncrypt:upFolderData?upFolderData.isEncrypt:"Y",
+            encryptLevel:upFolderData?upFolderData.encryptLevel:"L1",
+            memberRoles:upFolderData?upFolderData.dirRole.split(','):[],
+            users:upFolderData?upFolderData.users:[]
         })
         const levelList = ref([])
         function inital() {
@@ -225,7 +237,40 @@ export default {
                     })
                 }
             }
-
+        }
+        const sureUpBoser = ()=>{
+             if (boserForm.value.dirName === '') {
+                ElMessage({
+                    type: "error",
+                    message: "目录名称不能为空"
+                })
+                return
+            }
+            let query ={
+                    "dirName": boserForm.value.dirName,
+                    "parentId": drId - 0,
+                    "spaceId": spId - 0,
+                    'dirId':upFolderData.dirId,
+                    "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
+                    "dirRole":boserForm.value.memberRoles.join(','),
+                    "users":boserForm.value.users,
+                    "isEncrypt":boserForm.value.isEncrypt,
+                    "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null
+                }
+                console.log('query',query);
+                documents.editFolerDocument(
+                       query
+                    ).then(res => {
+                        if (res.code === 200) {
+                            ElMessage({
+                                message: '修改目录成功',
+                                type: 'success',
+                            })
+                        }
+                        addBoser.value = false
+                        emit("getChildrenC", addBoser.value)
+                        props.refreshFile()
+                    })
         }
         const getLevelList = async ()=>{
             const res = await getLevel()
@@ -278,7 +323,8 @@ export default {
             thisRole,
             thisType,
             getUser,
-            users
+            users,
+            sureUpBoser
         }
     },
     components: {

+ 92 - 36
src/views/department/modalComponebts/Transfer.vue

@@ -2,30 +2,33 @@
     <div>
         <!-- 穿梭框 -->
         <div>
-            <el-dialog v-model="transferModals" title="分享"  :close-on-click-modal="false">
+            <el-dialog v-model="transferModals" title="分享" width="40%" :close-on-click-modal="false">
                 <div class="transBox">
                     <div class="allBag">
-                        <el-input style="width: 220px;margin-left: 18px;margin-top:5px" v-model="allBag"
-                            placeholder="搜索"></el-input>
+                        <div style="position: relative;">
+                            <el-input style="width: 220px;margin-left: 18px;margin-top:5px" v-model="allBag"
+                                 placeholder="搜索"></el-input>
+                        </div>
                         <div class="allLog">
-                            <el-tree ref="treeRef" :data="allTreeData" :props="allTreeProps" show-checkbox node-key="id"
-                                :default-expanded-keys="openTree" @check-change="allTreeChange"
-                                :default-checked-keys="backScreen" :check-strictly="false" />
+                            <el-tree :filter-node-method="filterNode" v-if="have" ref="treeRef" :data="allTreeData"
+                                :props="allTreeProps" show-checkbox node-key="id" :default-expanded-keys="openTree"
+                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false" />
+                            <span v-else>暂无数据</span>
                         </div>
                     </div>
                     <div class="needBag">
                         <div style="border-bottom: 1px solid gray;" class="needBag_top">
                             <span>已选择{{ chooseTagData.length }}人</span>
-                            <span style="color: red;font-size: 14px;float: right;">清空</span>
+                            <span style="color: red;font-size: 14px;float: right;cursor: pointer;"
+                                @click="cleanPeople">清空</span>
                         </div>
                         <div class="needLog">
-                              <el-scrollbar height="349px">
-                                    <el-tag v-for="(item, index) in chooseTagData" :key="index" class="tagtag"
-                                    :closable="lastPeople" @close="handleClose(item)">
+                            <el-scrollbar height="349px">
+                                <el-tag v-for="(item, index) in chooseTagData" :key="index" class="tagtag" :closable="true"
+                                    @close="handleClose(item)">
                                     {{ item.userName ? item.userName : item.name }}
-                                    </el-tag>
-                              </el-scrollbar>
-
+                                </el-tag>
+                            </el-scrollbar>
                         </div>
                     </div>
                 </div>
@@ -43,7 +46,7 @@
 </template>
 
 <script>
-import { ref, onMounted, toRef } from 'vue';
+import { ref, onMounted, toRef, watch } from 'vue';
 import userTree from '../../../api/user/userTree';
 import fileShare from '../../../api/fileShare/fileShare';
 import fileCount from '../../../api/fileCount/fileCount'
@@ -52,15 +55,15 @@ export default {
     props: {
         thanks: {
             type: Boolean,
-            // required: true
+            required: true
         },
         clickRowId: {
             type: Number,
-            // required: true
+            required: true
         },
         workOrEdit: {
             type: Number,
-            // required: true
+            required: true
         },
         isNewMenu: {
             type: Boolean,
@@ -81,12 +84,15 @@ export default {
             disabled: false,
             id: "id"
         }
+        let treeRef = ref(null)
         let openTree = ref([])
         let chooseTagData = ref([])
         let allBag = ref('')
         let needTagData = ref([])
         let backScreen = ref([])
         let lastPeople = ref(false)
+        let allCancel = ref(false)
+        let have = ref(true)
         function allTeam() {
             if (result) {
                 transferModals.value = result
@@ -94,6 +100,7 @@ export default {
         }
         // 分享穿梭框
         function allTreeChange(e) {
+            // console.log('触发了change事件'+ 1++);
             const id = e.id;
             const label = e.label;
             const disabled = e.disabled;
@@ -104,15 +111,15 @@ export default {
                 chooseTagData.value.splice(existingIndex, 1);
             } else {
                 // 选择操作,将数据添加到 needTagData 中
-                chooseTagData.value.push({ userId: id, userName: label ,disabled:disabled});
+                chooseTagData.value.push({ userId: id, userName: label, disabled: disabled });
             }
             if (chooseTagData.value.length === 1) {
                 lastPeople.value = true
             } else {
                 lastPeople.value = false
             }
-            chooseTagData.value = chooseTagData.value.filter(item=>!item.disabled)
-            console.log('chooseTagData',chooseTagData.value);
+            chooseTagData.value = chooseTagData.value.filter(item => !item.disabled)
+            // console.log('chooseTagData初始数组',chooseTagData.value);
         }
         // 确认分享
         function sureShare() {
@@ -166,9 +173,7 @@ export default {
         }
         // 获取用户树
         function getAllUser() {
-            console.log('feeh',feeh);
             userTree.getUserTree({}).then(res => {
-                console.log('userTree',res);
                 allTreeData.value = [res]
                 userTree.getUserTree({}).then(res => {
                     allTreeData.value = [res];
@@ -196,11 +201,8 @@ export default {
                     })
                 })
             }
-            if(feeh === 0){
-                 fileCount.getActor(dees).then(res => {
-                    // 去除数组内部的重复元素
-                    // const uniqueRes = Array.from(new Set(res.map(item => item.userName))).map(id => res.find(item => item.userName === id));
-                    // 现在的 uniqueRes 数组不包含重复元素
+            if (feeh === 0) {
+                fileCount.getActor(dees).then(res => {
                     chooseTagData.value = res;
                     backScreen.value = chooseTagData.value.map(item => {
                         return item.userId
@@ -213,17 +215,57 @@ export default {
             }
 
         }
+        function cleanPeople() {
+            treeRef.value.setCheckedKeys([]);
+            chooseTagData.value = [];
+            setTimeout(() => {
+                antherClean()
+            })
+        }
+        function antherClean() {
+            treeRef.value.setCheckedKeys([]);
+            chooseTagData.value = [];
+        }
+        function searchInTreeData(treeData, searchValue) {
+            const foundItems = [];
+            function traverseTree(node) {
+                if (node.label.includes(searchValue)) {
+                    foundItems.push(node);
+                }
+                if (node.children) {
+                    node.children.forEach(childNode => traverseTree(childNode));
+                }
+            }
+            treeData.forEach(node => traverseTree(node));
+            return foundItems;
+        }
+        watch(()=>allBag.value,(val)=>{
+            treeRef.value?.filter(val)
+        })
+        function filterNode(value, data) {
+            if (!value) return true
+            return data.label.includes(value)
+        }
         function getBack() {
             transferModals.value = false
             emit("getCback", transferModals.value)
         }
         function handleClose(tag) {
             chooseTagData.value.splice(chooseTagData.value.indexOf(tag), 1);
-            // 从标签中获取 userId
-            // const userId = tag.userId;
-            // 从 chooseTagData 中筛选出不包含当前 userId 的标签
-            // chooseTagData.value = chooseTagData.value.filter(item => item.userId !== userId)
-
+            let result = chooseTagData.value.map((item) => {
+                return item.userId
+            })
+            treeRef.value.setCheckedKeys(result);
+            setTimeout(() => {
+                antherClose(tag)
+            }, 10)
+        }
+        function antherClose(tag) {
+            chooseTagData.value.splice(chooseTagData.value.indexOf(tag), 1);
+            let result = chooseTagData.value.map((item) => {
+                return item.userId
+            })
+            treeRef.value.setCheckedKeys(result);
         }
         onMounted(() => {
             allTeam()
@@ -248,6 +290,10 @@ export default {
             lastPeople,
             feeh,
             backToFather: getBack,
+            cleanPeople,
+            treeRef,
+            have,
+            filterNode,
         }
     }
 }
@@ -275,14 +321,16 @@ export default {
 
 .allBag {
     width: 255px;
-    height: 380px;
+    height: 400px;
     border: 1px solid green;
+    overflow-y: auto;
 }
 
 .needBag {
     width: 255px;
-    height: 380px;
+    height: 400px;
     border: 1px solid green;
+    overflow-y: auto;
 }
 
 .allLog {
@@ -291,16 +339,20 @@ export default {
     margin: 5px auto;
     /* border: 1px solid red; */
     overflow-y: auto;
+    text-align: center;
 }
-.needBag_top{
+
+.needBag_top {
     padding: 0 10px;
     height: 30px;
     display: flex;
     align-items: center;
     justify-content: space-between;
 }
-.needLog{
+
+.needLog {
     height: 100%;
+    overflow-y: auto;
 }
 
 :deep(.el-tag__content) {
@@ -310,4 +362,8 @@ export default {
 :deep(.el-icon el-tag__close) {
     display: block;
 }
+
+:deep(.el-scrollbar__wrap .el-scrollbar__wrap--hidden-default) {
+    height: 346px !important;
+}
 </style>

+ 54 - 41
src/views/myfile/MyFile.vue

@@ -26,12 +26,11 @@
                     <div
                         style="display: flex;justify-content: flex-start;align-items: flex-start;flex-wrap: wrap;align-content: flex-start;overflow-y: auto;">
                         <template v-for="(item, index) in fileMenu" :key="index">
-                            <div class="setBox" @click="changeFile(item, index)">
+                            <div class="setBox">
                                 <el-dropdown trigger="click" class="selectChe">
                                     <span class="el-dropdown-link">
                                         ...
                                     </span>
-
                                     <template #dropdown>
                                         <el-dropdown-menu>
                                             <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
@@ -40,7 +39,7 @@
                                         </el-dropdown-menu>
                                     </template>
                                 </el-dropdown>
-                                <div class="left_fileBox">
+                                <div class="left_fileBox" @click="changeFile(item, index)">
                                     <el-tooltip class="box-item tool-tip" effect="dark" placement="top-start"
                                         v-if="item.encryptLevel">
                                         <template #content><span>安全级别: {{ item.encryptLevel == 'L1' ? '敏感' :
@@ -376,8 +375,8 @@
                     </el-upload>
                     <template #footer>
                         <span class="dialog-footer">
-                            <el-button @click="closeUpload">取消</el-button>
-                            <el-button type="primary" @click="sureUpload">确认</el-button>
+                            <el-button @click="uploadModal = false">取消</el-button>
+                            <el-button type="primary" @click="throttleSureUpload">确认</el-button>
                         </span>
                     </template>
                 </el-dialog>
@@ -546,6 +545,8 @@ export default {
         let newAdd = ref(false)
         const loadingUpload = ref(false);//文件上传加载
         const fileUserTreeData = reactive({ data: {} });
+        // 创建一个 ref 用于标记节流状态
+        const throttled = ref(false);
         let fileList = ref()
         let menuList = ref([
             {
@@ -742,7 +743,6 @@ export default {
             }
             // addFolderAdd(addData)   //加了这句代码界面会渲染两次
             thisFolder.value = row
-            console.log('row2', row);
             topPath.value = row.dirPath
             if (row.isEncrypt === "Y") {
                 getLeveldetailFn(row.encryptLevel)
@@ -1084,44 +1084,49 @@ export default {
                 uploadModal.value = false
             }
         }
+        function throttleSureUpload() {
+            if (!throttled.value) {
+                sureUpload();
+                throttled.value = true;
+                setTimeout(() => {
+                    throttled.value = false;
+                }, 5000); // 设置节流的时间间隔为 1000 毫秒(1秒)
+            }
+        }
         // 确认上传
         function sureUpload() {
-          loadingUpload.value =true
-          if(useSpace.value*1024+fileBig.value > allSpace.value*1024*1024){
-            ElMessage({
-                message:"超过最大容量,请联系管理员扩容",
-                type:"wanning",
-            })
-            return
-          }else{
-            if (fileArr.value.length > 0) {
-                for (var i = 1; i <= fileArr.value.length; i++) {
-                    uploadApi.uploadFile({
-                        spaceId: newSpaceId.value - 0,
-                        dirId: newDirId.value - 0,
-                        file: fileArr.value[i - 1]
-                    }).then(res => {
-                        if (res.code === 200) {
-                            ElMessage({
-                                message: "上传文件成功",
-                                type: "success"
-                            })
-                            // getAllTop()
-                            refreshFile()
-                            uploadModal.value = false
-                            loadingUpload.value = false
+            if (useSpace.value * 1024 * 1024 + fileBig.value / 1024 > allSpace.value * 1024 * 1024) {
+                ElMessage({
+                    message: "超过最大容量,请联系管理员扩容",
+                    type: "error",
+                })
+                return
+            } else {
+                if (fileArr.value.length > 0) {
+                    for (var i = 1; i <= fileArr.value.length; i++) {
+                        uploadApi.uploadFile({
+                            spaceId: newSpaceId.value - 0,
+                            dirId: newDirId.value - 0,
+                            file: fileArr.value[i - 1]
+                        }).then(res => {
+                            if (res.code === 200) {
+                                ElMessage({
+                                    message: "上传文件成功",
+                                    type: "success"
+                                })
+                                // getAllTop()
+                                refreshFile()
+                                uploadModal.value = false
+                                fileArr.value = []
+                            }
+                        }).catch(err => {
                             fileArr.value = []
-                        }
-                    }).catch(err => {
-                        fileArr.value = []
-                        loadingUpload.value = false
-                    })
+                        })
+                    }
+                } else {
+                    return ElMessage({ message: "请选择文件", type: "error" })
                 }
-            }else{
-                loadingUpload.value = false
-               return ElMessage({ message: "请选择文件", type: "error"})
             }
-          }
 
         }
         function onSuccess(files, val) {
@@ -1554,7 +1559,9 @@ export default {
         const refreshFile = () => {
             if (toRaw(thisFolder.value).dirId && !leftNewFile.value) {//如果点开了文件夹
                 folderClick()
+                // console.log(111);
             } else {
+                // console.log(222);
                 getAllTop()
             }
         }
@@ -1962,7 +1969,9 @@ export default {
             closeUpload,
             //控制宫格展示
             changeShow,
-            isList
+            isList,
+            throttled,
+            throttleSureUpload,
         }
     },
     watch: {
@@ -2061,9 +2070,12 @@ p {
     margin-top: 5px;
     position: relative;
 
+    // border: 1px solid salmon;
     .left_fileBox {
+        margin-top: 10px;
         position: relative;
 
+        // border: 1px solid black;
         .levelImg {
             width: 32px;
             height: 32px;
@@ -2081,7 +2093,7 @@ p {
 .setBox:hover .selectChe {
     background-color: #EEF9FF;
     display: block;
-    z-index: 1000;
+    z-index: 1000 !important;
 }
 
 .selectChe {
@@ -2359,3 +2371,4 @@ p {
     margin-right: 20px;
 }
 </style>
+</style>

+ 17 - 8
src/views/publicment/MyFile.vue

@@ -31,7 +31,8 @@
                                     </span>
                                     <template #dropdown>
                                         <el-dropdown-menu>
-                                            <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
+                                           <el-dropdown-item @click="restName(item, index)">重命名</el-dropdown-item>
+                                            <el-dropdown-item v-if="item.dirType == '2' && isDept" @click="upFirstFoler(item)">编辑</el-dropdown-item>
                                             <el-dropdown-item v-if="item.dirType == '1'" @click="delName(item, index)">删除</el-dropdown-item>
                                         </el-dropdown-menu>
                                     </template>
@@ -75,7 +76,7 @@
                 <div v-if="editOnline">
                     <!-- 众多功能 -->
                     <div class="manyUse">
-                        <div v-if="thisRole.some(item=>item == 'upload') || (thisFolder.dirType == '1' && isDept)"
+                        <div v-if="thisRole.some(item=>item == 'upload') || isDept"
                             style="display: flex;width: 92px;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;">
                             <div style="margin-left: 5px;">
                                 <img src="../../assets/images/upload.png" style="width: 24px;height: 24px;" alt="">
@@ -122,7 +123,7 @@
                             </div>
                         </div>
                         <template v-for="(item, index) in useMenu" :key="index">
-                            <div :class="{ 'isCheck': ((haveCheck && isDept) || thisRole.some(item=>item == 'delete')) }"
+                            <div :class="{ 'isCheck': (haveCheck && thisRole.some(item=>item == 'delete')||haveCheck && isDept) }"
                                 style="display: flex;width: 82px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;line-height: 18px;cursor: pointer;"
                                 @click="getMenu(item, index)">
                                 <div style="margin-left: 5px;">
@@ -321,8 +322,8 @@
             <!-- 新增文件夹弹窗 -->
             <div>
                 <CreateFloder v-if="folderCase" :thisType="thisFolder" :thisRole="thisRole" :folderCase="folderCase" @getChildrenC="getChildrenC" :oneOrTwo="oneOrTwo"
-                    :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId" :thisFolderRole="thisFolderRole"
-                    :refreshFile="refreshFile">
+                    :impDirId="impDirId" :impSpaceId="impSpaceId" :newDirId="newDirId" :newSpaceId="newSpaceId" :upFolderData="upFolderData" :thisFolderRole="thisFolderRole"
+                    :refreshFile="getAllTop">
                 </CreateFloder>
             </div>
             <!-- 文件上传 -->
@@ -659,6 +660,7 @@ export default {
           fileGrid.value = fileGrids
           folderGrid.value = fileGrids;
         };
+        const upFolderData = ref()// 修改的文件夹的数据
         // 获取文件夹,中栏,文件
         function getAllTop() {
             documents.getTop(1).then(res => {
@@ -939,6 +941,7 @@ export default {
             anyP.value = false
         }
         function createNewMenu(num) {
+            upFolderData.value  = null
             oneOrTwo.value = num
             folderCase.value = true
         }
@@ -1598,8 +1601,13 @@ export default {
             console.log('isDept',isDept.value);
         }
         //修改文件夹权限
-        const upFirstFoler = (item)=>{
-            console.log('upFirstFoler',item);
+        const upFirstFoler =async (item)=>{
+        // console.log('upFirstFoler',item);
+            const res = await  myfile.getDir(item.dirId)
+            console.log('upFirstFolerres = ',res);
+            upFolderData.value = toRaw(res.data)
+            oneOrTwo.value = 1
+            folderCase.value = true
         }
         onMounted(() => {
             getAllTop()
@@ -1827,7 +1835,8 @@ export default {
             upFirstFoler,
             //控制宫格展示
             changeShow,
-            isList
+            isList,
+            upFolderData
         }
     },
     watch: {

+ 26 - 4
src/views/publicment/components/createTasnsfer.vue

@@ -28,8 +28,8 @@
       <div class="needLog">
         <el-scrollbar>
           <el-tag
-            v-for="(item, index) in chooseTagData"
-            :key="index"
+            v-for="(item) in chooseTagData"
+            :key="item.userId"
             class="tagtag"
             :closable="lastPeople"
             @close="handleClose(item)"
@@ -53,7 +53,7 @@ const allTreeData = ref([]);
 const chooseTagData = ref([]);
 const lastPeople = ref(false);
 const openTree = ref([]);
-const backScreen = ref([]);
+const backScreen = ref(props.checkUser);
 const allTreeProps = {
   label: "label",
   children: "children",
@@ -67,6 +67,11 @@ const props = defineProps({
     type: Boolean,
     default: true,
   },
+    checkUser: {
+    type: Array,
+    required: true,
+    default: ()=>[],
+},
 });
 watch(
   () => props.openTrans,
@@ -125,8 +130,25 @@ function getAllUser() {
     });
   });
 }
-onMounted(() => {
+onMounted(async() => {
   getAllUser();
+  const checkUser = toRaw(props.checkUser)
+  // console.log('checkUser',checkUser);
+  // console.log('allTreeData.value',allTreeData.value);
+  //设置勾选项
+  const arr = checkUser.map(item=>{
+    return item.userId
+  })
+    backScreen.value = arr
+    // 设置右侧列表数据
+ chooseTagData.value =  checkUser.map(item=>{
+    return {
+      userId:item.userId,
+      userName:item.userName,
+      disabled:false
+    }
+  })
+    // console.log('arr',arr);
 });
 </script>
 

+ 64 - 18
src/views/publicment/modalComponebts/CreateFloder.vue

@@ -1,26 +1,28 @@
 <template>
     <div>
         <div>
-            <el-dialog v-model="addBoser" title="新建文件夹" width="30%" @close="diClose">
+            <el-dialog v-model="addBoser" :title="upFolderData?'修改':'新建文件夹'" width="30%" @close="diClose">
                 <el-form :model="boserForm" label-width="120px">
                     <el-form-item label="目录名称">
                         <el-input v-model="boserForm.dirName" />
                     </el-form-item>
                     <el-form-item label="目录分类" v-if="free || (!free && thisType.dirType != '2' )">
-                        <el-radio-group v-model="boserForm.dirType">
+                        <el-radio-group :disabled="upFolderData" v-model="boserForm.dirType">
                             <el-radio :label="1">公开目录</el-radio>
                             <el-radio :label="2">组织目录</el-radio>
                         </el-radio-group>
                     </el-form-item>
                    <template v-if="boserForm.dirType === 2 || thisType.dirType == '2'">
-                     <el-form-item label="是否加密" v-if="!FolderRole.levelCode || free">
+                     <template v-if="!upFolderData">
+                        <el-form-item label="是否加密" v-if="!FolderRole.levelCode || free">
                             <el-switch v-model="boserForm.isEncrypt" active-value="Y" inactive-value="N" />
-                    </el-form-item>
-                    <el-form-item label="加密等级" v-if=" (!FolderRole.levelCode || free) && boserForm.isEncrypt === 'Y'">
-                        <el-radio-group v-model="boserForm.encryptLevel">
-                            <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
+                        </el-form-item>
+                        <el-form-item label="加密等级" v-if=" (!FolderRole.levelCode || free) && boserForm.isEncrypt === 'Y'">
+                            <el-radio-group v-model="boserForm.encryptLevel">
+                                <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                    </template>
                         <template v-if="thisRole.length<1 || free">
                             <el-form-item label="成员权限">
                                 <el-checkbox-group v-model="boserForm.memberRoles">
@@ -29,14 +31,17 @@
                             </el-form-item>
                             <el-form-item label="选择成员" v-if="boserForm.dirType === 2">
                             </el-form-item>
-                            <CreateTasnsfer v-if="boserForm.dirType === 2" @setUsers="setUsers" :openTrans="openTrans"></CreateTasnsfer>
+                            <CreateTasnsfer v-if="boserForm.dirType === 2" :checkUser="upFolderData?upFolderData.users:null" @setUsers="setUsers" :openTrans="openTrans"></CreateTasnsfer>
                         </template>
                    </template>
                 </el-form>
                 <template #footer>
                     <span class="dialog-footer">
                         <el-button @click="addBack">取消</el-button>
-                        <el-button type="primary" @click="sureAddBoser">
+                        <el-button v-if="upFolderData" type="primary" @click="sureUpBoser">
+                            确认
+                        </el-button>
+                        <el-button v-else type="primary" @click="sureAddBoser">
                             确认
                         </el-button>
                     </span>
@@ -94,6 +99,11 @@ export default {
             required: true,
             default: ()=>{},
         },
+        upFolderData: {
+            type: Object,
+            required: true,
+            default: ()=>{},
+        },
         refreshFile: Function,
     },
     setup(props, { emit }) {
@@ -110,6 +120,7 @@ export default {
         let drId = props.impDirId
         let newspid = props.newSpaceId
         let newdrid = props.newDirId
+        let upFolderData = props.upFolderData
         const FolderRole =free?'': props.thisFolderRole
         const thisRole = free?'': props.thisRole
         const thisType = free?'': props.thisType
@@ -120,12 +131,12 @@ export default {
         // console.log("thisType",thisType);
         let addBoser = ref(false)
         let boserForm = ref({
-            dirName: "",
-            dirType:1,
-            isEncrypt:"Y",
-            encryptLevel:"L1",
-            memberRoles:[],
-            users:[]
+            dirName: upFolderData?upFolderData.dirName:"",
+            dirType:upFolderData?2:1,
+            isEncrypt:upFolderData?upFolderData.isEncrypt:"Y",
+            encryptLevel:upFolderData?upFolderData.encryptLevel:"L1",
+            memberRoles:upFolderData?upFolderData.dirRole.split(','):[],
+            users:upFolderData?upFolderData.users:[]
         })
         const levelList = ref([])
         function inital() {
@@ -227,6 +238,40 @@ export default {
             }
 
         }
+        const sureUpBoser = ()=>{
+             if (boserForm.value.dirName === '') {
+                ElMessage({
+                    type: "error",
+                    message: "目录名称不能为空"
+                })
+                return
+            }
+            let query ={
+                    "dirName": boserForm.value.dirName,
+                    "parentId": drId - 0,
+                    "spaceId": spId - 0,
+                    'dirId':upFolderData.dirId,
+                    "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
+                    "dirRole":boserForm.value.memberRoles.join(','),
+                    "users":boserForm.value.users,
+                    "isEncrypt":boserForm.value.isEncrypt,
+                    "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null
+                }
+                console.log('query',query);
+                documents.editFolerDocument(
+                       query
+                    ).then(res => {
+                        if (res.code === 200) {
+                            ElMessage({
+                                message: '修改目录成功',
+                                type: 'success',
+                            })
+                        }
+                        addBoser.value = false
+                        emit("getChildrenC", addBoser.value)
+                        props.refreshFile()
+                    })
+        }
         const getLevelList = async ()=>{
             const res = await getLevel()
             if(res.rows){
@@ -278,7 +323,8 @@ export default {
             thisRole,
             thisType,
             getUser,
-            users
+            users,
+            sureUpBoser
         }
     },
     components: {

+ 1 - 1
src/views/search/index.vue

@@ -66,7 +66,7 @@
                 <div>{{ formatFileSize(scope.row.fileSize) }}</div>
               </template>
             </el-table-column>
-            <el-table-column prop="dir.dirPath" label="文件夹" width="auto">
+            <el-table-column prop="dir.dirPath" label="文件夹" width="200">
               <template #default="scope">
                 <div class="folder">
                   {{ scope.row.dir ? scope.row.dir.dirPath : "" }}