From 62ab1e616510d3444c12f2130448043ccfb12e2a Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 18 五月 2026 11:42:56 +0800
Subject: [PATCH] 巡检功能问题修改

---
 src/pages/inspectionUpload/upload.vue | 1537 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 817 insertions(+), 720 deletions(-)

diff --git a/src/pages/inspectionUpload/upload.vue b/src/pages/inspectionUpload/upload.vue
index 746e995..6d95785 100644
--- a/src/pages/inspectionUpload/upload.vue
+++ b/src/pages/inspectionUpload/upload.vue
@@ -1,12 +1,13 @@
 <template>
   <view class="inspection-upload-page">
     <!-- 椤甸潰澶撮儴 -->
-    <PageHeader title="涓婁紶宸℃璁板綍" @back="goBack" />
-
+    <PageHeader title="涓婁紶宸℃璁板綍"
+                @back="goBack" />
     <!-- 椤甸潰鍐呭 -->
     <view class="upload-content">
       <!-- 浠诲姟淇℃伅鍗$墖 -->
-      <view class="task-info-card" v-if="taskInfo">
+      <view class="task-info-card"
+            v-if="taskInfo">
         <view class="task-info-header">
           <text class="task-name">{{ taskInfo.taskName }}</text>
         </view>
@@ -25,114 +26,115 @@
           </view>
         </view>
       </view>
-
       <!-- 寮傚父鐘舵�侀�夋嫨 -->
       <view class="section-card">
         <view class="section-title">宸℃鐘舵��</view>
         <view class="exception-options">
-          <view
-            class="exception-option"
-            :class="{ active: hasException === false }"
-            @click="setExceptionStatus(false)"
-          >
-            <u-icon name="checkmark-circle" size="20" color="#52c41a"></u-icon>
+          <view class="exception-option"
+                :class="{ active: hasException === false }"
+                @click="setExceptionStatus(false)">
+            <u-icon name="checkmark-circle"
+                    size="20"
+                    color="#52c41a"></u-icon>
             <text class="option-text">姝e父</text>
           </view>
-          <view
-            class="exception-option"
-            :class="{ active: hasException === true }"
-            @click="setExceptionStatus(true)"
-          >
-            <u-icon name="close-circle" size="20" color="#ff4d4f"></u-icon>
+          <view class="exception-option"
+                :class="{ active: hasException === true }"
+                @click="setExceptionStatus(true)">
+            <u-icon name="close-circle"
+                    size="20"
+                    color="#ff4d4f"></u-icon>
             <text class="option-text">瀛樺湪寮傚父</text>
           </view>
         </view>
       </view>
-
       <!-- 寮傚父鎻忚堪锛堜粎鍦ㄥ紓甯告椂鏄剧ず锛� -->
-      <view class="section-card" v-if="hasException === true">
+      <view class="section-card"
+            v-if="hasException === true">
         <view class="section-title">寮傚父鎻忚堪</view>
-        <textarea
-          v-model="abnormalDescription"
-          class="exception-textarea"
-          maxlength="500"
-          placeholder="璇锋弿杩板紓甯告儏鍐�..."
-        />
+        <textarea v-model="abnormalDescription"
+                  class="exception-textarea"
+                  maxlength="500"
+                  placeholder="璇锋弿杩板紓甯告儏鍐�..." />
       </view>
-
       <!-- 鍒嗙被鏍囩椤碉紙浠呭湪寮傚父鏃舵樉绀猴級 -->
-      <view class="section-card" v-if="hasException === true">
+      <view class="section-card"
+            v-if="hasException === true">
         <view class="upload-tabs">
-          <view
-            class="tab-item"
-            :class="{ active: currentUploadType === 'before' }"
-            @click="switchUploadType('before')"
-          >
+          <view class="tab-item"
+                :class="{ active: currentUploadType === 'before' }"
+                @click="switchUploadType('before')">
             鐢熶骇鍓�
           </view>
-          <view
-            class="tab-item"
-            :class="{ active: currentUploadType === 'after' }"
-            @click="switchUploadType('after')"
-          >
+          <view class="tab-item"
+                :class="{ active: currentUploadType === 'after' }"
+                @click="switchUploadType('after')">
             鐢熶骇涓�
           </view>
-          <view
-            class="tab-item"
-            :class="{ active: currentUploadType === 'issue' }"
-            @click="switchUploadType('issue')"
-          >
+          <view class="tab-item"
+                :class="{ active: currentUploadType === 'issue' }"
+                @click="switchUploadType('issue')">
             鐢熶骇鍚�
           </view>
         </view>
-
         <!-- 褰撳墠鍒嗙被鐨勪笂浼犲尯鍩� -->
         <view class="upload-area">
           <view class="upload-buttons">
-            <u-button
-              type="primary"
-              @click="chooseMedia('image')"
-              :loading="uploading"
-              :disabled="getCurrentFiles().length >= uploadConfig.limit"
-              :customStyle="{ marginRight: '10px', flex: 1 }"
-            >
-              <u-icon name="camera" size="18" color="#fff" style="margin-right: 5px"></u-icon>
+            <u-button type="primary"
+                      @click="chooseMedia('image')"
+                      :loading="uploading"
+                      :disabled="getCurrentFiles().length >= uploadConfig.limit"
+                      :customStyle="{ marginRight: '10px', flex: 1 }">
+              <u-icon name="camera"
+                      size="18"
+                      color="#fff"
+                      style="margin-right: 5px"></u-icon>
               {{ uploading ? '涓婁紶涓�...' : '鎷嶇収' }}
             </u-button>
-            <u-button
-              type="success"
-              @click="chooseMedia('video')"
-              :loading="uploading"
-              :disabled="getCurrentFiles().length >= uploadConfig.limit"
-              :customStyle="{ flex: 1 }"
-            >
-              <uni-icons type="videocam" size="18" color="#fff" style="margin-right: 5px"></uni-icons>
+            <u-button type="success"
+                      @click="chooseMedia('video')"
+                      :loading="uploading"
+                      :disabled="getCurrentFiles().length >= uploadConfig.limit"
+                      :customStyle="{ flex: 1 }">
+              <uni-icons type="videocam"
+                         size="18"
+                         color="#fff"
+                         style="margin-right: 5px"></uni-icons>
               {{ uploading ? '涓婁紶涓�...' : '鎷嶈棰�' }}
             </u-button>
           </view>
-
           <!-- 涓婁紶杩涘害 -->
