Prechádzať zdrojové kódy

Merge branch 'v3' of ssh://94.191.59.107:10222/houwenfeng/cloudfile-ui into v3

“yueshang” 2 rokov pred
rodič
commit
c785366365
4 zmenil súbory, kde vykonal 189 pridanie a 45 odobranie
  1. 2 1
      package.json
  2. 91 8
      src/views/collect/index.vue
  3. 94 35
      src/views/myfile/MyFile.vue
  4. 2 1
      vite.config.js

+ 2 - 1
package.json

@@ -18,7 +18,6 @@
     "@element-plus/icons-vue": "2.0.10",
     "@vueup/vue-quill": "1.1.0",
     "@vueuse/core": "9.5.0",
-    "awe-dnd": "^0.3.4",
     "axios": "0.27.2",
     "echarts": "5.4.0",
     "element-plus": "2.2.27",
@@ -30,10 +29,12 @@
     "pinia": "2.0.22",
     "socket.io-client": "^4.0.0",
     "sockjs-client": "^1.6.1",
+    "sortablejs": "^1.15.0",
     "vue": "3.2.45",
     "vue-cropper": "1.0.3",
     "vue-native-websocket": "^2.0.15",
     "vue-router": "4.1.4",
+    "vuedraggable": "^4.1.0",
     "vuex": "^4.1.0"
   },
   "devDependencies": {

+ 91 - 8
src/views/collect/index.vue

@@ -3,14 +3,44 @@
     <!-- 标签 -->
     <div class="tags">
       <!-- TODO 标签可以拖动位置 -->
-      <el-tabs v-model="clickCollect" class="demo-tabs">
+      <!-- 
+      <el-tabs v-if="false" v-model="clickCollect" class="demo-tabs tabSign">
         <el-tab-pane label="常用" name="first"></el-tab-pane>
         <el-tab-pane label="默认" name="second"></el-tab-pane>
-        <el-tab-pane
-          v-for="item in tabList"
-          :key="item.labelId"
-          :name="item.labelId"
+        <draggable
+          :list="toRaw(tabList)"
+          ghost-class="ghost"
+          chosen-class="chosenClass"
+          animation="300"
         >
+          <template #item="{ element }">
+            <el-tab-pane>
+              <template #label>
+                <div
+                  v-if="isChangeTabName !== element.labelId"
+                  @click.right="tabClick($event, element)"
+                >
+                  {{ element.labelName }}
+                </div>
+                <div v-else>
+                  <el-input
+                    v-model="changeTabName"
+                    size="mini"
+                    @blur="reTabName"
+                    maxlength="32"
+                    :autofocus="true"
+                  ></el-input>
+                </div>
+              </template>
+            </el-tab-pane>
+          </template>
+        </draggable>
+      </el-tabs> -->
+
+      <el-tabs v-model="clickCollect" class="tabSign" ref="tabs">
+        <el-tab-pane label="常用" name="first"></el-tab-pane>
+        <el-tab-pane label="默认" name="second"></el-tab-pane>
+        <el-tab-pane v-for="item in tabList" :key="item" :name="item.labelId">
           <template #label>
             <div
               v-if="isChangeTabName !== item.labelId"
@@ -42,7 +72,7 @@
           <el-input
             v-model="tabName"
             size="mini"
-            @blur="addCollectFn"
+            @change="addCollectFn"
             maxlength="32"
             :autofocus="true"
           ></el-input>
@@ -168,7 +198,9 @@
 </template>
 
 <script setup>
-import { onMounted, ref, watch } from "vue";
+import Sortable from "sortablejs";
+import draggable from "vuedraggable";
+import { onMounted, ref, watch, nextTick } from "vue";
 import { toRaw } from "@vue/reactivity";
 import { listLabel, addLabel, delLabel, updateLabel } from "@/api/biz/label.js";
 import { listFavorite } from "@/api/biz/favorite.js";
@@ -244,6 +276,7 @@ const isChangeTabName = ref(0); //存放修改状标签的id
 onMounted(async () => {
   await getList();
   await getCollectList();
+  rowDrop();
   // 添加监听,点击其他地方关闭菜单
   window.addEventListener("click", closeMenu, true);
 });
@@ -273,8 +306,16 @@ const addCollectFn = async () => {
     isAddCollect.value = false;
     return;
   }
+
+  const list = toRaw(tabList.value);
+  let order = 0;
+  if (list.length > 0) {
+    order = getBigOrder(list);
+  }
+
   const res = await addLabel({
     labelName: tabName.value,
+    orderNum: order,
   });
   if (res.code == 200) {
     isAddCollect.value = false;
@@ -288,8 +329,9 @@ const getList = async () => {
   console.log("tabList =", res);
   if (res.rows.length > 0) {
     let dates = JSON.parse(JSON.stringify(res.rows));
+    dates.sort(sortArr("orderNum"));
     tabList.value = [...dates];
-    console.log("tabList", tabList.value);
+    // console.log("tabList", tabList.value);
     // console.log("dates", dates);
   }
 };
@@ -325,6 +367,47 @@ const reTabName = async () => {
   isChangeTabName.value = 0;
   console.log("rename", res);
 };
+//拖拽事件
+const rowDrop = () => {
+  const el = document.querySelector(".tabSign .el-tabs__nav"); //找到想要拖拽的那一列
+  // console.log('el',el);
+  const _this = toRaw(tabList.value);
+  // console.log("_this", _this);
+  Sortable.create(el, {
+    filter: "#tab-first,#tab-second", //限制哪些可以拖动
+    preventOnFilter: true,
+    onChoose: function (/**Event*/ evt) {
+      evt.oldIndex;
+      console.log("evt", evt);
+    },
+    //结束拖拽事件
+    onEnd({ newIndex, oldIndex, to }) {
+      console.log("newIndex", newIndex);
+      console.log("oldIndex", oldIndex);
+      //oldIIndex拖放前的位置, newIndex拖放后的位置  //tabOptionList为遍历的tab签
+      const currRow = _this.splice(oldIndex, 1)[0]; //鼠标拖拽当前的el-tabs-pane
+      _this.splice(newIndex, 0, currRow); //tableData 是存放所以el-tabs-pane的数组
+    },
+  });
+};
+
+// 工具函数
+//获取新增标签时要赋予的ordername
+const getBigOrder = (arr) => {
+  let num = 0;
+  arr.forEach((item) => {
+    if (item.orderNum > num) {
+      num = item.orderNum;
+    }
+  });
+  return num + 1;
+};
+//数组排序
+const sortArr = (field) => {
+  return function (a, b) {
+    return a[field] - b[field];
+  };
+};
 </script>
 
 <style lang="scss" scoped>

+ 94 - 35
src/views/myfile/MyFile.vue

@@ -103,13 +103,13 @@
                                     </span>
                                     <template #dropdown>
                                         <el-dropdown-menu>
-                                            <el-dropdown-item @click="fileUpload">
-                                                <img src="../../assets/images/file.png" alt="">
+                                            <!-- <el-dropdown-item @click="fileUpload">
+                                            <img src="../../assets/images/file.png" alt="">
                                                 <span id="uploadButton">上传</span>
                                                 <input id="fileInput" type="file" style="display: none;">
-                                            </el-dropdown-item>
+                                            </el-dropdown-item> -->
                                             <template v-for="(item, index) in arrorMenu">
-                                                <el-dropdown-item>
+                                                <el-dropdown-item @click="arrowClick(item, index)">
                                                     <img :src="item.img" alt="">
                                                     <span>{{ item.name }}</span>
                                                 </el-dropdown-item>
@@ -334,6 +334,30 @@
                     </template>
                 </el-dialog>
             </div>
+            <!-- 文件上传 -->
+            <div>
+                <el-dialog v-model="uploadModal" title="文件上传" width="30%">
+                    <el-upload class="upload-demo" drag :http-request="onSuccess" multiple>
+                        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+                        <div class="el-upload__text">
+                            拖入或<em>点击上传</em>
+                        </div>
+                        <template #tip>
+                            <div class="el-upload__tip">
+                                请选择或拖入文件
+                            </div>
+                        </template>
+                    </el-upload>
+                    <template #footer>
+                        <span class="dialog-footer">
+                            <el-button @click="uploadModal = false">取消</el-button>
+                            <el-button type="primary" @click="sureUpload">
+                                确认
+                            </el-button>
+                        </span>
+                    </template>
+                </el-dialog>
+            </div>
         </div>
     </div>
 </template>
@@ -389,6 +413,7 @@ export default {
         let addBoser = ref(false)
         let addFile = ref(false)
         let anyP = ref(false)
+        let uploadModal = ref(false)
         let selectedBox = ref(-1)
         let newName = ref('')
         let clickRowId = ref("")
@@ -398,6 +423,7 @@ export default {
         let tranvalue = ref([])
         let useSpace = ref(0)
         let allSpace = ref(0)
+        let fileArr = ref([])
         let boserForm = ref({
             spaceId: "",//空间id
             dirName: "",
@@ -457,10 +483,10 @@ export default {
             },
         ])
         let arrorMenu = ref([
-            // {
-            //     img: file,
-            //     name: "文件"
-            // },
+            {
+                img: file,
+                name: "文件"
+            },
             {
                 img: folder,
                 name: '文件夹'
@@ -698,32 +724,60 @@ export default {
                 }
             })
         }
-        function fileUpload() {
-            const fileInput = document.getElementById('fileInput');
-            const uploadButton = document.getElementById('uploadButton');
-            // 监听按钮点击事件
-            uploadButton.addEventListener('click', function () {
-                // 模拟点击文件上传输入框
-                fileInput.click();
-            });
-            // 监听文件选择事件
-            fileInput.addEventListener('change', function () {
-                const files = fileInput.files[0]; // 获取选择的文件
-                myfile.uploadFile({
-                    spaceId: 1,
-                    dirId: 1,
-                    file: files
-                }).then(res => {
-                    console.log(res, '222');
-                    if (res.code === 200) {
-                        ElMessage({
-                            message: "上传文件成功",
-                            type: "success"
-                        })
-                        getAll()
-                    }
-                })
-            });
+        // function fileUpload() {
+        //     const fileInput = document.getElementById('fileInput');
+        //     const uploadButton = document.getElementById('uploadButton');
+        //     // 监听按钮点击事件
+        //     uploadButton.addEventListener('click', function () {
+        //         // 模拟点击文件上传输入框
+        //         fileInput.click();
+        //     });
+        //     // 监听文件选择事件
+        //     fileInput.addEventListener('change', function () {
+        //         const files = fileInput.files[0]; // 获取选择的文件
+        //         console.log(files, 'file');
+        //         myfile.uploadFile({
+        //             spaceId: 1,
+        //             dirId: 1,
+        //             file: files
+        //         }).then(res => {
+        //             console.log(res, '222');
+        //             if (res.code === 200) {
+        //                 ElMessage({
+        //                     message: "上传文件成功",
+        //                     type: "success"
+        //                 })
+        //                 getAll()
+        //             }
+        //         })
+        //     })
+        // }
+        function arrowClick(row, num) {
+            if (row.name === '文件') {
+                uploadModal.value = true
+            } else {
+                uploadModal.value = false
+            }
+        }
+        // 确认上传
+        function sureUpload() {
+            myfile.uploadFile({
+                spaceId: 1,
+                dirId: 1,
+                file: fileArr.value
+            }).then(res => {
+                if (res.code === 200) {
+                    ElMessage({
+                        message: "上传文件成功",
+                        type: "success"
+                    })
+                    getAll()
+                    uploadModal.value = false
+                }
+            })
+        }
+        function onSuccess(file, val) {
+            fileArr.value = file.file
         }
         // 筛选后缀图片
         function getImage(file) {
@@ -879,7 +933,7 @@ export default {
             createNewFile,
             fileForm,
             sureAddFile,
-            fileUpload,
+            // fileUpload,
             txt,
             pptx,
             xlxs,
@@ -900,6 +954,11 @@ export default {
             useSpace,//使用空间
             allSpace,//总空间
             percent,
+            arrowClick,
+            uploadModal,
+            sureUpload,
+            onSuccess,
+            fileArr,
         }
     },
     created() {

+ 2 - 1
vite.config.js

@@ -33,12 +33,13 @@ export default defineConfig(({
 		},
 		// vite 相关配置
 		server: {
-			port: 80,
+			port: 81,
 			host: true,
 			open: true,
 			proxy: {
 				// https://cn.vitejs.dev/config/#server-proxy
 				'/dev-api': {
+					// target: 'http://192.168.1.28:8080/',
 					target: 'http://8.142.173.95:19527/',
 					// target:'http://192.168.1.18:8080/',
 					changeOrigin: true,