From 4606f230a2c64fef2f54f61a35e67acd087df51c Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期三, 30 七月 2025 08:56:56 +0800
Subject: [PATCH] 1111

---
 pages/QC/LLJ/Add.vue | 1411 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 958 insertions(+), 453 deletions(-)

diff --git a/pages/QC/LLJ/Add.vue b/pages/QC/LLJ/Add.vue
index e18fbc9..c1c52b0 100644
--- a/pages/QC/LLJ/Add.vue
+++ b/pages/QC/LLJ/Add.vue
@@ -1,482 +1,987 @@
 <template>
-	<view>
-		<view class="form-container">
-			<form :modelValue="formData">
-				<view class="form-group">
-					<label class="form-label">妫�楠屽崟鍙�:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.releaseNo" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">鍒拌揣鍗曞彿:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.lotNo" />
-				</view>
-				<!--  <view class="form-group">
-          <label class="form-label">鍒涘缓浜�:</label>
-          <input class="form-input" disabled="true" type="text" v-model="formData.createBy"/>
-        </view>-->
-				<view class="form-group">
-					<label class="form-label">鍒涘缓鏃堕棿:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.createDate" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">鐗╂枡缂栫爜:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.itemNo" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">鐗╂枡鍚嶇О:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.itemName" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">瑙勬牸鍨嬪彿:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.itemModel" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">鏁伴噺:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.fcovertQty" />
-				</view>
-				<view class="form-group">
-					<label class="form-label">涓嶅悎鏍兼弿杩�:</label>
-					<input class="form-input" disabled="true" type="text" v-model="formData.remarks" />
-				</view>
-			</form>
-		</view>
+  <view class="page-container">
+    <!-- 琛ㄥ崟鍗$墖 -->
+    <view class="form-card">
+      <view class="form-title">
+        <view class="title-icon">馃搵</view>
+        <span>妫�楠屽崟淇℃伅</span>
+      </view>
+      <view class="form-container">
+        <form :modelValue="formData">
+          <view class="form-grid">
+            <view class="form-group">
+              <label class="form-label">妫�楠屽崟鍙�:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.releaseNo" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鍒拌揣鍗曞彿:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.lotNo" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鍒涘缓鏃堕棿:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.createDate" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鐗╂枡缂栫爜:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.itemNo" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鐗╂枡鍚嶇О:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.itemName" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鐗╂枡瑙勬牸:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.itemModel" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">鏁伴噺:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.fcovertQty" />
+            </view>
+            <view class="form-group">
+              <label class="form-label">涓嶅悎鏍兼弿杩�:</label>
+              <input class="form-input" disabled="true" type="text" v-model="formData.remarks" />
+            </view>
+          </view>
+        </form>
+      </view>
+    </view>
 
-		<view class="list-container">
-			<uni-table ref="table" border emptyText="鏆傛棤鏇村鏁版嵁">
-				<uni-tr>
-					<uni-th align="center" class="th" style="color: #FFFFFF;">妫�楠岄」鐩�</uni-th>
-					<uni-th align="center" class="th" style="color: #FFFFFF">妫�楠屾弿杩�</uni-th>
-					<uni-th align="center" class="th" style="color: #FFFFFF">鏄惁鍚堟牸</uni-th>
-					<uni-th align="center" class="th" style="color: #FFFFFF">璁板綍(鐐瑰嚮)</uni-th>
-				</uni-tr>
-				<uni-tr v-for="(item, index) in tableData" :key="index">
-					<uni-td align="center">
-						<input class="form-input" disabled="true" type="text" v-model="item.fcheckItem" />
-					</uni-td>
-					<uni-td align="center">
-						<input class="form-input" disabled="true" type="text" v-model="item.fcheckItemDesc" />
-					</uni-td>
-					<uni-td align="center">
-						<input class="form-input" disabled="true" type="text" v-model="item.fcheckResu" />
-					</uni-td>
-					<uni-td>
-						<view class="uni-group">
-							<button v-if="item.fenterQty >=item.checkQyt" type="default" @click="toDetail(item)">
-								{{ item.checkQyt + '/' + item.fenterQty }}
-							</button>
-							<button v-else type="warn" @click="toDetail(item)">
-								{{ item.checkQyt + '/' + item.fenterQty }}
-							</button>
-						</view>
-					</uni-td>
-				</uni-tr>
-			</uni-table>
-		</view>
+    <!-- 妫�楠岄」鐩崱鐗� -->
+    <view class="table-card">
+      <view class="table-title">
+        <view class="title-icon">馃攳</view>
+        <span>妫�楠岄」鐩�</span>
+      </view>
+      <view class="list-container">
+        <uni-table ref="table" border emptyText="鏆傛棤鏇村鏁版嵁">
+          <uni-tr>
+            <uni-th align="center" class="th">妫�楠岄」鐩�</uni-th>
+            <uni-th align="center" class="th">妫�楠屾弿杩�</uni-th>
+            <uni-th align="center" class="th">鏄惁鍚堟牸</uni-th>
+            <uni-th align="center" class="th">璁板綍(鐐瑰嚮)</uni-th>
+          </uni-tr>
+          <uni-tr v-for="(item, index) in tableData" :key="index" class="table-row" :class="{ 'hover-effect': isHoveringRow === index }" @mouseenter="isHoveringRow = index" @mouseleave="isHoveringRow = -1">
+            <uni-td align="center">
+              <input class="form-input" disabled="true" type="text" v-model="item.fcheckItem" />
+            </uni-td>
+            <uni-td align="center">
+              <view class="value-with-tooltip cursor-pointer" 
+                    @click.stop="showTooltip(item.fcheckItemDesc, $event, item.fcheckItem)">
+                <input class="form-input" disabled="true" type="text" v-model="item.fcheckItemDesc" />
+              </view>
+            </uni-td>
+            <uni-td align="center">
+              <span class="result-badge" :class="{ 'pass': item.fcheckResu === '鍚堟牸', 'fail': item.fcheckResu === '涓嶅悎鏍�', 'pending': item.fcheckResu === '鏈楠�' }">
+                {{ item.fcheckResu }}
+              </span>
+            </uni-td>
+            <uni-td>
+              <view class="uni-group">
+                <button :class="item.fenterQty >= item.checkQyt ? 'btn-normal' : 'btn-warn'" @click="toDetail(item)">
+                  {{ item.checkQyt + '/' + item.fenterQty }}
+                </button>
+              </view>
+            </uni-td>
+          </uni-tr>
+        </uni-table>
+      </view>
+    </view>
 
