From d460a2475ccf345d119701f3c631584f747ce2f5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 15 六月 2026 17:17:25 +0800
Subject: [PATCH] 君歌 1.不需要bom、生产核算 2.新增销售台账后自动生成一个生产订单,然后对订单进行排产 3.生产排产要求可以选择计划时间,时间格式为年月日+时分秒;也要可以多选报工人 4.web和app生产报工中要细分报工开始和报工结束两个操作,根据操作的提交时间记录实际报工时长展示报工台账中 5.报工人选择的谁,只有在相关账号才能看到可报工的数据 6.不合格管理字段按照单据进行修改。 7.生产工时、质量问题汇总、客户档案、销售及回款都能从各模块中导出数据

---
 src/views/productionManagement/processRoute/index.vue                                |    6 
 src/api/productionManagement/workOrder.js                                            |    9 
 src/views/productionManagement/processRoute/processRouteItem/index.vue               |  607 ------------
 src/views/productionManagement/workOrderEdit/index.vue                               |    8 
 src/views/productionManagement/workOrderManagement/index.vue                         |  641 +++---------
 /dev/null                                                                            |   45 
 src/views/productionManagement/productionReporting/index.vue                         |   14 
 src/views/productionManagement/processRoute/New.vue                                  |   66 -
 src/views/salesManagement/indicatorStats/index.vue                                   |   10 
 src/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue      |  428 +++++---
 src/views/productionManagement/productionOrder/index.vue                             |  207 ++--
 src/views/productionManagement/productionTraceability/index.vue                      |    6 
 src/views/productionManagement/processRoute/Edit.vue                                 |  105 --
 src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue |  239 ++--
 src/api/qualityManagement/nonconformingManagement.js                                 |   68 +
 src/views/qualityManagement/nonconformingManagement/index.vue                        |  439 +++----
 16 files changed, 930 insertions(+), 1,968 deletions(-)

diff --git a/src/api/productionManagement/workOrder.js b/src/api/productionManagement/workOrder.js
index b3050c9..79d1827 100644
--- a/src/api/productionManagement/workOrder.js
+++ b/src/api/productionManagement/workOrder.js
@@ -16,6 +16,15 @@
   });
 }
 
+// 寮�濮嬫姤宸�
+export function startWork(data) {
+  return request({
+    url: "/productionProductMain/startWork",
+    method: "post",
+    data: data,
+  });
+}
+
 export function addProductMain(data) {
   return request({
     url: "/productionProductMain/addProductMain",
diff --git a/src/api/qualityManagement/nonconformingManagement.js b/src/api/qualityManagement/nonconformingManagement.js
index 50a1b74..e49ad37 100644
--- a/src/api/qualityManagement/nonconformingManagement.js
+++ b/src/api/qualityManagement/nonconformingManagement.js
@@ -1,5 +1,7 @@
 import request from "@/utils/request";
 
+// ==================== 涓嶅悎鏍肩鐞嗭紙鏃фā鍧楋級 ====================
+
 // 鏌ヨ涓嶅悎鏍肩鐞嗗垪琛�
 export function qualityUnqualifiedListPage(query) {
   return request({
@@ -8,7 +10,7 @@
     params: query,
   });
 }
-// 鏂板涓嶅悎鏍肩鐞嗗垪琛�
+// 鏂板涓嶅悎鏍肩鐞�
 export function qualityUnqualifiedAdd(query) {
   return request({
     url: "/quality/qualityUnqualified/add",
@@ -16,7 +18,7 @@
     data: query,
   });
 }
-// 淇敼涓嶅悎鏍肩鐞嗗垪琛�
+// 淇敼涓嶅悎鏍肩鐞�
 export function qualityUnqualifiedUpdate(query) {
   return request({
     url: "/quality/qualityUnqualified/update",
@@ -32,7 +34,7 @@
     data: query,
   });
 }
-// 鍒犻櫎涓嶅悎鏍肩鐞嗗垪琛�
+// 鍒犻櫎涓嶅悎鏍肩鐞�
 export function qualityUnqualifiedDel(query) {
   return request({
     url: "/quality/qualityUnqualified/del",
@@ -40,7 +42,7 @@
     data: query,
   });
 }
-// 鏌ヨ涓嶅悎鏍肩鐞嗕俊鎭�
+// 鏌ヨ涓嶅悎鏍肩鐞嗚鎯�
 export function getQualityUnqualifiedInfo(query) {
   return request({
     url: "/quality/qualityUnqualified/" + query,
@@ -48,3 +50,61 @@
     data: query,
   });
 }
+
+// ==================== 涓嶅悎鏍煎搧澶勭悊鍗曪紙鏂版ā鍧楋級 ====================
+
+// 鍒嗛〉鏌ヨ涓嶅悎鏍煎搧澶勭悊鍗�
+export function qualityUnqualifiedOrderListPage(query) {
+  return request({
+    url: "/qualityUnqualifiedOrder/listPage",
+    method: "get",
+    params: query,
+  });
+}
+// 鏌ョ湅澶勭悊鍗曡鎯�
+export function getQualityUnqualifiedOrderDetail(id) {
+  return request({
+    url: `/qualityUnqualifiedOrder/${id}`,
+    method: "get",
+  });
+}
+// 鏂板澶勭悊鍗�
+export function saveQualityUnqualifiedOrder(data) {
+  return request({
+    url: "/qualityUnqualifiedOrder/save",
+    method: "post",
+    data,
+  });
+}
+// 淇敼澶勭悊鍗�
+export function updateQualityUnqualifiedOrder(data) {
+  return request({
+    url: "/qualityUnqualifiedOrder/update",
+    method: "put",
+    data,
+  });
+}
+// 鍒犻櫎澶勭悊鍗�
+export function deleteQualityUnqualifiedOrder(ids) {
+  return request({
+    url: "/qualityUnqualifiedOrder/delete",
+    method: "delete",
+    data: ids,
+  });
+}
+// 澶勭悊锛堝缃級澶勭悊鍗�
+export function dealQualityUnqualifiedOrder(data) {
+  return request({
+    url: "/qualityUnqualifiedOrder/deal",
+    method: "post",
+    data,
+  });
+}
+// 瀵煎嚭澶勭悊鍗�
+export function exportQualityUnqualifiedOrder(id) {
+  return request({
+    url: `/qualityUnqualifiedOrder/export/${id}`,
+    method: "get",
+    responseType: "blob",
+  });
+}
diff --git a/src/api/qualityManagement/qualityUnqualifiedOrder.js b/src/api/qualityManagement/qualityUnqualifiedOrder.js
deleted file mode 100644
index a6bc577..0000000
--- a/src/api/qualityManagement/qualityUnqualifiedOrder.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import request from "@/utils/request";
-
-// 鍒嗛〉鏌ヨ涓嶅悎鏍煎搧澶勭悊鍗�
-export function listPage(query) {
-  return request({
-    url: "/qualityUnqualifiedOrder/listPage",
-    method: "get",
-    params: query,
-  });
-}
-
-// 鏌ョ湅璇︽儏
-export function getDetail(id) {
-  return request({
-    url: `/qualityUnqualifiedOrder/${id}`,
-    method: "get",
-  });
-}
-
-// 鏂板澶勭悊鍗�
-export function save(data) {
-  return request({
-    url: "/qualityUnqualifiedOrder/save",
-    method: "post",
-    data,
-  });
-}
-
-// 淇敼澶勭悊鍗�
-export function update(data) {
-  return request({
-    url: "/qualityUnqualifiedOrder/update",
-    method: "put",
-    data,
-  });
-}
-
-// 鍒犻櫎澶勭悊鍗�
-export function remove(ids) {
-  return request({
-    url: "/qualityUnqualifiedOrder/delete",
-    method: "delete",
-    data: ids,
-  });
-}
diff --git a/src/views/productionManagement/processRoute/Edit.vue b/src/views/productionManagement/processRoute/Edit.vue
index 0c0fe0f..d13a66e 100644
--- a/src/views/productionManagement/processRoute/Edit.vue
+++ b/src/views/productionManagement/processRoute/Edit.vue
@@ -25,33 +25,6 @@
           </el-button>
         </el-form-item>
 
-        <el-form-item
-            label="BOM"
-            prop="bomId"
-            :rules="[
-                {
-                required: true,
-                message: '璇烽�夋嫨BOM',
-                trigger: 'change',
-              }
-            ]"
-        >
-          <el-select
-              v-model="formState.bomId"
-              placeholder="璇烽�夋嫨BOM"
-              clearable
-              :disabled="!formState.productModelId || bomOptions.length === 0"
-              style="width: 100%"
-          >
-            <el-option
-                v-for="item in bomOptions"
-                :key="item.id"
-                :label="item.bomNo || `BOM-${item.id}`"
-                :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-
         <el-form-item label="澶囨敞" prop="description">
           <el-input v-model="formState.description" type="textarea" />
         </el-form-item>
@@ -76,7 +49,6 @@
 <script setup>
 import {ref, computed, getCurrentInstance, onMounted, nextTick, watch} from "vue";
 import {update} from "@/api/productionManagement/processRoute.js";
-import {getByModel} from "@/api/productionManagement/productBom.js";
 import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 
 const props = defineProps({
@@ -99,7 +71,6 @@
   productModelId: undefined,
   productName: "",
   productModelName: "",
-  bomId: undefined,
   description: '',
 });
 
@@ -113,7 +84,6 @@
 });
 
 const showProductSelectDialog = ref(false);
-const bomOptions = ref([]);
 
 let { proxy } = getCurrentInstance()
 
@@ -129,92 +99,29 @@
       productId: props.record.productId,
       productModelId: props.record.productModelId,
       productName: props.record.productName || "",
-      // 娉ㄦ剰锛歳ecord涓殑瀛楁鏄痬odel锛岄渶瑕佹槧灏勫埌productModelName
       productModelName: props.record.model || props.record.productModelName || "",
-      bomId: props.record.bomId,
       description: props.record.description || '',
     };
-    // 濡傛灉鏈変骇鍝佸瀷鍙稩D锛屽姞杞紹OM鍒楄〃
-    if (props.record.productModelId) {
-      loadBomList(props.record.productModelId);
-    }
   }
 }
 
-// 鍔犺浇BOM鍒楄〃
-const loadBomList = async (productModelId) => {
-  if (!productModelId) {
-    bomOptions.value = [];
-    return;
-  }
-  try {
-    const res = await getByModel(productModelId);
-    // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-    let bomList = [];
-    if (Array.isArray(res)) {
-      bomList = res;
-    } else if (res && res.data) {
-      bomList = Array.isArray(res.data) ? res.data : [res.data];
-    } else if (res && typeof res === 'object') {
-      bomList = [res];
-    }
-    bomOptions.value = bomList;
-  } catch (error) {
-    console.error("鍔犺浇BOM鍒楄〃澶辫触锛�", error);
-    bomOptions.value = [];
-  }
-};
-
 // 浜у搧閫夋嫨澶勭悊
-const handleProductSelect = async (products) => {
+const handleProductSelect = (products) => {
   if (products && products.length > 0) {
     const product = products[0];
-    // 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
-    try {
-      const res = await getByModel(product.id);
-      // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-      let bomList = [];
-      if (Array.isArray(res)) {
-        bomList = res;
-      } else if (res && res.data) {
-        bomList = Array.isArray(res.data) ? res.data : [res.data];
-      } else if (res && typeof res === 'object') {
-        bomList = [res];
-      }
-      
-      if (bomList.length > 0) {
-        formState.value.productModelId = product.id;
-        formState.value.productName = product.productName;
-        formState.value.productModelName = product.model;
-        // 濡傛灉褰撳墠閫夋嫨鐨凚OM涓嶅湪鏂板垪琛ㄤ腑锛屽垯閲嶇疆BOM閫夋嫨
-        const currentBomExists = bomList.some(bom => bom.id === formState.value.bomId);
-        if (!currentBomExists) {
-          formState.value.bomId = undefined;
-        }
-        bomOptions.value = bomList;
-        showProductSelectDialog.value = false;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
-        proxy.$refs["formRef"]?.validateField('productModelId');
-      } else {
-        proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-      }
-    } catch (error) {
-      // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
-      proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-    }
+    formState.value.productModelId = product.id;
+    formState.value.productName = product.productName;
+    formState.value.productModelName = product.model;
+    showProductSelectDialog.value = false;
+    proxy.$refs["formRef"]?.validateField('productModelId');
   }
 };
 
 const handleSubmit = () => {
   proxy.$refs["formRef"].validate(valid => {
     if (valid) {
-      // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰BOM
       if (!formState.value.productModelId) {
         proxy.$modal.msgError("璇烽�夋嫨浜у搧");
-        return;
-      }
-      if (!formState.value.bomId) {
-        proxy.$modal.msgError("璇烽�夋嫨BOM");
         return;
       }
       update(formState.value).then(res => {
diff --git a/src/views/productionManagement/processRoute/New.vue b/src/views/productionManagement/processRoute/New.vue
index b7f4f26..4f06198 100644
--- a/src/views/productionManagement/processRoute/New.vue
+++ b/src/views/productionManagement/processRoute/New.vue
@@ -24,26 +24,6 @@
               : '閫夋嫨浜у搧' }}
           </el-button>
         </el-form-item>
-        <el-form-item label="BOM"
-                      prop="bomId"
-                      :rules="[
-                {
-                required: true,
-                message: '璇烽�夋嫨BOM',
-                trigger: 'change',
-              }
-            ]">
-          <el-select v-model="formState.bomId"
-                     placeholder="璇烽�夋嫨BOM"
-                     clearable
-                     :disabled="!formState.productModelId || bomOptions.length === 0"
-                     style="width: 100%">
-            <el-option v-for="item in bomOptions"
-                       :key="item.id"
-                       :label="item.bomNo || `BOM-${item.id}`"
-                       :value="item.id" />
-          </el-select>
-        </el-form-item>
         <el-form-item label="澶囨敞"
                       prop="description">
           <el-input v-model="formState.description"
@@ -68,7 +48,6 @@
 <script setup>
   import { ref, computed, getCurrentInstance } from "vue";
   import { add } from "@/api/productionManagement/processRoute.js";
-  import { getByModel } from "@/api/productionManagement/productBom.js";
   import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 
   const props = defineProps({
@@ -86,7 +65,6 @@
     productModelId: undefined,
     productName: "",
     productModelName: "",
-    bomId: undefined,
     description: "",
   });
 
@@ -100,7 +78,6 @@
   });
 
   const showProductSelectDialog = ref(false);
-  const bomOptions = ref([]);
 
   let { proxy } = getCurrentInstance();
 
@@ -111,59 +88,28 @@
       productModelId: undefined,
       productName: "",
       productModelName: "",
-      bomId: undefined,
       description: "",
     };
-    bomOptions.value = [];
     isShow.value = false;
   };
 
   // 浜у搧閫夋嫨澶勭悊
