From 43d86830f4696c3ba2250a961d26377e1ff6cc32 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期三, 17 十二月 2025 10:39:43 +0800
Subject: [PATCH] 1、 查询是否除膜优化

---
 UI-Project/src/views/EngineerScheduling/engineerScheduling.vue |  189 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 129 insertions(+), 60 deletions(-)

diff --git a/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
index 62dcc17..53fbbc5 100644
--- a/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
+++ b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
@@ -92,10 +92,16 @@
 const fetchTargetKeys = async () => {
   try {
     let type = 1;
-    if (activeTab.value === 'cutting2') type = 2;
-    else if (activeTab.value === 'tempered') type = 3;
-
-    const response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {type})
+    let response;
+    if (activeTab.value === 'cutting2') {
+      type = 2;
+      response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {type})
+    } else if (activeTab.value === 'tempered') {
+      type = 3;
+      response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryTemperingOrder')
+    } else {
+      response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {type})
+    }
     if (response.code === 200) {
       // 鍙充晶琛ㄦ牸鏁版嵁
       rightDataSource.value = response.data.map((item: any) => ({
@@ -151,6 +157,11 @@
 const saveScheduling = async () => {
   try {
     let type = 1;
+    // 1. 鍔ㄦ�佺‘瀹� type 鍜屾帴鍙h矾寰勶紙鏍规嵁 activeTab 鍒囨崲锛�
+    const apiPath = activeTab.value === 'tempered'
+        ? 'updateEngineerScheduling'
+        : 'updateCuttingLayout';
+
     if (activeTab.value === 'cutting2') type = 2;
     else if (activeTab.value === 'tempered') type = 3;
 
@@ -161,8 +172,7 @@
     }))
 
     const response = await request.post(
-        `/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`,
-        engineerList
+        `/loadGlass/optimizeProject/${apiPath}?type=${type}`, engineerList
     )
 
     if (response.code === 200) {
@@ -182,7 +192,7 @@
 const resetScheduling = async () => {
   await fetchDataSource()
   await fetchTargetKeys()
-  ElMessage.info(t('宸插彇娑�'))
+  ElMessage.info(t('scheduling.cancelled'))
 }
 
 // 鐩戝惉鏍囩椤靛垏鎹紝鏍规嵁涓嶅悓鏍囩椤靛姞杞藉搴旂殑鏁版嵁
@@ -214,17 +224,24 @@
   return index === rightDataSource.value.length - 1;
 };
 
-// 鍒ゆ柇涓婃柟鏄惁鏈夎繘琛屼腑鐨勮锛坰tate=100琛ㄧず杩涜涓紝鏍规嵁瀹為檯鐘舵�佸�艰皟鏁达級
+// 鍒ゆ柇涓婃柟鏄惁鏈夎繘琛屼腑鐨勮锛堜慨澶嶏細浣跨敤姝g‘鐨勭姸鎬佸��1锛�
 const hasInProgressAbove = (row: TransferDataItem) => {
   const index = rightDataSource.value.findIndex(item => item.key === row.key);
   // 鏌ユ壘褰撳墠琛屼笂鏂规槸鍚︽湁杩涜涓殑浠诲姟
-  return rightDataSource.value.some((item, i) => i < index && item.state === 100);
+  return rightDataSource.value.some((item, i) => i < index && item.state === 1);
 };
 
 // 鍚戜笂绉诲姩涓�琛�
 const moveUp = (row: TransferDataItem) => {
   const index = rightDataSource.value.findIndex(item => item.key === row.key);
   if (index > 0) {
+    // 妫�鏌ユ槸鍚︿細瓒呰繃杩涜涓殑浠诲姟
+    const prevItem = rightDataSource.value[index - 1];
+    if (prevItem.state === 1) {
+      // 鐩存帴涓婃柟鏄繘琛屼腑浠诲姟锛屾彁绀虹敤鎴蜂笉鍙秴杩�
+      ElMessage.warning('鎿嶄綔涓嶅彲瓒呰繃杩涜涓殑浠诲姟');
+      return;
+    }
     // 浜ゆ崲浣嶇疆
     [rightDataSource.value[index], rightDataSource.value[index - 1]] =
         [rightDataSource.value[index - 1], rightDataSource.value[index]];
@@ -245,27 +262,77 @@
   }
 };
 
-// 缃《锛堢Щ鍔ㄥ埌绗竴涓潪杩涜涓换鍔′笂鏂癸級
+// 鍒ゆ柇鏄惁鍙互缃《锛堝嵆鏄惁鏈夊彲缃《鐨勪綅缃級
+const canMoveToTop = (row: TransferDataItem) => {
+  // 杩涜涓换鍔′笉鑳界疆椤�
+  if (row.state === 1) return false;
+
+  const index = rightDataSource.value.findIndex(item => item.key === row.key);
+  // 宸茬粡鏄涓�琛岀殑涓嶈兘缃《
+  if (index === 0) return false;
+
+  // 鏌ユ壘绗竴涓潪杩涜涓换鍔$殑浣嶇疆
+  const firstNonProgressIndex = rightDataSource.value.findIndex(item => item.state !== 1);
+
+  // 濡傛灉褰撳墠琛屽凡缁忓湪绗竴涓潪杩涜涓换鍔$殑浣嶇疆鎴栦箣鍓嶏紝鍒欎笉鑳界疆椤�
+  return index > firstNonProgressIndex;
+};
+
+// ... existing code (moveUp鍜宮oveDown鍑芥暟淇濇寔涓嶅彉)
+
+// 缃《锛堢Щ鍔ㄥ埌鎵�鏈夐潪杩涜涓换鍔$殑鏈�鍓嶉潰锛�
 const moveToTop = (row: TransferDataItem) => {
   const index = rightDataSource.value.findIndex(item => item.key === row.key);
   if (index > 0) {
     // 绉婚櫎褰撳墠琛�
     const newList = rightDataSource.value.filter(item => item.key !== row.key);
-    // 鏌ユ壘绗竴涓繘琛屼腑浠诲姟鐨勪綅缃�
-    const firstInProgressIndex = newList.findIndex(item => item.state === 100);
 
-    if (firstInProgressIndex === -1) {
-      // 鏃犺繘琛屼腑浠诲姟锛岀洿鎺ユ坊鍔犲埌寮�澶�
-      newList.unshift(row);
+    // 鏌ユ壘鎵�鏈夐潪杩涜涓换鍔$殑浣嶇疆
+    const nonProgressIndices = newList
+        .map((item, i) => ({item, index: i}))
+        .filter(item => item.item.state !== 1)
+        .map(item => item.index);
+
+    if (nonProgressIndices.length > 0) {
+      // 鏈夐潪杩涜涓换鍔★紝娣诲姞鍒扮涓�涓潪杩涜涓换鍔$殑浣嶇疆
+      newList.splice(nonProgressIndices[0], 0, row);
     } else {
-      // 鏈夎繘琛屼腑浠诲姟锛屾坊鍔犲埌绗竴涓繘琛屼腑浠诲姟鍚庨潰
-      newList.splice(firstInProgressIndex + 1, 0, row);
+      // 鍏ㄩ儴閮芥槸杩涜涓换鍔★紝娣诲姞鍒板紑澶�
+      newList.unshift(row);
     }
 
     // 鏇存柊鏁版嵁婧�
     rightDataSource.value = newList;
   }
 };
+// 鍒涘缓璁$畻灞炴�э紝鏍规嵁鏍囩椤佃繑鍥炰笉鍚岀殑琛ㄥご閰嶇疆
+const tableHeaders = computed(() => {
+  const baseHeaders = {
+    serial: t('scheduling.serial'),
+    projectNo: t('scheduling.projectNo'),
+    thickness: t('scheduling.thickness'),
+    glassType: t('scheduling.glassType'),
+    totalCount: t('scheduling.totalCount'),
+    totalArea: t('scheduling.totalArea'),
+    operate: t('scheduling.operate')
+  };
+  // 鏍规嵁涓嶅悓鏍囩椤佃繑鍥炰笉鍚岀殑琛ㄥご閰嶇疆
+  if (activeTab.value === 'tempered') {
+    return {
+      ...baseHeaders,
+      // 鏇存敼閽㈠寲鏍囩椤电殑鐗瑰畾琛ㄥご
+      totalCount: t('scheduling.totalFireCount'),
+      totalArea: t('scheduling.fullFireCount')
+    };
+  }
+
+  return baseHeaders;
+});
+// 鐘舵�佹牸寮忓寲鍑芥暟
+const stateFormatter = (row: any) => {
+  return row.state === 1 ? '杩涜涓�' : '鏈紑濮�';
+};
+
 </script>
 
 <template>
@@ -279,8 +346,8 @@
     <!-- 琛ㄦ牸甯冨眬瀹瑰櫒 -->
     <div class="table-container">
       <!-- 宸︿晶琛ㄦ牸锛氬緟鎺掍骇 -->
-      <div class="table-wrapper">
-        <h3 class="table-title">{{ '寰呮帓浜�' }} ({{ dataSource.length }})</h3>
+      <div class="table-wrapper" v-if="activeTab !== 'tempered'">
+        <h3 class="table-title">{{ t('scheduling.unfinished') }} ({{ dataSource.length }})</h3>
         <el-table
             :data="dataSource"
             border
@@ -288,16 +355,16 @@
             height="400"
             row-key="key"
         >
-          <el-table-column type="index" label="搴忓彿" width="55"/>
-          <el-table-column prop="projectNo" label="宸ョ▼ID" width="180"/>
-          <el-table-column prop="glassThickness" label="鐜荤拑鍘氬害(mm)" width="120"/>
-          <el-table-column prop="glassType" label="鐜荤拑绫诲瀷" width="120"/>
-          <el-table-column prop="glassTotal" label="鎬荤墖鏁�" width="90"/>
-          <el-table-column prop="glassTotalArea" label="鎬婚潰绉�(銕�)" width="120"/>
-          <el-table-column label="鎿嶄綔" width="120" align="center">
+          <el-table-column type="index" :label="$t('scheduling.serial')" width="55"/>
+          <el-table-column prop="projectNo" :label="$t('scheduling.projectNo')" width="150"/>
+          <el-table-column prop="glassThickness" :label="$t('scheduling.thickness')" width="120"/>
+          <el-table-column prop="glassType" :label="$t('scheduling.glassType')" width="120"/>
+          <el-table-column prop="glassTotal" :label="$t('scheduling.totalCount')" width="90"/>
+          <el-table-column prop="glassTotalArea" :label="$t('scheduling.totalArea')" width="100"/>
+          <el-table-column :label="$t('scheduling.operate')" width="90" align="center">
             <template #default="{ row }">
               <el-button type="primary" @click="moveToRight(row)">
-                {{ t('娣诲姞') }}
+                {{ t('scheduling.add') }}
               </el-button>
             </template>
           </el-table-column>
@@ -317,55 +384,57 @@
             @row-click="(row) => fetchProjectDetail(row.key)"
             highlight-current-row
         >
-          <el-table-column type="index" label="搴忓彿" width="55"/>
-          <el-table-column prop="projectNo" label="宸ョ▼ID" width="120"/>
-          <el-table-column prop="glassThickness" label="鐜荤拑鍘氬害(mm)" width="120"/>
-          <el-table-column prop="glassType" label="鐜荤拑绫诲瀷" width="120"/>
-          <el-table-column prop="glassTotal" label="鎬荤墖鏁�" width="90"/>
-          <el-table-column prop="glassTotalArea" label="鎬婚潰绉�(銕�)" width="120"/>
-          <el-table-column label="鎿嶄綔" width="300" align="center">
+          <el-table-column type="index" :label="tableHeaders.serial" width="55"/>
+          <el-table-column prop="projectNo" :label="tableHeaders.projectNo" width="120"/>
+          <el-table-column prop="glassThickness" :label="tableHeaders.thickness" width="120"/>
+          <el-table-column prop="glassType" :label="tableHeaders.glassType" width="120"/>
+          <el-table-column prop="glassTotal" :label="tableHeaders.totalCount" width="90"/>
+          <el-table-column prop="glassTotalArea" :label="tableHeaders.totalArea" width="120"/>
+          <el-table-column
+              prop="state"
+              :label="t('scheduling.state')"
+              width="90"
+              :formatter="stateFormatter"
+          />
+          <el-table-column :label="t('scheduling.operate')" :width="activeTab === 'tempered' ? 200 : 300"
+                           :align="center">
             <template #default="{ row }">
               <div style="display: flex; gap: 5px; align-items: center;">
                 <el-button
+                    v-if="activeTab !== 'tempered'"
                     type="default"
                     size="small"
                     @click="moveToLeft(row)"
+                    :disabled="row.state === 1"
                     style="background: #ff4d4f; color: white; border-radius: 8px; min-width: 60px; display: inline-flex; justify-content: center; align-items: center;"
                 >
-                  鍘婚櫎
+                  {{ t('scheduling.remove') }}
                 </el-button>
-
-                <!-- 鍚戜笂鎸夐挳 -->
                 <el-button
                     type="default"
                     size="small"
                     @click="moveUp(row)"
-                    :disabled="isFirstRow(row) || hasInProgressAbove(row)"
+                    :disabled="row.state === 1 || isFirstRow(row)"
                     style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 40px; display: inline-flex; justify-content: center; align-items: center;"
                 >
                   鈫�
                 </el-button>
-
-                <!-- 鍚戜笅鎸夐挳 -->
                 <el-button
                     type="default"
                     size="small"
                     @click="moveDown(row)"
-                    :disabled="isLastRow(row)"
+                    :disabled="row.state === 1 || isLastRow(row)"
                     style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 40px; display: inline-flex; justify-content: center; align-items: center;"
                 >
                   鈫�
                 </el-button>
-
-                <!-- 缃《鎸夐挳 -->
                 <el-button
-                    type="primary"
                     size="small"
                     @click="moveToTop(row)"
-                    :disabled="isFirstRow(row) || hasInProgressAbove(row)"
+                    :disabled="row.state === 1 || isFirstRow(row) || !canMoveToTop(row)"
                     style="background: #E6F4FF; color: #1890FF; border-radius: 8px; min-width: 60px; display: inline-flex; justify-content: center; align-items: center;"
                 >
-                  缃《
+                  {{ t('scheduling.top') }}
                 </el-button>
               </div>
             </template>
@@ -393,20 +462,19 @@
         class="detail-table"
         height="230"
     >
-      <el-table-column prop="engineerId" label="宸ョ▼鍙�" width="120"/>
-      <el-table-column prop="flowCardId" label="娴佺▼鍗″彿" width="150"/>
-      <el-table-column prop="layer" label="灞傚彿" width="80"/>
-      <el-table-column prop="glassType" label="璁㈠簭" width="80"/>
-      <el-table-column prop="thickness" label="鍘氬害(mm)" width="100"/>
-      <el-table-column prop="filmsid" label="鑶滅郴" width="120"/>
-      <el-table-column prop="width" label="瀹�(mm)" width="90"/>
-      <el-table-column prop="height" label="楂�(mm)" width="90"/>
-      <el-table-column prop="glassIdCount" label="鏁伴噺" width="80"/>
-      <el-table-column prop="cuttingCount" label="鍒囧壊" width="80"/>
-
-      <el-table-column prop="edgingCount" label="纾ㄨ竟" width="80"/>
-      <el-table-column prop="temperingCount" label="閽㈠寲" width="80"/>
-      <el-table-column prop="insulatingCount" label="涓┖" width="80"/>
+      <el-table-column prop="engineerId" :label="$t('scheduling.projectNo')" width="120"/>
+      <el-table-column prop="flowCardId" :label="$t('scheduling.flowCardId')" width="150"/>
+      <el-table-column prop="layer" :label="$t('scheduling.layerCount')" width="80"/>
+      <el-table-column prop="glassType" :label="$t('scheduling.serial')" width="80"/>
+      <el-table-column prop="thickness" :label="$t('scheduling.thickness')" width="100"/>
+      <el-table-column prop="filmsid" :label="$t('scheduling.coatingType')" width="120"/>
+      <el-table-column prop="width" :label="$t('scheduling.width')" width="90"/>
+      <el-table-column prop="height" :label="$t('scheduling.height')" width="90"/>
+      <el-table-column prop="glassIdCount" :label="$t('scheduling.glassCount')" width="80"/>
+      <el-table-column prop="cuttingCount" :label="$t('scheduling.cuttingCount')" width="80"/>
+      <el-table-column prop="edgingCount" :label="$t('scheduling.edgingCount')" width="80"/>
+      <el-table-column prop="temperingCount" :label="$t('scheduling.temperingCount')" width="80"/>
+      <el-table-column prop="insulatingCount" :label="$t('scheduling.insulatingCount')" width="80"/>
     </el-table>
   </div>
 </template>
@@ -419,6 +487,7 @@
   align-items: center;
   gap: 20px;
   margin-bottom: 20px;
+  overflow: auto;
 }
 
 /* 璇︽儏琛ㄦ牸鏍峰紡 */

--
Gitblit v1.8.0