Browse Source

树形搜索、分享文锦预览、隐藏普通用户的新建目录

liuQiang 1 year ago
parent
commit
6ff73ede1a

+ 0 - 1
package.json

@@ -18,7 +18,6 @@
     "@ckeditor/ckeditor5-build-classic": "^39.0.2",
     "@ckeditor/ckeditor5-vue": "^5.1.0",
     "@element-plus/icons-vue": "2.0.10",
-    "@layui/layui-vue": "^2.16.1",
     "@vueup/vue-quill": "1.1.0",
     "@vueuse/core": "9.5.0",
     "axios": "0.27.2",

+ 35 - 12
src/components/ListShow/ListShow.vue

@@ -127,7 +127,7 @@ const emit = defineEmits([
   "delCollect",
   "collectByStar",
   "changeListSort",
-  'handleSelectionChange'
+  "handleSelectionChange",
 ]);
 // 排序
 const changeSort = async () => {
@@ -140,7 +140,15 @@ const changeSearchType = (name) => {
   let baseDataObj = props.fileList;
   // console.log("baseDataObj", baseDataObj);
   if (name == "all") {
-    tableData.value = baseDataObj;
+    if (searchFire.value) {
+      tableData.value = baseDataObj.filter((item) => {
+        if (item.fileName.includes(searchFire.value)) {
+          return item;
+        }
+      });
+    }else{
+      tableData.value = baseDataObj;
+    }
   } else {
     // 获取分类具体数据
     // console.log("name", name);
@@ -149,23 +157,38 @@ const changeSearchType = (name) => {
     typeData.value = toRaw(baseDataObj).filter((item) => {
       return typeArr.includes(item.fileType);
     });
-    tableData.value = typeData.value;
+    if (searchFire.value) {
+      tableData.value = typeData.value.filter((item) => {
+      if (item.fileName.includes(searchFire.value)) {
+        return item;
+      }
+    });
+    }else{
+      tableData.value = typeData.value;
+    }
+    
     // console.log(tableData.value, "数组");
   }
 };
 //搜索框模糊搜索事件
 const fileBlur = () => {
-  const arr = typeData.value || props.fileList;
-  tableData.value = arr.filter((item) => {
-    if (item.fileName.includes(searchFire.value)) {
-      return item;
-    }
-  });
+  const arr = searchType.value != "all"?typeData.value: props.fileList;
+  console.log("props.fileList", props.fileList);
+  console.log("typeData.value", typeData.value);
+  if(searchFire.value){
+    tableData.value = arr?.filter((item) => {
+      if (item.fileName.includes(searchFire.value)) {
+        return item;
+      }
+    });
+  }else{
+    tableData.value = arr;
+  }
 };
 // 勾选框发生改变
-const SelectionChange = (val)=>{
-emit('handleSelectionChange',val)
-}
+const SelectionChange = (val) => {
+  emit("handleSelectionChange", val);
+};
 
 const rightClick = (row, col, e) => {
   emit("handleRowClick", row, null, e);

+ 0 - 3
src/main.js

@@ -5,8 +5,6 @@ import {
 import Cookies from 'js-cookie'
 
 import ElementPlus from 'element-plus'
-import Layui from '@layui/layui-vue'
-import '@layui/layui-vue/lib/index.css'
 import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
 
 import '@/assets/styles/index.scss' // global css
@@ -91,7 +89,6 @@ app.use(store)
 // app.use(VueDND)
 app.use(plugins)
 app.use(elementIcons)
-app.use(Layui)
 app.component('svg-icon', SvgIcon)
 
 directive(app)

+ 3 - 1
src/views/department/MyFile.vue

@@ -117,7 +117,9 @@
                                 </span>
                             </div>
                         </div>
-                        <div v-if="(!thisFolder.dirType) || !isDept"
+                        <div v-if="!isDept">
+                        </div>
+                        <div v-else-if="(!thisFolder.dirType) || !isDept"
                             style="display: flex;width: 102px;opacity:0.5;height: 32px;justify-content: flex-start;align-items: center;">
                             <div style="margin-left: 5px;">
                                 <el-icon

+ 40 - 5
src/views/liveChat/index.vue

@@ -36,6 +36,9 @@ import forwordTree from "@/components/forwordTree/index.vue"; //选择文件发
 //websocket连接====
 import useWebsoctStore from "@/store/modules/websocket";
 import { ElMessage } from "element-plus";
+import { preview } from "@/api/common/common.js";
+import { canPreviewFile, rightMenuRole, setIcon } from "@/utils/index.js";
+import ImgPreview from '@/components/ImgPreview/ImgPreview.vue'
 const router = useRouter(); //注册路由
 const websoctStore = useWebsoctStore();
 //====
@@ -56,6 +59,10 @@ const chatRecords = reactive({ data: [] });
 const loading = ref(false);
 const addFileTab = inject("addFileTab");
 const wangzhi=import.meta.env.VITE_APP_BASE_API
+const copyFileType = ref();
+const previewData = ref();
+const showPreview = ref(false);
+const loadingPreview = ref(false);
 const sendCont = reactive({
   //发送聊天内容数据组装
   data: {
@@ -193,11 +200,28 @@ const clickNewPerson = async () => {
   open.value = true;
 };
 // 点击文件预览
-const toPreviewFile = (index,file)=>{
-  const filedata  = toRaw(file)
-   addFileTab(filedata, 0,0); 
-  console.log('file',filedata);
+const toPreviewFile = async (index,file)=>{
+   copyFileType.value = file.fileType;
+  loadingPreview.value = true;
+  const filePreview = canPreviewFile(file.fileType);
+  if (filePreview) {
+    loadingPreview.value = false;
+    addFileTab(file, 0, 0);
+  } else {
+    const res = await preview(file.docId);
+    showPreview.value = true;
+    previewData.value = URL.createObjectURL(res);
+    loadingPreview.value = false;
+  }
 }
+//关闭图片预览事件
+const closeImgPreview = () => {
+  // console.log('close');
+  showPreview.value = false;
+};
+const setImg = (type) => {
+  return setIcon(type);
+};
 //点击左侧聊天列表
 const clickPersonIndex = ref("");
 const clickPersonId = ref(0);
@@ -812,7 +836,7 @@ onMounted(() => {
                   >
                     <img
                       v-if="record.msgType == '1'"
-                      :src="word"
+                      :src="setImg(record.file.fileType)"
                       class="head-sculpture"
                     />
                     <div
@@ -907,6 +931,17 @@ onMounted(() => {
     :forwardTreeData="forwardTreeData.data"
     @forwardChangeMsg="forwardChangeMsg"
   ></forwordTree>
+    <ImgPreview
+    :previewData="previewData"
+    :copyFileType="copyFileType"
+    :showPreview="showPreview"
+    @closeImgPreview="closeImgPreview"
+  ></ImgPreview>
+  <div
+    v-loading.fullscreen="loadingPreview"
+    v-if="loadingPreview"
+    class="lodingBox"
+  ></div>
 </template>
 
 <style lang="scss" scoped>

+ 1 - 0
src/views/publicment/MyFile.vue

@@ -126,6 +126,7 @@
                                 <span style="font-size: 14px;" class="shouzhi">新建目录</span>
                             </div>
                         </div>
+                        <div v-else-if="!isDept"></div>
                         <div v-else
                             style="display: flex;opacity:0.5;width: 102px;height: 32px;justify-content: flex-start;align-items: center;">
                             <div style="margin-left: 5px;">