-  const handleProductSelect = async products => {
+  const handleProductSelect = products => {
     if (products && products.length > 0) {
       const product = products[0];
-      // 鍏堟煡璇OM鍒楄〃锛堝繀閫夛級
-      try {
-        const res = await getByModel(product.id);
-        // 澶勭悊杩斿洖鐨凚OM鏁版嵁锛氬彲鑳芥槸鏁扮粍銆佸璞℃垨鍖呭惈data瀛楁
-        let bomList = [];
-        if (Array.isArray(res)) {
-          bomList = res;
-        } else if (res && res.data) {
-          bomList = Array.isArray(res.data) ? res.data : [res.data];
-        } else if (res && typeof res === "object") {
-          bomList = [res];
-        }
-
-        if (bomList.length > 0) {
-          formState.value.productModelId = product.id;
-          formState.value.productName = product.productName;
-          formState.value.productModelName = product.model;
-          formState.value.bomId = undefined; // 閲嶇疆BOM閫夋嫨
-          bomOptions.value = bomList;
-          showProductSelectDialog.value = false;
-          // 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
-          proxy.$refs["formRef"]?.validateField("productModelId");
-        } else {
-          proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-        }
-      } catch (error) {
-        // 濡傛灉鎺ュ彛杩斿洖404鎴栧叾浠栭敊璇紝璇存槑娌℃湁BOM
-        proxy.$modal.msgError("璇ヤ骇鍝佹病鏈塀OM锛岃鍏堝垱寤築OM");
-      }
+      formState.value.productModelId = product.id;
+      formState.value.productName = product.productName;
+      formState.value.productModelName = product.model;
+      showProductSelectDialog.value = false;
+      proxy.$refs["formRef"]?.validateField("productModelId");
     }
   };
 
   const handleSubmit = () => {
     proxy.$refs["formRef"].validate(valid => {
       if (valid) {
-        // 楠岃瘉鏄惁閫夋嫨浜嗕骇鍝佸拰BOM
         if (!formState.value.productModelId) {
           proxy.$modal.msgError("璇烽�夋嫨浜у搧");
-          return;
-        }
-        if (!formState.value.bomId) {
-          proxy.$modal.msgError("璇烽�夋嫨BOM");
           return;
         }
         console.log(formState.value, "formState.value====");
diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index 1ef5b9d..e14e02b 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -89,10 +89,6 @@
       prop: "model",
     },
     {
-      label: "BOM缂栧彿",
-      prop: "bomNo",
-    },
-    {
       label: "鎻忚堪",
       prop: "description",
     },
@@ -263,8 +259,6 @@
         processRouteCode: row.processRouteCode || "",
         productName: row.productName || "",
         model: row.model || "",
-        bomNo: row.bomNo || "",
-        bomId: row.bomId || "",
         description: row.description || "",
         type: "route",
       },
diff --git a/src/views/productionManagement/processRoute/processRouteItem/index.vue b/src/views/productionManagement/processRoute/processRouteItem/index.vue
index 3c52410..db7905d 100644
--- a/src/views/productionManagement/processRoute/processRouteItem/index.vue
+++ b/src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -30,14 +30,6 @@
             <span class="info-value">{{ routeInfo.model || '-' }}</span>
           </div>
         </div>
-        <div class="info-item">
-          <div class="info-label-wrapper">
-            <span class="info-label">BOM缂栧彿</span>
-          </div>
-          <div class="info-value-wrapper">
-            <span class="info-value">{{ routeInfo.bomNo || '-' }}</span>
-          </div>
-        </div>
         <div class="info-item"
              v-if="routeInfo.quantity && routeInfo.quantity !== 0">
           <div class="info-label-wrapper">
@@ -253,164 +245,6 @@
         </div>
       </div>
     </template>
-    <!-- bom妯″潡 -->
-    <div class="section-header"
-         style="margin-top: 20px;">
-      <div class="section-title">BOM 缁撴瀯</div>
-      <div class="section-actions"
-           v-if="pageType === 'order' && editable">
-        <el-button v-if="!bomDataValue.isEdit"
-                   type="primary"
-                   @click="bomDataValue.isEdit = true">
-          缂栬緫
-        </el-button>
-        <el-button v-if="bomDataValue.isEdit"
-                   @click="cancelEditBom">
-          鍙栨秷
-        </el-button>
-        <el-button v-if="bomDataValue.isEdit"
-                   type="primary"
-                   @click="handleSaveBom"
-                   :loading="bomDataValue.loading">
-          淇濆瓨BOM
-        </el-button>
-      </div>
-    </div>
-    <el-table :data="bomTableData"
-              border
-              :preserve-expanded-content="false"
-              :default-expand-all="true"
-              style="width: 100%">
-      <el-table-column type="expand">
-        <template #default>
-          <el-form ref="bomFormRef"
-                   :model="bomDataValue">
-            <el-table :data="bomDataValue.dataList"
-                      row-key="tempId"
-                      default-expand-all
-                      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
-                      style="width: 100%">
-              <el-table-column prop="productName"
-                               label="浜у搧" />
-              <el-table-column prop="model"
-                               label="瑙勬牸">
-                <template #default="{ row }">
-                  <el-form-item v-if="pageType === 'order' && bomDataValue.isEdit"
-                                :rules="[{ required: true, message: '璇烽�夋嫨瑙勬牸', trigger: ['blur','change'] }]"
-                                style="margin: 0">
-                    <el-select v-model="row.model"
-                               placeholder="璇烽�夋嫨瑙勬牸"
-                               clearable
-                               :disabled="!bomDataValue.isEdit || bomDataValue.dataList.some(item => (item).tempId === row.tempId)"
-                               style="width: 100%"
-                               @visible-change="(v) => { if (v) openBomDialog(row.tempId) }">
-                      <el-option v-if="row.model"
-                                 :label="row.model"
-                                 :value="row.model" />
-                    </el-select>
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column prop="processName"
-                               label="娑堣�楀伐搴�">
-                <template #default="{ row }">
-                  <el-form-item v-if="pageType === 'order' && bomDataValue.isEdit"
-                                :rules="bomDataValue.dataList.some(item => (item).tempId === row.tempId) ? [] : [{ required: true, message: '璇烽�夋嫨娑堣�楀伐搴�', trigger: 'change' }]"
-                                style="margin: 0">
-                    <el-select v-model="row.processId"
-                               placeholder="璇烽�夋嫨"
-                               filterable
-                               clearable
-                               style="width: 100%"
-                               @change="value => handleBomProcessChange(row, value)"
-                               :disabled="!bomDataValue.isEdit || bomDataValue.dataList.some(item => (item).tempId === row.tempId)">
-                      <el-option v-for="item in bomDataValue.processOptions"
-                                 :key="item.id"
-                                 :label="item.name"
-                                 :value="item.id" />
-                    </el-select>
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column prop="unitQuantity"
-                               label="鍗曚綅浜у嚭鎵�闇�鏁伴噺">
-                <template #default="{ row }">
-                  <el-form-item v-if="pageType === 'order' && bomDataValue.isEdit"
-                                :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
-                                style="margin: 0">
-                    <el-input-number v-model="row.unitQuantity"
-                                     :min="0"
-                                     :precision="2"
-                                     :step="1"
-                                     controls-position="right"
-                                     style="width: 100%"
-                                     @change="handleUnitQuantityChange"
-                                     :disabled="!bomDataValue.isEdit || bomDataValue.dataList.some(item => (item).tempId === row.tempId)" />
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column v-if="pageType === 'order'"
-                               prop="demandedQuantity"
-                               label="闇�姹傛�婚噺">
-                <template #default="{ row }">
-                  <el-form-item v-if="pageType === 'order' && bomDataValue.isEdit"
-                                :rules="[{ required: true, message: '璇疯緭鍏ラ渶姹傛�婚噺', trigger: ['blur','change'] }]"
-                                style="margin: 0">
-                    <el-input-number v-model="row.demandedQuantity"
-                                     :min="0"
-                                     :precision="2"
-                                     :step="1"
-                                     controls-position="right"
-                                     style="width: 100%"
-                                     :disabled="true" />
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column prop="unit"
-                               label="鍗曚綅">
-                <template #default="{ row }">
-                  <el-form-item v-if="pageType === 'order' && bomDataValue.isEdit"
-                                :rules="[{ required: true, message: '璇疯緭鍏ュ崟浣�', trigger: ['blur','change'] }]"
-                                style="margin: 0">
-                    <el-input v-model="row.unit"
-                              placeholder="璇疯緭鍏ュ崟浣�"
-                              clearable
-                              :disabled="!bomDataValue.isEdit || bomDataValue.dataList.some(item => (item).tempId === row.tempId)" />
-                  </el-form-item>
-                </template>
-              </el-table-column>
-              <el-table-column label="鎿嶄綔"
-                               fixed="right"
-                               width="200"
-                               v-if="pageType === 'order' && bomDataValue.isEdit">
-                <template #default="{ row }">
-                  <el-button v-if="bomDataValue.isEdit && !bomDataValue.dataList.some(item => (item).tempId === row.tempId)"
-                             type="danger"
-                             text
-                             @click="removeBomItem(row.tempId)">鍒犻櫎
-                  </el-button>
-                  <el-button v-if="bomDataValue.isEdit"
-                             type="primary"
-                             text
-                             @click="addBomItem(row.tempId)">娣诲姞
-                  </el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </el-form>
-        </template>
-      </el-table-column>
-      <el-table-column label="BOM缂栧彿"
-                       prop="bomNo" />
-      <el-table-column label="浜у搧鍚嶇О"
-                       prop="productName" />
-      <el-table-column label="瑙勬牸鍨嬪彿"
-                       prop="model" />
-    </el-table>
-    <ProductSelectDialog v-if="bomDataValue.showProductDialog"
-                         v-model="bomDataValue.showProductDialog"
-                         :single="true"
-                         @confirm="handleBomProduct" />
     <!-- 涓婁紶缁勪欢寮圭獥 -->
     <el-dialog v-model="uploadDialogVisible"
                title="涓婁紶闄勪欢"
@@ -553,12 +387,6 @@
     sortRouteItem,
   } from "@/api/productionManagement/productProcessRoute.js";
   import { processList } from "@/api/productionManagement/productionProcess.js";
-  import { listProcessBom } from "@/api/productionManagement/productionOrder.js";
-  import {
-    queryList,
-    queryList2,
-    add2,
-  } from "@/api/productionManagement/productStructure.js";
   import AttachmentUpload from "@/components/AttachmentUpload/file/index.vue";
   import {
     attachmentList,
@@ -584,7 +412,6 @@
   const dialogVisible = ref(false);
   const operationType = ref("add"); // add | edit
   const formRef = ref(null);
-  const bomFormRef = ref(null);
   const submitLoading = ref(false);
   const cardsContainer = ref(null);
   const tableRef = ref(null);
@@ -593,7 +420,6 @@
     processRouteCode: "",
     productName: "",
     model: "",
-    bomNo: "",
     description: "",
     quantity: 0,
     technologyRoutingId: "",
@@ -770,7 +596,6 @@
     processList({ size: -1, current: -1 })
       .then(res => {
         processOptions.value = res.data.records || [];
-        bomDataValue.value.processOptions = processOptions.value;
       })
       .catch(err => {
         console.error("鑾峰彇宸ュ簭澶辫触锛�", err);
@@ -783,16 +608,11 @@
       processRouteCode: route.query.processRouteCode || "",
       productName: route.query.productName || "",
       model: route.query.model || "",
-      bomNo: route.query.bomNo || "",
-      bomId: route.query.bomId || "",
       description: route.query.description || "",
       quantity: route.query.quantity || 0,
       technologyRoutingId: route.query.technologyRoutingId || "",
       status: !(route.query.status == 1 || route.query.status === "false"),
     };
-    bomTableData.value[0].productName = routeInfo.value.productName;
-    bomTableData.value[0].model = routeInfo.value.model;
-    bomTableData.value[0].bomNo = routeInfo.value.bomNo;
   };
 
   // 鏂板
@@ -1147,103 +967,6 @@
     }
   };
 
-  // BOM鐩稿叧鐘舵�佸拰鏂规硶
-  const bomTableData = ref([
-    {
-      productName: "",
-      model: "",
-      bomNo: "",
-    },
-  ]);
-
-  const bomDataValue = ref({
-    dataList: [],
-    processOptions: [],
-    showProductDialog: false,
-    currentRowName: null,
-    loading: false,
-    isEdit: false,
-  });
-
-  const syncProcessOperationFields = item => {
-    const processId =
-      item.processId ?? item.operationId ?? item.technologyOperationId ?? "";
-    if (!processId) {
-      item.processId = "";
-      return;
-    }
-    const option = bomDataValue.value.processOptions.find(
-      p => p.id === processId
-    );
-    const processName =
-      option?.name || item.processName || item.operationName || "";
-
-    item.processId = processId;
-    if (pageType.value === "order") {
-      item.technologyOperationId = processId;
-    } else {
-      item.operationId = processId;
-    }
-    item.processName = processName;
-    item.operationName = processName;
-  };
-
-  const normalizeTreeData = items => {
-    items.forEach(item => {
-      item.tempId = item.tempId || item.id || `${Date.now()}_${Math.random()}`;
-      syncProcessOperationFields(item);
-      if (Array.isArray(item.children) && item.children.length > 0) {
-        normalizeTreeData(item.children);
-      }
-    });
-  };
-
-  const toQuantityNumber = value => {
-    const numberValue = Number(value);
-    if (!Number.isFinite(numberValue)) {
-      return 0;
-    }
-    return Number(numberValue.toFixed(2));
-  };
-
-  const syncDemandedQuantityTree = (items, parentDemandedQuantity = null) => {
-    items.forEach(item => {
-      if (parentDemandedQuantity !== null) {
-        item.demandedQuantity = toQuantityNumber(
-          parentDemandedQuantity * toQuantityNumber(item.unitQuantity)
-        );
-      }
-
-      if (Array.isArray(item.children) && item.children.length > 0) {
-        syncDemandedQuantityTree(
-          item.children,
-          toQuantityNumber(item.demandedQuantity)
-        );
-      }
-    });
-  };
-
-  const recalculateDemandedQuantities = () => {
-    if (pageType.value !== "order") {
-      return;
-    }
-
-    const rootDemandedQuantity = routeInfo.value.quantity;
-    if (
-      rootDemandedQuantity === undefined ||
-      rootDemandedQuantity === null ||
-      rootDemandedQuantity === ""
-    ) {
-      syncDemandedQuantityTree(bomDataValue.value.dataList);
-      return;
-    }
-
-    syncDemandedQuantityTree(
-      bomDataValue.value.dataList,
-      toQuantityNumber(rootDemandedQuantity)
-    );
-  };
-
   const processChange = value => {
     processOptions.value.forEach(item => {
       if (item.id == value) {
@@ -1254,340 +977,10 @@
     });
   };
 
-  const findSiblings = (items, tempId) => {
-    if (!items || items.length === 0) return null;
-    // 妫�鏌ュ綋鍓嶅眰绾�
-    if (items.some(item => item.tempId === tempId)) {
-      return items;
-    }
-    // 閫掑綊鏌ユ壘瀛愮骇
-    for (const item of items) {
-      if (item.children && item.children.length > 0) {
-        const result = findSiblings(item.children, tempId);
-        if (result) return result;
-      }
-    }
-    return null;
-  };
-
-  const handleBomProcessChange = (row, value) => {
-    row.processId = value || "";
-    syncProcessOperationFields(row);
-
-    // 妫�鏌ュ悓涓�灞傜骇鏄惁宸茬粡鏈夊叾浠栦笉鍚岀殑宸ュ簭琚�変腑
-    const siblings = findSiblings(bomDataValue.value.dataList, row.tempId);
-    if (siblings && value) {
-      const hasDifferentProcess = siblings.some(sibling => {
-        return (
-          sibling.tempId !== row.tempId &&
-          sibling.processId &&
-          sibling.processId !== value
-        );
-      });
-      if (hasDifferentProcess) {
-        ElMessage.warning("鍚屼竴灞傜骇宸插瓨鍦ㄤ笉鍚岀殑宸ュ簭锛岃鍏堢粺涓�宸ュ簭鍚庡啀杩涜淇敼");
-      }
-    }
-  };
-
-  const openBomDialog = tempId => {
-    bomDataValue.value.currentRowName = tempId;
-    bomDataValue.value.showProductDialog = true;
-  };
-
-  const fetchBomData = async () => {
-    try {
-      const isOrderPage = pageType.value === "order";
-      const { data } = await (isOrderPage ? queryList2 : queryList)(
-        routeInfo.value.bomId
-      );
-      bomDataValue.value.dataList = data || [];
-      normalizeTreeData(bomDataValue.value.dataList);
-      recalculateDemandedQuantities();
-    } catch (err) {
-      console.error("鑾峰彇BOM鏁版嵁澶辫触锛�", err);
-    }
-  };
-
-  const childItem = (item, tempId, productData) => {
-    if (item.tempId === tempId) {
-      item.productName = productData.productName;
-      item.model = productData.model;
-      item.productModelId = productData.id;
-      item.unit = productData.unit || "";
-      return true;
-    }
-    if (item.children && item.children.length > 0) {
-      for (let child of item.children) {
-        if (childItem(child, tempId, productData)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  };
-
-  const handleBomProduct = row => {
-    if (!Array.isArray(row) || row.length === 0) {
-      ElMessage.warning("璇烽�夋嫨涓�涓骇鍝�");
-      return;
-    }
-    const productData = row[row.length - 1];
-
-    const isTopLevel = bomDataValue.value.dataList.some(
-      item => item.tempId === bomDataValue.value.currentRowName
-    );
-    if (isTopLevel) {
-      if (
-        productData.productName === bomTableData.value[0].productName &&
-        productData.model === bomTableData.value[0].model
-      ) {
-        const hasOther = bomDataValue.value.dataList.some(
-          item =>
-            item.tempId !== bomDataValue.value.currentRowName &&
-            item.productName === bomTableData.value[0].productName &&
-            item.model === bomTableData.value[0].model
-        );
-        if (hasOther) {
-          ElMessage.warning("鏈�澶栧眰鍜屽綋鍓嶄骇鍝佷竴鏍风殑涓�绾у彧鑳芥湁涓�涓�");
-          return;
-        }
-      }
-    }
-    bomDataValue.value.dataList.forEach(item => {
-      if (item.tempId === bomDataValue.value.currentRowName) {
-        item.productName = productData.productName;
-        item.model = productData.model;
-        item.productModelId = productData.id;
-        item.unit = productData.unit || "";
-        return;
-      }
-      childItem(item, bomDataValue.value.currentRowName, productData);
-    });
-    bomDataValue.value.showProductDialog = false;
-  };
-
-  const removeBomItem = tempId => {
-    const topIndex = bomDataValue.value.dataList.findIndex(
-      item => item.tempId === tempId
-    );
-    if (topIndex !== -1) {
-      bomDataValue.value.dataList.splice(topIndex, 1);
-      return;
-    }
-
-    const delchildItem = (items, tempId) => {
-      for (let i = 0; i < items.length; i++) {
-        const item = items[i];
-        if (item.tempId === tempId) {
-          items.splice(i, 1);
-          return true;
-        }
-        if (item.children && item.children.length > 0) {
-          if (delchildItem(item.children, tempId)) {
-            return true;
-          }
-        }
-      }
-      return false;
-    };
-
-    bomDataValue.value.dataList.forEach(item => {
-      if (item.children && item.children.length > 0) {
-        delchildItem(item.children, tempId);
-      }
-    });
-  };
-
-  const handleUnitQuantityChange = () => {
-    recalculateDemandedQuantities();
-  };
-
-  const addchildItem = (item, tempId) => {
-    if (item.tempId === tempId) {
-      if (!item.children) {
-        item.children = [];
-      }
-      item.children.push({
-        parentId: item.id || "",
-        parentTempId: item.tempId || "",
-        productName: "",
-        productId: "",
-        model: undefined,
-        productModelId: undefined,
-        processId: "",
-        processName: "",
-        [pageType.value === "order" ? "technologyOperationId" : "operationId"]:
-          "",
-        operationName: "",
-        unitQuantity: 1,
-        demandedQuantity: 0,
-        children: [],
-        unit: "",
-        tempId: new Date().getTime(),
-      });
-      recalculateDemandedQuantities();
-      return true;
-    }
-    if (item.children && item.children.length > 0) {
-      for (let child of item.children) {
-        if (addchildItem(child, tempId)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  };
-
-  const addBomItem = tempId => {
-    bomDataValue.value.dataList.forEach(item => {
-      if (item.tempId === tempId) {
-        if (!item.children) {
-          item.children = [];
-        }
-        item.children.push({
-          parentId: item.id || "",
-          parentTempId: item.tempId || "",
-          productName: "",
-          productId: "",
-          model: undefined,
-          productModelId: undefined,
-          processId: "",
-          processName: "",
-          [pageType.value === "order" ? "technologyOperationId" : "operationId"]:
-            "",
-          operationName: "",
-          unitQuantity: 1,
-          demandedQuantity: 0,
-          unit: "",
-          children: [],
-          tempId: new Date().getTime(),
-        });
-        recalculateDemandedQuantities();
-        return;
-      }
-      addchildItem(item, tempId);
-    });
-  };
-
-  const validateAllBom = () => {
-    let isValid = true;
-    const isOrderPage = pageType.value === "order";
-
-    const validateItem = (item, isTopLevel = false) => {
-      if (!item.model) {
-        ElMessage.error("璇烽�夋嫨瑙勬牸");
-        isValid = false;
-        return;
-      }
-      if (!isTopLevel && !item.processId) {
-        ElMessage.error("璇烽�夋嫨娑堣�楀伐搴�");
-        isValid = false;
-        return;
-      }
-      if (!item.unitQuantity) {
-        ElMessage.error("璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺");
-        isValid = false;
-        return;
-      }
-      if (isOrderPage && !item.demandedQuantity) {
-        ElMessage.error("璇疯緭鍏ラ渶姹傛�婚噺");
-        isValid = false;
-        return;
-      }
-
-      if (item.children && item.children.length > 0) {
-        item.children.forEach(child => {
-          validateItem(child, false);
-        });
-      }
-    };
-
-    // 鏍¢獙鍚屼竴灞傜骇鐨勫伐搴忔槸鍚︿竴鑷�
-    const validateProcessConsistency = items => {
-      if (!items || items.length === 0) return;
-
-      // 妫�鏌ュ綋鍓嶅眰绾�
-      const processes = items
-        .filter(item => item.processId)
-        .map(item => item.processId);
-      if (processes.length > 1) {
-        const uniqueProcesses = [...new Set(processes)];
-        if (uniqueProcesses.length > 1) {
-          ElMessage.error("鍚屼竴灞傜骇鐨勫伐搴忓繀椤讳竴鑷�");
-          isValid = false;
-          return;
-        }
-      }
-
-      // 閫掑綊妫�鏌ュ瓙绾�
-      items.forEach(item => {
-        if (item.children && item.children.length > 0) {
-          validateProcessConsistency(item.children);
-        }
-      });
-    };
-
-    bomDataValue.value.dataList.forEach(item => {
-      validateItem(item, true);
-    });
-
-    validateProcessConsistency(bomDataValue.value.dataList);
-
-    return isValid;
-  };
-
-  const buildSubmitTree = items => {
-    return items.map(item => {
-      const current = { ...item };
-      syncProcessOperationFields(current);
-      current.children = Array.isArray(current.children)
-        ? buildSubmitTree(current.children)
-        : [];
-      return current;
-    });
-  };
-
-  const cancelEditBom = () => {
-    bomDataValue.value.isEdit = false;
-    fetchBomData();
-  };
-
-  const handleSaveBom = () => {
-    bomDataValue.value.loading = true;
-    console.log(bomDataValue.value.dataList, "bomDataValue.value.dataList");
-
-    normalizeTreeData(bomDataValue.value.dataList);
-    recalculateDemandedQuantities();
-
-    const valid = validateAllBom();
-    if (valid) {
-      add2({
-        // bomId: Number(routeInfo.value.bomId),
-        productionOrderBomId: Number(routeInfo.value.bomId) || null,
-        children: buildSubmitTree(bomDataValue.value.dataList || []),
-      })
-        .then(() => {
-          ElMessage.success("BOM淇濆瓨鎴愬姛");
-          bomDataValue.value.isEdit = false;
-          refreshCurrentPage();
-        })
-        .catch(() => {
-          ElMessage.error("BOM淇濆瓨澶辫触");
-        })
-        .finally(() => {
-          bomDataValue.value.loading = false;
-        });
-    } else {
-      bomDataValue.value.loading = false;
-    }
-  };
-
   const refreshCurrentPage = () => {
     getRouteInfo();
     getList();
     getProcessList();
-    fetchBomData();
     if (pageType.value === "order") {
       getAttachmentList();
     }
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 4d71881..e77d2bf 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -192,7 +192,8 @@
         </div>
       </div>
     </el-dialog>
-    <MaterialLedgerDialog v-model="materialDialogVisible"
+    <!-- 棰嗘枡/琛ユ枡/棰嗘枡璇︽儏鍔熻兘宸查殣钘� -->
+    <!-- <MaterialLedgerDialog v-model="materialDialogVisible"
                           :order-row="currentMaterialOrder"
                           @saved="getList" />
     <MaterialDetailDialog v-model="materialDetailDialogVisible"
@@ -200,16 +201,16 @@
                           @confirmed="getList" />
     <MaterialSupplementDialog v-model="materialSupplementDialogVisible"
                               :order-row="currentMaterialSupplementOrder"
-                              @saved="getList" />
+                              @saved="getList" /> -->
     <new-product-order v-if="isShowNewModal"
                        v-model:visible="isShowNewModal"
                        @completed="handleQuery" />
-    <!-- 鎵撳嵃棰嗘枡鍗曠粍浠� -->
-    <div class="print-requisition-wrapper">
+    <!-- 鎵撳嵃棰嗘枡鍗曞姛鑳藉凡闅愯棌 -->
+    <!-- <div class="print-requisition-wrapper">
       <PrintMaterialRequisition ref="printRef"
                                 :order-row="printOrderRow"
                                 :material-list="printMaterialList" />
-    </div>
+    </div> -->
   </div>
 </template>
 
@@ -237,16 +238,18 @@
   } from "@/api/productionManagement/productionOrder.js";
   import { productWorkOrderPage } from "@/api/productionManagement/workOrder.js";
   import { listMain as getOrderProcessRouteMain } from "@/api/productionManagement/productProcessRoute.js";
-  import MaterialLedgerDialog from "@/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue";
-  import MaterialDetailDialog from "@/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue";
-  import MaterialSupplementDialog from "@/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue";
-  import PrintMaterialRequisition from "@/views/productionManagement/productionOrder/components/PrintMaterialRequisition.vue";
+  // 棰嗘枡/琛ユ枡/棰嗘枡璇︽儏/鎵撳嵃棰嗘枡鍗曞姛鑳藉凡闅愯棌
+  // import MaterialLedgerDialog from "@/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue";
+  // import MaterialDetailDialog from "@/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue";
+  // import MaterialSupplementDialog from "@/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue";
+  // import PrintMaterialRequisition from "@/views/productionManagement/productionOrder/components/PrintMaterialRequisition.vue";
   import PIMTable from "@/components/PIMTable/PIMTable.vue";
   import { listPage } from "@/api/productionManagement/processRoute.js";
-  import {
-    listMaterialPickingDetail,
-    listMaterialPickingBom,
-  } from "@/api/productionManagement/productionOrder.js";
+  // 棰嗘枡鍔熻兘宸查殣钘�
+  // import {
+  //   listMaterialPickingDetail,
+  //   listMaterialPickingBom,
+  // } from "@/api/productionManagement/productionOrder.js";
   const NewProductOrder = defineAsyncComponent(() =>
     import("@/views/productionManagement/productionOrder/New.vue")
   );
@@ -398,41 +401,42 @@
             showSourceData(row);
           },
         },
-        {
-          name: "棰嗘枡",
-          type: "text",
-          color: "#5EC7AB",
-          showHide: row => !row.endOrder && !row.returned,
-          clickFun: row => {
-            openMaterialDialog(row);
-          },
-        },
-        {
-          name: "琛ユ枡",
-          type: "text",
-          color: "#5EC7AB",
-          showHide: row => !row.endOrder && !row.returned,
-          clickFun: row => {
-            openMaterialSupplementDialog(row);
-          },
-        },
-        {
-          name: "棰嗘枡璇︽儏",
-          type: "text",
-          color: "#5EC7AB",
-          clickFun: row => {
-            openMaterialDetailDialog(row);
-          },
-        },
-        {
-          name: "鎵撳嵃棰嗘枡鍗�",
-          type: "text",
-          color: "#5EC7AB",
-          showHide: row => !row.endOrder,
-          clickFun: row => {
-            handlePrint(row);
-          },
-        },
+        // 棰嗘枡/琛ユ枡/棰嗘枡璇︽儏/鎵撳嵃棰嗘枡鍗曞姛鑳藉凡闅愯棌
+        // {
+        //   name: "棰嗘枡",
+        //   type: "text",
+        //   color: "#5EC7AB",
+        //   showHide: row => !row.endOrder && !row.returned,
+        //   clickFun: row => {
+        //     openMaterialDialog(row);
+        //   },
+        // },
+        // {
+        //   name: "琛ユ枡",
+        //   type: "text",
+        //   color: "#5EC7AB",
+        //   showHide: row => !row.endOrder && !row.returned,
+        //   clickFun: row => {
+        //     openMaterialSupplementDialog(row);
+        //   },
+        // },
+        // {
+        //   name: "棰嗘枡璇︽儏",
+        //   type: "text",
+        //   color: "#5EC7AB",
+        //   clickFun: row => {
+        //     openMaterialDetailDialog(row);
+        //   },
+        // },
+        // {
+        //   name: "鎵撳嵃棰嗘枡鍗�",
+        //   type: "text",
+        //   color: "#5EC7AB",
+        //   showHide: row => !row.endOrder,
+        //   clickFun: row => {
+        //     handlePrint(row);
+        //   },
+        // },
         {
           name: "鐢熶骇杩芥函",
           type: "text",
@@ -525,48 +529,48 @@
     orderId: null,
     routeId: null,
   });
-  const materialDialogVisible = ref(false);
-  const currentMaterialOrder = ref(null);
-  const materialDetailDialogVisible = ref(false);
-  const currentMaterialDetailOrder = ref(null);
-  const materialSupplementDialogVisible = ref(false);
-  const currentMaterialSupplementOrder = ref(null);
+  // 棰嗘枡/琛ユ枡/棰嗘枡璇︽儏鍔熻兘宸查殣钘�
+  // const materialDialogVisible = ref(false);
+  // const currentMaterialOrder = ref(null);
+  // const materialDetailDialogVisible = ref(false);
+  // const currentMaterialDetailOrder = ref(null);
+  // const materialSupplementDialogVisible = ref(false);
+  // const currentMaterialSupplementOrder = ref(null);
 
-  // 鎵撳嵃鐩稿叧
-  const printOrderRow = ref(null);
-  const printMaterialList = ref([]);
-  const handlePrint = async row => {
-    printOrderRow.value = row;
-    proxy.$modal.loading("姝e湪鑾峰彇棰嗘枡鏁版嵁...");
-    try {
-      printMaterialList.value = [];
-      const detailRes = await listMaterialPickingDetail(row.id);
-      const detailList = Array.isArray(detailRes?.data)
-        ? detailRes.data
-        : detailRes?.data?.records || [];
-
-      if (detailList.length > 0) {
-        printMaterialList.value = detailList;
-      }
-
-      if (printMaterialList.value.length === 0) {
-        proxy.$modal.msgWarning("鏆傛棤棰嗘枡鏁版嵁");
-        return;
-      }
-
-      // 绛夊緟 DOM 鏇存柊鍚庢墽琛屾墦鍗�
-      proxy.$nextTick(() => {
-        setTimeout(() => {
-          window.print();
-        }, 800);
-      });
-    } catch (e) {
-      console.error("鑾峰彇棰嗘枡鏁版嵁澶辫触锛�", e);
-      proxy.$modal.msgError("鑾峰彇棰嗘枡鏁版嵁澶辫触");
-    } finally {
-      proxy.$modal.closeLoading();
-    }
-  };
+  // 鎵撳嵃棰嗘枡鍗曞姛鑳藉凡闅愯棌
+  // const printOrderRow = ref(null);
+  // const printMaterialList = ref([]);
+  // const handlePrint = async row => {
+  //   printOrderRow.value = row;
+  //   proxy.$modal.loading("姝e湪鑾峰彇棰嗘枡鏁版嵁...");
+  //   try {
+  //     printMaterialList.value = [];
+  //     const detailRes = await listMaterialPickingDetail(row.id);
+  //     const detailList = Array.isArray(detailRes?.data)
+  //       ? detailRes.data
+  //       : detailRes?.data?.records || [];
+  //
+  //     if (detailList.length > 0) {
+  //       printMaterialList.value = detailList;
+  //     }
+  //
+  //     if (printMaterialList.value.length === 0) {
+  //       proxy.$modal.msgWarning("鏆傛棤棰嗘枡鏁版嵁");
+  //       return;
+  //     }
+  //
+  //     proxy.$nextTick(() => {
+  //       setTimeout(() => {
+  //         window.print();
+  //       }, 800);
+  //     });
+  //   } catch (e) {
+  //     console.error("鑾峰彇棰嗘枡鏁版嵁澶辫触锛�", e);
+  //     proxy.$modal.msgError("鑾峰彇棰嗘枡鏁版嵁澶辫触");
+  //   } finally {
+  //     proxy.$modal.closeLoading();
+  //   }
+  // };
 
   const openBindRouteDialog = async (row, type) => {
     bindForm.orderId = row.id;
@@ -612,20 +616,21 @@
     }
   };
 
-  const openMaterialDialog = row => {
-    currentMaterialOrder.value = row;
-    materialDialogVisible.value = true;
-  };
+  // 棰嗘枡/琛ユ枡/棰嗘枡璇︽儏鍔熻兘宸查殣钘�
+  // const openMaterialDialog = row => {
+  //   currentMaterialOrder.value = row;
+  //   materialDialogVisible.value = true;
+  // };
 
-  const openMaterialDetailDialog = async row => {
-    currentMaterialDetailOrder.value = row;
-    materialDetailDialogVisible.value = true;
-  };
+  // const openMaterialDetailDialog = async row => {
+  //   currentMaterialDetailOrder.value = row;
+  //   materialDetailDialogVisible.value = true;
+  // };
 
-  const openMaterialSupplementDialog = row => {
-    currentMaterialSupplementOrder.value = row;
-    materialSupplementDialogVisible.value = true;
-  };
+  // const openMaterialSupplementDialog = row => {
+  //   currentMaterialSupplementOrder.value = row;
+  //   materialSupplementDialogVisible.value = true;
+  // };
 
   const handleReset = () => {
     searchForm.value = {
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index fa4e163..4b1346f 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -244,13 +244,13 @@
       fixed: "right",
       width: 250,
       operation: [
-        {
-          name: "鏌ョ湅鎶曞叆",
-          type: "text",
-          clickFun: row => {
-            showInput(row);
-          },
-        },
+        // {
+        //   name: "鏌ョ湅鎶曞叆",
+        //   type: "text",
+        //   clickFun: row => {
+        //     showInput(row);
+        //   },
+        // },
         {
           name: "鍙傛暟璇︽儏",
           type: "text",
diff --git a/src/views/productionManagement/productionTraceability/index.vue b/src/views/productionManagement/productionTraceability/index.vue
index a726ad0..15508ff 100644
--- a/src/views/productionManagement/productionTraceability/index.vue
+++ b/src/views/productionManagement/productionTraceability/index.vue
@@ -173,9 +173,9 @@
                              align="center"
                              width="200">
               <template #default="{ row }">
-                <el-button type="primary"
-                           link
-                           @click="showInput(row.id)">鏌ョ湅鎶曞叆</el-button>
+<!--                <el-button type="primary"-->
+<!--                           link-->
+<!--                           @click="showInput(row.id)">鏌ョ湅鎶曞叆</el-button>-->
                 <el-button type="primary"
                            link
                            @click="showParamDetail(row.productionOperationParamList)">鍙傛暟璇︽儏</el-button>
diff --git a/src/views/productionManagement/workOrderEdit/index.vue b/src/views/productionManagement/workOrderEdit/index.vue
index 98d29f5..e215fdb 100644
--- a/src/views/productionManagement/workOrderEdit/index.vue
+++ b/src/views/productionManagement/workOrderEdit/index.vue
@@ -47,16 +47,16 @@
                label-width="120px">
         <el-form-item label="璁″垝寮�濮嬫椂闂�">
           <el-date-picker v-model="editrow.planStartTime"
-                          type="date"
+                          type="datetime"
                           placeholder="璇烽�夋嫨"
-                          value-format="YYYY-MM-DD"
+                          value-format="YYYY-MM-DD HH:mm:ss"
                           style="width: 300px" />
         </el-form-item>
         <el-form-item label="璁″垝缁撴潫鏃堕棿">
           <el-date-picker v-model="editrow.planEndTime"
-                          type="date"
+                          type="datetime"
                           placeholder="璇烽�夋嫨"
-                          value-format="YYYY-MM-DD"
+                          value-format="YYYY-MM-DD HH:mm:ss"
                           style="width: 300px" />
         </el-form-item>
       </el-form>
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index b721de6..dcbb49f 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -24,6 +24,11 @@
           <el-button type="primary"
                      @click="handleQuery">鎼滅储</el-button>
         </div>
+        <div class="search-item">
+          <el-switch v-model="filterMine"
+                     active-text="浠呯湅鎴戠殑"
+                     @change="handleQuery" />
+        </div>
       </div>
     </div>
     <div class="table_list">
@@ -115,9 +120,9 @@
                    @click="printTransferCard">鎵撳嵃娴佽浆鍗�</el-button>
       </div>
     </el-dialog>
-    <!-- 鎶ュ伐寮圭獥 -->
+    <!-- 鎶ュ伐寮圭獥锛堢粨鏉熸姤宸ョ敤锛� -->
     <el-dialog v-model="reportDialogVisible"
-               title="鎶ュ伐"
+               title="缁撴潫鎶ュ伐"
                width="500px">
       <el-form ref="reportFormRef"
                :model="reportForm"
@@ -161,7 +166,6 @@
                        :value="user.userId" />
           </el-select>
         </el-form-item>
-        <!-- 宸ユ椂 -->
         <el-form-item label="宸ユ椂"
                       v-if="currentReportRowData?.type == 0"
                       prop="workHour">
@@ -245,7 +249,7 @@
       <template #footer>
         <span class="dialog-footer">
           <el-button type="primary"
-                     @click="handleReport">纭畾</el-button>
+                     @click="handleFinishWork">纭畾</el-button>
           <el-button @click="reportDialogVisible = false">鍙栨秷</el-button>
         </span>
       </template>
@@ -268,9 +272,9 @@
   import {
     productWorkOrderPage,
     addProductMain,
+    startWork,
     downProductWorkOrder,
   } from "@/api/productionManagement/workOrder.js";
-  import { listMaterialPickingDetail } from "@/api/productionManagement/productionOrder.js";
   import { findProcessParamListOrder } from "@/api/productionManagement/productProcessRoute.js";
   import { getUserProfile, userListNoPageByTenantId } from "@/api/system/user.js";
   import { getDicts } from "@/api/system/dict/data";
@@ -285,124 +289,59 @@
   const { proxy } = getCurrentInstance();
   const userStore = useUserStore();
 
+  const isCompleted = row => {
+    const status = Number(row?.completionStatus);
+    return Number.isFinite(status) && status >= 100;
+  };
+
+  const canOperate = row => !row.endOrder && !isCompleted(row);
+
   const tableColumn = ref([
+    { label: "宸ュ崟绫诲瀷", prop: "workOrderType", width: "80" },
+    { label: "宸ュ崟缂栧彿", prop: "workOrderNo", width: "140" },
+    { label: "鐢熶骇璁㈠崟鍙�", prop: "npsNo", width: "140" },
+    { label: "浜у搧鍚嶇О", prop: "productName", width: "140" },
+    { label: "瑙勬牸", prop: "model" },
+    { label: "鍗曚綅", prop: "unit" },
+    { label: "宸ュ簭鍚嶇О", prop: "operationName", width: "100" },
+    { 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: "宸ュ崟绫诲瀷",
-      prop: "workOrderType",
-      width: "80",
-    },
-    {
-      label: "宸ュ崟缂栧彿",
-      prop: "workOrderNo",
-      width: "140",
-    },
-    {
-      label: "鐢熶骇璁㈠崟鍙�",
-      prop: "npsNo",
-      width: "140",
-    },
-    {
-      label: "浜у搧鍚嶇О",
-      prop: "productName",
-      width: "140",
-    },
-    {
-      label: "瑙勬牸",
-      prop: "model",
-    },
-    {
-      label: "鍗曚綅",
-      prop: "unit",
-    },
-    {
-      label: "宸ュ簭鍚嶇О",
-      prop: "operationName",
-      width: "100",
-    },
-    {
-      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: "260",
-      align: "center",
-      dataType: "action",
-      fixed: "right",
+      label: "鎿嶄綔", width: "260", align: "center", dataType: "action", fixed: "right",
       operation: [
         {
           name: "娴佽浆鍗�",
-          clickFun: row => {
-            downloadAndPrintWorkOrder(row);
-          },
+          clickFun: row => { downloadAndPrintWorkOrder(row); },
         },
         {
           name: "闄勪欢",
-          clickFun: row => {
-            openWorkOrderFiles(row);
-          },
+          clickFun: row => { openWorkOrderFiles(row); },
         },
-        // {
-        //   name: "鐗╂枡",
-        //   clickFun: row => {
-        //     openMaterialDialog(row);
-        //   },
-        // },
         {
-          name: "鎶ュ伐",
-          clickFun: row => {
-            showReportDialog(row);
-          },
-          showHide: row => !row.endOrder,
+          name: "寮�濮嬫姤宸�",
+          showHide: row => canOperate(row) && !row.actualStartTime,
           disabled: row => {
             if (row.planQuantity <= 0) return true;
             if (!row.userIds) return false;
             try {
-              const userIds =
-                typeof row.userIds === "string"
-                  ? JSON.parse(row.userIds)
-                  : row.userIds;
+              const userIds = typeof row.userIds === "string" ? JSON.parse(row.userIds) : row.userIds;
               if (Array.isArray(userIds)) {
                 return !userIds.some(id => String(id) === String(userStore.id));
               }
               return true;
-            } catch (e) {
-              return true;
-            }
+            } catch (e) { return true; }
           },
+          clickFun: row => { handleStartWork(row); },
+        },
+        {
+          name: "缁撴潫鎶ュ伐",
+          showHide: row => canOperate(row) && !!row.actualStartTime,
+          clickFun: row => { showReportDialog(row); },
         },
       ],
     },
@@ -410,8 +349,6 @@
   const tableData = ref([]);
   const tableLoading = ref(false);
   const transferCardVisible = ref(false);
-  const transferCardData = ref([]);
-  const transferCardQrUrl = ref("");
   const transferCardRowData = ref(null);
   const reportDialogVisible = ref(false);
   const fileDialogVisible = ref(false);
@@ -438,112 +375,69 @@
   const dictOptions = ref({});
   const paramLoading = ref(false);
 
-  // 鐢熶骇鍚堟牸鏁伴噺楠岃瘉瑙勫垯
   const validateQuantity = (rule, value, callback) => {
     if (value === null || value === undefined || value === "") {
       callback(new Error("璇疯緭鍏ョ敓浜у悎鏍兼暟閲�"));
       return;
     }
     const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�1
     if (isNaN(num) || !Number.isInteger(num) || num < 0) {
       callback(new Error("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0"));
       return;
     }
     callback();
   };
-
-  // 鎶ュ簾鏁伴噺楠岃瘉瑙勫垯
   const validateScrapQty = (rule, value, callback) => {
     if (value === null || value === undefined || value === "") {
       callback();
       return;
     }
     const num = Number(value);
-    // 鏁存暟涓斿ぇ浜庣瓑浜�0
     if (isNaN(num) || !Number.isInteger(num) || num < 0) {
       callback(new Error("鎶ュ簾鏁伴噺蹇呴』澶т簬绛変簬0"));
       return;
     }
     callback();
   };
-
-  // 楠岃瘉瑙勫垯
   const reportFormRules = {
     quantity: [{ required: true, validator: validateQuantity, trigger: "blur" }],
     scrapQty: [{ validator: validateScrapQty, trigger: "blur" }],
   };
 
-  // 澶勭悊鐢熶骇鍚堟牸鏁伴噺杈撳叆锛岄檺鍒跺繀椤诲ぇ浜庣瓑浜�0
   const handleQuantityInput = value => {
-    if (value === "" || value === null || value === undefined) {
-      reportForm.quantity = null;
-      return;
-    }
+    if (value === "" || value === null || value === undefined) { reportForm.quantity = null; return; }
     const num = Number(value);
-    if (isNaN(num)) {
-      return;
-    }
-    // 濡傛灉灏忎簬1锛屾竻闄�
-    if (num < 0) {
-      reportForm.quantity = null;
-      return;
-    }
-    // 濡傛灉鏄皬鏁板彇鏁存暟閮ㄥ垎
+    if (isNaN(num)) return;
+    if (num < 0) { reportForm.quantity = null; return; }
     if (!Number.isInteger(num)) {
       const intValue = Math.floor(num);
-      // 濡傛灉鍙栨暣鍚庡皬浜�1锛屾竻闄�
-      if (intValue < 0) {
-        reportForm.quantity = null;
-        return;
-      }
+      if (intValue < 0) { reportForm.quantity = null; return; }
       reportForm.quantity = intValue;
       return;
     }
     reportForm.quantity = num;
   };
 
-  // 澶勭悊鎶ュ簾鏁伴噺
   const handleScrapQtyInput = value => {
-    if (value === "" || value === null || value === undefined) {
-      reportForm.scrapQty = null;
-      return;
-    }
+    if (value === "" || value === null || value === undefined) { reportForm.scrapQty = null; return; }
     const num = Number(value);
-    // 濡傛灉鏄疦aN锛屼繚鎸佸師鍊�
-    if (isNaN(num)) {
-      return;
-    }
-    // 濡傛灉鏄礋鏁帮紝娓呴櫎杈撳叆
-    if (num < 0) {
-      reportForm.scrapQty = null;
-      return;
-    }
-    // 濡傛灉鏄皬鏁帮紝鍙栨暣鏁伴儴鍒�
-    if (!Number.isInteger(num)) {
-      reportForm.scrapQty = Math.floor(num);
-      return;
-    }
-    // 鏈夋晥鐨勯潪璐熸暣鏁帮紙鍖呮嫭0锛�
+    if (isNaN(num)) return;
+    if (num < 0) { reportForm.scrapQty = null; return; }
+    if (!Number.isInteger(num)) { reportForm.scrapQty = Math.floor(num); return; }
     reportForm.scrapQty = num;
   };
 
+  const filterMine = ref(false);
   const currentReportRowData = ref(null);
   const materialDialogVisible = ref(false);
   const currentMaterialOrderRow = ref(null);
-  const page = reactive({
-    current: 1,
-    size: 100,
-    total: 0,
-  });
+  const page = reactive({ current: 1, size: 100, total: 0 });
 
   const data = reactive({
-    searchForm: {
-      workOrderNo: "",
-      npsNo: "",
-    },
+    searchForm: { workOrderNo: "", npsNo: "" },
   });
   const { searchForm } = toRefs(data);
+
   const toProgressPercentage = val => {
     const n = Number(val);
     if (!Number.isFinite(n)) return 0;
@@ -559,78 +453,41 @@
     return "#67c23a";
   };
 
-  // 鏌ヨ鍒楄〃
-  /** 鎼滅储鎸夐挳鎿嶄綔 */
-  const handleQuery = () => {
-    page.current = 1;
-    getList();
-  };
-
-  const pagination = obj => {
-    page.current = obj.page;
-    page.size = obj.limit;
-    getList();
-  };
+  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 };
+    if (filterMine.value) { params.filterMine = true; }
     productWorkOrderPage(params)
       .then(res => {
         tableLoading.value = false;
         tableData.value = res.data.records;
         page.total = res.data.total;
       })
-      .catch(() => {
-        tableLoading.value = false;
-      });
+      .catch(() => { tableLoading.value = false; });
   };
 
-  // 涓嬭浇骞舵墦鍗板伐鍗曟祦杞崱锛堟枃浠舵祦锛�
   const downloadAndPrintWorkOrder = async row => {
     if (!row || !row.id) {
       proxy.$modal.msgError("缂哄皯宸ュ崟ID锛屾棤娉曚笅杞芥祦杞崱");
       return;
     }
-    const fileName = row.workOrderNo
-      ? `宸ュ崟娴佽浆鍗${row.workOrderNo}.xlsx`
-      : "宸ュ崟娴佽浆鍗�.xlsx";
     try {
-      // 璋冪敤鎺ュ彛锛屼互 responseType: 'blob' 鑾峰彇鏂囦欢娴�
       const blob = await downProductWorkOrder(row.id);
-
-      if (!blob) {
-        proxy.$modal.msgError("鏈幏鍙栧埌娴佽浆鍗℃枃浠�");
-        return;
-      }
-
-      // 鍒涘缓 Blob URL
-      const fileBlob =
-        blob instanceof Blob
-          ? blob
-          : new Blob([blob], { type: blob.type || "application/octet-stream" });
+      if (!blob) { proxy.$modal.msgError("鏈幏鍙栧埌娴佽浆鍗℃枃浠�"); return; }
+      const fileBlob = blob instanceof Blob ? blob : new Blob([blob], { type: blob.type || "application/octet-stream" });
       const url = window.URL.createObjectURL(fileBlob);
-
-      // 鍒涘缓闅愯棌 iframe锛岀敤浜庤Е鍙戞祻瑙堝櫒鎵撳嵃
       const iframe = document.createElement("iframe");
       iframe.style.position = "fixed";
-      iframe.style.right = "0";
-      iframe.style.bottom = "0";
-      iframe.style.width = "0";
-      iframe.style.height = "0";
-      iframe.style.border = "0";
+      iframe.style.right = "0"; iframe.style.bottom = "0";
+      iframe.style.width = "0"; iframe.style.height = "0"; iframe.style.border = "0";
       iframe.src = url;
       document.body.appendChild(iframe);
-
       iframe.onload = () => {
-        try {
-          iframe.contentWindow?.focus();
-          iframe.contentWindow?.print();
-        } catch (e) {
-          console.error("鑷姩璋冪敤鎵撳嵃澶辫触", e);
-          // 閫�鑰屾眰鍏舵锛屾墦寮�鏂扮獥鍙g敱鐢ㄦ埛鎵嬪姩鎵撳嵃
-          window.open(url);
-        }
+        try { iframe.contentWindow?.focus(); iframe.contentWindow?.print(); }
+        catch (e) { window.open(url); }
       };
     } catch (e) {
       console.error("涓嬭浇宸ュ崟娴佽浆鍗″け璐�", e);
@@ -638,17 +495,7 @@
     }
   };
 
-  const showTransferCard = async row => {
-    transferCardRowData.value = row;
-    const qrContent = String(row.id);
-
-    transferCardQrUrl.value = await QRCode.toDataURL(qrContent);
-    transferCardVisible.value = true;
-  };
-
-  const printTransferCard = () => {
-    window.print();
-  };
+  const printTransferCard = () => { window.print(); };
   const currentWorkOrderRow = ref(null);
 
   const openWorkOrderFiles = row => {
@@ -657,58 +504,57 @@
     fileDialogVisible.value = true;
   };
 
-  const showReportDialog = async row => {
-    if (row.productionOrderId) {
-      try {
-        const res = await listMaterialPickingDetail(row.productionOrderId);
-        const records = Array.isArray(res.data)
-          ? res.data
-          : res.data?.records || [];
-        if (res.code === 200 && records.length === 0) {
-          proxy.$modal.msgError("鏈鏂欐棤娉曟姤宸�");
-          return;
+  const handleStartWork = row => {
+    proxy.$modal
+      .confirm("纭寮�濮嬫姤宸ワ紵", "鎻愮ず", { type: "info" })
+      .then(async () => {
+        try {
+          await startWork({
+            productionOperationTaskId: row.id,
+            userId: userStore.id,
+          });
+          proxy.$modal.msgSuccess("寮�濮嬫姤宸ユ垚鍔�");
+          getList();
+        } catch (e) {
+          proxy.$modal.msgError("寮�濮嬫姤宸ュけ璐�");
         }
-      } catch (error) {
-        console.error("鏌ヨ棰嗘枡璇︽儏澶辫触:", error);
-      }
-    }
+      })
+      .catch(() => {});
+  };
+
+  const showReportDialog = async row => {
     currentReportRowData.value = row;
     const planQuantity = Number(row.planQuantity || 0);
     const completeQuantity = Number(row.completeQuantity || 0);
     const remainingQuantity = Math.max(0, planQuantity - completeQuantity);
     reportForm.planQuantity = remainingQuantity;
-    reportForm.quantity =
-      row.quantity !== undefined && row.quantity !== null ? row.quantity : null;
+    reportForm.quantity = row.quantity !== undefined && row.quantity !== null ? row.quantity : null;
     reportForm.productProcessRouteItemId = row.productProcessRouteItemId;
     reportForm.workOrderId = row.id;
     reportForm.reportWork = row.reportWork;
     reportForm.productMainId = row.productMainId;
-    reportForm.scrapQty =
-      row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null;
-    reportForm.productionOrderRoutingOperationId =
-      row.productionOrderRoutingOperationId;
+    reportForm.scrapQty = row.scrapQty !== undefined && row.scrapQty !== null ? row.scrapQty : null;
+    reportForm.productionOrderRoutingOperationId = row.productionOrderRoutingOperationId;
     reportForm.productionOrderId = row.productionOrderId;
-    if (row.type == 0) {
-      reportForm.workHour = row.workHour || 0;
-    } else {
-      reportForm.workHour = 0;
-    }
+    reportForm.workHour = row.type == 0 ? (row.workHour || 0) : 0;
     nextTick(() => {
       reportFormRef.value?.clearValidate();
       if (row.productionOrderRoutingOperationId && row.productionOrderId) {
         loadParams(row.productionOrderRoutingOperationId, row.productionOrderId);
       }
     });
+    if (userStore.id) {
+      reportForm.userId = userStore.id;
+      reportForm.userName = userStore.name || userStore.nickName || "";
+    }
     getUserProfile()
       .then(res => {
-        if (res.code === 200) {
+        if (res.code === 200 && res.data) {
           reportForm.userId = res.data.userId;
-          reportForm.userName = res.data.nickName;
+          reportForm.userName = res.data.nickName || res.data.userName || "";
         }
       })
-      .catch(err => {
-        console.error("鑾峰彇鐢ㄦ埛淇℃伅澶辫触", err);
-      });
+      .catch(err => { console.error("鑾峰彇鐢ㄦ埛淇℃伅澶辫触", err); });
 
     reportDialogVisible.value = true;
   };
@@ -718,70 +564,36 @@
     materialDialogVisible.value = true;
   };
 
-  const handleReport = () => {
+  const handleFinishWork = () => {
     reportFormRef.value?.validate(valid => {
-      if (!valid) {
-        return false;
-      }
+      if (!valid) return;
 
       if (reportForm.planQuantity <= 0) {
-        ElMessageBox.alert("寰呯敓浜ф暟閲忎负0锛屾棤娉曟姤宸�", "鎻愮ず", {
-          confirmButtonText: "纭畾",
-        });
+        ElMessageBox.alert("寰呯敓浜ф暟閲忎负0锛屾棤娉曟姤宸�", "鎻愮ず", { confirmButtonText: "纭畾" });
         return;
       }
-
-      // 楠岃瘉鐢熶骇鍚堟牸鏁伴噺
-      if (
-        reportForm.quantity === null ||
-        reportForm.quantity === undefined ||
-        reportForm.quantity === ""
-      ) {
-        ElMessageBox.alert("璇疯緭鍏ョ敓浜у悎鏍兼暟閲�", "鎻愮ず", {
-          confirmButtonText: "纭畾",
-        });
+      if (reportForm.quantity === null || reportForm.quantity === undefined || reportForm.quantity === "") {
+        ElMessageBox.alert("璇疯緭鍏ョ敓浜у悎鏍兼暟閲�", "鎻愮ず", { confirmButtonText: "纭畾" });
         return;
       }
-
       const quantity = Number(reportForm.quantity);
-
       if (isNaN(quantity) || quantity < 0) {
-        ElMessageBox.alert("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0", "鎻愮ず", {
-          confirmButtonText: "纭畾",
-        });
+        ElMessageBox.alert("鐢熶骇鍚堟牸鏁伴噺蹇呴』澶т簬绛変簬0", "鎻愮ず", { confirmButtonText: "纭畾" });
         return;
       }
-
-      // if (quantity > reportForm.planQuantity) {
-      //   ElMessageBox.alert("鏈鐢熶骇鏁伴噺涓嶈兘瓒呰繃寰呯敓浜ф暟閲�", "鎻愮ず", {
-      //     confirmButtonText: "纭畾",
-      //   });
-      //   return;
-      // }
-
-      // 楠岃瘉鎶ュ簾鏁伴噺
       const scrapQty = Number(reportForm.scrapQty);
       if (!isNaN(scrapQty) && scrapQty < 0) {
-        ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘灏忎簬0", "鎻愮ず", {
-          confirmButtonText: "纭畾",
-        });
+        ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘灏忎簬0", "鎻愮ず", { confirmButtonText: "纭畾" });
         return;
       }
-
-      // if (!isNaN(scrapQty) && scrapQty > quantity) {
-      //   ElMessageBox.alert("鎶ュ簾鏁伴噺涓嶈兘澶т簬鏈鐢熶骇鏁伴噺", "鎻愮ず", {
-      //     confirmButtonText: "纭畾",
-      //   });
-      //   return;
-      // }
 
       const productionOperationParamList = params.value.map(param => ({
         ...param,
         inputValue: reportForm.paramGroups[param.id] ?? "",
       }));
 
-      const submitParams = {
-        quantity: quantity,
+      addProductMain({
+        quantity,
         scrapQty: isNaN(scrapQty) ? 0 : scrapQty,
         userId: reportForm.userId,
         userName: reportForm.userName,
@@ -789,23 +601,18 @@
         productProcessRouteItemId: reportForm.productProcessRouteItemId,
         reportWork: reportForm.reportWork,
         productMainId: reportForm.productMainId,
-        productionOrderRoutingOperationId:
-          reportForm.productionOrderRoutingOperationId,
+        productionOrderRoutingOperationId: reportForm.productionOrderRoutingOperationId,
         productionOrderId: reportForm.productionOrderId,
         workHour: reportForm.workHour,
         productionOperationParamList: productionOperationParamList,
-      };
-
-      addProductMain(submitParams)
-        .then(res => {
-          proxy.$modal.msgSuccess("鎶ュ伐鎴愬姛");
+      })
+        .then(() => {
+          proxy.$modal.msgSuccess("缁撴潫鎶ュ伐鎴愬姛");
           reportDialogVisible.value = false;
           getList();
         })
         .catch(() => {
-          ElMessageBox.alert("鎶ュ伐澶辫触", "鎻愮ず", {
-            confirmButtonText: "纭畾",
-          });
+          ElMessageBox.alert("缁撴潫鎶ュ伐澶辫触", "鎻愮ず", { confirmButtonText: "纭畾" });
         });
     });
   };
@@ -820,221 +627,81 @@
     if (dictOptions.value[dictType]) return dictOptions.value[dictType];
     try {
       const res = await getDicts(dictType);
-      if (res.code === 200) {
-        dictOptions.value[dictType] = res.data;
-        return res.data;
-      }
+      if (res.code === 200) { dictOptions.value[dictType] = res.data; return res.data; }
       return [];
-    } catch (error) {
-      console.error("鑾峰彇瀛楀吀鏁版嵁澶辫触:", error);
-      return [];
-    }
+    } catch (error) { console.error("鑾峰彇瀛楀吀鏁版嵁澶辫触:", error); return []; }
   };
 
   const loadParams = (productionOrderRoutingOperationId, productionOrderId) => {
     paramLoading.value = true;
-    findProcessParamListOrder({
-      productionOrderRoutingOperationId,
-      productionOrderId,
-    })
+    findProcessParamListOrder({ productionOrderRoutingOperationId, productionOrderId })
       .then(res => {
         if (res.code === 200) {
           const paramList = res.data || [];
           params.value = paramList;
           reportForm.paramGroups = {};
           paramList.forEach(param => {
-            if (!reportForm.paramGroups[param.id]) {
-              reportForm.paramGroups[param.id] = "";
-            }
-            if (param.paramType == "3" && param.paramFormat) {
-              getDictOptions(param.paramFormat);
-            }
+            if (!reportForm.paramGroups[param.id]) { reportForm.paramGroups[param.id] = ""; }
+            if (param.paramType == "3" && param.paramFormat) { getDictOptions(param.paramFormat); }
           });
         }
       })
-      .catch(err => {
-        console.error("鑾峰彇宸ュ簭鍙傛暟澶辫触:", err);
-      })
-      .finally(() => {
-        paramLoading.value = false;
-      });
+      .catch(err => { console.error("鑾峰彇宸ュ簭鍙傛暟澶辫触:", err); })
+      .finally(() => { paramLoading.value = false; });
   };
 
   onMounted(() => {
     userStore.getInfo();
     getList();
-    // 鑾峰彇鐢ㄦ埛鍒楄〃
     userListNoPageByTenantId().then(res => {
-      if (res.code === 200) {
-        userOptions.value = res.data;
-      }
+      if (res.code === 200) { userOptions.value = res.data; }
     });
   });
 </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;
-  }
-  .transfer-card-title {
-    text-align: center;
-    font-size: 24px;
-    font-weight: bold;
-    margin-bottom: 20px;
-    color: #303133;
-  }
-  .transfer-card-container {
-    display: flex;
-    justify-content: space-between;
-    padding: 20px;
-  }
-  .transfer-card-info {
-    flex: 1;
-    margin-right: 20px;
-  }
-  .info-group {
-    margin-bottom: 20px;
-  }
-  .info-item {
-    display: flex;
-    margin-bottom: 10px;
-  }
-  .info-label {
-    width: 100px;
-    font-weight: bold;
-    color: #606266;
-  }
-  .info-value {
-    flex: 1;
-    color: #303133;
-  }
-  .transfer-card-qr {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-  }
-  .qr-container {
-    text-align: center;
-  }
-  .print-button-container {
-    text-align: center;
-    margin-top: 20px;
-  }
-  .param-grid {
-    margin-top: 10px;
-    border-top: 1px solid #ebe9f3;
-    padding-top: 10px;
-  }
-  .param-item {
-    margin-bottom: 12px;
-  }
-  .param-input-group {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-  }
-  .param-input {
-    flex: 1;
-  }
-  .param-select {
-    flex: 1;
-  }
-  .param-unit {
-    color: #909399;
-    font-size: 12px;
-    min-width: 30px;
-  }
+  .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; }
+  .transfer-card-title { text-align: center; font-size: 24px; font-weight: bold; margin-bottom: 20px; color: #303133; }
+  .transfer-card-container { display: flex; justify-content: space-between; padding: 20px; }
+  .transfer-card-info { flex: 1; margin-right: 20px; }
+  .info-group { margin-bottom: 20px; }
+  .info-item { display: flex; margin-bottom: 10px; }
+  .info-label { width: 100px; font-weight: bold; color: #606266; }
+  .info-value { flex: 1; color: #303133; }
+  .transfer-card-qr { display: flex; flex-direction: column; align-items: center; }
+  .qr-container { text-align: center; }
+  .print-button-container { text-align: center; margin-top: 20px; }
+  .param-grid { margin-top: 10px; border-top: 1px solid #ebe9f3; padding-top: 10px; }
+  .param-item { margin-bottom: 12px; }
+  .param-input-group { display: flex; align-items: center; gap: 8px; }
+  .param-input { flex: 1; }
+  .param-select { flex: 1; }
+  .param-unit { color: #909399; font-size: 12px; min-width: 30px; }
 </style>
 
-<style  lang="scss">
+<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;
-    }
+    @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;
-        }
+      .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;
-    }
+    .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>
diff --git a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
index e53fc49..c423cea 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
@@ -1,117 +1,120 @@
 <template>
   <div>
     <el-dialog
-        v-model="dialogFormVisible"
-        :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎鐞�' : '澶勭悊涓嶅悎鏍�'"
-        width="70%"
-        @close="closeDia"
+      v-model="dialogFormVisible"
+      :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎鐞�' : '澶勭悊涓嶅悎鏍�'"
+      width="75%"
+      @close="closeDia"
     >
-      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
-        <el-row :gutter="30">
+      <el-form :model="form" label-width="130px" :rules="rules" ref="formRef">
+        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="绫诲埆锛�" prop="inspectType">
-              <el-select v-model="form.inspectType" disabled>
+            <el-form-item label="绫诲埆">
+              <el-select v-model="form.inspectType" disabled style="width: 100%">
                 <el-option label="鍘熸潗鏂欐楠�" :value="0" />
                 <el-option label="杩囩▼妫�楠�" :value="1" />
                 <el-option label="鍑哄巶妫�楠�" :value="2" />
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="浜у搧鍚嶇О锛�" prop="productId">
+            <el-form-item label="浜у搧鍚嶇О">
               <el-tree-select
-                  v-model="form.productId"
-                  placeholder="璇烽�夋嫨"
-                  clearable
-                  disabled
-                  check-strictly
-                  @change="getModels"
-                  :data="productOptions"
-                  :render-after-expand="false"
-                  style="width: 100%"
+                v-model="form.productId"
+                placeholder="璇烽�夋嫨"
+                clearable
+                disabled
+                check-strictly
+                @change="getModels"
+                :data="productOptions"
+                :render-after-expand="false"
+                style="width: 100%"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
-              <el-input v-model="form.model" placeholder="璇疯緭鍏�" clearable disabled/>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="瑙勬牸鍨嬪彿">
+              <el-input v-model="form.model" placeholder="璇疯緭鍏�" clearable disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鍗曚綅">
+              <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鏁伴噺">
+              <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable disabled />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="鍗曚綅锛�" prop="unit">
-              <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable disabled/>
+            <el-form-item label="妫�楠屽憳">
+              <el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable disabled />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鏁伴噺锛�" prop="quantity">
-              <el-input v-model="form.quantity" placeholder="璇疯緭鍏�" clearable disabled/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="妫�楠屽憳锛�" prop="checkName">
-              <el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable disabled/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="妫�娴嬫棩鏈燂細" prop="checkTime">
+            <el-form-item label="妫�娴嬫棩鏈�">
               <el-date-picker
-                  v-model="form.checkTime"
-                  type="date"
-                  disabled
-                  placeholder="璇烽�夋嫨鏃ユ湡"
-                  value-format="YYYY-MM-DD"
-                  format="YYYY-MM-DD"
-                  clearable
-                  style="width: 100%"
+                v-model="form.checkTime"
+                type="date"
+                disabled
+                placeholder="璇烽�夋嫨鏃ユ湡"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                clearable
+                style="width: 100%"
               />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="涓嶅悎鏍肩幇璞★細" prop="defectivePhenomena">
-              <el-input v-model="form.defectivePhenomena" placeholder="璇疯緭鍏�" clearable/>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="涓嶅悎鏍肩幇璞�" prop="defectivePhenomena">
+              <el-input v-model="form.defectivePhenomena" type="textarea" :rows="2" placeholder="璇疯緭鍏�" clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="澶勭悊缁撴灉锛�" prop="dealResult">
-              <el-select v-model="form.dealResult" placeholder="璇烽�夋嫨" clearable>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="澶勭悊缁撴灉" prop="dealResult">
+              <el-select v-model="form.dealResult" placeholder="璇烽�夋嫨" clearable style="width: 100%">
                 <el-option :label="item.label" :value="item.value" v-for="item in filteredRejectionHandling" :key="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="澶勭悊浜猴細" prop="dealName">
+          <el-col :span="8">
+            <el-form-item label="澶勭悊浜�" prop="dealName">
               <el-select v-model="form.dealName" placeholder="璇烽�夋嫨" clearable style="width: 100%">
-                <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+                <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" />
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="澶勭悊鏃ユ湡锛�" prop="dealTime">
+          <el-col :span="8">
+            <el-form-item label="澶勭悊鏃ユ湡" prop="dealTime">
               <el-date-picker
-                  v-model="form.dealTime"
-                  type="date"
-                  placeholder="璇烽�夋嫨鏃ユ湡"
-                  value-format="YYYY-MM-DD"
-                  format="YYYY-MM-DD"
-                  clearable
-                  style="width: 100%"
+                v-model="form.dealTime"
+                type="date"
+                placeholder="璇烽�夋嫨鏃ユ湡"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                clearable
+                style="width: 100%"
               />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="闄勪欢锛�">
+            <el-form-item label="闄勪欢">
               <FileUpload v-model:file-list="form.storageBlobDTOs" :file-list="form.storageBlobVOs" />
             </el-form-item>
           </el-col>
@@ -128,20 +131,22 @@
 </template>
 
 <script setup>
-import {ref, reactive, toRefs, computed} from "vue";
-import {productTreeList} from "@/api/basicData/product.js";
+import { ref, reactive, toRefs, computed } from "vue";
+import { productTreeList } from "@/api/basicData/product.js";
 import {
   getQualityUnqualifiedInfo,
   qualityUnqualifiedDeal
 } from "@/api/qualityManagement/nonconformingManagement.js";
-import {userListNoPage} from "@/api/system/user.js";
+import { userListNoPage } from "@/api/system/user.js";
 import FileUpload from "@/components/AttachmentUpload/file/index.vue";
-const { proxy } = getCurrentInstance()
-const emit = defineEmits(['close'])
 
-const { rejection_handling } = proxy.useDict("rejection_handling")
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["close"]);
+
+const { rejection_handling } = proxy.useDict("rejection_handling");
 const dialogFormVisible = ref(false);
-const operationType = ref('')
+const operationType = ref("");
+
 const data = reactive({
   form: {
     checkTime: "",
@@ -154,48 +159,36 @@
     quantity: "",
     checkCompany: "",
     checkResult: "",
-    inspectType: '',
-    defectivePhenomena: '',
-    dealResult: '',
-    dealName: '',
-    dealTime: '',
+    inspectType: "",
+    defectivePhenomena: "",
+    dealResult: "",
+    dealName: "",
+    dealTime: "",
     method: undefined,
     storageBlobDTOs: [],
     storageBlobVOs: [],
   },
   rules: {
-    checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
-    process: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    productId: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    model: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    quantity: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkResult: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    defectivePhenomena: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
-    dealResult: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    defectivePhenomena: [{ required: true, message: "璇疯緭鍏ヤ笉鍚堟牸鐜拌薄", trigger: "blur" }],
+    dealResult: [{ required: true, message: "璇烽�夋嫨澶勭悊缁撴灉", trigger: "change" }],
     dealName: [{ required: true, message: "璇烽�夋嫨澶勭悊浜�", trigger: "change" }],
-    dealTime: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
+    dealTime: [{ required: true, message: "璇烽�夋嫨澶勭悊鏃ユ湡", trigger: "change" }],
   },
 });
 const { form, rules } = toRefs(data);
 const productOptions = ref([]);
-const userList = ref([]); // 澶勭悊浜轰笅鎷夊垪琛�
+const userList = ref([]);
 
 const filteredRejectionHandling = computed(() => {
   const data = rejection_handling.value;
   if (form.value.method) {
-    return data.filter(item => item && item.label && item.label !== '杩斿伐' && item.label !== '杩斾慨')
+    return data.filter(item => item && item.label && item.label !== "杩斿伐" && item.label !== "杩斾慨");
   }
-  return data
-})
+  return data;
+});
 
-
-// 鎵撳紑寮规
 const openDialog = async (type, row) => {
   operationType.value = type;
-  // 澶勭悊浜轰笅鎷夊垪琛�
   try {
     const userRes = await userListNoPage();
     userList.value = userRes.data || [];
@@ -206,74 +199,74 @@
   dialogFormVisible.value = true;
   form.value = {};
   getProductOptions();
-  if (operationType.value === 'edit') {
+  if (operationType.value === "edit") {
     getQualityUnqualifiedInfo(row.id).then(res => {
-      const { inspectState, ...rest } = (res.data || {})
-      // 鏈夋暟鎹氨鏄剧ず榛樿鍊硷紝娌℃湁灏变笉鏄剧ず
-      form.value = { ...rest }
-    })
+      const { inspectState, ...rest } = (res.data || {});
+      form.value = { ...rest };
+    });
   }
-}
+};
+
 const getProductOptions = () => {
   productTreeList().then((res) => {
     productOptions.value = convertIdToValue(res);
   });
 };
+
 const getModels = (value) => {
   form.value.productName = findNodeById(productOptions.value, value);
 };
+
 const findNodeById = (nodes, productId) => {
   for (let i = 0; i < nodes.length; i++) {
     if (nodes[i].value === productId) {
-      return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+      return nodes[i].label;
     }
     if (nodes[i].children && nodes[i].children.length > 0) {
       const foundNode = findNodeById(nodes[i].children, productId);
       if (foundNode) {
-        return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
+        return foundNode;
       }
     }
   }
-  return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
+  return null;
 };
+
 function convertIdToValue(data) {
   return data.map((item) => {
     const { id, children, ...rest } = item;
     const newItem = {
       ...rest,
-      value: id, // 灏� id 鏀逛负 value
+      value: id,
     };
     if (children && children.length > 0) {
       newItem.children = convertIdToValue(children);
     }
-    
     return newItem;
   });
 }
-// 鎻愪氦浜у搧琛ㄥ崟
+
 const submitForm = () => {
   proxy.$refs.formRef.validate(valid => {
     if (valid) {
-      // 鐘舵�佸瓧娈典笉鍦ㄨ〃鍗曞~鍐欙紝涔熶笉浼犵粰鍚庣锛涘鐞嗙粺涓�璧� /deal 鎺ュ彛
-      const { inspectState, ...payload } = (form.value || {})
+      const { inspectState, ...payload } = (form.value || {});
       qualityUnqualifiedDeal(payload).then(() => {
         proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
         closeDia();
-      })
+      });
     }
-  })
-}
-// 鍏抽棴寮规
+  });
+};
+
 const closeDia = () => {
   proxy.resetForm("formRef");
   dialogFormVisible.value = false;
-  emit('close')
+  emit("close");
 };
