From adc50a4df8a64636a07c53f5bd50edb10fbfd1eb Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 16 四月 2026 15:55:33 +0800
Subject: [PATCH] 进销存升级 1.生产添加查询条件

---
 src/views/productionManagement/productionOrder/index.vue     |   11 +
 src/views/productionManagement/workOrderEdit/index.vue       |  459 ++++++++++++++++++++++++++------------------------
 src/views/productionManagement/workOrderManagement/index.vue |   12 +
 3 files changed, 260 insertions(+), 222 deletions(-)

diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index cc0de4e..8d4a8aa 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -3,6 +3,14 @@
     <div class="search_form">
       <el-form :model="searchForm"
                :inline="true">
+        <el-form-item label="鐢熶骇璁㈠崟鍙�:">
+          <el-input v-model="searchForm.npsNo"
+                    placeholder="璇疯緭鍏�"
+                    clearable
+                    prefix-icon="Search"
+                    style="width: 160px;"
+                    @change="handleQuery" />
+        </el-form-item>
         <el-form-item label="瀹㈡埛鍚嶇О:">
           <el-input v-model="searchForm.customerName"
                     placeholder="璇疯緭鍏�"
@@ -134,7 +142,7 @@
     {
       label: "鐢熶骇璁㈠崟鍙�",
       prop: "npsNo",
-      width: '120px',
+      width: '150px',
     },
     {
       label: "閿�鍞悎鍚屽彿",
@@ -251,6 +259,7 @@
 
   const data = reactive({
     searchForm: {
+      npsNo: "",
       customerName: "",
       salesContractNo: "",
       projectName: "",
diff --git a/src/views/productionManagement/workOrderEdit/index.vue b/src/views/productionManagement/workOrderEdit/index.vue
index 50f9fce..52a36cd 100644
--- a/src/views/productionManagement/workOrderEdit/index.vue
+++ b/src/views/productionManagement/workOrderEdit/index.vue
@@ -4,59 +4,74 @@
       <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" />
+          <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>
+          <span class="search_title">鐢熶骇璁㈠崟鍙凤細</span>
+          <el-input
+            v-model="searchForm.productOrderNpsNo"
+            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">
-      <PIMTable rowKey="id"
-                :column="tableColumn"
-                :tableData="tableData"
-                :page="page"
-                :tableLoading="tableLoading"
-                @pagination="pagination">
+      <PIMTable
+        rowKey="id"
+        :column="tableColumn"
+        :tableData="tableData"
+        :page="page"
+        :tableLoading="tableLoading"
+        @pagination="pagination"
+      >
         <template #completionStatus="{ row }">
-          <el-progress :percentage="toProgressPercentage(row?.completionStatus)"
-                       :color="progressColor(toProgressPercentage(row?.completionStatus))"
-                       :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" />
+          <el-progress
+            :percentage="toProgressPercentage(row?.completionStatus)"
+            :color="progressColor(toProgressPercentage(row?.completionStatus))"
+            :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''"
+          />
         </template>
       </PIMTable>
     </div>
-    
-    <!-- 缂栬緫鏃堕棿寮圭獥 -->
-    <el-dialog v-model="editDialogVisible"
-               title="缂栬緫璁″垝鏃堕棿"
-               width="500px">
-      <el-form :model="editrow"
-               label-width="120px">
+
+    <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-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-date-picker
+            v-model="editrow.planEndTime"
+            type="date"
+            placeholder="璇烽�夋嫨"
+            value-format="YYYY-MM-DD"
+            style="width: 300px"
+          />
         </el-form-item>
       </el-form>
       <template #footer>
         <span class="dialog-footer">
-          <el-button type="primary"
-                     @click="handleUpdate">纭畾</el-button>
+          <el-button type="primary" @click="handleUpdate">纭畾</el-button>
           <el-button @click="editDialogVisible = false">鍙栨秷</el-button>
         </span>
       </template>
@@ -65,196 +80,200 @@
 </template>
 
 <script setup>
-  import { onMounted, ref, nextTick } from "vue";
-  import { ElMessageBox } from "element-plus";
-  import dayjs from "dayjs";
-  import {
-    productWorkOrderPage,
-    updateProductWorkOrder,
-  } from "@/api/productionManagement/workOrder.js";
-  import { getCurrentInstance, reactive, toRefs } from "vue";
-  const { proxy } = getCurrentInstance();
+import { getCurrentInstance, onMounted, reactive, ref, toRefs } from "vue";
+import { ElMessageBox } from "element-plus";
+import {
+  productWorkOrderPage,
+  updateProductWorkOrder,
+} from "@/api/productionManagement/workOrder.js";
 
-  const tableColumn = ref([
-    {
-      label: "宸ュ崟绫诲瀷",
-      prop: "workOrderType",
-      width: "80",
-    },
-    {
-      label: "宸ュ崟缂栧彿",
-      prop: "workOrderNo",
-      width: "140",
-    },
-    {
-      label: "鐢熶骇璁㈠崟鍙�",
-      prop: "productOrderNpsNo",
-      width: "140",
-    },
-    {
-      label: "浜у搧鍚嶇О",
-      prop: "productName",
-      width: "140",
-    },
-    {
-      label: "瑙勬牸",
-      prop: "model",
-    },
-    {
-      label: "鍗曚綅",
-      prop: "unit",
-    },
-    {
-      label: "宸ュ簭鍚嶇О",
-      prop: "processName",
-    },
-    {
-      label: "闇�姹傛暟閲�",
-      prop: "planQuantity",
-      width: "140",
-    },
-    {
-      label: "瀹屾垚鏁伴噺",
-      prop: "completeQuantity",
-      width: "140",
-    },
-    {
-      label: "瀹屾垚杩涘害",
-      prop: "completionStatus",
-      dataType: "slot",
-      slot: "completionStatus",
-      width: "140",
-    },
-    {
-      label: "璁″垝寮�濮嬫椂闂�",
-      prop: "planStartTime",
-      width: "140",
-    },
-    {
-      label: "璁″垝缁撴潫鏃堕棿",
-      prop: "planEndTime",
-      width: "140",
-    },
-    {
-      label: "瀹為檯寮�濮嬫椂闂�",
-      prop: "actualStartTime",
-      width: "140",
-    },
-    {
-      label: "瀹為檯缁撴潫鏃堕棿",
-      prop: "actualEndTime",
-      width: "140",
-    },
-    {
-      label: "鎿嶄綔",
-      width: "100",
-      align: "center",
-      dataType: "action",
-      fixed: "right",
-      operation: [
-        {
-          name: "璁″垝鏃堕棿",
-          clickFun: row => {
-            handleEdit(row);
-          },
+const { proxy } = getCurrentInstance();
+
+const tableColumn = ref([
+  {
+    label: "宸ュ崟绫诲瀷",
+    prop: "workOrderType",
+    width: "80",
+  },
+  {
+    label: "宸ュ崟缂栧彿",
+    prop: "workOrderNo",
+    width: "140",
+  },
+  {
+    label: "鐢熶骇璁㈠崟鍙�",
+    prop: "productOrderNpsNo",
+    width: "140",
+  },
+  {
+    label: "浜у搧鍚嶇О",
+    prop: "productName",
+    width: "140",
+  },
+  {
+    label: "瑙勬牸",
+    prop: "model",
+  },
+  {
+    label: "鍗曚綅",
+    prop: "unit",
+  },
+  {
+    label: "宸ュ簭鍚嶇О",
+    prop: "processName",
+  },
+  {
+    label: "闇�姹傛暟閲�",
+    prop: "planQuantity",
+    width: "140",
+  },
+  {
+    label: "瀹屾垚鏁伴噺",
+    prop: "completeQuantity",
+    width: "140",
+  },
+  {
+    label: "瀹屾垚杩涘害",
+    prop: "completionStatus",
+    dataType: "slot",
+    slot: "completionStatus",
+    width: "140",
+  },
+  {
+    label: "璁″垝寮�濮嬫椂闂�",
+    prop: "planStartTime",
+    width: "140",
+  },
+  {
+    label: "璁″垝缁撴潫鏃堕棿",
+    prop: "planEndTime",
+    width: "140",
+  },
+  {
+    label: "瀹為檯寮�濮嬫椂闂�",
+    prop: "actualStartTime",
+    width: "140",
+  },
+  {
+    label: "瀹為檯缁撴潫鏃堕棿",
+    prop: "actualEndTime",
+    width: "140",
+  },
+  {
+    label: "鎿嶄綔",
+    width: "100",
+    align: "center",
+    dataType: "action",
+    fixed: "right",
+    operation: [
+      {
+        name: "璁″垝鏃堕棿",
+        clickFun: row => {
+          handleEdit(row);
         },
-      ],
-    },
-  ]);
-  
-  const tableData = ref([]);
-  const tableLoading = ref(false);
-  const editDialogVisible = ref(false);
-  let editrow = ref(null);
-  const page = reactive({
-    current: 1,
-    size: 100,
-    total: 0,
-  });
+      },
+    ],
+  },
+]);
 
-  const data = reactive({
-    searchForm: {
-      workOrderNo: "",
-    },
-  });
-  const { searchForm } = toRefs(data);
-  const toProgressPercentage = val => {
-    const n = Number(val);
-    if (!Number.isFinite(n)) return 0;
-    if (n <= 0) return 0;
-    if (n >= 100) return 100;
-    return Math.round(n);
-  };
-  const progressColor = percentage => {
-    const p = toProgressPercentage(percentage);
-    if (p < 30) return "#f56c6c";
-    if (p < 50) return "#e6a23c";
-    if (p < 80) return "#409eff";
-    return "#67c23a";
-  };
+const tableData = ref([]);
+const tableLoading = ref(false);
+const editDialogVisible = ref(false);
+const editrow = ref(null);
+const page = reactive({
+  current: 1,
+  size: 100,
+  total: 0,
+});
 
-  // 鏌ヨ鍒楄〃
-  /** 鎼滅储鎸夐挳鎿嶄綔 */
-  const handleQuery = () => {
-    page.current = 1;
-    getList();
-  };
-  const pagination = obj => {
-    page.current = obj.page;
-    page.size = obj.limit;
-    getList();
-  };
-  const getList = () => {
-    tableLoading.value = true;
-    const params = { ...searchForm.value, ...page };
-    productWorkOrderPage(params)
-      .then(res => {
-        tableLoading.value = false;
-        tableData.value = res.data.records;
-        page.total = res.data.total;
-      })
-      .catch(() => {
-        tableLoading.value = false;
+const data = reactive({
+  searchForm: {
+    workOrderNo: "",
+    productOrderNpsNo: "",
+  },
+});
+const { searchForm } = toRefs(data);
+
+const toProgressPercentage = val => {
+  const n = Number(val);
+  if (!Number.isFinite(n)) return 0;
+  if (n <= 0) return 0;
+  if (n >= 100) return 100;
+  return Math.round(n);
+};
+
+const progressColor = percentage => {
+  const p = toProgressPercentage(percentage);
+  if (p < 30) return "#f56c6c";
+  if (p < 50) return "#e6a23c";
+  if (p < 80) return "#409eff";
+  return "#67c23a";
+};
+
+const handleQuery = () => {
+  page.current = 1;
+  getList();
+};
+
+const pagination = obj => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  getList();
+};
+
+const getList = () => {
+  tableLoading.value = true;
+  const params = { ...searchForm.value, ...page };
+  productWorkOrderPage(params)
+    .then(res => {
+      tableLoading.value = false;
+      tableData.value = res.data.records;
+      page.total = res.data.total;
+    })
+    .catch(() => {
+      tableLoading.value = false;
+    });
+};
+
+const handleEdit = row => {
+  editrow.value = JSON.parse(JSON.stringify(row));
+  editDialogVisible.value = true;
+};
+
+const handleUpdate = () => {
+  updateProductWorkOrder(editrow.value)
+    .then(() => {
+      proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+      editDialogVisible.value = false;
+      getList();
+    })
+    .catch(() => {
+      ElMessageBox.alert("淇敼澶辫触", "鎻愮ず", {
+        confirmButtonText: "纭畾",
       });
-  };
+    });
+};
 
-  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: "纭畾",
-        });
-      });
-  };
-
-  onMounted(() => {
-    getList();
-  });
+onMounted(() => {
+  getList();
+});
 </script>
 
 <style scoped lang="scss">
-  .search-row {
-    display: flex;
-    align-items: center;
-    gap: 12px;
-  }
-  .search-item {
-    display: flex;
-    align-items: center;
-  }
-  .search_title {
-    margin-right: 8px;
-    font-size: 14px;
-    color: #606266;
-  }
-</style>
\ No newline at end of file
+.search-row {
+  display: flex;
+  align-items: center;
+  gap: 12px;
+}
+
+.search-item {
+  display: flex;
+  align-items: center;
+}
+
+.search_title {
+  margin-right: 8px;
+  font-size: 14px;
+  color: #606266;
+}
+</style>
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index d0f9389..9d18813 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -12,6 +12,15 @@
                     prefix-icon="Search" />
         </div>
         <div class="search-item">
+          <span class="search_title">鐢熶骇璁㈠崟鍙凤細</span>
+          <el-input v-model="searchForm.productOrderNpsNo"
+                    style="width: 240px"
+                    placeholder="璇疯緭鍏�"
+                    @change="handleQuery"
+                    clearable
+                    prefix-icon="Search" />
+        </div>
+        <div class="search-item">
           <el-button type="primary"
                      @click="handleQuery">鎼滅储</el-button>
         </div>
@@ -420,6 +429,7 @@
   const data = reactive({
     searchForm: {
       workOrderNo: "",
+      productOrderNpsNo: "",
     },
   });
   const { searchForm } = toRefs(data);
@@ -806,4 +816,4 @@
       height: 140px !important;
     }
   }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3