-		<view class="plus-button">
-			<view class="plus-button">
-				<button type="warn" v-if="!isUpdate && !isShowTable" @click="submit">妫�楠屾彁浜�</button>
-			</view>
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <view class="action-buttons">
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-primary': !isUpdate && !isShowTable, 'btn-disabled': !canSubmit }]" v-if="!isUpdate && !isShowTable" @click="submit" :disabled="!canSubmit">
+          妫�楠屾彁浜�
+        </button>
+      </view>
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-secondary': isUpdate && !isShowTable, 'btn-disabled': !canGenerate }]" v-if="isUpdate && !isShowTable" @click="getItem" :disabled="!canGenerate">
+          鍒涘缓妫�楠屽崟骞剁敓鎴愰儴鍒嗛粯璁ゅ��
+        </button>
+      </view>
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-tertiary': !isUpdate && !isShowTable, 'btn-disabled': !canUpload }]" v-if="!isUpdate && !isShowTable" @click="toImage" :disabled="!canUpload">
+          涓婁紶/鏌ョ湅鍥剧墖
+        </button>
+      </view>
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-quaternary': !isUpdate && !isShowTable, 'btn-disabled': !canEdit }]" v-if="!isUpdate && !isShowTable" @click="saveRemarks" :disabled="!canEdit">
+          娣诲姞涓嶅悎鏍兼弿杩�
+        </button>
+      </view>
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-accent': isShowTable, 'btn-disabled': !canGetTable }]" v-if="isShowTable" @click="getTable" :disabled="!canGetTable">
+          鑾峰彇妫�楠岄」鐩�
+        </button>
+      </view>
+      <view class="button-group">
+        <button :class="['action-btn', { 'btn-success': isShowTable && isUpdate, 'btn-disabled': !canSaveTable }]" v-if="isShowTable && isUpdate" @click="saveTable" :disabled="!canSaveTable">
+          鐢熸垚妫�楠岄」鐩�
+        </button>
+      </view>
+    </view>
 
-			<button type="warn" v-if="isUpdate && !isShowTable" @click="getItem">鍒涘缓妫�楠屽崟骞剁敓鎴愰儴鍒嗛粯璁ゅ��</button>
-		</view>
-		<view class="plus-button">
-			<button type="warn" v-if="!isUpdate && !isShowTable" @click="toImage">涓婁紶/鏌ョ湅鍥剧墖</button>
-		</view>
-		<view class="plus-button">
-			<button type="warn" v-if="!isUpdate && !formData.fcheckResu && !isShowTable" @click="removeXJ">鍒犻櫎鍗曟嵁</button>
-		</view>
-		<view class="plus-button">
-			<button type="warn" v-if="!isUpdate && !isShowTable" @click="saveRemarks">娣诲姞涓嶅悎鏍兼弿杩�</button>
-		</view>
+    <!-- 涓嶅悎鏍兼弿杩板脊鍑哄眰 -->
+    <view v-if="remarksPopup" class="overlay active">
+      <view class="popup" :class="{ 'popup-scale': isPopupAnimated }" @animationend="isPopupAnimated = false">
+        <view class="popup-header">
+          <h3 class="popup-title">淇敼涓嶅悎鏍兼弿杩�</h3>
+          <view class="close-btn" @click="remarksPopup = !remarksPopup">脳</view>
+        </view>
+        <form>
+          <view class="form-group">
+            <label class="form-label">涓嶅悎鏍兼弿杩�:</label>
+            <input class="form-input" type="text" v-model="remarks" />
+          </view>
+          <view class="button-group popup-buttons">
+            <button :class="['action-btn', 'btn-danger']" @click="editRemarks">
+              淇敼
+            </button>
+            <button :class="['action-btn', 'btn-light']" @click="remarksPopup = !remarksPopup">
+              鍙栨秷
+            </button>
+          </view>
+        </form>
+      </view>
+    </view>
 
