From 4d9da000fbe74d344e0e4580b138e79d4ad98ede Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 01 六月 2026 11:07:14 +0800
Subject: [PATCH] 维护

---
 components/attachment/index.vue |  153 ++++++++++++++++----------------------------------
 1 files changed, 49 insertions(+), 104 deletions(-)

diff --git a/components/attachment/index.vue b/components/attachment/index.vue
index 42276f6..e1b80d7 100644
--- a/components/attachment/index.vue
+++ b/components/attachment/index.vue
@@ -1,55 +1,32 @@
 <template>
   <view class="attachment-upload">
     <!-- 闄勪欢鎮诞鎸夐挳 -->
-    <view
-      class="attachment-btn"
-      :style="{
-        right: position.right,
-        bottom: position.bottom,
-        backgroundColor: bgColor,
-        display: showButton ? 'flex' : 'none',
-      }"
-      @click="togglePopup"
-    >
+    <view class="attachment-btn" :style="{
+      right: position.right,
+      bottom: position.bottom,
+      backgroundColor: bgColor,
+      display: showButton ? 'flex' : 'none',
+    }" @click="togglePopup">
       <text>闄勪欢</text>
       <text class="badge" v-if="totalFileCount > 0">{{ totalFileCount }}</text>
     </view>
 
     <!-- 闄勪欢寮瑰眰 -->
-    <uni-popup
-      ref="popup"
-      type="bottom"
-      :safe-area="false"
-      @change="onPopupChange"
-    >
+    <uni-popup ref="popup" type="bottom" :safe-area="false" @change="onPopupChange">
       <view class="attachment-popup">
         <!-- 寮瑰眰鏍囬 -->
         <view class="popup-header">
           <text class="title">闄勪欢绠$悊</text>
-          <uni-icons
-            v-if="!readonly"
-            type="plus"
-            size="24"
-            :color="mainColor"
-            @click="chooseFile"
-          />
+          <uni-icons v-if="!readonly" type="plus" size="24" :color="mainColor" @click="chooseFile" />
           <uni-icons type="close" size="24" color="#999" @click="closePopup" />
         </view>
 
         <!-- 鏍囩椤靛垏鎹� -->
         <view v-if="showGradeSlip" class="attachment-tabs">
-          <view 
-            class="tab-item" 
-            :class="{ active: currentTab === 'base' }" 
-            @click="currentTab = 'base'"
-          >
+          <view class="tab-item" :class="{ active: currentTab === 'base' }" @click="currentTab = 'base'">
             <text>鍩虹闄勪欢</text>
           </view>
-          <view 
-            class="tab-item" 
-            :class="{ active: currentTab === 'grade' }" 
-            @click="currentTab = 'grade'"
-          >
+          <view class="tab-item" :class="{ active: currentTab === 'grade' }" @click="currentTab = 'grade'">
             <text>鎴愮哗鍗曢檮浠�</text>
             <text class="required-mark" v-if="isGradeRequired">*</text>
           </view>
@@ -59,17 +36,9 @@
         <scroll-view scroll-y class="file-list">
           <!-- 鍩虹闄勪欢鍒楄〃 -->
           <template v-if="currentTab === 'base' || !showGradeSlip">
-            <view
-              class="file-item"
-              v-for="(file, index) in baseFiles"
-              :key="'base-' + index"
-            >
+            <view class="file-item" v-for="(file, index) in baseFiles" :key="'base-' + index">
               <view class="file-icon" @click="previewFile(file)">
-                <uni-icons
-                  :type="getFileIcon(file.type)"
-                  size="24"
-                  :color="getFileColor(file.type)"
-                />
+                <uni-icons :type="getFileIcon(file.type)" size="24" :color="getFileColor(file.type)" />
               </view>
               <view class="file-info" @click="previewFile(file)">
                 <text class="file-name">{{ file.originalFilename || file.name }}</text>
@@ -77,29 +46,16 @@
                 <text class="file-status" v-if="file.status === 'uploading'">涓婁紶涓�...</text>
                 <text class="file-status error" v-else-if="file.status === 'error'">涓婁紶澶辫触</text>
               </view>
-              <uni-icons
-                v-if="!readonly"
-                type="trash"
-                size="20"
-                color="#ff4d4f"
-                @click="(e) => removeFile('base', index, e)"
-              />
+              <uni-icons v-if="!readonly" type="trash" size="20" color="#ff4d4f"
+                @click="(e) => removeFile('base', index, e)" />
             </view>
           </template>
 
           <!-- 鎴愮哗鍗曢檮浠跺垪琛� -->
           <template v-if="currentTab === 'grade' && showGradeSlip">
