From 6f32ae6d2545c8279032105bf263eb2552fe6a09 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 06 一月 2026 18:02:37 +0800
Subject: [PATCH] 1.生产工单做流转单2.生产订单工艺路线做排序删除3.生产工单加报工

---
 src/views/productionManagement/workOrder/index.vue |  452 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 437 insertions(+), 15 deletions(-)

diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index c4779cb..33a610b 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -1,19 +1,20 @@
 <template>
   <div class="app-container">
     <div class="search_form">
-      <div>
-        <span class="search_title">宸ュ崟缂栧彿锛�</span>
-        <el-input v-model="searchForm.workOrderNo"
-                  style="width: 240px"
-                  placeholder="璇疯緭鍏�"
-                  @change="handleQuery"
-                  clearable
-                  prefix-icon="Search" />
-        <el-button type="primary"
-                   @click="handleQuery"
-                   style="margin-left: 10px">鎼滅储</el-button>
-      </div>
-      <div>
+      <div class="search-row">
+        <div class="search-item">
+          <span class="search_title">宸ュ崟缂栧彿锛�</span>
+          <el-input v-model="searchForm.workOrderNo"
+                    style="width: 240px"
+                    placeholder="璇疯緭鍏�"
+                    @change="handleQuery"
+                    clearable
+                    prefix-icon="Search" />
+        </div>
+        <div class="search-item">
+          <el-button type="primary"
+                     @click="handleQuery">鎼滅储</el-button>
+        </div>
       </div>
     </div>
     <div class="table_list">
@@ -37,6 +38,171 @@
         </div>
       </div>
     </el-dialog>