+
 defineExpose({
   openDialog,
 });
 </script>
 
-<style scoped>
-
-</style>
\ No newline at end of file
+<style scoped></style>
diff --git a/src/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue b/src/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue
index 0cba8c3..9bba241 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue
@@ -2,166 +2,220 @@
   <div>
     <el-dialog
       v-model="dialogFormVisible"
-      :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎搧澶勭悊鍗�' : '缂栬緫涓嶅悎鏍煎搧澶勭悊鍗�'"
-      width="70%"
+      :title="operationType === 'add' ? '鏂板涓嶅悎鏍煎搧澶勭悊鍗�' : operationType === 'view' ? '涓嶅悎鏍煎搧澶勭悊鍗曡鎯�' : operationType === 'dispose' ? '澶勭疆涓嶅悎鏍煎搧澶勭悊鍗�' : '缂栬緫涓嶅悎鏍煎搧澶勭悊鍗�'"
+      width="75%"
       @close="closeDia"
     >
-      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
-        <el-row :gutter="30">
+      <el-form :model="form" label-width="130px" :rules="rules" ref="formRef">
+        <!-- 鍏宠仈涓嶅悎鏍煎搧锛堜粎鏂板鏃讹級 -->
+        <el-row :gutter="20" v-if="operationType === 'add'">
           <el-col :span="12">