-            <view
-              class="file-item"
-              v-for="(file, index) in gradeFiles"
-              :key="'grade-' + index"
-            >
+            <view class="file-item" v-for="(file, index) in gradeFiles" :key="'grade-' + index">
               <view class="file-icon" @click="previewFile(file)">
-                <uni-icons
-                  :type="getFileIcon(file.type)"
-                  size="24"
-                  :color="getFileColor(file.type)"
-                />
+                <uni-icons :type="getFileIcon(file.type)" size="24" :color="getFileColor(file.type)" />
               </view>
               <view class="file-info" @click="previewFile(file)">
                 <text class="file-name">{{ file.originalFilename || file.name }}</text>
@@ -107,44 +63,31 @@
                 <text class="file-status" v-if="file.status === 'uploading'">涓婁紶涓�...</text>
                 <text class="file-status error" v-else-if="file.status === 'error'">涓婁紶澶辫触</text>
               </view>
-              <uni-icons
-                v-if="!readonly"
-                type="trash"
-                size="20"
-                color="#ff4d4f"
-                @click="(e) => removeFile('grade', index, e)"
-              />
+              <uni-icons v-if="!readonly" type="trash" size="20" color="#ff4d4f"
+                @click="(e) => removeFile('grade', index, e)" />
             </view>
           </template>
 
           <!-- 绌虹姸鎬� -->
           <view class="empty" v-if="currentFileList.length === 0">
             <uni-icons type="info" size="24" color="#999" />
-            <text v-if="currentTab === 'base' || !showGradeSlip">鏆傛棤鍩虹闄勪欢</text>
+            <text v-if="currentTab === 'base' || !showGradeSlip">鏆傛棤闄勪欢</text>
             <text v-else-if="currentTab === 'grade'">鏆傛棤鎴愮哗鍗曢檮浠�</text>
           </view>
         </scroll-view>
 
         <!-- 鎿嶄綔鎸夐挳 -->
         <view class="popup-footer" v-if="!readonly">
-          <button class="btn" @click="chooseFile">娣诲姞{{ currentTab === 'grade' ? '鎴愮哗鍗�' : '鍩虹' }}闄勪欢</button>
+          <button class="btn" @click="chooseFile">娣诲姞</button>
           <button class="btn primary" @click="confirmUpload">纭涓婁紶</button>
         </view>
       </view>
     </uni-popup>
 
     <!-- 鏂囦欢閫夋嫨鍣� -->
-    <uni-file-picker
-      ref="filePicker"
-      v-if="!readonly"
-      :auto-upload="false"
-      file-mediatype="all"
-      :limit="maxCount - currentFileList.length"
-      :image-styles="imageStyles"
-      @select="onFileSelect"
-      @delete="onFileDelete"
-      style="display: none"
-    />
+    <uni-file-picker ref="filePicker" v-if="!readonly" :auto-upload="false" file-mediatype="all"
+      :limit="maxCount - currentFileList.length" :image-styles="imageStyles" @select="onFileSelect"
+      @delete="onFileDelete" style="display: none" />
   </view>
 </template>
 