-		<view class="plus-button">
-			<button type="warn" v-if="isShowTable" @click="getTable">鑾峰彇妫�楠岄」鐩�</button>
-		</view>
-		<view class="plus-button">
-			<button type="warn" v-if="isShowTable && isUpdate" @click="saveTable">鐢熸垚妫�楠岄」鐩�</button>
-		</view>
-		<view v-if="remarksPopup" class="overlay">
-			<view class="popup">
-				<h3>淇敼涓嶅悎鏍兼弿杩�</h3>
-				<form>
-					<view class="form-group">
-						<label class="form-label">涓嶅悎鏍兼弿杩�:</label>
-						<input class="form-input" type="text" v-model="remarks" />
-					</view>
-					<button type="warn" @click="editRemarks">淇敼</button>
-					<button @click="remarksPopup = !remarksPopup">鍙栨秷</button>
-				</form>
-			</view>
-		</view>
-
-	</view>
+    <!-- 鎻愮ず妗嗗叏灞�缁勪欢 -->
+    <view v-if="showTooltipBox" class="tooltip-container">
+      <view class="tooltip" 
+            :style="{top: tooltipY + 'px', left: tooltipX + 'px'}"
+            :class="{ 'active': tooltipBoxAnimated }">
+        <view class="tooltip-content">
+          <view class="tooltip-title">{{ tooltipTitle }}</view>
+          <view class="tooltip-body">{{ tooltipValue }}</view>
+        </view>
+        <view class="tooltip-arrow" :style="{ transform: tooltipArrowTransform }"></view>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				formData: {
-					id: "",
-					releaseNo: "",
-					createBy: "",
-					createDate: "",
-					lotNo: "",
-					itemNo: "",
-					billNo: "",
-					fcovertQty: "",
-					detailMem: "",
-					taskNo: "",
-					fcheckResu: "",
-					boardModel: "",
-					planQty: "",
-					mocode: "",
-					boardStyle: "",
-					userCode: "",
-					itemId: ""
-				},
+export default {
+  data() {
+    return {
+      formData: {
+        id: "",
+        releaseNo: "",
+        createBy: "",
+        createDate: "",
+        lotNo: "",
+        itemNo: "",
+        billNo: "",
+        fcovertQty: "",
+        detailMem: "",
+        taskNo: "",
+        fcheckResu: "",
+        boardModel: "",
+        planQty: "",
+        mocode: "",
+        boardStyle: "",
+        userCode: "",
+        itemId: ""
+      },
 
-				DAA020List: [],
-				DAA020Index: -1,
-				DAA001List: [],
-				DAA001Index: -1,
-				schemeResult: [],
-				isShowTable: false,
-				ItemList: [],
-				ItemIndex: -1,
-				boardItems: [],
-				lineList: [],
-				lineNo: "",
-				tableData: [],
-				isSubmit: true,
-				isUpdate: true,
-				remarks: "",
-				remarksPopup: false,
-			};
-		},
-		onLoad(options) {
-			//options涓寘鍚簡url闄勫甫鐨勫弬鏁�
+      DAA020List: [],
+      DAA020Index: -1,
+      DAA001List: [],
+      DAA001Index: -1,
+      schemeResult: [],
+      isShowTable: false,
+      ItemList: [],
+      ItemIndex: -1,
+      boardItems: [],
+      lineList: [],
+      lineNo: "",
+      tableData: [],
+      isSubmit: true,
+      isUpdate: true,
+      remarks: "",
+      remarksPopup: false,
+      isHoveringRow: -1,
+      isPopupAnimated: false,
+      // 鎸夐挳鐘舵�佹帶鍒�
+      canSubmit: true,
+      canGenerate: true,
+      canUpload: true,
+      canEdit: true,
+      canGetTable: true,
+      canSaveTable: true,
+      // 鎻愮ず妗嗙浉鍏�
+      showTooltipBox: false,
+      tooltipTitle: '',
+      tooltipValue: '',
+      tooltipX: 0,
+      tooltipY: 0,
+      tooltipBoxAnimated: false,
+      tooltipArrowTransform: 'translateX(-50%) rotate(180deg)'
+    };
+  },
+  onLoad(options) {
+    //options涓寘鍚簡url闄勫甫鐨勫弬鏁�
+    let params = options;
 
-			let params = options;
+    if (params["id"]) {
+      this.isUpdate = false;
+      this.formData.id = params["id"];
+      this.formData.releaseNo = params["releaseNo"];
+      this.formData.lotNo = params["lotNo"];
+      console.log(this.formData.lotNo);
+      //getQaItemXj02
+      this.init();
+    } else {
+      //鍒濆鍖栨楠屽崟鍙�
+      this.$post({
+        url: "/LLJ/getMaxReleaseNo"
+      }).then(res => {
+        this.formData.releaseNo = res.data.tbBillList;
+        this.formData.createBy = this.$loginInfo.account;
+        this.formData.createDate = this.$getDate("yyyy-mm-dd");
+      });
+    }
+  },
+  methods: {
+    removeXJ() {
+      if (this.formData.id) {
+        this.$post({
+          url: "/LLJ/removeXJ",
+          data: {
+            releaseNo: this.formData.releaseNo
+          }
+        }).then(res => {
+          if (res.data.tbBillList > 0) {
+            this.$showMessage("鍒犻櫎鎴愬姛");
+            //鍏抽棴褰撳墠椤甸潰锛岃繑鍥炰笂涓�椤甸潰鎴栧绾ч〉闈�
+            uni.navigateBack();
+          } else {
+            this.$showMessage("鍒犻櫎澶辫触");
+          }
+        });
+      } else {
+        this.$showMessage("璇峰厛閫夋嫨妫�楠屽崟鍙�");
+      }
+    },
+    getItem() {
+      if (this.isSubmit) {
+        this.$showMessage("姝ょ墿鏂欐棤鍚敤鐨勬楠岄」鐩紝璇风淮鎶�!");
+        return;
+      }
 
-			if (params["id"]) {
-				this.isUpdate = false;
-				this.formData.id = params["id"];
-				this.formData.releaseNo = params["releaseNo"];
-				this.formData.lotNo = params["lotNo"];
-				console.log(this.formData.lotNo);
-				//getQaItemXj02
-				this.init();
-			} else {
-				//鍒濆鍖栨楠屽崟鍙�
-				this.$post({
-					url: "/LLJ/getMaxReleaseNo"
-				}).then(res => {
-					this.formData.releaseNo = res.data.tbBillList;
-					this.formData.createBy = this.$loginInfo.account;
-					this.formData.createDate = this.$getDate("yyyy-mm-dd");
-				});
+      if (!this.formData.billNo) {
+        this.$showMessage("璇烽�夋嫨璁″垝缂栧彿");
+        return;
+      }
 
-			}
-		},
-		methods: {
-			removeXJ() {
-				if (this.formData.id) {
-					this.$post({
-						url: "/LLJ/removeXJ",
-						data: {
-							releaseNo: this.formData.releaseNo
-						}
-					}).then(res => {
-						if (res.data.tbBillList > 0) {
-							this.$showMessage("鍒犻櫎鎴愬姛");
-							//鍏抽棴褰撳墠椤甸潰锛岃繑鍥炰笂涓�椤甸潰鎴栧绾ч〉闈�
-							uni.navigateBack();
-						} else {
-							this.$showMessage("鍒犻櫎澶辫触");
-						}
-					});
-				} else {
-					this.$showMessage("璇峰厛閫夋嫨妫�楠屽崟鍙�");
-				}
-			},
-			getItem() {
+      this.$post({
+        url: "/XJ/save",
+        data: {
+          from: this.formData,
+          userNo: this.$loginInfo.account,
+          items: this.tableData
+        }
+      }).then(res => {
+        this.formData.id = res.data.tbBillList;
+        this.$showMessage("鐢熸垚妫�楠岄」鐩垚鍔�");
+        this.init();
+        this.isUpdate = false;
+      });
+    },
+    submit() {
+      this.$post({
+        url: "/LLJ/IqcQaSubmit",
+        data: {
+          userNo: this.$loginInfo.account,
+          releaseNo: this.formData.releaseNo
+        }
+      }).then(res => {
+        if (res.statusCode === 200) {
+          this.$showMessage("鎴愬姛鎻愪氦妫�楠�");
+          setTimeout(() => {
+            this.hideCustomMessage();
+          }, 7000);
+        } else {
+          this.$showMessage(res.data.message);
+        }
+      })
+    },
 
-				if (this.isSubmit) {
-					this.$showMessage("姝ょ墿鏂欐棤鍚敤鐨勬楠岄」鐩紝璇风淮鎶�!");
-					return;
-				}
+    init() {
+      //鑾峰彇褰撳墠鐧诲綍鐨勭敤鎴�
+      let userName = this.$loginInfo.account;
+      this.$post({
+        url: "/LLJ/getPage",
+        data: {
+          id: this.formData.id,
+          createUser: userName,
+          pageIndex: 1,
+          limit: 1,
+        }
+      }).then(res => {
+        let data = res.data.tbBillList[0];
+        if (data) {
+          this.formData = data;
 
-				if (!this.formData.billNo) {
-					this.$showMessage("璇烽�夋嫨璁″垝缂栧彿");
-					return;
-				}
-
-				this.$post({
-					url: "/XJ/save",
-					data: {
-						from: this.formData,
-						userNo: this.$loginInfo.account,
-						items: this.tableData
-					}
-				}).then(res => {
-					this.formData.id = res.data.tbBillList;
-					this.$showMessage("鐢熸垚妫�楠岄」鐩垚鍔�");
-					this.init();
-					this.isUpdate = false;
-				});
-			},
-			submit() {
-				this.$post({
-					url: "/LLJ/IqcQaSubmit",
-					data: {
-						userNo: this.$loginInfo.account,
-						releaseNo: this.formData.releaseNo
-					}
-				}).then(res => {
-					//console.log(res);
-					//2024-11-28 kyy 鏍¢獙鍚堟牸鎻愪氦澧炲姞鎻愮ず
-					if (res.statusCode === 200) {
-						this.$showMessage("鎴愬姛鎻愪氦妫�楠�");
-						// 浣跨敤setTimeout鍦�7绉掑悗闅愯棌娑堟伅
-						setTimeout(() => {
-							this.hideCustomMessage();
-						}, 7000); // 7000姣绛変簬7绉�
-					} else {
-						this.$showMessage(res.data.message);
-					}
-				})
-			},
-
-			init() {
-
-				//鑾峰彇褰撳墠鐧诲綍鐨勭敤鎴�
-				let userName = this.$loginInfo.account;
-				this.$post({
-					url: "/LLJ/getPage",
-					data: {
-						id: this.formData.id,
-						// createUser :this.formData.createUser,
-						createUser: userName,
-						pageIndex: 1,
-						limit: 1,
-					}
-				}).then(res => {
-					let data = res.data.tbBillList[0];
-					if (data) {
-						this.formData = data;
-
-						this.$post({
-							url: "/LLJ/getJYItem",
-							data: {
-								id: this.formData.id,
-								releaseNo: this.formData.releaseNo
-							}
-						}).then(res1 => {
-							let tableData = res1.data.tbBillList
-							//褰撳凡妫�楠屼釜鏁伴兘涓嶄负绌烘椂鎸夌収妫�娴嬬粨鏋勬帓搴�
-							tableData.sort((a, b) => {
-								if (a.result === '鏈畬鎴�' && b.result === '鍚堟牸') {
-									return -1;
-								} else if (a.result === '鍚堟牸' && b.result === '鏈畬鎴�') {
-									return 1;
-								} else {
-									return 0;
-								}
-							});
-							this.tableData = tableData;
-							if (this.tableData.length === 0) {
-								this.isShowTable = true;
-							}
-
-
-						})
-					}
-				});
-			},
-			toDetail(item) {
-				if (this.isUpdate) {
-					uni.showToast({
-						icon: "none",
-						title: "璇峰厛鐢熸垚妫�楠岄」鐩�",
-						duration: 2000,
-					});
-				} else {
-					uni.navigateTo({
-						url: 'detail?mainId=' + item.id
-					});
-				}
-			},
-			saveRemarks() {
-				this.remarksPopup = !this.remarksPopup;
-				this.remarks = this.formData.remarks;
-			},
-			editRemarks() {
-				if (this.remarks) {
-					//saveRemarksGid
-					this.$post({
-						url: "/LLJ/saveRemarksGid",
-						data: {
-							gid: this.formData.id,
-							remarks: this.remarks,
-							releaseNo: this.formData.releaseNo,
-						}
-					}).then(res => {
-						if (res.data.tbBillList > 0) {
-							this.formData.remarks = this.remarks;
-							this.remarksPopup = !this.remarksPopup;
-							this.$showMessage("淇濆瓨鎴愬姛");
-						}
-					})
-				}
-			},
-			toImage() {
-				uni.navigateTo({
-					url: 'ImageItem?id=' + this.formData.id
-				});
-			},
-			getTable() {
-				this.$post({
-					url: "/LLJ/setJYItem",
-					data: {
-						itemId: this.formData.itemId,
-						quantity: this.formData.fcovertQty,
-						releaseNo: this.formData.releaseNo
-					}
-				}).then(res => {
-					if (res.data.tbBillList.length > 0) {
-						this.tableData = res.data.tbBillList; // 鍦ㄧ澶村嚱鏁颁腑锛宼his 鎸囧悜澶栧眰浣滅敤鍩熺殑 this
-						this.isShowTable = true;
-						this.isUpdate = true;
-					} else {
-						this.$showMessage("姝ょ墿鏂欐病鏈夊惎鐢ㄧ殑妫�楠岄」鐩紝璇风淮鎶�!");
-						this.isShowTable = true;
-						this.isUpdate = false;
-						this.tableData = [];
-					}
-
-				});
-			},
-			saveTable() {
-				if (this.tableData.length === 0) {
-					return;
-				}
-				this.$post({
-					url: "/LLJ/saveItem",
-					data: {
-						releaseNo: this.formData.releaseNo,
-						items: this.tableData,
-						userNo: this.$loginInfo.account,
-						gid: this.formData.id
-					}
-				}).then(res => {
-					this.formData.id = res.data.tbBillList;
-					this.isShowTable = false;
-					this.isUpdate = false;
-					this.init();
-
-				})
-			}
-		},
-		onShow() {
-			//姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉�
-			if (this.formData.id) {
-				this.init();
-			}
-		}
-	};
+          this.$post({
+            url: "/LLJ/getJYItem",
+            data: {
+              id: this.formData.id,
+              releaseNo: this.formData.releaseNo
+            }
+          }).then(res1 => {
+            let tableData = res1.data.tbBillList
+            //褰撳凡妫�楠屼釜鏁伴兘涓嶄负绌烘椂鎸夌収妫�娴嬬粨鏋勬帓搴�
+            tableData.sort((a, b) => {
+              if (a.result === '鏈畬鎴�' && b.result === '鍚堟牸') {
+                return -1;
+              } else if (a.result === '鍚堟牸' && b.result === '鏈畬鎴�') {
+                return 1;
+              } else {
+                return 0;
+              }
+            });
+            this.tableData = tableData;
+            if (this.tableData.length === 0) {
+              this.isShowTable = true;
+            }
+          })
+        }
+      });
+    },
+    toDetail(item) {
+      if (this.isUpdate) {
+        uni.showToast({
+          icon: "none",
+          title: "璇峰厛鐢熸垚妫�楠岄」鐩�",
+          duration: 2000,
+        });
+      } else {
+        uni.navigateTo({
+          url: 'detail?mainId=' + item.id
+        });
+      }
+    },
+    saveRemarks() {
+      // 纭繚琛ㄥ崟鏁版嵁瀛樺湪
+      if (!this.formData) return;
+      
+      this.remarksPopup = !this.remarksPopup;
+      this.remarks = this.formData.remarks || '';
+      this.isPopupAnimated = true;
+    },
+    editRemarks() {
+      if (this.remarks && this.formData.id) {
+        this.$post({
+          url: "/LLJ/saveRemarksGid",
+          data: {
+            gid: this.formData.id,
+            remarks: this.remarks,
+            releaseNo: this.formData.releaseNo,
+          }
+        }).then(res => {
+          if (res.data.tbBillList > 0) {
+            this.formData.remarks = this.remarks;
+            this.remarksPopup = false;
+            this.$showMessage("淇濆瓨鎴愬姛");
+          } else {
+            this.$showMessage("淇濆瓨澶辫触");
+          }
+        }).catch(() => {
+          this.$showMessage("淇濆瓨澶辫触锛岃閲嶈瘯");
+        });
+      } else if (!this.formData.id) {
+        this.$showMessage("璇峰厛鐢熸垚妫�楠屽崟");
+      } else {
+        this.$showMessage("璇疯緭鍏ヤ笉鍚堟牸鎻忚堪");
+      }
+    },
+    toImage() {
+      uni.navigateTo({
+        url: 'ImageItem?id=' + this.formData.id
+      });
+    },
+    getTable() {
+      this.$post({
+        url: "/LLJ/setJYItem",
+        data: {
+          itemId: this.formData.itemId,
+          quantity: this.formData.fcovertQty,
+          releaseNo: this.formData.releaseNo
+        }
+      }).then(res => {
+        if (res.data.tbBillList.length > 0) {
+          this.tableData = res.data.tbBillList;
+          this.isShowTable = true;
+          this.isUpdate = true;
+        } else {
+          this.$showMessage("姝ょ墿鏂欐病鏈夊惎鐢ㄧ殑妫�楠岄」鐩紝璇风淮鎶�!");
+          this.isShowTable = true;
+          this.isUpdate = false;
+          this.tableData = [];
+        }
+      });
+    },
+    saveTable() {
+      if (this.tableData.length === 0) {
+        return;
+      }
+      this.$post({
+        url: "/LLJ/saveItem",
+        data: {
+          releaseNo: this.formData.releaseNo,
+          items: this.tableData,
+          userNo: this.$loginInfo.account,
+          gid: this.formData.id
+        }
+      }).then(res => {
+        this.formData.id = res.data.tbBillList;
+        this.isShowTable = false;
+        this.isUpdate = false;
+        this.init();
+      })
+    },
+    // 鎻愮ず妗嗙浉鍏虫柟娉�
+    showTooltip(value, event, title = '') {
+      if (!value) return;
+      
+      // 闃叉浜嬩欢鍐掓场
+      event.stopPropagation();
+      
+      // 鑾峰彇鐐瑰嚮浣嶇疆锛屾敮鎸佽Е鎽镐簨浠�
+      const clientX = event.clientX || (event.touches && event.touches[0].clientX) || 0;
+      const clientY = event.clientY || (event.touches && event.touches[0].clientY) || 0;
+      
+      // 璁剧疆鎻愮ず妗嗗唴瀹瑰拰浣嶇疆
+      this.tooltipTitle = title;
+      this.tooltipValue = value;
+      
+      // 璁$畻鎻愮ず妗嗕綅缃紝閬垮厤瓒呭嚭灞忓箷
+      const screenWidth = uni.getSystemInfoSync().windowWidth;
+      const screenHeight = uni.getSystemInfoSync().windowHeight;
+      const tooltipWidth = 240; // 鎻愮ず妗嗗搴�
+      const tooltipHeight = 120; // 鎻愮ず妗嗛珮搴�
+      
+      // 璁$畻X鍧愭爣锛岄槻姝㈣秴鍑哄睆骞曞彸渚�
+      let x = clientX + 20;
+      if (x + tooltipWidth > screenWidth) {
+        x = Math.max(10, clientX - tooltipWidth - 20);
+        this.tooltipArrowTransform = 'translateX(-50%) rotate(0deg)';
+      } else {
+        this.tooltipArrowTransform = 'translateX(-50%) rotate(180deg)';
+      }
+      
+      // 璁$畻Y鍧愭爣锛岄槻姝㈣秴鍑哄睆骞曢《閮ㄥ拰搴曢儴
+      let y = clientY - tooltipHeight - 20;
+      if (y < 0) {
+        y = clientY + 20;
+        this.tooltipArrowTransform = 'translateX(-50%) rotate(180deg) translateY(-100%)';
+      } else if (y + tooltipHeight > screenHeight) {
+        y = screenHeight - tooltipHeight - 10;
+      }
+      
+      this.tooltipX = x;
+      this.tooltipY = y;
+      
+      // 鏄剧ず鎻愮ず妗嗗苟娣诲姞鍔ㄧ敾
+      this.showTooltipBox = true;
+      setTimeout(() => {
+        this.tooltipBoxAnimated = true;
+      }, 10);
+    },
+    hideTooltip() {
+      this.tooltipBoxAnimated = false;
+      setTimeout(() => {
+        this.showTooltipBox = false;
+      }, 200);
+    },
+    getStatusDescription(status) {
+      const descriptions = {
+        '鍚堟牸': '璇ユ楠岄」鐩凡瀹屾垚锛岀粨鏋滅鍚堣川閲忔爣鍑嗐��',
+        '涓嶅悎鏍�': '璇ユ楠岄」鐩湭閫氳繃锛岀粨鏋滀笉绗﹀悎璐ㄩ噺鏍囧噯銆俓n璇锋煡鐪嬩笉鍚堟牸鎻忚堪浜嗚В璇︽儏銆�',
+        '鏈楠�': '璇ユ楠岄」鐩皻鏈繘琛屾娴嬶紝璇峰強鏃跺畨鎺掓楠屻��'
+      };
+      return descriptions[status] || status;
+    }
+  },
+  onShow() {
+    //姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉�
+    if (this.formData.id) {
+      this.init();
+    }
+  },
+  onUnload() {
+    // 椤甸潰鍗歌浇鏃堕殣钘忔彁绀烘
+    this.showTooltipBox = false;
+  }
+};
 </script>