-            <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
-              <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="椤圭洰缂栧彿" prop="projectNo">
-              <el-input v-model="form.projectNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="璁惧鍚嶇О" prop="equipmentName">
-              <el-input v-model="form.equipmentName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璁惧鍥惧彿" prop="equipmentDrawingNo">
-              <el-input v-model="form.equipmentDrawingNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鐗╂枡/閮ㄤ欢鍚嶇О" prop="materialName">
-              <el-input v-model="form.materialName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鐗╂枡鍥惧彿" prop="materialDrawingNo">
-              <el-input v-model="form.materialDrawingNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍨嬪彿瑙勬牸" prop="specificationModel">
-              <el-input v-model="form.specificationModel" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏉愯川" prop="materialQuality">
-              <el-input v-model="form.materialQuality" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鎬绘暟閲�" prop="quantity">
-              <el-input-number v-model="form.quantity" :min="0" style="width: 100%" :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="涓嶅悎鏍兼暟閲�" prop="unqualifiedQuantity">
-              <el-input-number v-model="form.unqualifiedQuantity" :min="0" style="width: 100%" :disabled="operationType === 'view'" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="涓嶅悎鏍煎伐搴�" prop="unqualifiedProcess">
-              <el-select v-model="form.unqualifiedProcess" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'" style="width: 100%">
-                <el-option label="鏉ユ枡" :value="1" />
-                <el-option label="鍒剁▼" :value="2" />
-                <el-option label="鎴愬搧" :value="3" />
+            <el-form-item label="鍏宠仈涓嶅悎鏍煎搧" prop="unqualifiedId">
+              <el-select v-model="form.unqualifiedId" placeholder="閫夋嫨涓嶅悎鏍煎搧璁板綍" filterable clearable
+                @change="handleUnqualifiedSelect" style="width: 100%">
+                <el-option v-for="item in unqualifiedList" :key="item.id"
+                  :label="item.productName + ' ' + item.model + ' (' + item.quantity + ')'"
+                  :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
-              <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
+            <el-form-item label="涓嶅悎鏍煎伐搴�">
+              <el-radio-group v-model="form.unqualifiedProcess" :disabled="operationType === 'view' || operationType === 'dispose'">
+                <el-radio :value="1">鏉ユ枡</el-radio>
+                <el-radio :value="2">鍒剁▼</el-radio>
+                <el-radio :value="3">鎴愬搧</el-radio>
+              </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-divider>鍩烘湰淇℃伅</el-divider>
+        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="妫�楠屽憳" prop="inspectorName">
-              <el-input v-model="form.inspectorName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
+            <el-form-item label="椤圭洰鍚嶇О">
+              <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="妫�楠屾棩鏈�" prop="inspectDate">
-              <el-date-picker v-model="form.inspectDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" placeholder="璇烽�夋嫨" clearable style="width: 100%" :disabled="operationType === 'view'" />
+            <el-form-item label="椤圭洰缂栧彿">
+              <el-input v-model="form.projectNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item label="璐d换浜�" prop="responsiblePerson">
-              <el-input v-model="form.responsiblePerson" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
+            <el-form-item label="璁惧鍚嶇О">
+              <el-input v-model="form.equipmentName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="璐d换閮ㄩ棬" prop="responsibleDept">
-              <el-input v-model="form.responsibleDept" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
+            <el-form-item label="璁惧鍥惧彿">
+              <el-input v-model="form.equipmentDrawingNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鐗╂枡/閮ㄤ欢鍚嶇О">
+              <el-input v-model="form.materialName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鐗╂枡鍥惧彿">
+              <el-input v-model="form.materialDrawingNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="鍨嬪彿瑙勬牸">
+              <el-input v-model="form.specificationModel" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鏉愯川">
+              <el-input v-model="form.materialQuality" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="渚涘簲鍟�">
+              <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-divider>涓嶅悎鏍间俊鎭�</el-divider>
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="鎬绘暟閲�">
+              <el-input-number v-model="form.quantity" :min="0" :precision="2" style="width: 100%" :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="涓嶅悎鏍兼暟閲�">
+              <el-input-number v-model="form.unqualifiedQuantity" :min="0" :precision="2" style="width: 100%" :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="妫�楠屾棩鏈�">
+              <el-date-picker v-model="form.inspectDate" type="date" value-format="YYYY-MM-DD" placeholder="璇烽�夋嫨" clearable style="width: 100%" :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="妫�楠屽憳">
+              <el-input v-model="form.inspectorName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="璐d换浜�">
+              <el-input v-model="form.responsiblePerson" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="璐d换閮ㄩ棬">
+              <el-input v-model="form.responsibleDept" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="闂鎻忚堪" prop="problemDescription">
-              <el-input type="textarea" v-model="form.problemDescription" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="3" />
+            <el-form-item label="闂鎻忚堪">
+              <el-input type="textarea" v-model="form.problemDescription" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view' || operationType === 'dispose'" :rows="3" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-divider>澶勭疆鍐崇瓥</el-divider>
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="鍘熷洜鍒嗘瀽鍙婂缓璁�" prop="reasonAnalysis">
+            <el-form-item label="澶勭疆鏂瑰紡" prop="disposalMethod">
+              <el-radio-group v-model="form.disposalMethod" :disabled="operationType === 'view'">
+                <el-radio :value="1">璁╂鎺ユ敹</el-radio>
+                <el-radio :value="2">鍘傚唴缁翠慨</el-radio>
+                <el-radio :value="3">杩斿巶缁翠慨</el-radio>
+                <el-radio :value="4">鎹㈣揣</el-radio>
+                <el-radio :value="5">閫�璐�</el-radio>
+                <el-radio :value="6">鎶ュ簾</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20" v-if="form.disposalMethod === 2 || form.disposalMethod === 3">
+          <el-col :span="24">
+            <el-form-item label="鍘傚唴/杩斿巶缁翠慨璇勪及">
+              <el-input type="textarea" v-model="form.repairEvaluation" placeholder="璇勪及缁翠慨鍙鎬с�佹墍闇�宸ユ椂銆佺墿鏂欑瓑" clearable :disabled="operationType === 'view'" :rows="3" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鍘熷洜鍒嗘瀽鍙婂缓璁�">
               <el-input type="textarea" v-model="form.reasonAnalysis" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="3" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="绾犳鎺柦" prop="correctionAction">
