From bfffb0306f8e37ea39624499c55306837bf23ecf Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期四, 21 八月 2025 17:55:42 +0800
Subject: [PATCH] 优化

---
 pages/QC/RKJ/List.vue |  832 +++++++++++-----------
 pages/QC/RKJ/Add.vue  | 1225 +++++++++++++++++++++++++++++++++
 manifest.json         |    2 
 pages/QC/LLJ/List.vue |   56 +
 store/index.js        |    4 
 5 files changed, 1,666 insertions(+), 453 deletions(-)

diff --git a/manifest.json b/manifest.json
index e54fe41..29c6881 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,7 +2,7 @@
     "name" : "GS-MES-AP",
     "appid" : "__UNI__F08FAE3",
     "description" : "",
-    "versionName" : "1.1.3.1",
+    "versionName" : "1.1.3.3",
     "versionCode" : 1,
     "transformPx" : false,
     /* 5+App鐗规湁鐩稿叧 */
diff --git a/pages/QC/LLJ/List.vue b/pages/QC/LLJ/List.vue
index 4b8dc8f..3011dc8 100644
--- a/pages/QC/LLJ/List.vue
+++ b/pages/QC/LLJ/List.vue
@@ -16,7 +16,7 @@
 				</view>
 				<!-- 鏂板鎼滅储妗嗗拰鎸夐挳 -->
 				<view class="search-container">
-					<input class="search-input" v-model="searchValue" :placeholder="'璇疯緭鍏�'+options[optionsIndex]"
+					<input class="search-input" v-model="searchValue" :placeholder="optionsIndex === 0 ? '閫夋嫨椤圭洰鏃舵樉绀哄叏閮ㄦ暟鎹�' : '璇疯緭鍏�'+options[optionsIndex]"
 						@confirm="handleSearch" />
 					<button class="search-button" @click="handleSearch">鎼滅储</button>
 				</view>
@@ -42,7 +42,10 @@
 					<text class="badge normal" v-if="item.first == 1">棣栨鏉ユ枡</text>
 					<text class="card-title">妫�楠屽崟鍙�: {{item.releaseNo}}</text>
 					<view v-if="item.userName == null && item.activeTab == 0">
-					        <text class="status pending" :class="{ 'emergency-pending': item.lotNo1 === '绱ф�ユ斁琛岋紝璇峰嬁楠岄��!' }">
+					        <text class="status pending" :class="{ 
+					            'emergency-pending': item.lotNo1 === '绱ф�ユ斁琛岋紝璇峰嬁楠岄��!',
+					            'unmaintained-not-emergency': isUnmaintainedAndNotEmergency(item)
+					        }">
 					        {{ item.lotNo1 === '绱ф�ユ斁琛岋紝璇峰嬁楠岄��!' ? '绱ф�ユ斁琛�/' + getStatusText(item) : getStatusText(item) }}
 					        </text>
 					        
@@ -65,7 +68,7 @@
 					<view class="info-row">
 						<view class="info-item">
 							<text class="info-label">椤圭洰</text>
-							<text class="info-content">{{item.projectCodes}}</text>
+							<text class="info-content">{{item.DEPARTMENTNAME}}</text>
 						</view>
 						<view class="info-item" v-if="item.extendNo1!=null">
 							<text class="info-label">鎶�鏀圭姸鎬�</text>
@@ -126,7 +129,7 @@
 				pageIndex: 1,
 				limit: 20,
 				IQCJL: 0,
-				options: ['椤圭洰', '鐗╂枡缂栧彿', '鐗╂枡鍚嶇О', '渚涘簲鍟�', '閲囪喘鍛�','鍒拌揣鍗曞彿','妫�楠屽崟鍙�','鐗╂枡瑙勬牸'],
+				options: ['椤圭洰', '鐗╂枡缂栧彿', '鐗╂枡鍚嶇О', '渚涘簲鍟�', '鍒拌揣鍗曞彿','妫�楠屽崟鍙�','鐗╂枡瑙勬牸'],
 				searchValue: ''
 
 			}
@@ -139,21 +142,28 @@
 			//鎼滅储
 			onOptionsChange(e) {
 				this.optionsIndex = e.detail.value;
+				// 褰撻�夋嫨椤圭洰鏃讹紝娓呯┖鎼滅储鍊�
+				if (this.optionsIndex === 0) {
+					this.searchValue = '';
+				}
 				// 鏍规嵁閫夋嫨鐨勯�夐」璁剧疆鎼滅储瀛楁
 				const fieldMap = {
-					0: 'projectCodes', // 椤圭洰
+					0: 'DEPARTMENTNAME', // 椤圭洰
 					1: 'itemNo', // 鐗╂枡缂栧彿
 					2: 'itemName', // 鐗╂枡鍚嶇О
 					3: 'suppName', // 渚涘簲鍟�
-					4: 'purchaser' ,// 閲囪喘鍛�
-					5: 'lotNO' ,// 鍒拌揣鍗曞彿
-					6: 'releaseNO' ,// 妫�楠屽崟鍙�
-					7: 'ItemModel',//鐗╂枡瑙勬牸
+					4: 'lotNo' ,// 鍒拌揣鍗曞彿
+					5: 'releaseNo' ,// 妫�楠屽崟鍙�
+					6: 'itemModel',//鐗╂枡瑙勬牸
 				};
 				this.selectedField = fieldMap[this.optionsIndex];
 			},
 			//鎼滅储鎸夐挳鐐瑰嚮浜嬩欢
 			handleSearch() {
+				// 褰撻�夋嫨椤圭洰鏃讹紝娓呯┖鎼滅储鍊�
+				if (this.optionsIndex === 0) {
+					this.searchValue = '';
+				}
 				this.init();
 			},
 			init() {
@@ -349,6 +359,23 @@
 				}
 				// 濡傛灉鏈夋楠岄」鐩紝鏄剧ず"寰呮楠�"
 				return '寰呮楠�';
+			},
+			
+			// 鍒ゆ柇鏄惁涓烘湭缁存姢涓旈潪绱ф�ユ斁琛�
+			isUnmaintainedAndNotEmergency(item) {
+				// 妫�鏌ユ槸鍚︿负鏈淮鎶わ紙娌℃湁妫�楠岄」鐩級
+				const isUnmaintained = !item.inspectionItemCount || item.inspectionItemCount === 0;
+				// 妫�鏌ユ槸鍚︿负闈炵揣鎬ユ斁琛�
+				const isNotEmergency = item.lotNo1 !== '绱ф�ユ斁琛岋紝璇峰嬁楠岄��!';
+				return isUnmaintained && isNotEmergency;
+			},
+			
+			// 鍒ゆ柇鏄惁涓哄緟鍒嗛厤鐘舵�侊紙鐗╂枡娌℃湁缁存姢妫�楠屽憳鎴栬�呰鐗╂枡鏈湪V_LLJ_USER閲岋級
+			isUnmaintainedItem(item) {
+				// 妫�鏌ョ墿鏂欐槸鍚﹀湪V_LLJ_USER瑙嗗浘涓紙鍗虫槸鍚︽湁缁存姢妫�楠屽憳锛�
+				// 濡傛灉item.fcode涓簄ull鎴杣ndefined锛岃鏄庤鐗╂枡鏈湪V_LLJ_USER瑙嗗浘涓�
+				// 鎴栬�呰鐗╂枡娌℃湁缁存姢妫�楠屽憳
+				return !item.fcode || item.fcode === null || item.fcode === '';
 			}
 		}
 	}
@@ -513,6 +540,11 @@
 		color: white;
 	}
 
+	.badge.unmaintained {
+		background-color: #1e8449;
+		color: white;
+	}
+
 	.badge.emergency {
 		background-color: #ff4d4f;
 		color: white;
@@ -663,5 +695,11 @@
 	    background-color: #ff0000; /* 绾㈣壊鑳屾櫙 */
 	    color: white;
 	}
+	
+	.status.unmaintained-not-emergency {
+	    background-color: #9c27b0; /* 绱壊鑳屾櫙 */
+	    color: white;
+	    box-shadow: 0 0 8px rgba(156, 39, 176, 0.3);
+	}
 	}
 </style>
\ No newline at end of file
diff --git a/pages/QC/RKJ/Add.vue b/pages/QC/RKJ/Add.vue
index 9791f40..ceb1d79 100644
--- a/pages/QC/RKJ/Add.vue
+++ b/pages/QC/RKJ/Add.vue
@@ -50,7 +50,7 @@
 					<input type="number" 
 						   v-model="formData.quantity" 
 						   placeholder="璇疯緭鍏ラ�佹鏁伴噺"
-						   class="form-input"
+						   class="large-quantity-input"
 						   @input="onQuantityChange"/>
 				</view>
 			</view>
@@ -76,6 +76,11 @@
 				<view class="form-row" v-if="formData.planQty">
 					<label class="form-label">宸ュ崟鏁伴噺锛�</label>
 					<span class="form-value">{{formData.planQty}}</span>
+				</view>
+				
+				<view class="form-row" v-if="formData.rbillNo">
+					<label class="form-label">閫佹鎵规锛�</label>
+					<span class="form-value">{{formData.rbillNo}}</span>
 				</view>
 			</view>
 		</view>
@@ -158,9 +163,42 @@
 			<view class="info-value">{{formData.billNo || formData.rBillNo}}</view>
 		</view>
 
+		<view class="dropdown-row">
+			<view class="info-label">閫佹鎵规锛�</view>
+			<view class="info-value">{{formData.rbillNo}}</view>
+		</view>
+
+		<!-- 鏂板涓嬫媺妗嗗尯鍩� -->
+		<view class="dropdown-row">
+			<view class="info-label">涓嶈壇鍘熷洜锛�</view>
+			<picker v-if="!isUpdate" :value="badreasonIndex" :range="badreasonOptions" @change="onBadreasonChange">
+				<view class="picker-text" :class="{ 'selected': badreason }">{{ badreason || '璇烽�夋嫨涓嶈壇鍘熷洜' }}</view>
+			</picker>
+			<view v-else class="info-value">{{ badreason }}</view>
+		</view>
+		<view class="dropdown-row">
+			<view class="info-label">鎵�灞炶溅闂达細</view>
+			<picker v-if="!isUpdate" :value="workshopIndex" :range="workshopOptions" @change="onWorkshopChange">
+				<view class="picker-text" :class="{ 'selected': WORKSHOP }">{{ WORKSHOP || '璇烽�夋嫨鎵�灞炶溅闂�' }}</view>
+			</picker>
+			<view v-else class="info-value">{{ WORKSHOP }}</view>
+		</view>
+		<view class="dropdown-row">
+			<view class="info-label">璇勫鐘舵�侊細</view>
+			<picker v-if="!isUpdate" :value="pstypeIndex" :range="pstypeOptions" @change="onPstypeChange">
+				<view class="picker-text" :class="{ 'selected': PSTYPE }">{{ PSTYPE || '璇烽�夋嫨璇勫鐘舵��' }}</view>
+			</picker>
+			<view v-else class="info-value">{{ PSTYPE }}</view>
+		</view>
+		<view class="dropdown-row">
+			<view class="info-label">涓嶈壇鎻忚堪锛�</view>
+			<input v-if="!isUpdate" v-model="formData.fngDesc" placeholder="璇疯緭鍏ヤ笉鑹弿杩�" class="input-field" @blur="saveFngDesc" />
+			<view v-else class="info-value">{{ formData.fngDesc }}</view>
+		</view>
+
 		<!-- 琛ㄥ崟涓婃柟鎿嶄綔鎸夐挳鍖� -->
 		<view class="top-action-buttons">