+
 <style>
-	.form-group {
-		display: flex;
-		align-items: center;
-		border-bottom: 1px solid #c9c9c9;
-	}
+/* 鍩虹閰嶈壊鏂规 */
+:root {
+  --primary-color: #3b82f6;         /* 涓昏摑鑹� - 涓撲笟鎰� */
+  --primary-dark: #2563eb;         /* 娣辫摑 - 寮鸿皟 */
+  --primary-light: #bfdbfe;       /* 娴呰摑 - 鑳屾櫙 */
+  --secondary-color: #64748b;      /* 娆¤壊璋� - 鐏拌壊钃� */
+  --success-color: #10b981;        /* 鎴愬姛 - 缁胯壊 */
+  --warning-color: #f59e0b;        /* 璀﹀憡 - 姗欒壊 */
+  --danger-color: #ef4444;         /* 鍗遍櫓 - 绾㈣壊 */
+  --info-color: #06b6d4;           /* 淇℃伅 - 闈掕壊 */
+  --text-primary: #1e293b;         /* 涓绘枃鏈� - 娣辩伆 */
+  --text-secondary: #64748b;       /* 娆℃枃鏈� - 涓伆 */
+  --text-tertiary: #94a3b8;        /* 杈呭姪鏂囨湰 - 娴呯伆 */
+  --bg-primary: #f8fafc;           /* 涓昏儗鏅� - 鏋佹祬鐏� */
+  --bg-secondary: #e2e8f0;         /* 娆¤儗鏅� - 娴呯伆 */
+  --card-bg: #ffffff;              /* 鍗$墖鑳屾櫙 - 鐧借壊 */
+  --border-color: #e2e8f0;         /* 杈规 - 娴呯伆 */
+  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
+  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+}
 