-              <el-input type="textarea" v-model="form.correctionAction" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="3" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="澶勭疆鏂瑰紡" prop="disposalMethod">
-              <el-select v-model="form.disposalMethod" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'" style="width: 100%">
-                <el-option label="璁╂鎺ユ敹" :value="1" />
-                <el-option label="鍘傚唴缁翠慨" :value="2" />
-                <el-option label="杩斿巶缁翠慨" :value="3" />
-                <el-option label="鎹㈣揣" :value="4" />
-                <el-option label="閫�璐�" :value="5" />
-                <el-option label="鎶ュ簾" :value="6" />
-              </el-select>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="绾犳鎺柦">
+              <el-input type="textarea" v-model="form.correctionAction" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="缁翠慨璇勪及" prop="repairEvaluation">
-              <el-input type="textarea" v-model="form.repairEvaluation" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="3" />
+            <el-form-item label="棰勯槻鎺柦">
+              <el-input type="textarea" v-model="form.preventiveAction" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-divider>瀹℃壒鎰忚</el-divider>
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="棰勯槻鎺柦" prop="preventiveAction">
-              <el-input type="textarea" v-model="form.preventiveAction" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="3" />
+            <el-form-item label="璐d换閮ㄩ棬涓荤鎰忚">
+              <el-input type="textarea" v-model="form.deptOpinion" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="澶囨敞" prop="remark">
+            <el-form-item label="鍏徃澶勭悊鍐冲畾">
+              <el-input type="textarea" v-model="form.companyDecision" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鎬荤粡鐞嗘剰瑙�">
+              <el-input type="textarea" v-model="form.generalManagerOpinion" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="澶囨敞">
               <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" :rows="2" />
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row :gutter="30">
+
+        <el-divider>闄勪欢</el-divider>
+        <el-row :gutter="20">
           <el-col :span="24">
             <el-form-item label="闄勪欢">
               <FileUpload v-model:file-list="form.storageBlobDTOs" :file-list="form.storageBlobVOs" :disabled="operationType === 'view'" />