-          <view v-if="uploading" class="upload-progress">
-            <u-line-progress :percentage="uploadProgress" :showText="true" activeColor="#409eff"></u-line-progress>
+          <view v-if="uploading"
+                class="upload-progress">
+            <u-line-progress :percentage="uploadProgress"
+                             :showText="true"
+                             activeColor="#409eff"></u-line-progress>
           </view>
-
           <!-- 褰撳墠鍒嗙被鐨勬枃浠跺垪琛� -->
-          <view v-if="getCurrentFiles().length > 0" class="file-list">
-            <view v-for="(file, index) in getCurrentFiles()" :key="index" class="file-item">
+          <view v-if="getCurrentFiles().length > 0"
+                class="file-list">
+            <view v-for="(file, index) in getCurrentFiles()"
+                  :key="index"
+                  class="file-item">
               <view class="file-preview-container">
-                <image
-                  v-if="file.type === 'image' || (file.type !== 'video' && !file.type)"
-                  :src="file.url || file.tempFilePath || file.path || file.downloadUrl"
-                  class="file-preview"
-                  mode="aspectFill"
-                />
-                <view v-else-if="file.type === 'video'" class="video-preview">
-                  <uni-icons type="videocam" size="18" color="#fff" style="margin-right: 5px"></uni-icons>
+                <image v-if="file.type === 'image' || (file.type !== 'video' && !file.type)"
+                       :src="file.url || file.tempFilePath || file.path || file.downloadUrl"
+                       class="file-preview"
+                       mode="aspectFill" />
+                <view v-else-if="file.type === 'video'"
+                      class="video-preview">
+                  <uni-icons type="videocam"
+                             size="18"
+                             color="#fff"
+                             style="margin-right: 5px"></uni-icons>
                   <text class="video-text">瑙嗛</text>
                 </view>
                 <!-- 鍒犻櫎鎸夐挳 -->
-                <view class="delete-btn" @click="removeFile(index)">
-                  <u-icon name="close" size="12" color="#fff"></u-icon>
+                <view class="delete-btn"
+                      @click="removeFile(index)">
+                  <u-icon name="close"
+                          size="12"
+                          color="#fff"></u-icon>
                 </view>
               </view>
               <view class="file-info">
@@ -141,12 +143,11 @@
               </view>
             </view>
           </view>
-
-          <view v-if="getCurrentFiles().length === 0" class="empty-state">
+          <view v-if="getCurrentFiles().length === 0"
+                class="empty-state">
             <text>璇烽�夋嫨瑕佷笂浼犵殑{{ getUploadTypeText() }}鍥剧墖鎴栬棰�</text>
           </view>
         </view>
-
         <!-- 缁熻淇℃伅 -->
         <view class="upload-summary">
           <text class="summary-text">
@@ -156,730 +157,826 @@
           </text>
         </view>
       </view>
-
       <!-- 姝e父鐘舵�佹彁绀� -->
-      <view class="normal-tip-card" v-if="hasException === false">
-        <u-icon name="info-circle" size="60" color="#52c41a"></u-icon>
+      <view class="normal-tip-card"
+            v-if="hasException === false">
+        <u-icon name="info-circle"
+                size="60"
+                color="#52c41a"></u-icon>
         <text class="tip-text">璁惧杩愯姝e父锛屾棤闇�涓婁紶鐓х墖</text>
       </view>
     </view>
-
     <!-- 搴曢儴鎸夐挳 -->
     <view class="footer-buttons">
-      <u-button @click="goBack" :customStyle="{ marginRight: '10px' }">鍙栨秷</u-button>
-      <u-button v-if="hasException === true" type="warning" @click="goToRepair" :customStyle="{ marginRight: '10px' }">
+      <u-button @click="goBack"
+                :customStyle="{ marginRight: '10px' }">鍙栨秷</u-button>
+      <u-button v-if="hasException === true"
+                type="warning"
+                @click="goToRepair"
+                :customStyle="{ marginRight: '10px' }">
         鏂板鎶ヤ慨
       </u-button>
-      <u-button type="primary" @click="submitUpload">鎻愪氦</u-button>
+      <u-button type="primary"
+                @click="submitUpload">鎻愪氦</u-button>
     </view>
   </view>
 </template>
 
 <script setup>
-import { ref, computed, onMounted } from 'vue';
-import { onLoad } from '@dcloudio/uni-app';
-import PageHeader from '@/components/PageHeader.vue';
-import { uploadInspectionTask } from '@/api/inspectionManagement';
-import { getToken } from '@/utils/auth';
-import config from '@/config';
+  import { ref, computed, onMounted } from "vue";
+  import { onLoad } from "@dcloudio/uni-app";
+  import PageHeader from "@/components/PageHeader.vue";
+  import { uploadInspectionTask } from "@/api/inspectionManagement";
+  import { getToken } from "@/utils/auth";
+  import config from "@/config";
 
-// 浠诲姟淇℃伅
-const taskInfo = ref(null);
+  // 浠诲姟淇℃伅
+  const taskInfo = ref(null);
 
-// 涓婁紶鐩稿叧鐘舵��
-const uploading = ref(false);
-const uploadProgress = ref(0);
+  // 涓婁紶鐩稿叧鐘舵��
+  const uploading = ref(false);
+  const uploadProgress = ref(0);
 
-// 涓変釜鍒嗙被鐨勪笂浼犵姸鎬�
-const beforeModelValue = ref([]); // 鐢熶骇鍓�
-const afterModelValue = ref([]); // 鐢熶骇涓�
-const issueModelValue = ref([]); // 鐢熶骇鍚�
+  // 涓変釜鍒嗙被鐨勪笂浼犵姸鎬�
+  const beforeModelValue = ref([]); // 鐢熶骇鍓�
+  const afterModelValue = ref([]); // 鐢熶骇涓�
+  const issueModelValue = ref([]); // 鐢熶骇鍚�
 
-// 褰撳墠婵�娲荤殑涓婁紶绫诲瀷
-const currentUploadType = ref('before'); // 'before', 'after', 'issue'
+  // 褰撳墠婵�娲荤殑涓婁紶绫诲瀷
+  const currentUploadType = ref("before"); // 'before', 'after', 'issue'
 
-// 寮傚父鐘舵��
-const hasException = ref(null); // null: 鏈�夋嫨, true: 瀛樺湪寮傚父, false: 姝e父
-// 寮傚父鎻忚堪
-const abnormalDescription = ref('');
+  // 寮傚父鐘舵��
+  const hasException = ref(null); // null: 鏈�夋嫨, true: 瀛樺湪寮傚父, false: 姝e父
+  // 寮傚父鎻忚堪
+  const abnormalDescription = ref("");
 