-			<button class="action-btn" v-if="tableData.length === 0 && formData.fsubmit != 1" @click="getInspectionItems">鑾峰彇妫�楠岄」鐩�</button>
+			<button class="action-btn" v-if="formData.fsubmit != 1" @click="getInspectionItems">鑾峰彇妫�楠岄」鐩�</button>
 		</view>
 
 		<!-- 妫�楠岄」鐩〃鏍� -->
@@ -203,8 +241,8 @@
 		<!-- 琛ㄥ崟涓嬫柟鎿嶄綔鎸夐挳鍖� -->
 		<view class="bottom-action-buttons">
 			<button class="action-btn small" @click="toImage">涓婁紶/鏌ョ湅鍥剧墖</button>
+			<button class="action-btn small" @click="viewAttachmentInfo">鏌ョ湅闄勪欢淇℃伅</button>
 			<button class="action-btn small" @click="saveRemarks" v-if="formData.fsubmit != 1">娣诲姞涓嶅悎鏍兼弿杩�</button>
-			<button class="action-btn small" @click="cleanResult" v-if="formData.fsubmit != 1">娓呴櫎妫�楠岀粨鏋�</button>
 			<button class="action-btn small primary" @click="submitInspection" v-if="formData.fsubmit != 1 && tableData.length > 0">鎻愪氦妫�楠�</button>
 		</view>
 
@@ -220,6 +258,106 @@
 				</form>
 				<button class="updateBut" @click="edit">淇敼</button>
 				<button @click="showPopup = !showPopup">鍙栨秷</button>
+			</view>
+		</view>
+
+		<!-- 闄勪欢璇︽儏寮圭獥 -->
+		<view v-if="showAttachmentDetail" class="overlay">
+			<view class="popup attachment-detail-popup">
+				<h3 class="attachment-popup-title">闄勪欢璇︽儏</h3>
+				<div class="attachment-popup-divider"></div>
+				<div v-if="selectedAttachment" class="attachment-detail-content">
+					<div class="attachment-detail-row"><span class="attachment-label">ID锛�</span><span>{{ Math.trunc(selectedAttachment.id) }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">闄勪欢鍚嶏細</span><span>{{ selectedAttachment.fattach }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">绫诲瀷锛�</span><span>{{ selectedAttachment.ftype }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">鐗堟湰锛�</span><span>{{ selectedAttachment.fversion }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">鍙楁帶鏃ユ湡锛�</span><span>{{ selectedAttachment.fdate }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">涓婁紶浜猴細</span><span>{{ selectedAttachment.createBy }}</span></div>
+					<div class="attachment-detail-row"><span class="attachment-label">涓婁紶鏃堕棿锛�</span><span>{{ selectedAttachment.createDate }}</span></div>
+					<div class="attachment-actions-detail">
+						<button class="attachment-action-btn preview-btn" 
+							@click="previewFtpFile(selectedAttachment)" 
+							v-if="isPreviewable(selectedAttachment.fattach)">
+							馃攳 鍦ㄧ嚎棰勮
+						</button>
+						<button class="attachment-action-btn download-btn" 
+							@click="downloadAttachment(selectedAttachment)">
+							馃摜 涓嬭浇鏂囦欢
+						</button>
+					</div>
+				</div>
+				<div v-else class="attachment-detail-empty">鏆傛棤闄勪欢淇℃伅</div>
+				<button class="attachment-popup-close" @click="closeAttachmentDetail">杩斿洖闄勪欢鍒楄〃</button>
+			</view>
+		</view>
+
+		<!-- 闄勪欢鍒楄〃寮圭獥 -->
+		<view v-if="showAttachmentPopup" class="overlay">
+			<view class="popup" style="width: 60vw; max-width: 500px;">
+				<h3>闄勪欢鍒楄〃</h3>
+				<div v-if="attachmentsLoading">鍔犺浇涓�...</div>
+				<div v-else-if="attachments.length === 0">鏆傛棤闄勪欢</div>
+				<ul class="attachment-list" v-else>
+					<li v-for="item in attachments" :key="item.id">
+						<div class="attachment-info">
+							<span class="attachment-name" @click="showAttachmentDetailDialog(item)">
+								{{ item.fattach }}
+							</span>
+							<div class="attachment-meta">
+								<span class="attachment-type">{{ item.ftype || '鏈煡绫诲瀷' }}</span>
+							</div>
+						</div>
+						<div class="attachment-actions">
+							<button class="secondary-btn" @click="showAttachmentDetailDialog(item)">璇︽儏</button>
+							<button class="secondary-btn preview-btn" @click="previewFtpFile(item)" 
+								v-if="isPreviewable(item.fattach)">棰勮</button>
+							<button class="secondary-btn" @click="downloadAttachment(item)">涓嬭浇</button>
+						</div>
+					</li>
+				</ul>
+				<button class="attachment-popup-close" @click="closeAttachmentPopup">鍏抽棴</button>
+			</view>
+		</view>
+		
+		<!-- 鏂囦欢棰勮寮圭獥 -->
+		<view v-if="showFilePreviewPopup" class="overlay">
+			<view class="popup file-preview-popup">
+				<h3 class="file-preview-title">{{ previewTitle }}</h3>
+				<div class="file-preview-divider"></div>
+				<div class="file-preview-content">
+					<!-- 鏂囨湰鍐呭棰勮 -->
+					<pre v-if="previewType === 'text'">{{ previewContent }}</pre>
+					
+					<!-- 鍥剧墖鍐呭棰勮 -->
+					<view v-else-if="previewType === 'image'" class="image-preview-container">
+						<image 
+							:src="previewContent" 
+							mode="aspectFit" 
+							class="preview-image-clickable"
+							@click="previewImageInPopup"
+							style="width: 100%; max-height: 400px; cursor: pointer;"
+						/>
+						<div class="image-zoom-hint">鐐瑰嚮鍥剧墖鍙斁澶ф煡鐪�</div>
+					</view>
+					
+					<!-- Excel 绛� Office 鏂囦欢鎻愮ず -->
+					<view v-else-if="previewType === 'excel'" class="unsupported-preview">
+						<view class="unsupported-icon">馃搳</view>
+						<view class="unsupported-text">Excel 鏂囦欢鏆備笉鏀寔鍦ㄧ嚎棰勮</view>
+						<view class="unsupported-hint">璇风偣鍑讳笅杞芥寜閽幏鍙栧畬鏁存枃浠�</view>
+					</view>
+					
+					<!-- 涓嶆敮鎸佺殑鏂囦欢绫诲瀷 -->
+					<view v-else class="unsupported-preview">
+						<view class="unsupported-icon">馃搫</view>
+						<view class="unsupported-text">姝ゆ枃浠舵牸寮忔殏涓嶆敮鎸侀瑙�</view>
+						<view class="unsupported-hint">璇风偣鍑讳笅杞芥寜閽幏鍙栧畬鏁存枃浠�</view>
+					</view>
+				</div>
+				<div class="file-preview-actions">
+					<button v-if="previewType !== 'text'" class="file-preview-btn download-btn" @click="downloadPreviewFile">馃摜 涓嬭浇鏂囦欢</button>
+					<button class="file-preview-btn close-btn" @click="closeFilePreview">鍏抽棴</button>
+				</div>
 			</view>
 		</view>
 	</view>
@@ -249,7 +387,8 @@
              workShop: "", // 宸ヤ綔杞﹂棿
              lineName: "", // 绾夸綋鍚嶇О
              quantity: "", // 閫佹鏁伴噺
-             planQty: "" // 宸ュ崟璁″垝鏁伴噺
+             planQty: "", // 宸ュ崟璁″垝鏁伴噺
+             fngDesc: "" // 涓嶈壇鎻忚堪
            },
     
           DAA020List: [],
@@ -275,6 +414,28 @@
           showPopup: false,
           departmentList: [], // 杞﹂棿鍒楄〃
           selectedDepartmentId: "", // 閫変腑鐨勮溅闂碔D
+          // 闄勪欢鐩稿叧鏁版嵁
+          attachments: [],
+          showAttachmentPopup: false,
+          attachmentsLoading: false,
+          selectedAttachment: null,
+          showAttachmentDetail: false,
+          showFilePreviewPopup: false,
+          previewContent: '',
+          previewTitle: '',
+          previewItemNo: '',
+          previewType: '', // 'text', 'image', 'excel', 'unsupported'
+          
+          // 鏂板涓嬫媺妗嗙浉鍏虫暟鎹�
+          badreason: '',
+          PSTYPE: '',
+          WORKSHOP: '',
+          badreasonOptions: ['', '澶栬涓嶈壇', '灏哄涓嶈壇', '鍖呰涓嶈壇', '鎬ц兘涓嶈壇', '瑁呴厤涓嶈壇', '瀹夎涓嶈壇'],
+          badreasonIndex: 0,
+          workshopOptions: ['', '鐢熶骇涓�閮�', '鐢熶骇浜岄儴', '娉ㄥ杞﹂棿', '鍏朵粬'],
+          workshopIndex: 0,
+          pstypeOptions: ['', '鐗归噰/璁╂浣跨敤', '鎸戦��/杩斿伐浣跨敤', '閫�璐�', '寰呭垽'],
+          pstypeIndex: 0,
         };
       },
       onLoad(options) {
@@ -451,6 +612,7 @@
             this.formData.itemId = ""; // 娓呯┖鐗╂枡ID
             this.formData.itemModel = "";
             this.formData.planQty = "";
+            this.formData.rbillNo = ""; // 娓呯┖閫佹鎵规鍙�
             this.tableData = [];
           })
         },
@@ -488,6 +650,7 @@
                 this.formData.itemId = ""; // 娓呯┖鐗╂枡ID
                 this.formData.itemModel = "";
                 this.formData.planQty = "";
+                this.formData.rbillNo = ""; // 娓呯┖閫佹鎵规鍙�
                 this.tableData = [];
               });
             }
@@ -504,19 +667,21 @@
             this.formData.itemNo = "";
             this.formData.itemId = "";
             this.formData.billNo = "";
+            this.formData.rbillNo = "";
             this.formData.quantity = "";
             this.formData.itemModel = "";
             this.tableData = [];
             return;
           }
           