@@ -192,9 +135,9 @@
 });
 
 const emit = defineEmits([
-  "update:files", 
+  "update:files",
   "update:gradesFiles", // 鏂板浜嬩欢锛氭洿鏂版垚缁╁崟闄勪欢
-  "upload", 
+  "upload",
   "preview",
   "upload-grade", // 鏂板浜嬩欢锛氫笂浼犳垚缁╁崟闄勪欢
   "upload-base" // 鏂板浜嬩欢锛氫笂浼犲熀纭�闄勪欢
@@ -332,7 +275,7 @@
   // 鏄庣‘纭畾褰撳墠鏄熀纭�闄勪欢杩樻槸鎴愮哗鍗曢檮浠�
   const isGradeTab = props.showGradeSlip && currentTab.value === 'grade';
   const targetFiles = isGradeTab ? gradeFiles.value : baseFiles.value;
-  
+
   const newFiles = e.tempFiles
     .filter((file) => {
       const fileExt = file.name ? file.name.split(".").pop().toLowerCase() : "";
@@ -379,7 +322,7 @@
   if (event) {
     event.stopPropagation();
   }
-  
+
   // 涓ユ牸鎸夌被鍨嬪垹闄�
   if (type === 'grade') {
     gradeFiles.value.splice(index, 1);
@@ -393,7 +336,7 @@
 // 棰勮鏂囦欢
 const previewFile = (file) => {
   const fullUrl = getFullUrl(file.url);
-  
+
   if (file.type && supportedImageTypes.includes(file.type)) {
     // 棰勮鍥剧墖
     const allFiles = getAllFiles();
@@ -440,7 +383,7 @@
 const uploadFile = (file, type) => {
   return new Promise((resolve, reject) => {
     const token = uni.getStorageSync('token');
-    
+
     uni.uploadFile({
       url: '/api/common/upload',
       filePath: file.path || file.url,
@@ -451,8 +394,8 @@
       success: (res) => {
         if (res.statusCode === 200) {
           const data = JSON.parse(res.data);
-          console.log(data,'鏂囦欢');
-          
+          console.log(data, '鏂囦欢');
+
           if (data.code === 200) {
             resolve({
               ...data,
@@ -500,11 +443,11 @@
 
   try {
     // 鍒嗗埆澶勭悊鍩虹闄勪欢鍜屾垚缁╁崟闄勪欢鐨勪笂浼�
-    const pendingBaseFiles = baseFiles.value.filter(file => 
+    const pendingBaseFiles = baseFiles.value.filter(file =>
       !file.url || file.status === 'pending');
-    const pendingGradeFiles = gradeFiles.value.filter(file => 
+    const pendingGradeFiles = gradeFiles.value.filter(file =>
       !file.url || file.status === 'pending');
-    
+
     // 涓婁紶鍩虹闄勪欢
     for (const file of pendingBaseFiles) {
       try {
@@ -516,11 +459,11 @@
           newFileName: res.newFileName,
           originalFilename: res.originalFilename,
           status: 'success',
-          size:res.size
+          size: res.size
         });
         emit("upload-base", file);
       } catch (error) {
-        console.error('鍩虹闄勪欢涓婁紶澶辫触:', error);
+        console.error('涓婁紶澶辫触:', error);
         file.status = 'error';
         uni.showToast({
           title: `鏂囦欢 ${file.name} 涓婁紶澶辫触`,
@@ -528,7 +471,7 @@
         });
       }
     }
-    
+
     // 涓婁紶鎴愮哗鍗曢檮浠�
     for (const file of pendingGradeFiles) {
       try {
@@ -551,14 +494,14 @@
         });
       }
     }
-    console.log(baseFiles.value,'1');
-    console.log(gradeFiles.value,'2');
-    
+    console.log(baseFiles.value, '1');
+    console.log(gradeFiles.value, '2');
+
     // 鏇存柊鏂囦欢鍒楄〃
     emit("update:files", baseFiles.value);
     emit("update:gradesFiles", gradeFiles.value);
     // emit("upload", allFiles);
-    
+
     uni.showToast({
       title: '涓婁紶瀹屾垚',
       icon: 'success'
@@ -593,7 +536,7 @@
     display: flex;
     border-bottom: 1px solid #eee;
     margin-bottom: 20rpx;
-    
+
     .tab-item {
       flex: 1;
       text-align: center;
@@ -601,13 +544,13 @@
       position: relative;
       font-size: 28rpx;
       color: #666;
-      
+
       &.active {
         color: #67AFAB;
         font-weight: bold;
         border-bottom: 4rpx solid #67AFAB;
       }
-      
+
       .required-mark {
         color: red;
         position: absolute;
@@ -617,7 +560,7 @@
       }
     }
   }
-  
+
   // 鍏朵粬鏍峰紡淇濇寔涓嶅彉
   .attachment-btn {
     position: fixed;
@@ -677,6 +620,7 @@
 
       .uni-icons {
         padding: 10rpx;
+
         &:active {
           opacity: 0.7;
         }
@@ -721,12 +665,12 @@
             color: #999;
             display: block;
           }
-          
+
           .file-status {
             font-size: 24rpx;
             color: #666;
             display: block;
-            
+
             &.error {
               color: #ff4d4f;
             }
@@ -735,6 +679,7 @@
 
         .uni-icons {
           padding: 10rpx;
+
           &:active {
             opacity: 0.7;
           }

--
Gitblit v1.9.3