@@ -181,7 +235,13 @@
 
 <script setup>
 import { ref, reactive, toRefs, getCurrentInstance } from "vue";
-import { save, update, getDetail } from "@/api/qualityManagement/qualityUnqualifiedOrder.js";
+import {
+  saveQualityUnqualifiedOrder,
+  updateQualityUnqualifiedOrder,
+  getQualityUnqualifiedOrderDetail,
+  qualityUnqualifiedListPage,
+  dealQualityUnqualifiedOrder,
+} from "@/api/qualityManagement/nonconformingManagement.js";
 import FileUpload from "@/components/AttachmentUpload/file/index.vue";
 
 const { proxy } = getCurrentInstance();
@@ -189,77 +249,82 @@
 
 const dialogFormVisible = ref(false);
 const operationType = ref("");
+const unqualifiedList = ref([]);
+
+const emptyForm = {
+  unqualifiedId: undefined,
+  projectName: "",
+  projectNo: "",
+  equipmentId: undefined,
+  equipmentName: "",
+  equipmentDrawingNo: "",
+  materialName: "",
+  productModelId: undefined,
+  materialDrawingNo: "",
+  specificationModel: "",
+  materialQuality: "",
+  quantity: undefined,
+  unqualifiedQuantity: undefined,
+  unqualifiedProcess: undefined,
+  supplierName: "",
+  inspectorName: "",
+  inspectDate: "",
+  responsiblePerson: "",
+  responsibleDept: "",
+  problemDescription: "",
+  reasonAnalysis: "",
+  correctionAction: "",
+  disposalMethod: undefined,
+  repairEvaluation: "",
+  preventiveAction: "",
+  deptOpinion: "",
+  companyDecision: "",
+  generalManagerOpinion: "",
+  remark: "",
+  storageBlobDTOs: [],
+  storageBlobVOs: [],
+};
 
 const data = reactive({
-  form: {
-    projectName: "",
-    projectNo: "",
-    equipmentName: "",
-    equipmentDrawingNo: "",
-    materialName: "",
-    materialDrawingNo: "",
-    specificationModel: "",
-    materialQuality: "",
-    quantity: undefined,
-    unqualifiedQuantity: undefined,
-    unqualifiedProcess: undefined,
-    supplierName: "",
-    inspectorName: "",
-    inspectDate: "",
-    responsiblePerson: "",
-    responsibleDept: "",
-    problemDescription: "",
-    reasonAnalysis: "",
-    correctionAction: "",
-    disposalMethod: undefined,
-    repairEvaluation: "",
-    preventiveAction: "",
-    remark: "",
-    storageBlobDTOs: [],
-    storageBlobVOs: [],
-  },
+  form: { ...emptyForm },
   rules: {
-    projectName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
+    unqualifiedId: [{ required: true, message: "璇烽�夋嫨鍏宠仈涓嶅悎鏍煎搧", trigger: "change" }],
+    disposalMethod: [{ required: true, message: "璇烽�夋嫨澶勭疆鏂瑰紡", trigger: "change" }],
   },
 });
 const { form, rules } = toRefs(data);