-          // 鑷姩濉厖鐗╂枡淇℃伅
-          this.formData.itemName = data.daa003; // 浜у搧鍚嶇О
-          this.formData.itemNo = data.daa002; // 浜у搧缂栫爜
-          this.formData.itemId = data.itemId || ""; // 鐗╂枡ID
-          this.formData.billNo = data.daa001; // 宸ュ崟鍙蜂綔涓篵illNo
-          this.formData.itemModel = data.daa004 || ""; // 浜у搧瑙勬牸
-          this.formData.planQty = data.daa008 || ""; // 宸ュ崟鏁伴噺
+                     // 鑷姩濉厖鐗╂枡淇℃伅
+           this.formData.itemName = data.daa003; // 浜у搧鍚嶇О
+           this.formData.itemNo = data.daa002; // 浜у搧缂栫爜
+           this.formData.itemId = data.itemId || ""; // 鐗╂枡ID
+           this.formData.billNo = data.daa001; // 宸ュ崟鍙蜂綔涓篵illNo
+           this.formData.rbillNo = "鏃犳簮鍗�"; // 閫佹鎵规鍙凤紙浣跨敤榛樿鍊硷級
+           this.formData.itemModel = data.daa004 || ""; // 浜у搧瑙勬牸
+           this.formData.planQty = data.daa008 || ""; // 宸ュ崟鏁伴噺
           // 涓嶆竻绌洪�佹鏁伴噺锛屼繚鎸佺敤鎴峰凡杈撳叆鐨勫��
           this.tableData = [];
         },
@@ -591,6 +756,17 @@
               this.formData.itemName = data.itemName;
               this.formData.itemModel = data.itemModel;
               this.formData.daa015 = data.daa015;
+              
+              // 鍔犺浇涓嬫媺妗嗗瓧娈垫暟鎹�
+              this.badreason = data.blyy || '';
+              this.PSTYPE = data.pszt || '';
+              this.WORKSHOP = data.sscj || '';
+              this.formData.fngDesc = data.fngDesc || ''; // 鍔犺浇涓嶈壇鎻忚堪
+              
+              // 璁剧疆 picker 绱㈠紩
+              this.badreasonIndex = this.badreasonOptions.indexOf(this.badreason);
+              this.workshopIndex = this.workshopOptions.indexOf(this.WORKSHOP);
+              this.pstypeIndex = this.pstypeOptions.indexOf(this.PSTYPE);
               
               // 璁剧疆鐢熶骇绾垮悕绉帮紙濡傛灉鏈塴ineNo锛�
               if (this.formData.lineNo && this.formData.workShop) {
@@ -870,10 +1046,21 @@
                  return;
              }
              