+    <el-dialog v-model="editDialogVisible"
+               title="缂栬緫鏃堕棿"
+               width="500px">
+      <el-form :model="editrow"
+               label-width="120px">
+        <el-form-item label="璁″垝寮�濮嬫椂闂�">
+          <el-date-picker v-model="editrow.planStartTime"
+                          type="date"
+                          placeholder="璇烽�夋嫨"
+                          value-format="YYYY-MM-DD"
+                          style="width: 300px" />
+        </el-form-item>
+        <el-form-item label="璁″垝缁撴潫鏃堕棿">
+          <el-date-picker v-model="editrow.planEndTime"
+                          type="date"
+                          placeholder="璇烽�夋嫨"
+                          value-format="YYYY-MM-DD"
+                          style="width: 300px" />
+        </el-form-item>
+        <el-form-item label="瀹為檯寮�濮嬫椂闂�">
+          <el-date-picker v-model="editrow.actualStartTime"
+                          type="date"
+                          placeholder="璇烽�夋嫨"
+                          value-format="YYYY-MM-DD"
+                          style="width: 300px" />
+        </el-form-item>
+        <el-form-item label="瀹為檯缁撴潫鏃堕棿">
+          <el-date-picker v-model="editrow.actualEndTime"
+                          type="date"
+                          placeholder="璇烽�夋嫨"
+                          value-format="YYYY-MM-DD"
+                          style="width: 300px" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="editDialogVisible = false">鍙栨秷</el-button>
+          <el-button type="primary"
+                     @click="handleUpdate">纭畾</el-button>
+        </span>
+      </template>
+    </el-dialog>
+    <el-dialog v-model="transferCardVisible"
+               title="娴佽浆鍗�"
+               width="1000px">
+      <div class="transfer-card-title">宸ュ崟娴佽浆鍗�</div>
+      <div class="transfer-card-container">
+        <div class="transfer-card-info">
+          <div class="info-group">
+            <div class="info-item">
+              <span class="info-label">宸ュ崟缂栧彿</span>
+              <span class="info-value">{{ transferCardRowData.workOrderNo }}</span>
+            </div>
+            <!-- <div class="info-item">
+              <span class="info-label">浜у搧缂栧彿</span>
+              <span class="info-value">{{ transferCardRowData.productNo }}</span>
+            </div> -->
+            <div class="info-item">
+              <span class="info-label">浜у搧鍚嶇О</span>
+              <span class="info-value">{{ transferCardRowData.productName }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">浜у搧瑙勬牸</span>
+              <span class="info-value">{{ transferCardRowData.model }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">宸ュ崟鐘舵��</span>
+              <span class="info-value">{{ 
+                transferCardRowData.status === 1 ? '寰呯‘璁�' : 
+                transferCardRowData.status === 2 ? '寰呯敓浜�' : 
+                transferCardRowData.status === 3 ? '鐢熶骇涓�' : 
+                transferCardRowData.status === 4 ? '宸茬敓浜�' : 
+                transferCardRowData.status 
+              }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">璁″垝寮�濮嬫椂闂�</span>
+              <span class="info-value">{{ transferCardRowData.planStartTime }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">璁″垝缁撴潫鏃堕棿</span>
+              <span class="info-value">{{ transferCardRowData.planEndTime }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">澶囨敞</span>
+              <span class="info-value">{{ transferCardRowData.remark }}</span>
+            </div>
+          </div>
+          <div class="info-group">
+            <div class="info-item">
+              <span class="info-label">&nbsp;</span>
+              <span class="info-value">&nbsp;</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">璁″垝鏁伴噺</span>
+              <span class="info-value">{{ transferCardRowData.planQuantity }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">鑹搧鏁伴噺</span>
+              <span class="info-value">0</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">涓嶈壇鍝佹暟</span>
+              <span class="info-value">0</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">瀹為檯寮�濮嬫椂闂�</span>
+              <span class="info-value">{{ transferCardRowData.actualStartTime }}</span>
+            </div>
+            <div class="info-item">
+              <span class="info-label">瀹為檯缁撴潫鏃堕棿</span>
+              <span class="info-value">{{ transferCardRowData.actualEndTime }}</span>
+            </div>
+          </div>
+        </div>
+        <div class="transfer-card-qr">
+          <div class="qr-container">
+            <img :src="transferCardQrUrl"
+                 alt="娴佽浆鍗′簩缁寸爜"
+                 style="width: 200px; height: 200px;" />
+            <!-- <div class="qr-tip"
+                 style="margin-top: 10px; text-align: center;">娴佽浆鍗′簩缁寸爜</div> -->
+          </div>
+        </div>
+      </div>
+      <div class="print-button-container"
+           style=" text-align: center;
+      margin-bottom: 40px;">
+        <el-button type="primary"
+                   style="margin-top: 20px;"
+                   @click="printTransferCard">鎵撳嵃娴佽浆鍗�</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog v-model="reportDialogVisible"
+               title="鎶ュ伐"
+               width="500px">
+      <el-form :model="reportForm"
+               label-width="120px">
+        <el-form-item label="寰呯敓浜ф暟閲�">
+          <el-input v-model="reportForm.remainingQuantity"
+                    readonly
+                    style="width: 300px" />
+        </el-form-item>
+        <el-form-item label="鏈鐢熶骇鏁伴噺">
+          <el-input v-model.number="reportForm.quantity"
+                    type="number"
+                    min="1"
+                    style="width: 300px"
+                    placeholder="璇疯緭鍏ユ湰娆$敓浜ф暟閲�" />
+        </el-form-item>
+        <el-form-item label="鐝粍淇℃伅">
+          <el-input v-model="reportForm.userName"
+                    style="width: 300px"
+                    readonly
+                    placeholder="璇疯緭鍏ョ彮缁勪俊鎭�" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="reportDialogVisible = false">鍙栨秷</el-button>
+          <el-button type="primary"
+                     @click="handleReport">纭畾</el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -44,7 +210,12 @@
   import { onMounted, ref } from "vue";
   import { ElMessageBox } from "element-plus";
   import dayjs from "dayjs";
-  import { productWorkOrderPage } from "@/api/productionManagement/workOrder.js";
+  import {
+    productWorkOrderPage,
+    updateProductWorkOrder,
+    addProductMain,
+  } from "@/api/productionManagement/workOrder.js";
+  import { getUserProfile } from "@/api/system/user.js";
   import QRCode from "qrcode";
   import { getCurrentInstance, reactive, toRefs } from "vue";
   const { proxy } = getCurrentInstance();
@@ -86,12 +257,50 @@
       label: "瀹為檯缁撴潫鏃堕棿",
       prop: "actualEndTime",
     },
+    {
+      label: "鎿嶄綔",
+      width: "200",
+      align: "center",
+      dataType: "action",
+      operation: [
+        {
+          name: "缂栬緫",
+          clickFun: row => {
+            handleEdit(row);
+          },
+        },
+        {
+          name: "娴佽浆鍗�",
+          clickFun: row => {
+            showTransferCard(row);
+          },
+        },
+        {
+          name: "鎶ュ伐",
+          clickFun: row => {
+            showReportDialog(row);
+          },
+        },
+      ],
+    },
   ]);
   const tableData = ref([]);
   const tableLoading = ref(false);
   const qrDialogVisible = ref(false);
   const qrCodeUrl = ref("");
   const qrRowData = ref(null);
+  const editDialogVisible = ref(false);
+  const transferCardVisible = ref(false);
+  const transferCardData = ref([]);
+  const transferCardQrUrl = ref("");
+  const transferCardRowData = ref(null);
+  const reportDialogVisible = ref(false);
+  const reportForm = reactive({
+    remainingQuantity: 0,
+    quantity: 0,
+    userName: "",
+  });
+  const currentReportRowData = ref(null);
   const page = reactive({
     current: 1,
     size: 100,
@@ -104,6 +313,7 @@
     },
   });
   const { searchForm } = toRefs(data);
+  let editrow = ref(null);
 
   // 鏌ヨ鍒楄〃
   /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -145,9 +355,221 @@
     document.body.removeChild(link);
   };
 
+  const showTransferCard = async row => {
+    transferCardRowData.value = row;
+    const qrContent = proxy.javaApi + "/work-order?orderId=" + row.id;
+    transferCardQrUrl.value = await QRCode.toDataURL(qrContent);
+    transferCardVisible.value = true;
+  };
+
+  const printTransferCard = () => {
+    window.print();
+  };
+
+  const handleEdit = row => {
+    editrow.value = JSON.parse(JSON.stringify(row));
+    editDialogVisible.value = true;
+  };
+
+  const handleUpdate = () => {
+    updateProductWorkOrder(editrow.value)
+      .then(res => {
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        editDialogVisible.value = false;
+        getList();
+      })
+      .catch(() => {
+        ElMessageBox.alert("淇敼澶辫触", "鎻愮ず", {
+          confirmButtonText: "纭畾",
+        });
+      });
+  };
+
+  const showReportDialog = row => {
+    currentReportRowData.value = row;
+    reportForm.remainingQuantity = 1;
+    reportForm.quantity = 0;
+    reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
+    // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅
+
+    reportDialogVisible.value = true;
+  };
+
+  const handleReport = () => {
+    if (!reportForm.quantity || reportForm.quantity <= 0) {
+      ElMessageBox.alert("璇疯緭鍏ユ湁鏁堢殑鏈鐢熶骇鏁伴噺", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+      });
+      return;
+    }
+    if (reportForm.quantity > reportForm.remainingQuantity) {
+      ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+      });
+      return;
+    }
+    addProductMain(reportForm).then(res => {
+      if (res.code === 200) {
+        proxy.$modal.msgSuccess("鎶ュ伐鎴愬姛");
+        reportDialogVisible.value = false;
+        getList();
+      } else {
+        ElMessageBox.alert(res.msg || "鎶ュ伐澶辫触", "鎻愮ず", {
+          confirmButtonText: "纭畾",
+        });
+      }
+    });
+  };
+
   onMounted(() => {
     getList();
+    getUserProfile()
+      .then(res => {
+        if (res.code === 200) {
+          reportForm.userName = res.data.userName;
+          reportForm.userId = res.data.userId;
+        }
+      })
+      .catch(err => {
+        console.error("鑾峰彇鐢ㄦ埛淇℃伅澶辫触", err);
+      });
   });
 </script>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+  .search_form {
+    margin-bottom: 20px;
+    .search-row {
+      display: flex;
+      gap: 20px;
+      align-items: center;
+      .search-item {
+        display: flex;
+        align-items: center;
+        gap: 10px;
+      }
+    }
+  }
+
+  .transfer-card-title {
+    font-size: 24px;
+    font-weight: bold;
+    text-align: center;
+    margin-bottom: 20px;
+  }
+
+  .transfer-card-container {
+    display: flex;
+    gap: 20px;
+    height: 350px;
+    .transfer-card-info {
+      flex: 1;
+      overflow: auto;
+      .info-group {
+        width: 50%;
+        float: left;
+      }
+      .info-item {
+        display: flex;
+        margin-bottom: 15px;
+        .info-label {
+          width: 120px;
+          font-weight: bold;
+          margin-right: 20px;
+        }
+        .info-value {
+          flex: 1;
+        }
+      }
+    }
+    .transfer-card-qr {
+      width: 240px;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: flex-start;
+    }
+  }
+</style>
+
+<style  lang="scss">
+  @media print {
+    @page {
+      size: landscape;
+    }
+    body * {
+      visibility: hidden;
+    }
+    .el-dialog__wrapper,
+    .el-dialog,
+    .el-dialog__body,
+    .transfer-card-title,
+    .transfer-card-container,
+    .transfer-card-container *,
+    .info-item,
+    .info-label,
+    .info-value {
+      visibility: visible;
+    }
+    .print-button-container {
+      visibility: hidden;
+    }
+    .el-dialog__wrapper {
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      margin: 0;
+    }
+    .el-dialog {
+      width: 100% !important;
+      max-width: 800px;
+      margin: 0 auto !important;
+    }
+    .el-dialog__header,
+    .el-dialog__footer {
+      display: none;
+    }
+    .el-dialog__body {
+      padding: 20px;
+    }
+    .transfer-card-container {
+      height: auto;
+      display: flex;
+      gap: 20px;
+    }
+    .transfer-card-info {
+      flex: 1;
+      .info-group {
+        width: 100%;
+        float: none;
+        margin-bottom: 20px;
+      }
+      .info-item {
+        display: flex;
+        margin-bottom: 10px;
+        .info-label {
+          width: 100px;
+          font-weight: bold;
+          margin-right: 15px;
+          white-space: nowrap;
+        }
+        .info-value {
+          flex: 1;
+          word-break: break-word;
+        }
+      }
+    }
+    .transfer-card-qr {
+      width: 160px;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: flex-start;
+    }
+    .qr-container img {
+      width: 140px !important;
+      height: 140px !important;
+    }
+  }
+</style>

--
Gitblit v1.9.3