-// 涓婁紶閰嶇疆
-const uploadConfig = {
-  action: '/file/upload',
-  limit: 10,
-  fileSize: 50, // MB
-  fileType: ['jpg', 'jpeg', 'png', 'mp4', 'mov'],
-  maxVideoDuration: 60, // 绉�
-};
+  // 涓婁紶閰嶇疆
+  const uploadConfig = {
+    action: "/common/upload",
+    limit: 10,
+    fileSize: 50, // MB
+    fileType: ["jpg", "jpeg", "png", "mp4", "mov"],
+    maxVideoDuration: 60, // 绉�
+  };
 
-// 璁$畻涓婁紶URL
-const uploadFileUrl = computed(() => {
-  const baseUrl = config.baseUrl;
-  return baseUrl + uploadConfig.action;
-});
+  // 璁$畻涓婁紶URL
+  const uploadFileUrl = computed(() => {
+    const baseUrl = config.baseUrl;
+    return baseUrl + uploadConfig.action;
+  });
 
-// 椤甸潰鍔犺浇
-onLoad((options) => {
-  if (options.taskInfo) {
-    try {
-      taskInfo.value = JSON.parse(decodeURIComponent(options.taskInfo));
-    } catch (e) {
-      console.error('瑙f瀽浠诲姟淇℃伅澶辫触:', e);
+  // 椤甸潰鍔犺浇
+  onLoad(options => {
+    if (options.taskInfo) {
+      try {
+        const info = JSON.parse(decodeURIComponent(options.taskInfo));
+        taskInfo.value = info;
+
+        // 鍥炴樉閫昏緫锛氫粠 taskInfo 涓仮澶嶅凡涓婁紶鐨勬枃浠�
+        const mapFiles = list => {
+          if (!list || !Array.isArray(list)) return [];
+          return list.map(item => {
+            // 澶勭悊 URL锛屽幓闄ゅ彲鑳界殑绌烘牸
+            const finalUrl = (item.url || item.previewURL || "").trim();
+            // 鑷姩鎺ㄦ柇鏂囦欢绫诲瀷
+            let fileType = item.type;
+            if (!fileType && item.contentType) {
+              fileType = item.contentType.startsWith("video") ? "video" : "image";
+            } else if (!fileType) {
+              fileType = "image"; // 榛樿鍥剧墖
+            }
+
+            return {
+              ...item,
+              url: finalUrl,
+              name: item.name || item.originalFilename,
+              tempId: item.tempId || item.id || item.tempFileId,
+              size: item.size || item.byteSize || 0, // 鏄犲皠澶у皬瀛楁
+              type: fileType,
+              status: "success",
+            };
+          });
+        };
+
+        // 鏍规嵁鐢ㄦ埛瑕佹眰鏄犲皠锛欰fterDTO(鐢熶骇鍓�), DTO(鐢熶骇涓�), BeforeDTO(鐢熶骇鍚�)
+        if (
+          info.commonFileListAfterVO &&
+          Array.isArray(info.commonFileListAfterVO)
+        ) {
+          beforeModelValue.value = mapFiles(info.commonFileListAfterVO);
+        }
+        console.log(beforeModelValue.value, "beforeModelValue");
+
+        if (info.commonFileListVO && Array.isArray(info.commonFileListVO)) {
+          afterModelValue.value = mapFiles(info.commonFileListVO);
+        }
+        if (
+          info.commonFileListBeforeVO &&
+          Array.isArray(info.commonFileListBeforeVO)
+        ) {
+          issueModelValue.value = mapFiles(info.commonFileListBeforeVO);
+        }
+
+        // 濡傛灉鏈夊紓甯告弿杩帮紝涔熸仮澶�
+        if (info.abnormalDescription) {
+          abnormalDescription.value = info.abnormalDescription;
+        }
+        // 濡傛灉鏈夊紓甯哥姸鎬侊紝涔熸仮澶�
+        if (info.hasException !== undefined && info.hasException !== null) {
+          hasException.value = info.hasException;
+        } else if (
+          info.inspectionResult !== undefined &&
+          info.inspectionResult !== null
+        ) {
+          // 0-寮傚父锛�1-姝e父
+          hasException.value = String(info.inspectionResult) === "0";
+        }
+
+        // 鑷姩鍏滃簳锛氬鏋滃瓨鍦ㄥ凡涓婁紶鏂囦欢锛屽垯蹇呯劧鏄紓甯哥姸鎬侊紝纭繚 UI 姝e父鏄剧ず
+        if (
+          !hasException.value &&
+          (beforeModelValue.value.length > 0 ||
+            afterModelValue.value.length > 0 ||
+            issueModelValue.value.length > 0)
+        ) {
+          hasException.value = true;
+        }
+      } catch (e) {
+        console.error("瑙f瀽浠诲姟淇℃伅澶辫触:", e);
+      }
     }
-  }
-});
+  });
 
-// 杩斿洖涓婁竴椤�
-const goBack = () => {
-  uni.navigateBack();
-};
+  // 杩斿洖涓婁竴椤�
+  const goBack = () => {
+    uni.navigateBack();
+  };
 
-// 鍒囨崲涓婁紶绫诲瀷
-const switchUploadType = (type) => {
-  currentUploadType.value = type;
-};
+  // 鍒囨崲涓婁紶绫诲瀷
+  const switchUploadType = type => {
+    currentUploadType.value = type;
+  };
 
-// 鑾峰彇褰撳墠鍒嗙被鐨勬枃浠跺垪琛�
-const getCurrentFiles = () => {
-  switch (currentUploadType.value) {
-    case 'before':
-      return beforeModelValue.value || [];
-    case 'after':
-      return afterModelValue.value || [];
-    case 'issue':
-      return issueModelValue.value || [];
-    default:
-      return [];
-  }
-};
+  // 鑾峰彇褰撳墠鍒嗙被鐨勬枃浠跺垪琛�
+  const getCurrentFiles = () => {
+    switch (currentUploadType.value) {
+      case "before":
+        return beforeModelValue.value || [];
+      case "after":
+        return afterModelValue.value || [];
+      case "issue":
+        return issueModelValue.value || [];
+      default:
+        return [];
+    }
+  };
 
-// 鑾峰彇涓婁紶绫诲瀷鏂囨湰
-const getUploadTypeText = () => {
-  switch (currentUploadType.value) {
-    case 'before':
-      return '鐢熶骇鍓�';
-    case 'after':
-      return '鐢熶骇涓�';
-    case 'issue':
-      return '鐢熶骇鍚�';
-    default:
-      return '';
-  }
-};
+  // 鑾峰彇涓婁紶绫诲瀷鏂囨湰
+  const getUploadTypeText = () => {
+    switch (currentUploadType.value) {
+      case "before":
+        return "鐢熶骇鍓�";
+      case "after":
+        return "鐢熶骇涓�";
+      case "issue":
+        return "鐢熶骇鍚�";
+      default:
+        return "";
+    }
+  };
 
-// 璁剧疆寮傚父鐘舵��
-const setExceptionStatus = (status) => {
-  hasException.value = status;
-};
+  // 璁剧疆寮傚父鐘舵��
+  const setExceptionStatus = status => {
+    hasException.value = status;
+  };
 
-// 璺宠浆鍒版柊澧炴姤淇〉闈�
-const goToRepair = () => {
-  try {
-    const taskData = {
-      taskId: taskInfo.value?.taskId || taskInfo.value?.id,
-      taskName: taskInfo.value?.taskName,
-      inspectionLocation: taskInfo.value?.inspectionLocation,
-      inspector: taskInfo.value?.inspector,
-      uploadedFiles: {
-        before: beforeModelValue.value,
-        after: afterModelValue.value,
-        issue: issueModelValue.value,
-      },
-    };
+  // 璺宠浆鍒版柊澧炴姤淇〉闈�
+  const goToRepair = () => {
+    try {
+      const taskData = {
+        taskId: taskInfo.value?.taskId || taskInfo.value?.id,
+        taskName: taskInfo.value?.taskName,
+        inspectionLocation: taskInfo.value?.inspectionLocation,
+        inspector: taskInfo.value?.inspector,
+        hasException: hasException.value,
+        inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
+        commonFileListAfterDTO: beforeModelValue.value,
+        commonFileListDTO: afterModelValue.value,
+        commonFileListBeforeDTO: issueModelValue.value,
+        uploadedFiles: {
+          before: beforeModelValue.value,
+          after: afterModelValue.value,
+          issue: issueModelValue.value,
+        },
+      };
 
-    uni.setStorageSync('repairTaskInfo', JSON.stringify(taskData));
+      uni.setStorageSync("repairTaskInfo", JSON.stringify(taskData));
 
-    uni.navigateTo({
-      url: '/pages/equipmentManagement/repair/add',
-    });
-  } catch (error) {
-    console.error('璺宠浆鎶ヤ慨椤甸潰澶辫触:', error);
-    uni.showToast({
-      title: '璺宠浆澶辫触锛岃閲嶈瘯',
-      icon: 'error',
-    });
-  }
-};
-
-// 鎻愪氦涓婁紶
-const submitUpload = async () => {
-  try {
-    // 妫�鏌ユ槸鍚﹂�夋嫨浜嗗紓甯哥姸鎬�
-    if (hasException.value === null) {
+      uni.navigateTo({
+        url: "/pages/equipmentManagement/repair/add",
+      });
+    } catch (error) {
+      console.error("璺宠浆鎶ヤ慨椤甸潰澶辫触:", error);
       uni.showToast({
-        title: '璇烽�夋嫨宸℃鐘舵��',
-        icon: 'none',
+        title: "璺宠浆澶辫触锛岃閲嶈瘯",
+        icon: "error",
+      });
+    }
+  };
+
+  // 鎻愪氦涓婁紶
+  const submitUpload = async () => {
+    try {
+      // 妫�鏌ユ槸鍚﹂�夋嫨浜嗗紓甯哥姸鎬�
+      if (hasException.value === null) {
+        uni.showToast({
+          title: "璇烽�夋嫨宸℃鐘舵��",
+          icon: "none",
+        });
+        return;
+      }
+
+      // 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢鍜屾弿杩�
+      if (hasException.value === true) {
+        const totalFiles =
+          beforeModelValue.value.length +
+          afterModelValue.value.length +
+          issueModelValue.value.length;
+        if (totalFiles === 0) {
+          uni.showToast({
+            title: "璇蜂笂浼犲紓甯哥収鐗�",
+            icon: "none",
+          });
+          return;
+        }
+        // 妫�鏌ユ槸鍚﹀~鍐欎簡寮傚父鎻忚堪
+        if (!abnormalDescription.value.trim()) {
+          uni.showToast({
+            title: "璇峰~鍐欏紓甯告弿杩�",
+            icon: "none",
+          });
+          return;
+        }
+      }
+
+      // 鏄剧ず鎻愪氦涓殑鍔犺浇鎻愮ず
+      uni.showLoading({
+        title: "鎻愪氦涓�...",
+        mask: true,
+      });
+
+      // 鎸夌収閫昏緫鍚堝苟鎵�鏈夊垎绫荤殑鏂囦欢鐢ㄤ簬鎻愬彇ID
+      const allFiles = [
+        ...beforeModelValue.value,
+        ...afterModelValue.value,
+        ...issueModelValue.value,
+      ];
+
+      // 浼犵粰鍚庣鐨勪复鏃舵枃浠禝D鍒楄〃
+      let tempFileIds = [];
+      if (allFiles.length > 0) {
+        tempFileIds = allFiles
+          .map(item => item?.tempId ?? item?.tempFileId ?? item?.id)
+          .filter(v => v !== undefined && v !== null && v !== "");
+      }
+
+      // 鎻愪氦鏁版嵁
+      const submitData = {
+        ...taskInfo.value,
+        commonFileListAfterDTO: beforeModelValue.value, // 鐢熶骇鍓�
+        commonFileListDTO: afterModelValue.value, // 鐢熶骇涓�
+        commonFileListBeforeDTO: issueModelValue.value, // 鐢熶骇鍚�
+        hasException: hasException.value,
+        inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
+        abnormalDescription: abnormalDescription.value,
+        tempFileIds: tempFileIds,
+      };
+
+      const result = await uploadInspectionTask(submitData);
+
+      // 妫�鏌ユ彁浜ょ粨鏋�
+      if (result && (result.code === 200 || result.success)) {
+        uni.hideLoading();
+        uni.showToast({
+          title: "鎻愪氦鎴愬姛",
+          icon: "success",
+        });
+
+        // 杩斿洖鍒楄〃椤靛苟鍒锋柊
+        setTimeout(() => {
+          uni.navigateBack();
+        }, 500);
+      } else {
+        uni.hideLoading();
+        uni.showToast({
+          title: result?.msg || result?.message || "鎻愪氦澶辫触",
+          icon: "error",
+        });
+      }
+    } catch (error) {
+      console.error("鎻愪氦涓婁紶澶辫触:", error);
+      uni.hideLoading();
+      uni.showToast({
+        title: error?.message || "鎻愪氦澶辫触",
+        icon: "error",
+      });
+    }
+  };
+
+  // 鏍煎紡鍖栨枃浠跺ぇ灏�
+  const formatFileSize = size => {
+    if (!size) return "0 B";
+    const units = ["B", "KB", "MB", "GB"];
+    let index = 0;
+    let fileSize = size;
+    while (fileSize >= 1024 && index < units.length - 1) {
+      fileSize /= 1024;
+      index++;
+    }
+    return `${fileSize.toFixed(2)} ${units[index]}`;
+  };
+
+  // 鎷嶇収/鎷嶈棰�
+  const chooseMedia = type => {
+    if (getCurrentFiles().length >= uploadConfig.limit) {
+      uni.showToast({
+        title: `鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶,
+        icon: "none",
       });
       return;
     }
 
-    // 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢鍜屾弿杩�
-    if (hasException.value === true) {
-      const totalFiles = beforeModelValue.value.length + afterModelValue.value.length + issueModelValue.value.length;
-      if (totalFiles === 0) {
-        uni.showToast({
-          title: '璇蜂笂浼犲紓甯哥収鐗�',
-          icon: 'none',
-        });
-        return;
-      }
-      // 妫�鏌ユ槸鍚﹀~鍐欎簡寮傚父鎻忚堪
-      if (!abnormalDescription.value.trim()) {
-        uni.showToast({
-          title: '璇峰~鍐欏紓甯告弿杩�',
-          icon: 'none',
-        });
-        return;
-      }
-    }
+    const remaining = uploadConfig.limit - getCurrentFiles().length;
 
-    // 鏄剧ず鎻愪氦涓殑鍔犺浇鎻愮ず
-    uni.showLoading({
-      title: '鎻愪氦涓�...',
-      mask: true,
-    });
+    // 浼樺厛浣跨敤 chooseMedia
+    if (typeof uni.chooseMedia === "function") {
+      uni.chooseMedia({
+        count: Math.min(remaining, 1),
+        mediaType: [type || "image"],
+        sizeType: ["compressed", "original"],
+        sourceType: ["camera"],
+        success: res => {
+          try {
+            const files = res?.tempFiles || [];
+            if (!files.length) throw new Error("鏈幏鍙栧埌鏂囦欢");
 
-    // 鎸夌収閫昏緫鍚堝苟鎵�鏈夊垎绫荤殑鏂囦欢
-    let arr = [];
-    if (beforeModelValue.value.length > 0) {
-      arr.push(...beforeModelValue.value);
-    }
-    if (afterModelValue.value.length > 0) {
-      arr.push(...afterModelValue.value);
-    }
-    if (issueModelValue.value.length > 0) {
-      arr.push(...issueModelValue.value);
-    }
-
-    // 浼犵粰鍚庣鐨勪复鏃舵枃浠禝D鍒楄〃
-    let tempFileIds = [];
-    if (arr !== null && arr.length > 0) {
-      tempFileIds = arr
-        .map((item) => item?.tempId ?? item?.tempFileId ?? item?.id)
-        .filter((v) => v !== undefined && v !== null && v !== '');
-    }
-
-    // 鎻愪氦鏁版嵁
-    const submitData = {
-      ...taskInfo.value,
-      storageBlobDTO: arr,
-      hasException: hasException.value,
-      abnormalDescription: abnormalDescription.value,
-      tempFileIds: tempFileIds,
-    };
-
-    const result = await uploadInspectionTask(submitData);
-
-    // 妫�鏌ユ彁浜ょ粨鏋�
-    if (result && (result.code === 200 || result.success)) {
-      uni.hideLoading();
-      uni.showToast({
-        title: '鎻愪氦鎴愬姛',
-        icon: 'success',
-      });
-
-      // 杩斿洖鍒楄〃椤靛苟鍒锋柊
-      setTimeout(() => {
-        uni.navigateBack();
-      }, 500);
-    } else {
-      uni.hideLoading();
-      uni.showToast({
-        title: result?.msg || result?.message || '鎻愪氦澶辫触',
-        icon: 'error',
-      });
-    }
-  } catch (error) {
-    console.error('鎻愪氦涓婁紶澶辫触:', error);
-    uni.hideLoading();
-    uni.showToast({
-      title: error?.message || '鎻愪氦澶辫触',
-      icon: 'error',
-    });
-  }
-};
-
-// 鏍煎紡鍖栨枃浠跺ぇ灏�
-const formatFileSize = (size) => {
-  if (!size) return '0 B';
-  const units = ['B', 'KB', 'MB', 'GB'];
-  let index = 0;
-  let fileSize = size;
-  while (fileSize >= 1024 && index < units.length - 1) {
-    fileSize /= 1024;
-    index++;
-  }
-  return `${fileSize.toFixed(2)} ${units[index]}`;
-};
-
-// 鎷嶇収/鎷嶈棰�
-const chooseMedia = (type) => {
-  if (getCurrentFiles().length >= uploadConfig.limit) {
-    uni.showToast({
-      title: `鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶,
-      icon: 'none',
-    });
-    return;
-  }
-
-  const remaining = uploadConfig.limit - getCurrentFiles().length;
-
-  // 浼樺厛浣跨敤 chooseMedia
-  if (typeof uni.chooseMedia === 'function') {
-    uni.chooseMedia({
-      count: Math.min(remaining, 1),
-      mediaType: [type || 'image'],
-      sizeType: ['compressed', 'original'],
-      sourceType: ['camera'],
-      success: (res) => {
-        try {
-          const files = res?.tempFiles || [];
-          if (!files.length) throw new Error('鏈幏鍙栧埌鏂囦欢');
-
-          files.forEach((tf, idx) => {
-            const filePath = tf.tempFilePath || tf.path || '';
-            const fileType = tf.fileType || type || 'image';
-            const ext = fileType === 'video' ? 'mp4' : 'jpg';
-            const file = {
-              tempFilePath: filePath,
-              path: filePath,
-              type: fileType,
-              name: `${fileType}_${Date.now()}_${idx}.${ext}`,
-              size: tf.size || 0,
-              duration: tf.duration || 0,
-              createTime: Date.now(),
-            };
-            uploadFile(file);
-          });
-        } catch (err) {
-          uni.showToast({ title: err.message || '澶勭悊鏂囦欢澶辫触', icon: 'none' });
-        }
-      },
-      fail: (err) => {
-        console.error('閫夋嫨濯掍綋澶辫触:', err);
-        uni.showToast({ title: '閫夋嫨澶辫触', icon: 'none' });
-      },
-    });
-  } else {
-    // 闄嶇骇鏂规
-    if (type === 'video') {
-      uni.chooseVideo({
-        sourceType: ['camera'],
-        success: (res) => {
-          const file = {
-            tempFilePath: res.tempFilePath,
-            path: res.tempFilePath,
-            type: 'video',
-            name: `video_${Date.now()}.mp4`,
-            size: res.size || 0,
-            duration: res.duration || 0,
-            createTime: Date.now(),
-          };
-          uploadFile(file);
-        },
-        fail: () => {
-          uni.showToast({ title: '閫夋嫨瑙嗛澶辫触', icon: 'none' });
-        },
-      });
-    } else {
-      uni.chooseImage({
-        count: Math.min(remaining, 9),
-        sizeType: ['compressed'],
-        sourceType: ['camera'],
-        success: (res) => {
-          const list = res.tempFilePaths || res.tempFiles || [];
-          list.forEach((src, idx) => {
-            const path = typeof src === 'string' ? src : src.path;
-            const file = {
-              tempFilePath: path,
-              path: path,
-              type: 'image',
-              name: `image_${Date.now()}_${idx}.jpg`,
-              size: 0,
-              createTime: Date.now(),
-            };
-            uploadFile(file);
-          });
-        },
-        fail: () => {
-          uni.showToast({ title: '閫夋嫨鍥剧墖澶辫触', icon: 'none' });
-        },
-      });
-    }
-  }
-};
-
-// 涓婁紶鍗曚釜鏂囦欢
-const uploadFile = (file) => {
-  const token = getToken();
-  if (!token) {
-    uni.showToast({ title: '鐢ㄦ埛鏈櫥褰�', icon: 'none' });
-    return;
-  }
-
-  uploading.value = true;
-  uploadProgress.value = 0;
-
-  const uploadTask = uni.uploadFile({
-    url: uploadFileUrl.value,
-    filePath: file.tempFilePath,
-    name: 'file',
-    header: {
-      Authorization: `Bearer ${token}`,
-    },
-    formData: {
-      type: getTabType(),
-    },
-    success: (res) => {
-      try {
-        const data = JSON.parse(res.data);
-        if (data.code === 200) {
-          const uploadedFile = {
-            ...file,
-            url: data.data.url,
-            tempId: data.data.tempId || data.data.id,
-            status: 'success',
-          };
-
-          // 鏍规嵁褰撳墠绫诲瀷娣诲姞鍒板搴旀暟缁�
-          if (currentUploadType.value === 'before') {
-            beforeModelValue.value.push(uploadedFile);
-          } else if (currentUploadType.value === 'after') {
-            afterModelValue.value.push(uploadedFile);
-          } else if (currentUploadType.value === 'issue') {
-            issueModelValue.value.push(uploadedFile);
+            files.forEach((tf, idx) => {
+              const filePath = tf.tempFilePath || tf.path || "";
+              const fileType = tf.fileType || type || "image";
+              const ext = fileType === "video" ? "mp4" : "jpg";
+              const file = {
+                tempFilePath: filePath,
+                path: filePath,
+                type: fileType,
+                name: `${fileType}_${Date.now()}_${idx}.${ext}`,
+                size: tf.size || 0,
+                duration: tf.duration || 0,
+                createTime: Date.now(),
+              };
+              uploadFile(file);
+            });
+          } catch (err) {
+            uni.showToast({ title: err.message || "澶勭悊鏂囦欢澶辫触", icon: "none" });
           }
-
-          uni.showToast({ title: '涓婁紶鎴愬姛', icon: 'success' });
-        } else {
-          uni.showToast({ title: data.msg || '涓婁紶澶辫触', icon: 'none' });
-        }
-      } catch (e) {
-        uni.showToast({ title: '瑙f瀽鍝嶅簲澶辫触', icon: 'none' });
+        },
+        fail: err => {
+          console.error("閫夋嫨濯掍綋澶辫触:", err);
+          uni.showToast({ title: "閫夋嫨澶辫触", icon: "none" });
+        },
+      });
+    } else {
+      // 闄嶇骇鏂规
+      if (type === "video") {
+        uni.chooseVideo({
+          sourceType: ["camera"],
+          success: res => {
+            const file = {
+              tempFilePath: res.tempFilePath,
+              path: res.tempFilePath,
+              type: "video",
+              name: `video_${Date.now()}.mp4`,
+              size: res.size || 0,
+              duration: res.duration || 0,
+              createTime: Date.now(),
+            };
+            uploadFile(file);
+          },
+          fail: () => {
+            uni.showToast({ title: "閫夋嫨瑙嗛澶辫触", icon: "none" });
+          },
+        });
+      } else {
+        uni.chooseImage({
+          count: Math.min(remaining, 9),
+          sizeType: ["compressed"],
+          sourceType: ["camera"],
+          success: res => {
+            const list = res.tempFilePaths || res.tempFiles || [];
+            list.forEach((src, idx) => {
+              const path = typeof src === "string" ? src : src.path;
+              const file = {
+                tempFilePath: path,
+                path: path,
+                type: "image",
+                name: `image_${Date.now()}_${idx}.jpg`,
+                size: 0,
+                createTime: Date.now(),
+              };
+              uploadFile(file);
+            });
+          },
+          fail: () => {
+            uni.showToast({ title: "閫夋嫨鍥剧墖澶辫触", icon: "none" });
+          },
+        });
       }
-    },
-    fail: (err) => {
-      console.error('涓婁紶澶辫触:', err);
-      uni.showToast({ title: '涓婁紶澶辫触', icon: 'none' });
-    },
-    complete: () => {
-      uploading.value = false;
-    },
-  });
+    }
+  };
 
-  // 鐩戝惉涓婁紶杩涘害
-  uploadTask.onProgressUpdate((res) => {
-    uploadProgress.value = res.progress;
-  });
-};
+  // 涓婁紶鍗曚釜鏂囦欢
+  const uploadFile = file => {
+    const token = getToken();
+    if (!token) {
+      uni.showToast({ title: "鐢ㄦ埛鏈櫥褰�", icon: "none" });
+      return;
+    }
 
-// 鑾峰彇type鍊�
-const getTabType = () => {
-  switch (currentUploadType.value) {
-    case 'before':
-      return 10;
-    case 'after':
-      return 11;
-    case 'issue':
-      return 12;
-    default:
-      return 10;
-  }
-};
+    uploading.value = true;
+    uploadProgress.value = 0;
 
-// 鍒犻櫎鏂囦欢
-const removeFile = (index) => {
-  const files = getCurrentFiles();
-  files.splice(index, 1);
-};
+    const uploadTask = uni.uploadFile({
+      url: uploadFileUrl.value,
+      filePath: file.tempFilePath,
+      name: "files",
+      header: {
+        Authorization: `Bearer ${token}`,
+      },
+      formData: {
+        type: getTabType(),
+      },
+      success: res => {
+        try {
+          const data = JSON.parse(res.data);
+          if (data.code === 200) {
+            // 鍏煎 CommonUpload.vue 鐨勫鐞嗛�昏緫
+            const resultData = Array.isArray(data.data)
+              ? data.data[0]
+              : data.data;
+
+            // 澶勭悊 url 鍜� name 璧嬪��
+            const finalUrl = resultData.url || resultData.previewURL;
+            const finalName = resultData.name || resultData.originalFilename;
+            const finalId =
+              resultData.tempId || resultData.id || resultData.tempFileId;
+
+            const uploadedFile = {
+              ...file,
+              ...resultData, // 鍖呭惈鍚庣杩斿洖鐨勬墍鏈夊瓧娈�
+              url: finalUrl,
+              name: finalName,
+              tempId: finalId,
+              status: "success",
+            };
+
+            // 鏍规嵁褰撳墠绫诲瀷娣诲姞鍒板搴旀暟缁�
+            if (currentUploadType.value === "before") {
+              beforeModelValue.value.push(uploadedFile);
+            } else if (currentUploadType.value === "after") {
+              afterModelValue.value.push(uploadedFile);
+            } else if (currentUploadType.value === "issue") {
+              issueModelValue.value.push(uploadedFile);
+            }
+
+            uni.showToast({ title: "涓婁紶鎴愬姛", icon: "success" });
+          } else {
+            uni.showToast({ title: data.msg || "涓婁紶澶辫触", icon: "none" });
+          }
+        } catch (e) {
+          uni.showToast({ title: "瑙f瀽鍝嶅簲澶辫触", icon: "none" });
+        }
+      },
+      fail: err => {
+        console.error("涓婁紶澶辫触:", err);
+        uni.showToast({ title: "涓婁紶澶辫触", icon: "none" });
+      },
+      complete: () => {
+        uploading.value = false;
+      },
+    });
+
+    // 鐩戝惉涓婁紶杩涘害
+    uploadTask.onProgressUpdate(res => {
+      uploadProgress.value = res.progress;
+    });
+  };
+
+  // 鑾峰彇type鍊�
+  const getTabType = () => {
+    switch (currentUploadType.value) {
+      case "before":
+        return 10;
+      case "after":
+        return 11;
+      case "issue":
+        return 12;
+      default:
+        return 10;
+    }
+  };
+
+  // 鍒犻櫎鏂囦欢
+  const removeFile = index => {
+    const files = getCurrentFiles();
+    files.splice(index, 1);
+  };
 </script>
 
 <style scoped>