+
+const loadUnqualifiedList = () => {
+  qualityUnqualifiedListPage({ inspectState: 0, page: 1, size: 999 }).then(res => {
+    unqualifiedList.value = res.data?.records || [];
+  });
+};
+
+const handleUnqualifiedSelect = (id) => {
+  const record = unqualifiedList.value.find(item => item.id === id);
+  if (!record) return;
+  form.value.materialName = record.productName || "";
+  form.value.specificationModel = record.model || "";
+  form.value.quantity = record.quantity;
+  form.value.inspectorName = record.checkName || "";
+  form.value.inspectDate = record.checkTime || "";
+  form.value.problemDescription = record.defectivePhenomena || "";
+  form.value.unqualifiedProcess = record.inspectType != null ? record.inspectType + 1 : undefined;
+  form.value.unqualifiedQuantity = record.quantity;
+};
 
 const openDialog = async (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
   if (type === "add") {
-    form.value = {
-      projectName: "",
-      projectNo: "",
-      equipmentName: "",
-      equipmentDrawingNo: "",
-      materialName: "",
-      materialDrawingNo: "",
-      specificationModel: "",
-      materialQuality: "",
-      quantity: undefined,
-      unqualifiedQuantity: undefined,
-      unqualifiedProcess: undefined,
-      supplierName: "",
-      inspectorName: "",
-      inspectDate: "",
-      responsiblePerson: "",
-      responsibleDept: "",
-      problemDescription: "",
-      reasonAnalysis: "",
-      correctionAction: "",
-      disposalMethod: undefined,
-      repairEvaluation: "",
-      preventiveAction: "",
-      remark: "",
-      storageBlobDTOs: [],
-      storageBlobVOs: [],
-    };
+    loadUnqualifiedList();
+    Object.assign(data.form, { ...emptyForm });
   } else {
-    form.value = {};
+    Object.assign(data.form, { ...emptyForm });
     if (row?.id) {
-      getDetail(row.id).then((res) => {
-        form.value = res.data || res || {};
+      getQualityUnqualifiedOrderDetail(row.id).then((res) => {
+        const detail = res.data || res || {};
+        Object.assign(data.form, { ...emptyForm }, detail);
       });
     }
   }
@@ -268,14 +333,31 @@
 const submitForm = () => {
   proxy.$refs.formRef.validate((valid) => {
     if (valid) {
-      const { status, ...payload } = form.value || {};
+      const { status, storageBlobVOs, ...payload } = form.value || {};
       if (operationType.value === "add") {
-        save(payload).then(() => {
+        saveQualityUnqualifiedOrder(payload).then(() => {
           proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
           closeDia();
         });
+      } else if (operationType.value === "dispose") {
+        const dealFields = {
+          id: payload.id,
+          disposalMethod: payload.disposalMethod,
+          repairEvaluation: payload.repairEvaluation,
+          reasonAnalysis: payload.reasonAnalysis,
+          correctionAction: payload.correctionAction,
+          preventiveAction: payload.preventiveAction,
+          remark: payload.remark,
+          deptOpinion: payload.deptOpinion,
+          companyDecision: payload.companyDecision,
+          generalManagerOpinion: payload.generalManagerOpinion,
+        };
+        dealQualityUnqualifiedOrder(dealFields).then(() => {
+          proxy.$modal.msgSuccess("澶勭疆鎴愬姛");
+          closeDia();
+        });
       } else {
-        update(payload).then(() => {
+        updateQualityUnqualifiedOrder(payload).then(() => {
           proxy.$modal.msgSuccess("淇敼鎴愬姛");
           closeDia();
         });
diff --git a/src/views/qualityManagement/nonconformingManagement/index.vue b/src/views/qualityManagement/nonconformingManagement/index.vue
index 3afcf9c..084fc71 100644
--- a/src/views/qualityManagement/nonconformingManagement/index.vue
+++ b/src/views/qualityManagement/nonconformingManagement/index.vue
@@ -1,314 +1,265 @@
 <template>
   <div class="app-container">
     <div class="search_form">
-      <el-form :model="searchForm" inline style="margin-bottom: 0;">
-        <el-form-item label="绫诲瀷锛�">
-          <el-select v-model="searchForm.inspectType" clearable style="width: 200px" @change="handleQuery">
-            <el-option label="鍘熸潗鏂欐楠�" :value="0" />
-            <el-option label="杩囩▼妫�楠�" :value="1" />
-            <el-option label="鍑哄巶妫�楠�" :value="2" />
-          </el-select>
+      <el-form :model="queryParams" inline style="margin-bottom: 0;">
+        <el-form-item label="澶勭悊鍗曠紪鍙�">
+          <el-input v-model="queryParams.orderNo" style="width: 200px" placeholder="杈撳叆缂栧彿" clearable
+            :prefix-icon="Search" @change="handleQuery" />
         </el-form-item>
-        <el-form-item label="鐘舵�侊細">
-          <el-select v-model="searchForm.inspectState" clearable style="width: 200px" @change="handleQuery">
-            <el-option label="寰呭鐞�" :value="0" />
-            <el-option label="宸插鐞�" :value="1" />
-          </el-select>
+        <el-form-item label="椤圭洰鍚嶇О">
+          <el-input v-model="queryParams.projectName" style="width: 200px" placeholder="杈撳叆椤圭洰" clearable
+            :prefix-icon="Search" @change="handleQuery" />
         </el-form-item>
-        <el-form-item label="浜у搧鍚嶇О锛�">
-          <el-input
-              v-model="searchForm.productName"
-              style="width: 200px"
-              placeholder="璇疯緭鍏ヤ骇鍝佸悕绉版悳绱�"
-              @change="handleQuery"
-              clearable
-              :prefix-icon="Search"
-          />
-        </el-form-item>
-        <el-form-item label="妫�娴嬫棩鏈燂細">
-          <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
-                          style="width: 300px"
-                          placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+<!--        <el-form-item label="鐘舵��">&ndash;&gt;-->
+<!--          <el-select v-model="queryParams.status" clearable style="width: 150px" @change="handleQuery" placeholder="鍏ㄩ儴">&ndash;&gt;-->
+<!--            <el-option label="鑽夌" :value="0" />&ndash;&gt;-->
+<!--            <el-option label="寰呭鎵�" :value="1" />&ndash;&gt;-->
+<!--            <el-option label="瀹℃壒涓�" :value="2" />&ndash;&gt;-->
+<!--            <el-option label="宸插畬鎴�" :value="3" />&ndash;&gt;-->
+<!--            <el-option label="宸查┏鍥�" :value="4" />&ndash;&gt;-->
+<!--          </el-select>&ndash;&gt;-->
+<!--        </el-form-item>&ndash;&gt;-->
+        <el-form-item label="鍒涘缓鏃堕棿">
+          <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange"
+            style="width: 260px" placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
         </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="handleQuery">鎼滅储</el-button>
+          <el-button @click="resetQuery">閲嶇疆</el-button>
         </el-form-item>
       </el-form>
     </div>
     <div class="mb20" style="text-align: right;">
-<!--        <el-button type="primary" @click="openForm('add')">鏂板</el-button>-->
-        <el-button type="primary" @click="openOrderForm">澶勭悊鍗�</el-button>
-        <el-button @click="handleOut">瀵煎嚭</el-button>
-        <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-      </div>
-    <div class="table_list">
-      <PIMTable
-          rowKey="id"
-          :column="tableColumn"
-          :tableData="tableData"
-          :page="page"
-          :isSelection="true"
-          @selection-change="handleSelectionChange"
-          :tableLoading="tableLoading"
-          @pagination="pagination"
-          :total="page.total"
-      ></PIMTable>
+      <el-button type="primary" @click="handleAdd">鏂板澶勭悊鍗�</el-button>
+      <el-button type="danger" plain :disabled="!selectedRows.length" @click="handleDelete">鍒犻櫎</el-button>
     </div>
-    <FormDia ref="formDia" @close="handleQuery"></FormDia>
-    <InspectionFormDia ref="inspectionFormDia" @close="handleQuery"></InspectionFormDia>
-    <OrderFormDia ref="orderFormDia" @close="handleQuery"></OrderFormDia>
+    <div class="table_list">
+      <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page"
+        :isSelection="true" @selection-change="handleSelectionChange"
+        :tableLoading="tableLoading" @pagination="pagination" :total="page.total" />
+    </div>
+    <OrderFormDia ref="orderFormDia" @close="handleQuery" />
   </div>
 </template>
 
 <script setup>
 import { Search } from "@element-plus/icons-vue";
-import {onMounted, ref, reactive, toRefs, nextTick, getCurrentInstance} from "vue";
-import FormDia from "@/views/qualityManagement/nonconformingManagement/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import {qualityUnqualifiedDel, qualityUnqualifiedListPage} from "@/api/qualityManagement/nonconformingManagement.js";
-import InspectionFormDia from "@/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue";
+import { onMounted, ref, reactive, nextTick, getCurrentInstance } from "vue";
+import { ElMessageBox } from "element-plus";
+import {
+  qualityUnqualifiedOrderListPage,
+  deleteQualityUnqualifiedOrder,
+} from "@/api/qualityManagement/nonconformingManagement.js";
 import OrderFormDia from "@/views/qualityManagement/nonconformingManagement/components/orderFormDia.vue";
 import dayjs from "dayjs";
 
-const data = reactive({
-  searchForm: {
-    inspectType: "",
-    inspectState: "",
-    productName: "",
-    entryDate: undefined, // 褰曞叆鏃ユ湡
-    entryDateStart: undefined,
-    entryDateEnd: undefined,
-  },
+const { proxy } = getCurrentInstance();
+
+const disposalMethodMap = { 1: "璁╂鎺ユ敹", 2: "鍘傚唴缁翠慨", 3: "杩斿巶缁翠慨", 4: "鎹㈣揣", 5: "閫�璐�", 6: "鎶ュ簾" };
+const statusMap = { 0: "鑽夌", 1: "寰呭鎵�", 2: "瀹℃壒涓�", 3: "宸插畬鎴�", 4: "宸查┏鍥�" };
+
+const queryParams = reactive({
+  orderNo: "",
+  projectName: "",
+  status: null,
+  entryDateStart: undefined,
+  entryDateEnd: undefined,
 });
-const { searchForm } = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "鐘舵��",
-    prop: "inspectState",
-    dataType: "tag",
-    formatData: (params) => {
-      if (params == 0) {
-        return "寰呭鐞�";
-      } else if (params == 1) {
-        return "宸插鐞�";
-      } else {
-        return null;
-      }
-    },
-    formatType: (params) => {
-      if (params == '涓嶅悎鏍�') {
-        return "danger";
-      } else if (params == '鍚堟牸') {
-        return "success";
-      } else {
-        return 'danger';
-      }
-    },
-  },
-  {
-    label: "妫�娴嬫棩鏈�",
-    prop: "checkTime",
-    width: 120
-  },
-  {
-    label: "绫诲埆",
-    prop: "inspectType",
-    dataType: "tag",
-    width: 120,
-    formatData: (params) => {
-      if (params == 0) {
-        return "鍘熸潗鏂欐楠�";
-      } else if (params == 1) {
-        return "杩囩▼妫�楠�";
-      } else {
-        return '鍑哄巶妫�楠�';
-      }
-    },
-    formatType: (params) => {
-      if (params == '涓嶅悎鏍�') {
-        return "info";
-      } else if (params == '鍚堟牸') {
-        return "success";
-      } else {
-        return 'primary';
-      }
-    },
-  },
-  {
-    label: "妫�楠屽憳",
-    prop: "checkName",
-  },
-  {
-    label: "浜у搧鍚嶇О",
-    prop: "productName",
-  },
-  {
-    label: "瑙勬牸鍨嬪彿",
-    prop: "model",
-  },
-  {
-    label: "鍗曚綅",
-    prop: "unit",
-  },
-  {
-    label: "鏁伴噺",
-    prop: "quantity",
-    width: 100
-  },
-  {
-    label: "涓嶅悎鏍肩幇璞�",
-    prop: "defectivePhenomena",
-    width: 120
-  },
-  {
-    label: "澶勭悊缁撴灉",
-    prop: "dealResult",
-    width: 120
-  },
-  {
-    label: "澶勭悊浜�",
-    prop: "dealName",
-    width: 120
-  },
-  {
-    label: "澶勭悊鏃ユ湡",
-    prop: "dealTime",
-    width: 120
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: "right",
-    width: 100,
-    operation: [
-      {
-        name: "澶勭悊",
-        type: "text",
-        clickFun: (row) => {
-          openInspectionForm("edit", row);
-        },
-        disabled: (row) => row.inspectState === 1,
-      },
-    ],
-  },
-]);
+
+const dateRange = ref(undefined);
 const tableData = ref([]);
 const selectedRows = ref([]);
 const tableLoading = ref(false);
 const page = reactive({
   current: 1,
   size: 100,
-  total: 0
+  total: 0,
 });
-const formDia = ref()
-const inspectionFormDia = ref()
-const orderFormDia = ref()
-const { proxy } = getCurrentInstance()
+const orderFormDia = ref();
+
+const tableColumn = ref([
+  {
+    label: "澶勭悊鍗曠紪鍙�",
+    prop: "orderNo",
+    width: 160,
+  },
+  {
+    label: "椤圭洰鍚嶇О",
+    prop: "projectName",
+  },
+  {
+    label: "鍨嬪彿瑙勬牸",
+    prop: "specificationModel",
+    width: 120,
+  },
+  {
+    label: "涓嶅悎鏍兼暟閲�",
+    prop: "unqualifiedQuantity",
+    width: 100,
+  },
+  {
+    label: "澶勭疆鏂瑰紡",
+    prop: "disposalMethod",
+    width: 110,
+    dataType: "tag",
+    formatData: (val) => disposalMethodMap[val] || "",
+  },
+  // {
+  //   label: "鐘舵��",
+  //   prop: "status",
+  //   width: 80,
+  //   dataType: "tag",
+  //   formatData: (val) => statusMap[val] || "",
+  //   formatType: (val) => {
+  //     const map = { 0: "info", 1: "warning", 2: "", 3: "success", 4: "danger" };
+  //     return map[val] || "info";
+  //   },
+  // },
+  {
+    label: "妫�楠屽憳",
+    prop: "inspectorName",
+    width: 100,
+  },
+  {
+    label: "妫�楠屾棩鏈�",
+    prop: "inspectDate",
+    width: 110,
+  },
+  {
+    label: "鍒涘缓鏃堕棿",
+    prop: "createTime",
+    width: 160,
+  },
+  {
+    dataType: "action",
+    label: "鎿嶄綔",
+    align: "center",
+    fixed: "right",
+    width: 160,
+    operation: [
+      {
+        name: "瀵煎嚭",
+        type: "text",
+        clickFun: (row) => {
+          handleExport(row);
+        },
+      },
+      {
+        name: "澶勭疆",
+        type: "text",
+        showHide: (row) => row.status === 0,
+        clickFun: (row) => {
+          nextTick(() => {
+            orderFormDia.value?.openDialog("dispose", row);
+          });
+        },
+      },
+      {
+        name: "缂栬緫",
+        type: "text",
+        clickFun: (row) => {
+          nextTick(() => {
+            orderFormDia.value?.openDialog("edit", row);
+          });
+        },
+      },
+      {
+        name: "璇︽儏",
+        type: "text",
+        clickFun: (row) => {
+          nextTick(() => {
+            orderFormDia.value?.openDialog("view", row);
+          });
+        },
+      },
+    ],
+  },
+]);
 
 const changeDaterange = (value) => {
-  searchForm.value.entryDateStart = undefined;
-  searchForm.value.entryDateEnd = undefined;
+  queryParams.entryDateStart = undefined;
+  queryParams.entryDateEnd = undefined;
   if (value) {
-    searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
-    searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+    queryParams.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+    queryParams.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
   }
   getList();
 };
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
+
 const handleQuery = () => {
   page.current = 1;
   getList();
 };
+
+const resetQuery = () => {
+  queryParams.orderNo = "";
+  queryParams.projectName = "";
+  queryParams.status = null;
+  dateRange.value = undefined;
+  queryParams.entryDateStart = undefined;
+  queryParams.entryDateEnd = undefined;
+  handleQuery();
+};
+
 const pagination = (obj) => {
   page.current = obj.page;
   page.size = obj.limit;
   getList();
 };
+
 const getList = () => {
   tableLoading.value = true;
-  const params = { ...searchForm.value, ...page };
-  params.entryDate = undefined
-  qualityUnqualifiedListPage(params).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
+  const params = { ...queryParams, page: page.current, size: page.size };
+  qualityUnqualifiedOrderListPage(params)
+    .then((res) => {
+      tableLoading.value = false;
+      tableData.value = res.data?.records || [];
+      page.total = res.data?.total || 0;
+    })
+    .catch(() => {
+      tableLoading.value = false;
+    });
 };
-// 琛ㄦ牸閫夋嫨鏁版嵁
+
 const handleSelectionChange = (selection) => {
   selectedRows.value = selection;
 };
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  if (type !== 'add' && row?.inspectState === 1) {
-    proxy.$modal.msgWarning("宸插鐞嗙殑鏁版嵁涓嶈兘鍐嶇紪杈�");
-    return;
-  }
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-// 鎵撳紑澶勭悊寮规
-const openInspectionForm = (type, row) => {
-  if (row?.inspectState === 1) {
-    proxy.$modal.msgWarning("宸插鐞嗙殑鏁版嵁涓嶈兘鍐嶅鐞�");
-    return;
-  }
-  nextTick(() => {
-    inspectionFormDia.value?.openDialog(type, row)
-  })
-};
-
-// 鎵撳紑澶勭悊鍗曞脊妗�
-const openOrderForm = () => {
+const handleAdd = () => {
   nextTick(() => {
     orderFormDia.value?.openDialog("add", null);
   });
 };
 
-// 鍒犻櫎
 const handleDelete = () => {
-  let ids = [];
-  if (selectedRows.value.length > 0) {
-    ids = selectedRows.value.map((item) => item.id);
-  } else {
+  if (selectedRows.value.length === 0) {
     proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
     return;
   }
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
+  const ids = selectedRows.value.map((item) => item.id);
+  ElMessageBox.confirm("閫変腑鐨勫鐞嗗崟灏嗚鍒犻櫎锛屾槸鍚︾‘璁わ紵", "鎻愮ず", {
     confirmButtonText: "纭",
     cancelButtonText: "鍙栨秷",
     type: "warning",
   })
-      .then(() => {
-        qualityUnqualifiedDel(ids).then((res) => {
-          proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-          getList();
-        });
-      })
-      .catch(() => {
-        proxy.$modal.msg("宸插彇娑�");
+    .then(() => {
+      deleteQualityUnqualifiedOrder(ids).then(() => {
+        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        getList();
       });
+    })
+    .catch(() => {
+      proxy.$modal.msg("宸插彇娑�");
+    });
 };
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-      .then(() => {
-        proxy.download("/quality/qualityUnqualified/export", {}, "涓嶅悎鏍肩鐞�.xlsx");
-      })
-      .catch(() => {
-        proxy.$modal.msg("宸插彇娑�");
-      });
+
+const handleExport = (row) => {
+  proxy.$download.zip(
+    `/qualityUnqualifiedOrder/export/${row.id}`,
+    `涓嶅悎鏍煎搧澶勭悊鍗昣${row.orderNo || row.id}.xlsx`
+  );
 };
+
 onMounted(() => {
   getList();
 });
diff --git a/src/views/salesManagement/indicatorStats/index.vue b/src/views/salesManagement/indicatorStats/index.vue
index 8ae15ed..de74c56 100644
--- a/src/views/salesManagement/indicatorStats/index.vue
+++ b/src/views/salesManagement/indicatorStats/index.vue
@@ -25,7 +25,7 @@
           </div>
           <div class="stat-content">
             <div class="stat-value">楼{{ indicatorKpis.salesAmount.toLocaleString() }}</div>
-            <div class="stat-label">閿�鍞</div>
+            <div class="stat-label">鍚堝悓閲戦</div>
           </div>
           <div class="stat-bg-decoration"></div>
         </div>
@@ -287,7 +287,7 @@
   const option = {
     title: { text: '澶氱淮搴﹂攢鍞寚鏍囪秼鍔�', left: 'center' },
     tooltip: { trigger: 'axis' },
-    legend: { data: ['璁㈠崟鏁�', '閿�鍞'], top: 30 },
+    legend: { data: ['璁㈠崟鏁�', '鍚堝悓閲戦'], top: 30 },
     grid: { left: '3%', right: '8%', bottom: '3%', containLabel: true },
     xAxis: { 
       type: 'category', 
@@ -317,7 +317,7 @@
         itemStyle: { color: '#409eff' } 
       },
       { 
-        name: '閿�鍞', 
+        name: '鍚堝悓閲戦', 
         type: 'bar', 
         yAxisIndex: 0,
         data: chartData.salesAmountList || [], 
@@ -335,7 +335,7 @@
   const option = {
     title: { text: '澶氱淮搴﹂攢鍞寚鏍囪秼鍔�', left: 'center' },
     tooltip: { trigger: 'axis' },
-    legend: { data: ['璁㈠崟鏁�', '閿�鍞'], top: 30 },
+    legend: { data: ['璁㈠崟鏁�', '鍚堝悓閲戦'], top: 30 },
     grid: { left: '3%', right: '8%', bottom: '3%', containLabel: true },
     xAxis: { type: 'category', data: [] },
     yAxis: [
@@ -355,7 +355,7 @@
     ],
     series: [
       { name: '璁㈠崟鏁�', type: 'line', yAxisIndex: 1, data: [], itemStyle: { color: '#409eff' } },
-      { name: '閿�鍞', type: 'bar', yAxisIndex: 0, data: [], itemStyle: { color: '#67c23a' } }
+      { name: '鍚堝悓閲戦', type: 'bar', yAxisIndex: 0, data: [], itemStyle: { color: '#67c23a' } }
     ]
   }
   indicatorChart.setOption(option)

--
Gitblit v1.9.3