From eb1bbfb7e6f3a1895b606d1a9a261928ac841f33 Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期三, 18 六月 2025 17:06:43 +0800
Subject: [PATCH] feat: 添加设备台账页面

---
 src/components/ImageUpload/index.vue |   90 ++++++++++++++++++++++++++++++---------------
 1 files changed, 60 insertions(+), 30 deletions(-)

diff --git a/src/components/ImageUpload/index.vue b/src/components/ImageUpload/index.vue
index 2bedc33..9670c72 100644
--- a/src/components/ImageUpload/index.vue
+++ b/src/components/ImageUpload/index.vue
@@ -49,17 +49,18 @@
 <script setup>
 import { getToken } from "@/utils/auth";
 import { isExternal } from "@/utils/validate";
+import Sortable from "sortablejs";
 
 const props = defineProps({
   modelValue: [String, Object, Array],
   // 涓婁紶鎺ュ彛鍦板潃
   action: {
     type: String,
-    default: "/common/upload"
+    default: "/common/upload",
   },
   // 涓婁紶鎼哄甫鐨勫弬鏁�
   data: {
-    type: Object
+    type: Object,
   },
   // 鍥剧墖鏁伴噺闄愬埗
   limit: {
@@ -79,7 +80,12 @@
   // 鏄惁鏄剧ず鎻愮ず
   isShowTip: {
     type: Boolean,
-    default: true
+    default: true,
+  },
+  // 鎷栧姩鎺掑簭
+  drag: {
+    type: Boolean,
+    default: true,
   },
 });
 
@@ -97,26 +103,30 @@
   () => props.isShowTip && (props.fileType || props.fileSize)
 );
 
-watch(() => props.modelValue, val => {
-  if (val) {
-    // 棣栧厛灏嗗�艰浆涓烘暟缁�
-    const list = Array.isArray(val) ? val : props.modelValue.split(",");
-    // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁�
-    fileList.value = list.map(item => {
-      if (typeof item === "string") {
-        if (item.indexOf(baseUrl) === -1 && !isExternal(item)) {
-          item = { name: baseUrl + item, url: baseUrl + item };
-        } else {
-          item = { name: item, url: item };
+watch(
+  () => props.modelValue,
+  (val) => {
+    if (val) {
+      // 棣栧厛灏嗗�艰浆涓烘暟缁�
+      const list = Array.isArray(val) ? val : props.modelValue.split(",");
+      // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁�
+      fileList.value = list.map((item) => {
+        if (typeof item === "string") {
+          if (item.indexOf(baseUrl) === -1 && !isExternal(item)) {
+            item = { name: baseUrl + item, url: baseUrl + item };
+          } else {
+            item = { name: item, url: item };
+          }
         }
-      }
-      return item;
-    });
-  } else {
-    fileList.value = [];
-    return [];
-  }
-},{ deep: true, immediate: true });
+        return item;
+      });
+    } else {
+      fileList.value = [];
+      return [];
+    }
+  },
+  { deep: true, immediate: true }
+);
 
 // 涓婁紶鍓峫oading鍔犺浇
 function handleBeforeUpload(file) {
@@ -126,7 +136,7 @@
     if (file.name.lastIndexOf(".") > -1) {
       fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
     }
-    isImg = props.fileType.some(type => {
+    isImg = props.fileType.some((type) => {
       if (file.type.indexOf(type) > -1) return true;
       if (fileExtension && fileExtension.indexOf(type) > -1) return true;
       return false;
@@ -135,11 +145,13 @@
     isImg = file.type.indexOf("image") > -1;
   }
   if (!isImg) {
-    proxy.$modal.msgError(`鏂囦欢鏍煎紡涓嶆纭紝璇蜂笂浼�${props.fileType.join("/")}鍥剧墖鏍煎紡鏂囦欢!`);
+    proxy.$modal.msgError(
+      `鏂囦欢鏍煎紡涓嶆纭紝璇蜂笂浼�${props.fileType.join("/")}鍥剧墖鏍煎紡鏂囦欢!`
+    );
     return false;
   }
-  if (file.name.includes(',')) {
-    proxy.$modal.msgError('鏂囦欢鍚嶄笉姝g‘锛屼笉鑳藉寘鍚嫳鏂囬�楀彿!');
+  if (file.name.includes(",")) {
+    proxy.$modal.msgError("鏂囦欢鍚嶄笉姝g‘锛屼笉鑳藉寘鍚嫳鏂囬�楀彿!");
     return false;
   }
   if (props.fileSize) {
@@ -174,7 +186,7 @@
 
 // 鍒犻櫎鍥剧墖
 function handleDelete(file) {
-  const findex = fileList.value.map(f => f.name).indexOf(file.name);
+  const findex = fileList.value.map((f) => f.name).indexOf(file.name);
   if (findex > -1 && uploadList.value.length === number.value) {
     fileList.value.splice(findex, 1);
     emit("update:modelValue", listToString(fileList.value));
@@ -185,7 +197,9 @@
 // 涓婁紶缁撴潫澶勭悊
 function uploadedSuccessfully() {
   if (number.value > 0 && uploadList.value.length === number.value) {
-    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
+    fileList.value = fileList.value
+      .filter((f) => f.url !== undefined)
+      .concat(uploadList.value);
     uploadList.value = [];
     number.value = 0;
     emit("update:modelValue", listToString(fileList.value));
@@ -216,11 +230,27 @@
   }
   return strs != "" ? strs.substr(0, strs.length - 1) : "";
 }
+
+// 鍒濆鍖栨嫋鎷芥帓搴�
+onMounted(() => {
+  if (props.drag) {
+    nextTick(() => {
+      const element = document.querySelector(".el-upload-list");
+      Sortable.create(element, {
+        onEnd: (evt) => {
+          const movedItem = fileList.value.splice(evt.oldIndex, 1)[0];
+          fileList.value.splice(evt.newIndex, 0, movedItem);
+          emit("update:modelValue", listToString(fileList.value));
+        },
+      });
+    });
+  }
+});
 </script>
 
 <style scoped lang="scss">
 // .el-upload--picture-card 鎺у埗鍔犲彿閮ㄥ垎
 :deep(.hide .el-upload--picture-card) {
-    display: none;
+  display: none;
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3