-	.form-label {
-		margin-bottom: 0;
-		padding: 5px;
-	}
+/* 椤甸潰鏁翠綋鏍峰紡 */
+.page-container {
+  padding: 16px;
+  background-color: var(--bg-primary);
+  min-height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
 
-	.form-input {
-		flex: 1;
-		margin-bottom: 0;
-		padding: 5px;
-	}
+/* 鍗$墖鏍峰紡 */
+.form-card, .table-card {
+  background-color: var(--card-bg);
+  border-radius: 16px;
+  box-shadow: var(--shadow-md);
+  margin-bottom: 20px;
+  overflow: hidden;
+  transition: transform 0.3s, box-shadow 0.3s;
+}
 
-	.picker {
-		flex: 1;
-		margin-bottom: 0;
-		padding: 5px;
-		font-size: 12px;
-	}
+.form-card:hover, .table-card:hover {
+  transform: translateY(-2px);
+  box-shadow: var(--shadow-lg);
+}
 
-	.uni-form-item {
-		display: flex;
-		border-bottom: 1px solid #c9c9c9;
-	}
+.form-title, .table-title {
+  background: linear-gradient(90deg, var(--primary-color), var(--primary-dark));
+  padding: 20px 30px;
+  font-size: 20px;
+  font-weight: 600;
+  color: white;
+  display: flex;
+  align-items: center;
+}
 
-	.edit {
-		background-color: white;
-	}
+.title-icon {
+  margin-right: 12px;
+  font-size: 24px;
+}
 
-	/* 榛樿鏍峰紡 */
-	.list-container {
-		height: 60vh;
-		/* 璁剧疆鍒楄〃瀹瑰櫒鐨勯珮搴︿负鍓╀綑绌洪棿锛屽苟鍑忓幓琛ㄥ崟瀹瑰櫒鐨勯珮搴� */
-		overflow-y: auto;
-		/* 鍏佽鍒楄〃瀹瑰櫒鍨傜洿婊氬姩 */
-		padding: 10px;
-		/* 鍙�夛細娣诲姞涓�浜涘唴杈硅窛锛屼娇鍒楄〃鍐呭鏇寸編瑙� */
-	}
+/* 琛ㄥ崟鏍峰紡 */
+.form-container {
+  padding: 24px 30px;
+}
 
-	/* 鍦ㄥ皬灞忓箷璁惧涓婏紝閲嶇疆楂樺害涓洪�傚簲灞忓箷 */
-	@media (max-width: 768px) {
-		.list-container {
-			height: calc(100vh - 376px);
-			/* 閫傚綋璋冩暣楂樺害 */
-		}
-	}
+.form-grid {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+  gap: 20px;
+}
 
-	.form-container {
-		padding: 10px;
-		/* 鍙�夛細娣诲姞涓�浜涘唴杈硅窛锛屼娇琛ㄥ崟鍐呭鏇寸編瑙� */
-	}
+.form-group {
+  display: flex;
+  align-items: flex-start;
+  border-bottom: 1px solid var(--border-color);
+  padding: 12px 0;
+  transition: all 0.2s;
+}
 
-	.th {
-		background-color: lightskyblue;
-		color: #FFFFFF;
-	}
+.form-group:hover {
+  border-bottom-color: var(--primary-color);
+}
 
-	.plus-button {
-		line-height: 59px;
-		font-size: 24px;
-		cursor: pointer;
-		z-index: 1000;
-		margin-bottom: 10px;
-	}
+.form-label {
+  width: 100px;
+  color: var(--text-secondary);
+  font-size: 14px;
+  font-weight: 500;
+  margin-top: 4px;
+}
 
-	.overlay {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		background-color: rgba(0, 0, 0, 0.5);
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
+.form-input {
+  flex: 1;
+  font-size: 14px;
+  color: var(--text-primary);
+  border: none;
+  outline: none;
+  background-color: transparent;
+  padding: 8px 0;
+}
 
-	.popup {
-		background-color: #fff;
-		padding: 20px;
-		border: 1px solid #ccc;
-		box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
-		width: 68vw;
-		/* 璁剧疆瀹藉害涓鸿鍙e搴︾殑80% */
-		height: 25vh;
-		/* 璁剧疆楂樺害涓鸿鍙i珮搴︾殑80% */
-	}
+.form-input:focus {
+  color: var(--primary-color);
+}
+
+/* 琛ㄦ牸鏍峰紡 */
+.list-container {
+  padding: 24px 30px;
+}
+
+.th {
+  background-color: var(--primary-color);
+  color: white;
+  font-weight: 600;
+  font-size: 14px;
+  padding: 16px 12px;
+}
+
+.table-row {
+  transition: background-color 0.2s;
+}
+
+.hover-effect {
+  background-color: var(--primary-light) !important;
+}
+
+.result-badge {
+  padding: 6px 12px;
+  border-radius: 20px;
+  font-size: 12px;
+  font-weight: 500;
+  display: inline-block;
+}
+
+.pass {
+  background-color: rgba(16, 185, 129, 0.1);
+  color: var(--success-color);
+}
+
+.fail {
+  background-color: rgba(239, 68, 68, 0.1);
+  color: var(--danger-color);
+}
+
+.pending {
+  background-color: rgba(245, 158, 11, 0.1);
+  color: var(--warning-color);
+}
+
+/* 鎸夐挳鏍峰紡 */
+.action-buttons {
+  display: flex;
+  flex-direction: column; /* 鍨傜洿鎺掑垪鎸夐挳 */
+  gap: 12px; /* 鎸夐挳闂磋窛 */
+  padding: 0 16px 20px;
+}
+
+.button-group {
+  width: 100%; /* 姣忎釜鎸夐挳缁勫崰婊″搴� */
+}
+
+.action-btn {
+  width: 100%;
+  height: 48px;
+  line-height: 48px;
+  border-radius: 8px;
+  font-size: 14px;
+  font-weight: 500;
+  transition: all 0.2s;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: none;
+  cursor: pointer;
+}
+
+.btn-primary {
+  background-color: var(--primary-color);
+  color: white;
+  box-shadow: 0 4px 6px -1px rgba(59, 130, 246, 0.2), 0 2px 4px -1px rgba(59, 130, 246, 0.1);
+}
+
+.btn-primary:hover {
+  background-color: var(--primary-dark);
+  box-shadow: 0 10px 15px -3px rgba(59, 130, 246, 0.3), 0 4px 6px -2px rgba(59, 130, 246, 0.1);
+  transform: translateY(-1px);
+}
+
+.btn-primary:active {
+  transform: translateY(0);
+  box-shadow: 0 2px 4px -1px rgba(59, 130, 246, 0.2);
+}
+
+.btn-secondary {
+  background-color: var(--secondary-color);
+  color: white;
+}
+
+.btn-secondary:hover {
+  background-color: #475569;
+}
+
+.btn-tertiary {
+  background-color: var(--info-color);
+  color: white;
+}
+
+.btn-tertiary:hover {
+  background-color: #0891b2;
+}
+
+.btn-quaternary {
+  background-color: var(--warning-color);
+  color: white;
+}
+
+.btn-quaternary:hover {
+  background-color: #d97706;
+}
+
+.btn-accent {
+  background-color: var(--success-color);
+  color: white;
+}
+
+.btn-accent:hover {
+  background-color: #059669;
+}
+
+.btn-success {
+  background-color: #16a34a;
+  color: white;
+}
+
+.btn-success:hover {
+  background-color: #15803d;
+}
+
+.btn-danger {
+  background-color: var(--danger-color);
+  color: white;
+}
+
+.btn-danger:hover {
+  background-color: #dc2626;
+}
+
+.btn-light {
+  background-color: var(--bg-secondary);
+  color: var(--text-primary);
+}
+
+.btn-light:hover {
+  background-color: #cbd5e1;
+}
+
+.btn-warn {
+  background-color: var(--warning-color);
+  color: white;
+}
+
+.btn-normal {
+  background-color: var(--bg-secondary);
+  color: var(--text-primary);
+}
+
+.btn-disabled {
+  background-color: #e2e8f0 !important;
+  color: #94a3b8 !important;
+  cursor: not-allowed !important;
+  box-shadow: none !important;
+  transform: none !important;
+}
+
+/* 寮瑰嚭灞傛牱寮� */
+.overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.5);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  z-index: 1000;
+  opacity: 0;
+  visibility: hidden;
+  transition: opacity 0.3s, visibility 0.3s;
+}
+
+.overlay.active {
+  opacity: 1;
+  visibility: visible;
+}
+
+.popup {
+  background-color: var(--card-bg);
+  border-radius: 16px;
+  padding: 30px;
+  box-shadow: var(--shadow-lg);
+  width: 90%;
+  max-width: 500px;
+  transform: scale(0.95);
+  transition: transform 0.3s, opacity 0.3s;
+  opacity: 0;
+}
+
+.overlay.active .popup {
+  transform: scale(1);
+  opacity: 1;
+}
+
+.popup-scale {
+  animation: scaleIn 0.3s ease-out;
+}
+
+@keyframes scaleIn {
+  0% { transform: scale(0.9); opacity: 0; }
+  100% { transform: scale(1); opacity: 1; }
+}
+
+.popup-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+  position: relative;
+}
+
+.popup-title {
+  font-size: 18px;
+  font-weight: 600;
+  color: var(--text-primary);
+}
+
+.close-btn {
+  font-size: 24px;
+  color: var(--text-tertiary);
+  cursor: pointer;
+  transition: color 0.2s;
+}
+
+.close-btn:hover {
+  color: var(--text-primary);
+}
+
+.popup-buttons {
+  display: flex;
+  gap: 12px;
+  margin-top: 20px;
+}
+
+/* 鎻愮ず妗嗘牱寮� */
+.tooltip-container {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  pointer-events: none;
+  z-index: 2000;
+}
+
+.tooltip {
+  position: absolute;
+  background: white;
+  color: var(--text-primary);
+  border-radius: 12px;
+  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.06);
+  max-width: 240px;
+  min-width: 180px;
+  word-break: break-word;
+  opacity: 0;
+  transform: scale(0.95);
+  transition: opacity 0.2s, transform 0.2s;
+  pointer-events: none;
+  z-index: 2001;
+  overflow: hidden;
+  border: 1px solid #e2e8f0;
+}
+
+.tooltip.active {
+  opacity: 1;
+  transform: scale(1);
+}
+
+.tooltip-content {
+  padding: 14px 18px;
+}
+
+.tooltip-title {
+  font-size: 14px;
+  font-weight: 600;
+  margin-bottom: 8px;
+  color: var(--primary-color);
+  border-bottom: 1px solid #e2e8f0;
+  padding-bottom: 6px;
+}
+
+.tooltip-body {
+  font-size: 13px;
+  line-height: 1.6;
+  color: var(--text-secondary);
+}
+
+.tooltip-arrow {
+  position: absolute;
+  width: 16px;
+  height: 16px;
+  background: white;
+  transform: translateX(-50%) rotate(45deg);
+  z-index: -1;
+  border: 1px solid #e2e8f0;
+}
+
+.cursor-pointer {
+  cursor: pointer;
+}
+
+/* 鍝嶅簲寮忚璁¤皟鏁� */
+@media (max-width: 576px) {
+  .form-grid {
+    grid-template-columns: 1fr;
+  }
+
+  .form-label {
+    width: 80px;
+    font-size: 13px;
+  }
+
+  .form-input {
+    font-size: 13px;
+  }
+
+  .action-btn {
+    height: 44px;
+    line-height: 44px;
+    font-size: 13px;
+  }
+
+  .popup {
+    padding: 24px;
+  }
+
+  .tooltip {
+    max-width: 200px;
+    min-width: 160px;
+    border-radius: 8px;
+  }
+
+  .tooltip-content {
+    padding: 10px 14px;
+  }
+
+  .tooltip-title {
+    font-size: 13px;
+    margin-bottom: 6px;
+    padding-bottom: 4px;
+  }
+
+  .tooltip-body {
+    font-size: 12px;
+  }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3