+             // 妫�鏌ラ拤閽夋帹閫佹潯浠讹細PSZT涓哄緟鍒わ紝涓斾笉鑹師鍥犮�佷笉鑹弿杩般�佹墍灞炶溅闂翠笉涓虹┖
+             const shouldPushToDingTalk = this.PSTYPE === '寰呭垽' && 
+                                         this.badreason && 
+                                         this.formData.fngDesc && 
+                                         this.WORKSHOP;
+             
+             let confirmMessage = '纭畾瑕佹彁浜ゆ妫�楠屽崟鍚楋紵鎻愪氦鍚庡皢鏃犳硶淇敼銆�';
+             if (shouldPushToDingTalk) {
+                 confirmMessage += '\n\n婊¤冻閽夐拤鎺ㄩ�佹潯浠讹紝灏嗚嚜鍔ㄦ帹閫佸埌閽夐拤瀹℃壒娴佺▼銆�';
+             }
+             
              // 纭鎻愪氦
              uni.showModal({
                  title: '纭鎻愪氦',
-                 content: '纭畾瑕佹彁浜ゆ妫�楠屽崟鍚楋紵鎻愪氦鍚庡皢鏃犳硶淇敼銆�',
+                 content: confirmMessage,
                  success: (res) => {
                      if (res.confirm) {
                          this.$post({
@@ -884,7 +1071,11 @@
                              }
                          }).then(res => {
                              if (res.status == 0) {
-                                 this.$showMessage("妫�楠屽崟鎻愪氦鎴愬姛锛�");
+                                 let successMessage = "妫�楠屽崟鎻愪氦鎴愬姛锛�";
+                                 if (shouldPushToDingTalk) {
+                                     successMessage += "\n宸叉帹閫佸埌閽夐拤瀹℃壒娴佺▼銆�";
+                                 }
+                                 this.$showMessage(successMessage);
                                  // 鏇存柊鏈湴鐘舵��
                                  this.formData.fsubmit = 1;
                                  // 鍒锋柊鏁版嵁
@@ -899,7 +1090,523 @@
                      }
                  }
              });
-         }
+         },
+         viewAttachmentInfo() {
+            this.showAttachmentPopup = true; // 鍏堝脊绐�
+            this.attachmentsLoading = true;
+            this.attachments = [];
+            this.$post({
+              url: "/RKJ/getAttachments",
+              data: { itemNo: this.formData.itemNo }
+            }).then(res => {
+              this.attachmentsLoading = false;
+              if (res.status === 0) {
+                this.attachments = res.data.tbBillList;
+                // 涓烘瘡涓檮浠惰缃粯璁ゅ彲鐢ㄧ姸鎬�
+                this.attachments.forEach((item, index) => {
+                  this.$set(item, 'ftpAvailable', true); // 榛樿璁や负鏂囦欢鍙敤
+                  this.$set(item, 'checking', false);
+                });
+              } else if (res.status === 1 && res.message === "璇ユ楠屽崟鏈笂浼犻檮浠朵俊鎭紒") {
+                uni.showToast({ title: res.message, icon: "none" });
+              } else {
+                uni.showToast({ title: "鑾峰彇闄勪欢澶辫触", icon: "none" });
+              }
+            });
+          },
+        downloadAttachment(item) {
+          // 鍘婚櫎鎵�鏈夌┖鏍笺�佸叏瑙掔┖鏍笺�佸洖杞︺�佹崲琛�
+          const fileName = item.fattach.replace(/[\s\u3000\r\n]+/g, '').trim();
+          // 浣跨敤閰嶇疆鐨勬湇鍔″櫒鍦板潃鍜孎TP鏈嶅姟鍣ㄥ湴鍧�
+          const url = this.$store.state.serverInfo.serverAPI + "/RKJ/DownloadFtpFile?itemNo=" + encodeURIComponent(item.itemNo) + "&fileName=" + encodeURIComponent(fileName) + "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer);
+          
+          // 妫�鏌ヨ繍琛岀幆澧�
+          // #ifdef H5
+          // H5鐜锛氫娇鐢ㄦ祻瑙堝櫒涓嬭浇
+          this.downloadFileInBrowser(url, fileName);
+          // #endif
+          
+          // #ifdef APP-PLUS
+          // APP鐜锛氫娇鐢╱ni.downloadFile
+          this.downloadFileInApp(url, fileName);
+          // #endif
+          
+          // #ifdef MP
+          // 灏忕▼搴忕幆澧冿細浣跨敤uni.downloadFile
+          this.downloadFileInApp(url, fileName);
+          // #endif
+        },
+        // 鍦ㄦ祻瑙堝櫒涓笅杞芥枃浠�
+        downloadFileInBrowser(url, fileName) {
+          uni.showLoading({ title: '姝e湪鍑嗗涓嬭浇...' });
+          
+          // 鏂规硶1锛氬垱寤洪殣钘忕殑a鏍囩涓嬭浇
+          try {
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = fileName;
+            link.style.display = 'none';
+            document.body.appendChild(link);
+            link.click();
+            document.body.removeChild(link);
+            
+            uni.hideLoading();
+            uni.showToast({ 
+              title: '涓嬭浇宸插紑濮�', 
+              icon: 'success',
+              duration: 2000
+            });
+          } catch (error) {
+            console.log('a鏍囩涓嬭浇澶辫触锛屽皾璇晈indow.open鏂瑰紡:', error);
+            // 鏂规硶2锛氫娇鐢╳indow.open
+            try {
+              window.open(url, '_blank');
+              uni.hideLoading();
+              uni.showToast({ 
+                title: '涓嬭浇宸插紑濮�', 
+                icon: 'success',
+                duration: 2000
+              });
+            } catch (error2) {
+              console.log('window.open涓嬭浇澶辫触锛屽皾璇昮etch鏂瑰紡:', error2);
+              // 鏂规硶3锛氫娇鐢╢etch涓嬭浇
+              this.downloadFileWithFetch(url, fileName);
+            }
+          }
+        },
+        // 浣跨敤fetch涓嬭浇鏂囦欢
+        downloadFileWithFetch(url, fileName) {
+          fetch(url)
+            .then(response => {
+              if (!response.ok) {
+                throw new Error(`HTTP error! status: ${response.status}`);
+              }
+              return response.blob();
+            })
+            .then(blob => {
+              // 鍒涘缓blob URL
+              const blobUrl = window.URL.createObjectURL(blob);
+              
+              // 鍒涘缓涓嬭浇閾炬帴
+              const link = document.createElement('a');
+              link.href = blobUrl;
+              link.download = fileName;
+              link.style.display = 'none';
+              document.body.appendChild(link);
+              link.click();
+              document.body.removeChild(link);
+              
+              // 閲婃斁blob URL
+              window.URL.revokeObjectURL(blobUrl);
+              
+              uni.hideLoading();
+              uni.showToast({ 
+                title: '涓嬭浇鎴愬姛', 
+                icon: 'success',
+                duration: 2000
+              });
+            })
+            .catch(error => {
+              console.error('Fetch涓嬭浇澶辫触:', error);
+              uni.hideLoading();
+              if (error.message.includes('404')) {
+                uni.showModal({ 
+                  title: '鏂囦欢涓嶅瓨鍦�', 
+                  content: `璇ラ檮浠跺湪FTP鏈嶅姟鍣ㄤ笂涓嶅瓨鍦╜,
+                  showCancel: false 
+                });
+              } else {
+                uni.showModal({ 
+                  title: '涓嬭浇澶辫触', 
+                  content: `涓嬭浇澶辫触: ${error.message}`,
+                  showCancel: false 
+                });
+              }
+            });
+        },
+        // 鍦ˋPP涓笅杞芥枃浠�
+        downloadFileInApp(url, fileName) {
+          // #ifdef APP-PLUS
+          uni.showLoading({ title: '浠嶧TP鏈嶅姟鍣ㄤ笅杞戒腑...' });
+          
+          // Android 鑾峰彇瀛樺偍璺緞
+          const saveDir = plus.os.name === 'Android' ? plus.io.convertLocalFileSystemURL('_downloads/') : plus.io.convertLocalFileSystemURL('_documents/');
+          const filePath = `${saveDir}${fileName}`;
+          
+          const downloadTask = uni.downloadFile({
+            url: url,
+            filePath: filePath, // 鎸囧畾淇濆瓨璺緞
+            success: (res) => {
+              uni.hideLoading();
+              if (res.statusCode === 200) {
+                const fileInfo = {
+                  name: fileName,
+                  path: res.filePath || filePath,
+                  tempPath: res.tempFilePath
+                };
+                
+                uni.showModal({
+                  title: '涓嬭浇鎴愬姛',
+                  content: `鏂囦欢宸蹭繚瀛樺埌锛�${fileInfo.path}`,
+                  showCancel: true,
+                  confirmText: '鎵撳紑鏂囦欢',
+                  cancelText: '纭畾',
+                  success: (modalRes) => {
+                    if (modalRes.confirm) {
+                      // 鐢ㄦ埛閫夋嫨鎵撳紑鏂囦欢
+                      this.openFileInApp(fileInfo);
+                    }
+                  }
+                });
+              } else if (res.statusCode === 404) {
+                uni.showModal({ 
+                  title: '鏂囦欢涓嶅瓨鍦�', 
+                  content: `璇ラ檮浠跺湪FTP鏈嶅姟鍣ㄤ笂涓嶅瓨鍦╜,
+                  showCancel: false 
+                });
+              } else {
+                uni.showModal({ 
+                  title: '涓嬭浇澶辫触', 
+                  content: `鐘舵�佺爜锛�${res.statusCode}`,
+                  showCancel: false 
+                });
+              }
+            },
+            fail: (error) => {
+              uni.hideLoading();
+              console.error('涓嬭浇澶辫触:', error);
+              uni.showModal({ 
+                title: '涓嬭浇澶辫触', 
+                content: `缃戠粶閿欒锛�${error.errMsg}`,
+                showCancel: false 
+              });
+            }
+          });
+          
+          // 鐩戝惉涓嬭浇杩涘害
+          downloadTask.onProgressUpdate((res) => {
+            const progress = Math.round(res.progress);
+            uni.showLoading({ 
+              title: `涓嬭浇涓� ${progress}%`,
+              mask: true 
+            });
+          });
+          // #endif
+          
+          // #ifdef MP
+          // 灏忕▼搴忕幆澧冪殑绠�鍖栧疄鐜�
+          uni.showLoading({ title: '涓嬭浇涓�...' });
+          uni.downloadFile({
+            url: url,
+            success: (res) => {
+              uni.hideLoading();
+              if (res.statusCode === 200) {
+                uni.showToast({ title: '涓嬭浇瀹屾垚', icon: 'success' });
+              }
+            },
+            fail: (error) => {
+              uni.hideLoading();
+              uni.showModal({ title: '涓嬭浇澶辫触', content: error.errMsg, showCancel: false });
+            }
+          });
+          // #endif
+        },
+        // APP涓墦寮�鏂囦欢
+        openFileInApp(fileInfo) {
+          // #ifdef APP-PLUS
+          if (typeof plus !== 'undefined') {
+            const filePath = fileInfo.path || fileInfo.tempPath;
+            
+            // 灏濊瘯鎵撳紑鏂囦欢
+            plus.runtime.openFile(filePath, {}, (error) => {
+              console.error('鎵撳紑鏂囦欢澶辫触:', error);
+              uni.showModal({
+                title: '鏃犳硶鎵撳紑',
+                content: '绯荤粺涓病鏈夋壘鍒拌兘鎵撳紑姝ゆ枃浠剁殑搴旂敤绋嬪簭',
+                showCancel: false
+              });
+            });
+          }
+          // #endif
+        },
+        // 棰勮FTP鏂囦欢
+        previewFtpFile(item) {
+          const fileName = item.fattach.replace(/[\s\u3000\r\n]+/g, '').trim();
+          const fileExt = fileName.split('.').pop().toLowerCase();
+          
+          // 妫�鏌ユ枃浠剁被鍨嬫槸鍚︽敮鎸侀瑙�
+          if (!this.isPreviewable(fileName)) {
+            uni.showModal({
+              title: '涓嶆敮鎸侀瑙�',
+              content: '璇ユ枃浠剁被鍨嬩笉鏀寔鍦ㄧ嚎棰勮锛岃涓嬭浇鍚庢煡鐪�',
+              showCancel: false
+            });
+            return;
+          }
+          
+          const previewUrl = this.$store.state.serverInfo.serverAPI + "/RKJ/PreviewFtpFile?itemNo=" + encodeURIComponent(item.itemNo) + "&fileName=" + encodeURIComponent(fileName) + "&ftpServer=" + encodeURIComponent(this.$store.state.serverInfo.ftpServer);
+          
+          // 鏍规嵁鏂囦欢绫诲瀷杩涜涓嶅悓鐨勯瑙堝鐞�
+          if (['pdf'].includes(fileExt)) {
+            this.previewPdfFile(previewUrl, fileName);
+          } else if (['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(fileExt)) {
+            this.previewImageFile(previewUrl, fileName);
+          } else if (['txt'].includes(fileExt)) {
+            this.previewTextFile(previewUrl, fileName);
+          } else if (['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'].includes(fileExt)) {
+            this.previewOfficeFile(previewUrl, fileName);
+          } else {
+            // 灏濊瘯閫氱敤棰勮
+            this.previewGenericFile(previewUrl, fileName);
+          }
+        },
+        
+        // 棰勮PDF鏂囦欢
+        previewPdfFile(url, fileName) {
+          // 鍏堜笅杞絇DF鏂囦欢锛岃浆涓篵ase64鍚庨瑙�
+          uni.request({
+            url: url,
+            method: 'GET',
+            responseType: 'arraybuffer',
+            success: (res) => {
+              if (res.statusCode === 200) {
+                const base64Data = uni.arrayBufferToBase64(res.data);
+                // 瀛樺偍鍒板叏灞�鍙橀噺
+                getApp().globalData.tempPDF = base64Data;
+                uni.navigateTo({
+                  url: `/pages/fileView/pdfView`
+                });
+              } else {
+                this.handlePreviewError(res.statusCode, fileName);
+              }
+            },
+            fail: (error) => {
+              this.handlePreviewError(0, fileName, error.errMsg);
+            }
+          });
+        },
+        
+        // 棰勮鍥剧墖鏂囦欢
+        previewImageFile(url, fileName) {
+          // #ifdef APP-PLUS
+          // APP鐜锛氬厛涓嬭浇鍒版湰鍦板啀棰勮锛岄伩鍏嶇綉缁滃浘鐗囧姞杞介棶棰�
+          uni.showLoading({ title: '鍔犺浇鍥剧墖...' });
+          uni.downloadFile({
+            url: url,
+            success: (res) => {
+              uni.hideLoading();
+              if (res.statusCode === 200) {
+                // 浣跨敤鏈湴涓存椂璺緞
+                uni.navigateTo({
+                  url: `/pages/fileView/imageView?url=${encodeURIComponent(res.tempFilePath)}`
+                });
+              } else {
+                this.handlePreviewError(res.statusCode, fileName);
+              }
+            },
+            fail: (error) => {
+              uni.hideLoading();
+              this.handlePreviewError(0, fileName, error.errMsg);
+            }
+          });
+          // #endif
+          
+          // #ifdef H5 || MP
+          // H5鍜屽皬绋嬪簭锛氱洿鎺ヤ娇鐢ㄧ綉缁淯RL
+          uni.navigateTo({
+            url: `/pages/fileView/imageView?url=${encodeURIComponent(url)}`
+          });
+          // #endif
+        },
+        
+        // 棰勮鏂囨湰鏂囦欢
+        previewTextFile(url, fileName) {
+          // 鏂囨湰鏂囦欢鐩存帴鏄剧ず鍦ㄥ脊绐椾腑
+          uni.showLoading({ title: '鍔犺浇鏂囦欢鍐呭...' });
+          uni.request({
+            url: url,
+            method: 'GET',
+            success: (res) => {
+              uni.hideLoading();
+              if (res.statusCode === 200) {
+                const fileType = this.getFileType(fileName);
+                
+                if (fileType === 'text') {
+                  // 鏂囨湰鏂囦欢锛氭樉绀哄唴瀹�
+                  this.showFilePreview(res.data, fileName);
+                } else if (fileType === 'image') {
+                  // 鍥剧墖鏂囦欢锛氭樉绀哄浘鐗嘦RL
+                  this.showFilePreview(url, fileName);
+                } else {
+                  // 鍏朵粬鏂囦欢绫诲瀷锛氭樉绀烘彁绀轰俊鎭�
+                  this.showFilePreview('', fileName);
+                }
+              } else {
+                this.handlePreviewError(res.statusCode, fileName);
+              }
+            },
+            fail: (error) => {
+              uni.hideLoading();
+              this.handlePreviewError(0, fileName, error.errMsg);
+            }
+          });
+        },
+        
+        // 妫�娴嬫枃浠剁被鍨�
+        getFileType(fileName) {
+          const fileExt = fileName.split('.').pop().toLowerCase();
+          
+          if (['txt', 'log', 'md', 'csv', 'json', 'xml'].includes(fileExt)) {
+            return 'text';
+          } else if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(fileExt)) {
+            return 'image';
+          } else if (['xls', 'xlsx', 'doc', 'docx', 'ppt', 'pptx'].includes(fileExt)) {
+            return 'excel';
+          } else {
+            return 'unsupported';
+          }
+        },
+        
+        // 鏄剧ず鏂囦欢棰勮寮圭獥
+        showFilePreview(content, fileName) {
+          this.previewContent = content;
+          this.previewTitle = fileName;
+          this.previewItemNo = this.selectedAttachment?.itemNo || '';
+          this.previewType = this.getFileType(fileName);
+          this.showFilePreviewPopup = true;
+        },
+        
+        // 鍏抽棴鏂囦欢棰勮寮圭獥
+        closeFilePreview() {
+          this.showFilePreviewPopup = false;
+          this.previewContent = '';
+          this.previewTitle = '';
+          this.previewItemNo = '';
+          this.previewType = '';
+        },
+        
+        // 涓嬭浇棰勮鏂囦欢
+        downloadPreviewFile() {
+          const item = { fattach: this.previewTitle, itemNo: this.previewItemNo };
+          this.downloadAttachment(item);
+          this.closeFilePreview();
+        },
+        
+        // 鍦ㄥ脊绐椾腑棰勮鍥剧墖锛堟斁澶у姛鑳斤級
+        previewImageInPopup() {
+          // 浣跨敤uni.previewImage API瀹炵幇鍥剧墖鏀惧ぇ棰勮
+          uni.previewImage({
+            current: this.previewContent, // 褰撳墠鏄剧ず鍥剧墖鐨勯摼鎺�
+            urls: [this.previewContent], // 闇�瑕侀瑙堢殑鍥剧墖閾炬帴鍒楄〃
+            loop: false, // 鏄惁寮�鍚浘鐗囪疆鎾�
+            indicator: 'default', // 鍥剧墖鎸囩ず鍣ㄧ被鍨�
+            longPressActions: {
+              itemList: ['鍙戦�佺粰鏈嬪弸', '淇濆瓨鍥剧墖', '鏀惰棌'],
+              success: function (data) {
+                console.log('閫変腑浜嗙' + (data.tapIndex + 1) + '涓寜閽�');
+              },
+              fail: function (err) {
+                console.log(err.errMsg);
+              }
+            },
+            success: () => {
+              console.log('鍥剧墖棰勮鎴愬姛');
+            },
+            fail: (err) => {
+              console.error('鍥剧墖棰勮澶辫触:', err);
+              uni.showToast({
+                title: '鍥剧墖棰勮澶辫触',
+                icon: 'none'
+              });
+            }
+          });
+        },
+        
+        // 棰勮Office鏂囦欢
+        previewOfficeFile(url, fileName) {
+          // 鍏堟鏌xcel鏂囦欢锛屼娇鐢ㄤ笓闂ㄧ殑Excel棰勮椤甸潰
+          const fileExt = fileName.split('.').pop().toLowerCase();
+          if (['xls', 'xlsx'].includes(fileExt)) {
+            // Excel鏂囦欢棰勮
+            uni.request({
+              url: url,
+              method: 'GET',
+              responseType: 'arraybuffer',
+              success: (res) => {
+                if (res.statusCode === 200) {
+                  const base64Data = uni.arrayBufferToBase64(res.data);
+                  // 瀛樺偍 Base64 鏁版嵁鍒版湰鍦板瓨鍌�
+                  uni.setStorageSync('excelBase64Data', base64Data);
+                  uni.navigateTo({
+                    url: `/pages/fileView/excelView`
+                  });
+                } else {
+                  this.handlePreviewError(res.statusCode, fileName);
+                }
+              },
+              fail: (error) => {
+                this.handlePreviewError(0, fileName, error.errMsg);
+              }
+            });
+          } else if (['doc', 'docx'].includes(fileExt)) {
+            // Word鏂囦欢锛屽皾璇曚娇鐢╓ord棰勮椤甸潰鎴栬�呭井杞湪绾块瑙�
+            try {
+              const officePreviewUrl = `https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(url)}`;
+              // 濡傛灉鏈墂ebView椤甸潰锛屼娇鐢╳ebView棰勮
+              this.previewGenericFile(officePreviewUrl, fileName);
+            } catch (error) {
+              this.handlePreviewError(0, fileName, '涓嶆敮鎸佹Office鏂囦欢绫诲瀷鐨勯瑙�');
+            }
+          } else {
+            // 鍏朵粬Office鏂囦欢锛屼娇鐢ㄥ井杞湪绾块瑙堟湇鍔�
+            const officePreviewUrl = `https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(url)}`;
+            this.previewGenericFile(officePreviewUrl, fileName);
+          }
+        },
+        
+        // 閫氱敤鏂囦欢棰勮
+        previewGenericFile(url, fileName) {
+          // 鐢变簬娌℃湁閫氱敤鐨剋ebView椤甸潰锛屾樉绀烘彁绀哄苟鎻愪緵涓嬭浇
+          uni.showModal({
+            title: '鏂囦欢棰勮',
+            content: `鏂囦欢 "${fileName}" 闇�瑕佷笅杞藉悗鏌ョ湅锛屾槸鍚︾珛鍗充笅杞斤紵`,
+            showCancel: true,
+            confirmText: '涓嬭浇',
+            cancelText: '鍙栨秷',
+            success: (res) => {
+              if (res.confirm) {
+                const item = { fattach: fileName, itemNo: this.selectedAttachment.itemNo };
+                this.downloadAttachment(item);
+              }
+            }
+          });
+        },
+        
+        // 澶勭悊棰勮閿欒
+        handlePreviewError(statusCode, fileName, errorMsg = '') {
+          let message = '';
+          if (statusCode === 404) {
+            message = `鏂囦欢 ${fileName} 鍦‵TP鏈嶅姟鍣ㄤ笂涓嶅瓨鍦╜;
+          } else if (statusCode === 0) {
+            message = `棰勮澶辫触锛�${errorMsg}`;
+          } else {
+            message = `棰勮澶辫触锛岀姸鎬佺爜锛�${statusCode}`;
+          }
+          
+          uni.showModal({
+            title: '棰勮澶辫触',
+            content: message,
+            showCancel: true,
+            confirmText: '涓嬭浇',
+            cancelText: '鍙栨秷',
+            success: (res) => {
+              if (res.confirm) {
+                // 鐢ㄦ埛閫夋嫨涓嬭浇鏂囦欢
+                const item = { fattach: fileName, itemNo: this.selectedAttachment.itemNo };
+                this.downloadAttachment(item);
+              }
+            }
+          });
       },
       onShow() {
         //姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉�
@@ -907,6 +1614,104 @@
           this.init();
         }
       },
+        // 闄勪欢鐩稿叧鏂规硶
+        closeAttachmentPopup() {
+          this.showAttachmentPopup = false;
+        },
+        showAttachmentDetailDialog(item) {
+          console.log('鏌ョ湅璇︽儏', item);
+          this.selectedAttachment = item;
+          this.showAttachmentPopup = false;
+          this.showAttachmentDetail = true;
+          console.log('showAttachmentDetail:', this.showAttachmentDetail);
+        },
+        closeAttachmentDetail() {
+          this.showAttachmentDetail = false;
+          this.selectedAttachment = null;
+          this.showAttachmentPopup = true;
+        },
+        isPreviewable(filename) {
+          if (!filename) return false;
+          const ext = filename.trim().split('.').pop().toLowerCase();
+          // 鏀寔鍦ㄧ嚎棰勮鐨勬枃浠剁被鍨�
+          return [
+            'pdf',           // PDF鏂囦欢
+            'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp',  // 鍥剧墖鏂囦欢
+            'txt', 'log', 'md',  // 鏂囨湰鏂囦欢
+            'doc', 'docx',   // Word鏂囨。
+            'xls', 'xlsx',   // Excel琛ㄦ牸
+            'ppt', 'pptx',   // PowerPoint婕旂ず鏂囩
+            'csv'            // CSV鏂囦欢
+          ].includes(ext);
+        },
+        
+        // 涓嬫媺妗嗕簨浠跺鐞嗘柟娉�
+        onBadreasonChange(e) {
+          const index = e.detail.value;
+          this.badreasonIndex = index;
+          this.badreason = this.badreasonOptions[index];
+          this.saveDropdownFields('badreason');
+        },
+        onWorkshopChange(e) {
+          const index = e.detail.value;
+          this.workshopIndex = index;
+          this.WORKSHOP = this.workshopOptions[index];
+          this.saveDropdownFields('WORKSHOP');
+        },
+        onPstypeChange(e) {
+          const index = e.detail.value;
+          this.pstypeIndex = index;
+          this.PSTYPE = this.pstypeOptions[index];
+          this.saveDropdownFields('PSTYPE');
+        },
+        saveDropdownFields(fieldName) {
+          // 鐩存帴淇濆瓨鍒版暟鎹簱
+          const requestData = {
+            gid: this.formData.id,
+            releaseNo: this.formData.releaseNo,
+            BLYY: this.badreason || '',
+            SSCJ: this.WORKSHOP || '',
+            PSZT: this.PSTYPE || ''
+          };
+          console.log('鍙戦�佺殑鏁版嵁:', requestData);
+          console.log('badreason:', this.badreason);
+          console.log('WORKSHOP:', this.WORKSHOP);
+          console.log('PSTYPE:', this.PSTYPE);
+          console.log('閫夋嫨鐨勫瓧娈�:', fieldName);
+          this.$post({
+            url: "/RKJ/saveDropdownFields",
+            data: requestData
+          }).then(res => {
+            if (res && res.data && res.data.data && res.data.data.tbBillList && res.data.data.tbBillList.length > 0) {
+              // 寤惰繜閲嶆柊鍔犺浇鏁版嵁锛岀‘淇濇暟鎹簱鏇存柊瀹屾垚
+              setTimeout(() => {
+                this.init();
+              }, 500);
+            }
+          }).catch(err => {
+            console.error('淇濆瓨澶辫触锛�', err);
+          });
+        },
+        saveFngDesc() {
+          // 淇濆瓨涓嶈壇鎻忚堪鍒版暟鎹簱
+          this.$post({
+            url: "/RKJ/saveFngDesc",
+            data: {
+              gid: this.formData.id,
+              fngDesc: this.formData.fngDesc
+            }
+          }).then(res => {
+            if (res.status == 0) {
+              this.$showMessage("涓嶈壇鎻忚堪淇濆瓨鎴愬姛");
+            } else {
+              this.$showMessage("涓嶈壇鎻忚堪淇濆瓨澶辫触");
+            }
+          }).catch(error => {
+            console.error("淇濆瓨涓嶈壇鎻忚堪澶辫触:", error);
+            this.$showMessage("淇濆瓨涓嶈壇鎻忚堪澶辫触锛岃閲嶈瘯");
+          });
+        }
+      }
     };
     </script>
     
@@ -996,7 +1801,7 @@
 	}
 	
 	.form-label {
-		width: 120px;
+		width: 100px;
 		font-weight: 500;
 		color: #34495e;
 		flex-shrink: 0;
@@ -1040,22 +1845,55 @@
 	
 	.form-input {
 		flex: 1;
-		padding: 15px 12px;
-		border: 2px solid #e9ecef;
-		border-radius: 8px;
+		min-width: 200px;
+		padding: 8px 12px;
+		border: 1px solid #ddd;
+		border-radius: 4px;
 		font-size: 14px;
 		background-color: white;
-		color: #2c3e50;
-		transition: all 0.3s ease;
-		min-width: 200px;
-		width: 100%;
-		min-height: 50px;
+		box-sizing: border-box;
 	}
 	
-	.form-input:focus {
+	.large-quantity-input {
+		min-width: 200px !important;
+		padding: 8px 12px !important;
+		font-size: 14px !important;
+		border: 1px solid #ddd !important;
+		border-radius: 4px !important;
+		background-color: white !important;
+		transition: all 0.3s ease;
+		font-weight: normal !important;
+		text-align: left !important;
+		flex: 1;
+	}
+	
+	.large-quantity-input:focus {
 		border-color: #3498db;
-		box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
+		box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
 		outline: none;
+		background-color: white;
+	}
+	
+	.large-quantity-input::placeholder {
+		color: #95a5a6;
+		font-size: 16px;
+	}
+	
+	.input-field {
+		width: 100%;
+		padding: 8px 12px;
+		border: 1px solid #ddd;
+		border-radius: 4px;
+		font-size: 14px;
+		background-color: white;
+		box-sizing: border-box;
+		min-height: 36px;
+	}
+	
+	.input-field:focus {
+		outline: none;
+		border-color: #3498db;
+		box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
 	}
 	
 	.form-hint {
@@ -1481,4 +2319,341 @@
 			max-width: none;
 		}
 	}
+
+	/* 闄勪欢鐩稿叧鏍峰紡 */
+	.attachment-detail-popup {
+		width: 80vw;
+		max-width: 500px;
+		max-height: 70vh;
+		display: flex;
+		flex-direction: column;
+	}
+	
+	.attachment-popup-title {
+		font-size: 22px;
+		font-weight: 700;
+		color: #222;
+		margin-bottom: 8px;
+		letter-spacing: 1px;
+		text-align: center;
+	}
+	
+	.attachment-popup-divider {
+		height: 1px;
+		background: linear-gradient(90deg,#e0e7ef 0%,#f5f7fa 100%);
+		margin-bottom: 18px;
+	}
+	
+	.attachment-detail-content {
+		margin-bottom: 18px;
+	}
+	
+	.attachment-detail-row {
+		display: flex;
+		align-items: center;
+		margin-bottom: 8px;
+		font-size: 15px;
+	}
+	
+	.attachment-label {
+		min-width: 80px;
+		color: #1976d2;
+		font-weight: 500;
+		margin-right: 8px;
+	}
+	
+	.attachment-detail-empty {
+		color: #888;
+		text-align: center;
+		margin: 30px 0;
+		font-size: 16px;
+	}
+	
+	.attachment-popup-close {
+		margin-top: 18px;
+		width: 100%;
+		background: linear-gradient(90deg,#e0e0e0 0%,#f5f7fa 100%);
+		color: #444;
+		border-radius: 8px;
+		font-size: 16px;
+		padding: 10px 0;
+		border: none;
+		font-weight: 600;
+		letter-spacing: 1px;
+		transition: background 0.2s, color 0.2s;
+		box-shadow: 0 2px 8px rgba(60,60,60,0.06);
+	}
+	
+	.attachment-popup-close:hover {
+		background: linear-gradient(90deg,#bdbdbd 0%,#e0e0e0 100%);
+		color: #1976d2;
+	}
+	
+	/* 闄勪欢璇︽儏椤甸潰鐨勬搷浣滄寜閽� */
+	.attachment-actions-detail {
+		margin: 20px 0;
+		display: flex;
+		gap: 12px;
+		justify-content: center;
+		flex-wrap: wrap;
+	}
+	
+	.attachment-action-btn {
+		padding: 10px 20px;
+		border: none;
+		border-radius: 8px;
+		font-size: 14px;
+		font-weight: 600;
+		cursor: pointer;
+		transition: all 0.3s ease;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		min-width: 120px;
+		box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+	}
+	
+	.attachment-action-btn.preview-btn {
+		background: linear-gradient(135deg, #4CAF50, #45a049);
+		color: white;
+	}
+	
+	.attachment-action-btn.preview-btn:hover {
+		background: linear-gradient(135deg, #45a049, #3d8b40);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
+	}
+	
+	.attachment-action-btn.download-btn {
+		background: linear-gradient(135deg, #2196F3, #1976D2);
+		color: white;
+	}
+	
+	.attachment-action-btn.download-btn:hover {
+		background: linear-gradient(135deg, #1976D2, #1565C0);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
+	}
+	
+	/* 鏂囦欢棰勮寮圭獥鏍峰紡 */
+	.file-preview-popup {
+		width: 80vw;
+		max-width: 600px;
+		max-height: 70vh;
+		display: flex;
+		flex-direction: column;
+	}
+	
+	.file-preview-title {
+		font-size: 18px;
+		font-weight: 700;
+		color: #222;
+		margin-bottom: 8px;
+		text-align: center;
+		word-break: break-all;
+	}
+	
+	.file-preview-divider {
+		height: 1px;
+		background: linear-gradient(90deg,#e0e7ef 0%,#f5f7fa 100%);
+		margin-bottom: 16px;
+	}
+	
+	.file-preview-content {
+		flex: 1;
+		max-height: 400px;
+		overflow-y: auto;
+		background: #f8fafc;
+		border-radius: 8px;
+		padding: 16px;
+		margin-bottom: 16px;
+		border: 1px solid #e2e8f0;
+	}
+	
+	.file-preview-content pre {
+		font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
+		font-size: 12px;
+		line-height: 1.5;
+		color: #2d3748;
+		white-space: pre-wrap;
+		word-wrap: break-word;
+		margin: 0;
+	}
+	
+	/* 鍥剧墖棰勮鏍峰紡 */
+	.image-preview-container {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		min-height: 200px;
+	}
+	
+	/* 涓嶆敮鎸佹枃浠剁被鍨嬬殑鎻愮ず鏍峰紡 */
+	.unsupported-preview {
+		text-align: center;
+		padding: 40px 20px;
+		color: #666;
+	}
+	
+	.unsupported-icon {
+		font-size: 48px;
+		margin-bottom: 16px;
+	}
+	
+	.unsupported-text {
+		font-size: 16px;
+		font-weight: 600;
+		color: #333;
+		margin-bottom: 8px;
+	}
+	
+	.unsupported-hint {
+		font-size: 14px;
+		color: #999;
+		line-height: 1.4;
+	}
+	
+	.file-preview-actions {
+		display: flex;
+		gap: 12px;
+		justify-content: center;
+	}
+	
+	.file-preview-btn {
+		padding: 8px 20px;
+		border: none;
+		border-radius: 6px;
+		font-size: 14px;
+		font-weight: 600;
+		cursor: pointer;
+		transition: all 0.3s ease;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		min-width: 120px;
+	}
+	
+	.file-preview-btn.download-btn {
+		background: linear-gradient(135deg, #2196F3, #1976D2);
+		color: white;
+	}
+	
+	.file-preview-btn.download-btn:hover {
+		background: linear-gradient(135deg, #1976D2, #1565C0);
+		transform: translateY(-1px);
+	}
+	
+	.file-preview-btn.close-btn {
+		background: linear-gradient(135deg, #e0e0e0, #bdbdbd);
+		color: #444;
+	}
+	
+	.file-preview-btn.close-btn:hover {
+		background: linear-gradient(135deg, #bdbdbd, #9e9e9e);
+		transform: translateY(-1px);
+	}
+	
+	/* 鍒楄〃寮圭獥缇庡寲 */
+	.attachment-list {
+		padding: 0;
+		margin: 0;
+		list-style: none;
+		max-height: 300px;
+		overflow-y: auto;
+	}
+	
+	.attachment-list li {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 12px 0;
+		border-bottom: 1px solid #f0f0f0;
+	}
+	
+	.attachment-info {
+		flex: 1;
+		margin-right: 10px;
+	}
+	
+	.attachment-name {
+		color: #3498db;
+		cursor: pointer;
+		font-weight: 500;
+		transition: color 0.2s;
+		display: block;
+		margin-bottom: 4px;
+	}
+	
+	.attachment-name:hover {
+		color: #217dbb;
+		text-decoration: underline;
+	}
+	
+	.attachment-meta {
+		font-size: 12px;
+	}
+	
+	.attachment-type {
+		color: #7f8c8d;
+		font-style: italic;
+	}
+	
+	.attachment-actions {
+		display: flex;
+		gap: 8px;
+		flex-shrink: 0;
+	}
+	
+	.attachment-list .secondary-btn {
+		padding: 4px 10px;
+		font-size: 13px;
+		border-radius: 3px;
+		background: #f5f7fa;
+		color: #333;
+		border: 1px solid #dbe2ea;
+		transition: background 0.2s, color 0.2s;
+	}
+	
+	.attachment-list .secondary-btn:hover {
+		background: #e6f0fa;
+		color: #1976d2;
+	}
+	
+	.preview-btn {
+		background: #e8f5e8 !important;
+		color: #2e7d2e !important;
+		border-color: #a5d6a5 !important;
+	}
+	
+	.preview-btn:hover {
+		background: #d4eecc !important;
+		color: #1e5f1e !important;
+	}
+	
+	/* 鍥剧墖鏀惧ぇ棰勮鐩稿叧鏍峰紡 */
+	.preview-image-clickable {
+		transition: transform 0.2s ease;
+		border-radius: 8px;
+		box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+	}
+	
+	.preview-image-clickable:hover {
+		transform: scale(1.02);
+		box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+	}
+	
+	.image-zoom-hint {
+		text-align: center;
+		margin-top: 8px;
+		font-size: 12px;
+		color: #666;
+		font-style: italic;
+	}
+	
+	.image-preview-container {
+		position: relative;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+	}
 </style>
\ No newline at end of file
diff --git a/pages/QC/RKJ/List.vue b/pages/QC/RKJ/List.vue
index 7758c2b..05350a0 100644
--- a/pages/QC/RKJ/List.vue
+++ b/pages/QC/RKJ/List.vue
@@ -1,441 +1,441 @@
 <template>
-  <view class="inspection-app">
-    <!-- 鍒锋柊椤甸潰鍚庣殑椤堕儴鎻愮ず妗� -->
-    <view class="tips" :class="{ 'tips-ani': tipShow }">鍒锋柊鎴愬姛</view>
-
-    <!-- 椤堕儴绛涢�夊尯 -->
-    <view class="filter-section">
-      <view class="filter-controls">
-        <!-- 鐘舵�佸垏鎹㈡爣绛� -->
-        <view class="status-tabs">
-          <button :class="['tab-button', current === 0 ? 'active' : '']" @click="onClickItem({currentIndex: 0})">
-            {{items[0]}}
-          </button>
-          <button :class="['tab-button', current === 1 ? 'active' : '']" @click="onClickItem({currentIndex: 1})">
-            {{items[1]}}
-          </button>
+    <view class="inspection-app">
+      <!-- 鍒锋柊椤甸潰鍚庣殑椤堕儴鎻愮ず妗� -->
+      <view class="tips" :class="{ 'tips-ani': tipShow }">鍒锋柊鎴愬姛</view>
+  
+      <!-- 椤堕儴绛涢�夊尯 -->
+      <view class="filter-section">
+        <view class="filter-controls">
+          <!-- 鐘舵�佸垏鎹㈡爣绛� -->
+          <view class="status-tabs">
+            <button :class="['tab-button', current === 0 ? 'active' : '']" @click="onClickItem({currentIndex: 0})">
+              {{items[0]}}
+            </button>
+            <button :class="['tab-button', current === 1 ? 'active' : '']" @click="onClickItem({currentIndex: 1})">
+              {{items[1]}}
+            </button>
+          </view>
         </view>
       </view>
-    </view>
-
-    <!-- 妫�楠屽崟鍒楄〃 -->
-    <view class="inspection-list">
-      <!-- 妫�楠屽崟鍗$墖 -->
-      <view class="inspection-card" v-for="item in data" :key="item.id" @click="navigateToDetail(item)">
-        <view class="card-header">
-          <text class="card-title">妫�楠屽崟鍙�: {{item.releaseNo}}</text>
-          <text class="status pass" v-if="item.fcheckResu === '鍚堟牸'">鍚堟牸</text>
-          <text class="status unqualified" v-if="item.fcheckResu === '涓嶅悎鏍�'">涓嶅悎鏍�</text>
-          <text class="status pending" v-if="!item.fcheckResu">寰呮楠�</text>
-        </view>
-
-        <view class="card-body">
-          <view class="info-row">
-            <view class="info-item">
-              <text class="info-label">閫佹鎵规鍙�</text>
-              <text class="info-content">{{item.billNo}}</text>
+  
+      <!-- 妫�楠屽崟鍒楄〃 -->
+      <view class="inspection-list">
+        <!-- 妫�楠屽崟鍗$墖 -->
+        <view class="inspection-card" v-for="item in data" :key="item.id" @click="navigateToDetail(item)">
+          <view class="card-header">
+            <text class="card-title">妫�楠屽崟鍙�: {{item.releaseNo}}</text>
+            <text class="status pass" v-if="item.fcheckResu === '鍚堟牸'">鍚堟牸</text>
+            <text class="status unqualified" v-if="item.fcheckResu === '涓嶅悎鏍�'">涓嶅悎鏍�</text>
+            <text class="status pending" v-if="!item.fcheckResu">寰呮楠�</text>
+          </view>
+  
+          <view class="card-body">
+            <view class="info-row">
+              <view class="info-item">
+                <text class="info-label">宸ュ崟鍙�</text>
+                <text class="info-content">{{item.billNo}}</text>
+              </view>
+              <view class="info-item">
+                <text class="info-label">浜х嚎</text>
+                <text class="info-content">{{item.daa015}}</text>
+              </view>
             </view>
-            <view class="info-item">
-              <text class="info-label">浜х嚎</text>
-              <text class="info-content">{{item.daa015}}</text>
+  
+            <view class="info-row">
+              <view class="info-item">
+                <text class="info-label">鐗╂枡淇℃伅</text>
+                <text class="info-content">{{item.itemNo}}<br>{{item.itemName}}</text>
+              </view>
+              <view class="info-item">
+                <text class="info-label">浜у搧鍨嬪彿</text>
+                <text class="info-content">{{item.itemModel}}</text>
+              </view>
+            </view>
+  
+            <view class="info-row">
+              <view class="info-item">
+                <text class="info-label">閫佹鏁伴噺</text>
+                <text class="info-content highlight">{{item.quantity}}</text>
+              </view>
+              <view class="info-item">
+                <text class="info-label">鍒涘缓浜�</text>
+                <text class="info-content">{{item.createBy}}</text>
+              </view>
+            </view>
+  
+            <view class="info-row">
+              <view class="info-item">
+                <text class="info-label">閫佹鎵规</text>
+                <text class="info-content">{{item.rbillNo}}</text>
+              </view>
+              <view class="info-item">
+                <text class="info-label">妫�楠屼汉</text>
+                <text class="info-content">{{item.fcheckBy}}</text>
+              </view>
+            </view>
+  
+            <view class="meta-info">
+              <text class="meta-item">
+                <uni-icons type="calendar" size="14" color="#95a5a6"></uni-icons>
+                {{item.createDate}}
+              </text>
+              <text class="meta-item" v-if="item.fcheckResu">
+                <uni-icons type="checkmarkempty" size="14" color="#95a5a6"></uni-icons>
+                妫�娴嬬粨鏋�: {{item.fcheckResu}}
+              </text>
             </view>
           </view>
-
-          <view class="info-row">
-            <view class="info-item">
-              <text class="info-label">鐗╂枡淇℃伅</text>
-              <text class="info-content">{{item.itemNo}}<br>{{item.itemName}}</text>
-            </view>
-            <view class="info-item">
-              <text class="info-label">浜у搧鍨嬪彿</text>
-              <text class="info-content">{{item.itemModel}}</text>
-            </view>
+  
+          <view class="card-actions">
+            <button class="primary" @click.stop="navigateToDetail(item)">
+              {{current === 0 ? '寮�濮嬫楠�' : '鏌ョ湅璇︽儏'}}
+            </button>
           </view>
-
-          <view class="info-row">
-            <view class="info-item">
-              <text class="info-label">閫佹鏁伴噺</text>
-              <text class="info-content highlight">{{item.quantity}}</text>
-            </view>
-            <view class="info-item">
-              <text class="info-label">鎶ュ伐浜�</text>
-              <text class="info-content">{{item.bgr}}</text>
-            </view>
-          </view>
-
-          <view class="info-row">
-            <view class="info-item">
-              <text class="info-label">妫�楠屼汉</text>
-              <text class="info-content">{{item.fcheckBy}}</text>
-            </view>
-            <view class="info-item">
-              <text class="info-label">鍒涘缓浜�</text>
-              <text class="info-content">{{item.createBy}}</text>
-            </view>
-          </view>
-
-          <view class="meta-info">
-            <text class="meta-item">
-              <uni-icons type="calendar" size="14" color="#95a5a6"></uni-icons>
-              {{item.createDate}}
-            </text>
-            <text class="meta-item" v-if="item.fcheckResu">
-              <uni-icons type="checkmarkempty" size="14" color="#95a5a6"></uni-icons>
-              妫�娴嬬粨鏋�: {{item.fcheckResu}}
-            </text>
-          </view>
-        </view>
-
-        <view class="card-actions">
-          <button class="primary" @click.stop="navigateToDetail(item)">
-            {{current === 0 ? '寮�濮嬫楠�' : '鏌ョ湅璇︽儏'}}
-          </button>
         </view>
       </view>
+  
+      <!-- 鏂板鎸夐挳 -->
+      <view class="plus-button" @click="handleFabClick">
+        +
+      </view>
     </view>
-
-    <!-- 鏂板鎸夐挳 -->
-    <view class="plus-button" @click="handleFabClick">
-      +
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  components: {},
-  data() {
-    return {
-      items: ['鏈彁浜�', '宸叉彁浜�'],
-      current: 0,
-      data: [],
-      pageIndex: 1,
-      limit: 20,
-      totalPage: 0,
-      totalCount: 0,
-      noData: false, // 娌℃湁鏇村鏁版嵁浜�
-      isLoading: false, // 鏄惁姝e湪鍔犺浇
-      tipShow: false
-    };
-  },
-  onLoad() {
-    //椤甸潰鍔犺浇鏃惰皟鐢ㄧ殑浜嬩欢
-    this.init();
-  },
-  methods: {
-    init() {
-
-      let result = "鏈畬鎴�";
-      if (this.current == 1) {
-        result = "宸插畬鎴�";
-      }
-
-      if (this.isLoading) return; // 濡傛灉姝e湪鍔犺浇鍒欎笉缁х画鎵ц
-
-      this.isLoading = true;
-
+  </template>
+  
+  <script>
+  export default {
+    components: {},
+    data() {
+      return {
+        items: ['鏈彁浜�', '宸叉彁浜�'],
+        current: 0,
+        data: [],
+        pageIndex: 1,
+        limit: 20,
+        totalPage: 0,
+        totalCount: 0,
+        noData: false, // 娌℃湁鏇村鏁版嵁浜�
+        isLoading: false, // 鏄惁姝e湪鍔犺浇
+        tipShow: false
+      };
+    },
+    onLoad() {
       //椤甸潰鍔犺浇鏃惰皟鐢ㄧ殑浜嬩欢
-      this.$post({
-        url: "/RKJ/getPage",
-        data: {
-          pageIndex: this.pageIndex,
-          limit: this.limit,
-          createUser: this.$loginInfo.account,
-          result: result
-        }
-      }).then(res => {
-        if (this.pageIndex === 1) {
-          // 濡傛灉鏄涓�椤碉紝鐩存帴瑕嗙洊鍘熸暟鎹�
-          this.data = res.data.tbBillList;
-        } else {
+      this.init();
+    },
+    methods: {
+            init() {
 
-          if (res.data.tbBillList.length > 0) {
-            // 濡傛灉鏄笅涓�椤碉紝杩藉姞鏂版暟鎹�
-            this.data = [...this.data, ...res.data.tbBillList];
+        let fsubmit = null; // 榛樿鏌ヨ鎵�鏈夋湭鎻愪氦鐨勮褰曪紙鍖呮嫭fsubmit = 0鍜宖submit涓虹┖锛�
+        if (this.current == 1) {
+          fsubmit = "1"; // 宸叉彁浜�
+        }
+
+        if (this.isLoading) return; // 濡傛灉姝e湪鍔犺浇鍒欎笉缁х画鎵ц
+
+        this.isLoading = true;
+
+        //椤甸潰鍔犺浇鏃惰皟鐢ㄧ殑浜嬩欢
+        this.$post({
+          url: "/RKJ/getPage",
+          data: {
+            pageIndex: this.pageIndex,
+            limit: this.limit,
+            createUser: this.$loginInfo.account,
+            fsubmit: fsubmit
           }
-
+        }).then(res => {
+          if (this.pageIndex === 1) {
+            // 濡傛灉鏄涓�椤碉紝鐩存帴瑕嗙洊鍘熸暟鎹�
+            this.data = res.data.tbBillList;
+          } else {
+  
+            if (res.data.tbBillList.length > 0) {
+              // 濡傛灉鏄笅涓�椤碉紝杩藉姞鏂版暟鎹�
+              this.data = [...this.data, ...res.data.tbBillList];
+            }
+  
+          }
+          this.totalCount = res.data.totalCount;
+          this.totalPage = Math.ceil(this.totalCount / this.limit);
+  
+          this.noData = this.pageIndex >= this.totalPage;
+          this.isLoading = false; // 缁撴潫鍔犺浇
+        }).catch(() => {
+          this.isLoading = false; // 鍑虹幇閿欒鏃剁粨鏉熷姞杞�
+        });
+      },
+      handleFabClick() {
+        uni.navigateTo({
+          url: 'Add?id'
+        });
+      },
+      onClickItem(index) {
+        if (this.current !== index.currentIndex) {
+          this.current = index.currentIndex;
+          this.data = [];
+          this.pageIndex = 1;
+          this.init();
         }
-        this.totalCount = res.data.totalCount;
-        this.totalPage = Math.ceil(this.totalCount / this.limit);
-
-        this.noData = this.pageIndex >= this.totalPage;
-        this.isLoading = false; // 缁撴潫鍔犺浇
-      }).catch(() => {
-        this.isLoading = false; // 鍑虹幇閿欒鏃剁粨鏉熷姞杞�
-      });
+      },
+      navigateToDetail(item) {
+        uni.navigateTo({
+          url: 'Add?id=' + item.id + '&releaseNo=' + item.releaseNo
+        });
+      },
     },
-    handleFabClick() {
-      uni.navigateTo({
-        url: 'Add?id'
-      });
+    /**
+     * 涓嬫媺鍒锋柊鍥炶皟鍑芥暟
+     */
+    onPullDownRefresh() {
+      this.pageIndex = 1;
+      //閲嶆柊鎵ц涓�閬嶆煡璇�
+      this.init();
+      this.tipShow = true;
+      //鍏抽棴鍔ㄧ敾
+      uni.stopPullDownRefresh();
+  
+      setTimeout(function () {
+        this.tipShow = false;
+      }, 3000);
     },
-    onClickItem(index) {
-      if (this.current !== index.currentIndex) {
-        this.current = index.currentIndex;
-        this.data = [];
-        this.pageIndex = 1;
-        this.init();
-      }
+    /**
+     * 涓婃媺鍔犺浇鍥炶皟鍑芥暟
+     */
+    onReachBottom() {
+      if (this.noData || this.isLoading) return;
+      this.pageIndex++;
+      this.init(); // 鍔犺浇鏇村鏁版嵁
     },
-    navigateToDetail(item) {
-      uni.navigateTo({
-        url: 'Add?id=' + item.id + '&releaseNo=' + item.releaseNo
-      });
-    },
-  },
-  /**
-   * 涓嬫媺鍒锋柊鍥炶皟鍑芥暟
-   */
-  onPullDownRefresh() {
-    this.pageIndex = 1;
-    //閲嶆柊鎵ц涓�閬嶆煡璇�
-    this.init();
-    this.tipShow = true;
-    //鍏抽棴鍔ㄧ敾
-    uni.stopPullDownRefresh();
-
-    setTimeout(function () {
-      this.tipShow = false;
-    }, 3000);
-  },
-  /**
-   * 涓婃媺鍔犺浇鍥炶皟鍑芥暟
-   */
-  onReachBottom() {
-    if (this.noData || this.isLoading) return;
-    this.pageIndex++;
-    this.init(); // 鍔犺浇鏇村鏁版嵁
-  },
-  onShow() {
-    //姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉�
-    this.pageIndex = 1;
-    this.data = [];
-    //this.current = 0
-    this.init();
+    onShow() {
+      //姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉�
+      this.pageIndex = 1;
+      this.data = [];
+      //this.current = 0
+      this.init();
+    }
+  };
+  </script>
+  
+  <style scoped>
+  /* 鍩虹鏍峰紡閲嶇疆 */
+  .inspection-app {
+    padding: 10px;
+    background-color: #f5f7fa;
+    min-height: 100vh;
   }
-};
-</script>
-
-<style scoped>
-/* 鍩虹鏍峰紡閲嶇疆 */
-.inspection-app {
-  padding: 10px;
-  background-color: #f5f7fa;
-  min-height: 100vh;
-}
-
-/* 椤堕儴绛涢�夊尯 */
-.filter-section {
-  margin-bottom: 24px;
-}
-
-.filter-controls {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.status-tabs {
-  display: flex;
-  border-radius: 4px;
-  overflow: hidden;
-  background-color: #ecf0f1;
-  width: 300px;
-}
-
-.tab-button {
-  padding: 0px 16px;
-  border: none;
-  background: none;
-  font-size: 14px;
-  transition: all 0.3s;
-  margin: 0;
-  height: 35px;
-  flex: 1;
-}
-
-.tab-button.active {
-  background-color: #3498db;
-  color: white;
-}
-
-/* 妫�楠屽崟鍒楄〃 */
-.inspection-list {
-  display: flex;
-  flex-direction: column;
-  gap: 20px;
-}
-
-/* 妫�楠屽崟鍗$墖 */
-.inspection-card {
-  background-color: white;
-  border-radius: 8px;
-  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
-  overflow: hidden;
-  transition: all 0.3s;
-}
-
-.card-header {
-  padding: 16px;
-  border-bottom: 1px solid #eee;
-  display: flex;
-  align-items: center;
-}
-
-.card-title {
-  font-size: 16px;
-  font-weight: 600;
-  flex: 1;
-  margin: 0 8px;
-}
-
-.status {
-  font-size: 12px;
-  padding: 4px 8px;
-  border-radius: 4px;
-  font-weight: 500;
-}
-
-.status.pending {
-  background-color: #f39c12;
-  color: white;
-}
-
-.status.pass {
-  background-color: #00cd00;
-  color: white;
-}
-
-.status.unqualified {
-  background-color: #ff0000;
-  color: white;
-}
-
-.card-body {
-  padding: 16px;
-}
-
-.info-row {
-  display: flex;
-  margin-bottom: 12px;
-  gap: 16px;
-}
-
-.info-item {
-  flex: 1;
-}
-
-.info-label {
-  display: block;
-  font-size: 12px;
-  color: #7f8c8d;
-  margin-bottom: 4px;
-}
-
-.info-content {
-  font-size: 14px;
-  color: #2c3e50;
-  line-height: 1.5;
-}
-
-.highlight {
-  font-weight: 600;
-  color: #2c3e50;
-  font-size: 16px;
-}
-
-.meta-info {
-  display: flex;
-  gap: 16px;
-  font-size: 12px;
-  color: #95a5a6;
-  margin-top: 12px;
-}
-
-.meta-item {
-  display: flex;
-  align-items: center;
-  gap: 4px;
-}
-
-.card-actions {
-  padding: 12px 16px;
-  border-top: 1px solid #eee;
-  display: flex;
-  gap: 8px;
-}
-
-button {
-  padding: 8px 16px;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  background-color: white;
-  font-size: 14px;
-  transition: all 0.2s;
-  flex: 1;
-}
-
-button.primary {
-  background-color: #3498db;
-  color: white;
-  border-color: #2980b9;
-}
-
-.plus-button {
-  position: fixed;
-  bottom: 20px;
-  right: 20px;
-  width: 60px;
-  height: 60px;
-  border-radius: 50%;
-  background-color: #3498db;
-  color: #ffffff;
-  text-align: center;
-  line-height: 59px;
-  font-size: 24px;
-  cursor: pointer;
-  z-index: 1000;
-  margin-bottom: 35px;
-}
-
-.tips {
-  color: #67c23a;
-  font-size: 14px;
-  line-height: 40px;
-  text-align: center;
-  background-color: #f0f9eb;
-  height: 0;
-  opacity: 0;
-  transform: translateY(-100%);
-  transition: all 0.3s;
-}
-
-.tips-ani {
-  transform: translateY(0);
-  height: 40px;
-  opacity: 1;
-}
-
-/* 鍝嶅簲寮忚璁� */
-@media (min-width: 768px) {
+  
+  /* 椤堕儴绛涢�夊尯 */
+  .filter-section {
+    margin-bottom: 24px;
+  }
+  
+  .filter-controls {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+  
+  .status-tabs {
+    display: flex;
+    border-radius: 4px;
+    overflow: hidden;
+    background-color: #ecf0f1;
+    width: 300px;
+  }
+  
+  .tab-button {
+    padding: 0px 16px;
+    border: none;
+    background: none;
+    font-size: 14px;
+    transition: all 0.3s;
+    margin: 0;
+    height: 35px;
+    flex: 1;
+  }
+  
+  .tab-button.active {
+    background-color: #3498db;
+    color: white;
+  }
+  
+  /* 妫�楠屽崟鍒楄〃 */
   .inspection-list {
-    display: grid;
-    grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+  }
+  
+  /* 妫�楠屽崟鍗$墖 */
+  .inspection-card {
+    background-color: white;
+    border-radius: 8px;
+    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
+    overflow: hidden;
+    transition: all 0.3s;
+  }
+  
+  .card-header {
+    padding: 16px;
+    border-bottom: 1px solid #eee;
+    display: flex;
+    align-items: center;
+  }
+  
+  .card-title {
+    font-size: 16px;
+    font-weight: 600;
+    flex: 1;
+    margin: 0 8px;
+  }
+  
+  .status {
+    font-size: 12px;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-weight: 500;
+  }
+  
+  .status.pending {
+    background-color: #f39c12;
+    color: white;
+  }
+  
+  .status.pass {
+    background-color: #00cd00;
+    color: white;
+  }
+  
+  .status.unqualified {
+    background-color: #ff0000;
+    color: white;
+  }
+  
+  .card-body {
+    padding: 16px;
   }
   
   .info-row {
-    flex-direction: row;
-  }
-}
-
-@media (min-width: 300px) {
-  .inspection-list {
-    display: grid;
-    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+    display: flex;
+    margin-bottom: 12px;
+    gap: 16px;
   }
   
-  .info-row {
-    flex-direction: row;
+  .info-item {
+    flex: 1;
   }
-}
-</style>
\ No newline at end of file
+  
+  .info-label {
+    display: block;
+    font-size: 12px;
+    color: #7f8c8d;
+    margin-bottom: 4px;
+  }
+  
+  .info-content {
+    font-size: 14px;
+    color: #2c3e50;
+    line-height: 1.5;
+  }
+  
+  .highlight {
+    font-weight: 600;
+    color: #2c3e50;
+    font-size: 16px;
+  }
+  
+  .meta-info {
+    display: flex;
+    gap: 16px;
+    font-size: 12px;
+    color: #95a5a6;
+    margin-top: 12px;
+  }
+  
+  .meta-item {
+    display: flex;
+    align-items: center;
+    gap: 4px;
+  }
+  
+  .card-actions {
+    padding: 12px 16px;
+    border-top: 1px solid #eee;
+    display: flex;
+    gap: 8px;
+  }
+  
+  button {
+    padding: 8px 16px;
+    border: 1px solid #ddd;
+    border-radius: 4px;
+    background-color: white;
+    font-size: 14px;
+    transition: all 0.2s;
+    flex: 1;
+  }
+  
+  button.primary {
+    background-color: #3498db;
+    color: white;
+    border-color: #2980b9;
+  }
+  
+  .plus-button {
+    position: fixed;
+    bottom: 20px;
+    right: 20px;
+    width: 60px;
+    height: 60px;
+    border-radius: 50%;
+    background-color: #3498db;
+    color: #ffffff;
+    text-align: center;
+    line-height: 59px;
+    font-size: 24px;
+    cursor: pointer;
+    z-index: 1000;
+    margin-bottom: 35px;
+  }
+  
+  .tips {
+    color: #67c23a;
+    font-size: 14px;
+    line-height: 40px;
+    text-align: center;
+    background-color: #f0f9eb;
+    height: 0;
+    opacity: 0;
+    transform: translateY(-100%);
+    transition: all 0.3s;
+  }
+  
+  .tips-ani {
+    transform: translateY(0);
+    height: 40px;
+    opacity: 1;
+  }
+  
+  /* 鍝嶅簲寮忚璁� */
+  @media (min-width: 768px) {
+    .inspection-list {
+      display: grid;
+      grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
+    }
+    
+    .info-row {
+      flex-direction: row;
+    }
+  }
+  
+  @media (min-width: 300px) {
+    .inspection-list {
+      display: grid;
+      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+    }
+    
+    .info-row {
+      flex-direction: row;
+    }
+  }
+  </style>
\ No newline at end of file
diff --git a/store/index.js b/store/index.js
index d50ed24..0728463 100644
--- a/store/index.js
+++ b/store/index.js
@@ -10,9 +10,9 @@
 			networkFlag:'鍐呯綉', 
 			serverURLInt:'http://192.168.11.251:10055',//鏈嶅姟鍣ㄤ綋妫� 10.0.1.104:10054
 			serverURL:'http://localhost:10055',//鏈湴璋冭瘯鍦板潃
-			//serverAPI:'http://localhost:5184/api',//褰撳墠姝e湪浣跨敤鐨勬湇鍔″櫒,榛樿涓哄缃�  localhost
+			serverAPI:'http://localhost:5184/api',//褰撳墠姝e湪浣跨敤鐨勬湇鍔″櫒,榛樿涓哄缃�  localhost
 			//serverAPI:'http://192.168.1.22:10054/api',//鍐呯綉 
-			serverAPI:'http://36.26.21.214:10055/api',
+			serverAPI:'http://36.26.21.214:10054/api',
 			ftpServer:'ftp://36.26.21.214',//FTP鏈嶅姟鍣ㄥ湴鍧�
 		}
 	},

--
Gitblit v1.9.3