-.inspection-upload-page {
-  min-height: 100vh;
-  background-color: #f5f5f5;
-  padding-bottom: 80px;
-}
+  .inspection-upload-page {
+    min-height: 100vh;
+    background-color: #f5f5f5;
+    padding-bottom: 80px;
+  }
 
-.upload-content {
-  padding: 15px;
-}
+  .upload-content {
+    padding: 15px;
+  }
 
-/* 浠诲姟淇℃伅鍗$墖 */
-.task-info-card {
-  background: #fff;
-  border-radius: 12px;
-  padding: 15px;
-  margin-bottom: 15px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
+  /* 浠诲姟淇℃伅鍗$墖 */
+  .task-info-card {
+    background: #fff;
+    border-radius: 12px;
+    padding: 15px;
+    margin-bottom: 15px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  }
 
-.task-info-header {
-  margin-bottom: 12px;
-  padding-bottom: 12px;
-  border-bottom: 1px solid #f0f0f0;
-}
+  .task-info-header {
+    margin-bottom: 12px;
+    padding-bottom: 12px;
+    border-bottom: 1px solid #f0f0f0;
+  }
 
-.task-name {
-  font-size: 16px;
-  font-weight: 600;
-  color: #333;
-}
+  .task-name {
+    font-size: 16px;
+    font-weight: 600;
+    color: #333;
+  }
 
-.task-info-body {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-}
+  .task-info-body {
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+  }
 
-.info-item {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
+  .info-item {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
 
-.info-label {
-  font-size: 13px;
-  color: #999;
-}
+  .info-label {
+    font-size: 13px;
+    color: #999;
+  }
 
-.info-value {
-  font-size: 13px;
-  color: #666;
-}
+  .info-value {
+    font-size: 13px;
+    color: #666;
+  }
 
-/* 閫氱敤鍗$墖鏍峰紡 */
-.section-card {
-  background: #fff;
-  border-radius: 12px;
-  padding: 15px;
-  margin-bottom: 15px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
+  /* 閫氱敤鍗$墖鏍峰紡 */
+  .section-card {
+    background: #fff;
+    border-radius: 12px;
+    padding: 15px;
+    margin-bottom: 15px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  }
 
-.section-title {
-  font-size: 14px;
-  font-weight: 600;
-  color: #333;
-  margin-bottom: 12px;
-}
+  .section-title {
+    font-size: 14px;
+    font-weight: 600;
+    color: #333;
+    margin-bottom: 12px;
+  }
 
-/* 寮傚父鐘舵�侀�夋嫨 */
-.exception-options {
-  display: flex;
-  gap: 12px;
-}
+  /* 寮傚父鐘舵�侀�夋嫨 */
+  .exception-options {
+    display: flex;
+    gap: 12px;
+  }
 
-.exception-option {
-  flex: 1;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-  padding: 14px 16px;
-  background: #f8f9fa;
-  border: 2px solid #e9ecef;
-  border-radius: 8px;
-  cursor: pointer;
-  transition: all 0.3s ease;
-}
+  .exception-option {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 8px;
+    padding: 14px 16px;
+    background: #f8f9fa;
+    border: 2px solid #e9ecef;
+    border-radius: 8px;
+    cursor: pointer;
+    transition: all 0.3s ease;
+  }
 
-.exception-option.active {
-  border-color: #409eff;
-  background: #f0f8ff;
-}
+  .exception-option.active {
+    border-color: #409eff;
+    background: #f0f8ff;
+  }
 
-.option-text {
-  font-size: 14px;
-  color: #333;
-  font-weight: 500;
-}
+  .option-text {
+    font-size: 14px;
+    color: #333;
+    font-weight: 500;
+  }
 
-/* 寮傚父鎻忚堪 */
-.exception-textarea {
-  width: 100%;
-  min-height: 100px;
-  padding: 12px;
-  background: #f8f9fa;
-  border: 1px solid #e9ecef;
-  border-radius: 8px;
-  font-size: 14px;
-  color: #333;
-  resize: none;
-  box-sizing: border-box;
-}
+  /* 寮傚父鎻忚堪 */
+  .exception-textarea {
+    width: 100%;
+    min-height: 100px;
+    padding: 12px;
+    background: #f8f9fa;
+    border: 1px solid #e9ecef;
+    border-radius: 8px;
+    font-size: 14px;
+    color: #333;
+    resize: none;
+    box-sizing: border-box;
+  }
 
-.exception-textarea:focus {
-  outline: none;
-  border-color: #409eff;
-  background: #fff;
-}
+  .exception-textarea:focus {
+    outline: none;
+    border-color: #409eff;
+    background: #fff;
+  }
 
-/* 鍒嗙被鏍囩椤� */
-.upload-tabs {
-  display: flex;
-  gap: 10px;
-  margin-bottom: 15px;
-}
+  /* 鍒嗙被鏍囩椤� */
+  .upload-tabs {
+    display: flex;
+    gap: 10px;
+    margin-bottom: 15px;
+  }
 
-.tab-item {
-  flex: 1;
-  padding: 10px;
-  text-align: center;
-  background: #f5f5f5;
-  border-radius: 6px;
-  font-size: 13px;
-  color: #666;
-  cursor: pointer;
-  transition: all 0.3s;
-}
+  .tab-item {
+    flex: 1;
+    padding: 10px;
+    text-align: center;
+    background: #f5f5f5;
+    border-radius: 6px;
+    font-size: 13px;
+    color: #666;
+    cursor: pointer;
+    transition: all 0.3s;
+  }
 
-.tab-item.active {
-  background: #409eff;
-  color: #fff;
-}
+  .tab-item.active {
+    background: #409eff;
+    color: #fff;
+  }
 
-/* 涓婁紶鍖哄煙 */
-.upload-area {
-  padding: 10px 0;
-}
+  /* 涓婁紶鍖哄煙 */
+  .upload-area {
+    padding: 10px 0;
+  }
 
-.upload-buttons {
-  display: flex;
-  gap: 10px;
-  margin-bottom: 15px;
-}
+  .upload-buttons {
+    display: flex;
+    gap: 10px;
+    margin-bottom: 15px;
+  }
 
-.upload-progress {
-  margin-bottom: 15px;
-}
+  .upload-progress {
+    margin-bottom: 15px;
+  }
 
-/* 鏂囦欢鍒楄〃 */
-.file-list {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 10px;
-}
+  /* 鏂囦欢鍒楄〃 */
+  .file-list {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 10px;
+  }
 
-.file-item {
-  width: calc(33.33% - 7px);
-}
+  .file-item {
+    width: calc(33.33% - 7px);
+  }
 
-.file-preview-container {
-  position: relative;
-  width: 100%;
-  aspect-ratio: 1;
-  border-radius: 8px;
-  overflow: hidden;
-  background: #f5f5f5;
-}
+  .file-preview-container {
+    position: relative;
+    width: 100%;
+    aspect-ratio: 1;
+    border-radius: 8px;
+    overflow: hidden;
+    background: #f5f5f5;
+  }
 
-.file-preview {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
+  .file-preview {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
 
-.video-preview {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  background: #333;
-}
+  .video-preview {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    background: #333;
+  }
 
-.video-text {
-  font-size: 12px;
-  color: #fff;
-  margin-top: 5px;
-}
+  .video-text {
+    font-size: 12px;
+    color: #fff;
+    margin-top: 5px;
+  }
 
-.delete-btn {
-  position: absolute;
-  top: 5px;
-  right: 5px;
-  width: 22px;
-  height: 22px;
-  background: rgba(0, 0, 0, 0.5);
-  border-radius: 50%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
+  .delete-btn {
+    position: absolute;
+    top: 5px;
+    right: 5px;
+    width: 22px;
+    height: 22px;
+    background: rgba(0, 0, 0, 0.5);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
 
-.file-info {
-  margin-top: 5px;
-}
+  .file-info {
+    margin-top: 5px;
+  }
 
-.file-name {
-  display: block;
-  font-size: 11px;
-  color: #666;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
+  .file-name {
+    display: block;
+    font-size: 11px;
+    color: #666;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
 
-.file-size {
-  display: block;
-  font-size: 10px;
-  color: #999;
-  margin-top: 2px;
-}
+  .file-size {
+    display: block;
+    font-size: 10px;
+    color: #999;
+    margin-top: 2px;
+  }
 
-.empty-state {
-  text-align: center;
-  padding: 30px;
-  color: #999;
-  font-size: 13px;
-}
+  .empty-state {
+    text-align: center;
+    padding: 30px;
+    color: #999;
+    font-size: 13px;
+  }
 
-/* 缁熻淇℃伅 */
-.upload-summary {
-  margin-top: 15px;
-  padding: 10px;
-  background: #f8f9fa;
-  border-radius: 6px;
-  border-left: 3px solid #409eff;
-}
+  /* 缁熻淇℃伅 */
+  .upload-summary {
+    margin-top: 15px;
+    padding: 10px;
+    background: #f8f9fa;
+    border-radius: 6px;
+    border-left: 3px solid #409eff;
+  }
 
-.summary-text {
-  font-size: 12px;
-  color: #666;
-}
+  .summary-text {
+    font-size: 12px;
+    color: #666;
+  }
 
-/* 姝e父鐘舵�佹彁绀� */
-.normal-tip-card {
-  background: #f6ffed;
-  border: 2px dashed #b7eb8f;
-  border-radius: 12px;
-  padding: 50px 20px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  margin-bottom: 15px;
-}
+  /* 姝e父鐘舵�佹彁绀� */
+  .normal-tip-card {
+    background: #f6ffed;
+    border: 2px dashed #b7eb8f;
+    border-radius: 12px;
+    padding: 50px 20px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    margin-bottom: 15px;
+  }
 
-.normal-tip-card .tip-text {
-  margin-top: 15px;
-  font-size: 16px;
-  color: #52c41a;
-  font-weight: 500;
-}
+  .normal-tip-card .tip-text {
+    margin-top: 15px;
+    font-size: 16px;
+    color: #52c41a;
+    font-weight: 500;
+  }
 
-/* 搴曢儴鎸夐挳 */
-.footer-buttons {
-  position: fixed;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  display: flex;
-  padding: 15px;
-  background: #fff;
-  border-top: 1px solid #f0f0f0;
-  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
-}
+  /* 搴曢儴鎸夐挳 */
+  .footer-buttons {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    display: flex;
+    padding: 15px;
+    background: #fff;
+    border-top: 1px solid #f0f0f0;
+    box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
+  }
 </style>

--
Gitblit v1.9.3