From 41363e65800ce89dbc25797ef7873d80300983f7 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期一, 16 三月 2026 13:36:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_银川_中盛建材' into dev_银川_中盛建材

---
 src/views/productionManagement/productionProcess/index.vue               |   25 
 src/views/productionManagement/processRoute/index.vue                    |  923 ++++++++++++++++++------
 src/views/qualityManagement/rawMaterialInspection/components/formDia.vue |  233 +++++-
 src/views/qualityManagement/rawMaterialInspection/index.vue              | 1004 +++++++++++++++++---------
 src/views/productionManagement/productStructure/index.vue                |    2 
 5 files changed, 1,547 insertions(+), 640 deletions(-)

diff --git a/src/views/productionManagement/processRoute/index.vue b/src/views/productionManagement/processRoute/index.vue
index afdd542..228ccb2 100644
--- a/src/views/productionManagement/processRoute/index.vue
+++ b/src/views/productionManagement/processRoute/index.vue
@@ -17,12 +17,12 @@
           <div class="route-info">
             <span class="route-name"><el-icon style="margin-right: 8px;line-height: 30px;">
                 <ScaleToOriginal />
-              </el-icon>{{ route.routeName }}<el-tag style="margin-left: 8px"
-                      :type="route.status == 1 ? 'warning' : 'success'">{{ route.status == 1 ? '鑽夌' : '鎵瑰噯' }}</el-tag></span>
-            <span class="route-code">{{ route.routeCode }}</span>
+              </el-icon>{{route.routeCode }}<el-tag style="margin-left: 8px"
+                      :type="!route.status ? 'warning' : 'success'">{{ !route.status ? '鑽夌' : '鎵瑰噯' }}</el-tag></span>
+            <!-- <span class="route-code">{{ route.routeCode }}</span> -->
           </div>
           <div class="route-actions">
-            <el-button v-if="route.status === '1'"
+            <el-button v-if="!route.status"
                        link
                        type="success"
                        @click="handleApproveRoute(route)">
@@ -31,7 +31,7 @@
               </el-icon>
               鎵瑰噯
             </el-button>
-            <el-button v-if="route.status === '2'"
+            <el-button v-if="route.status"
                        link
                        type="warning"
                        @click="handleRevokeApproveRoute(route)">
@@ -72,14 +72,14 @@
                 <Document />
               </el-icon>
               <span class="meta-label">BOM:</span>
-              <span class="meta-value">{{ route.bomId || '-' }}</span>
+              <span class="meta-value">{{ route.bomNo || '-' }}</span>
             </span>
             <span class="meta-item">
               <el-icon>
                 <Document />
               </el-icon>
               <span class="meta-label">璺嚎鎻忚堪:</span>
-              <span class="meta-value">{{ route.routeDesc || '鏆傛棤鎻忚堪' }}</span>
+              <span class="meta-value">{{ route.description || '鏆傛棤鎻忚堪' }}</span>
             </span>
           </div>
           <div class="expand-btn-wrapper">
@@ -121,9 +121,9 @@
                   </div>
                 </div>
                 <div class="process-node-body">
-                  <div class="process-code">{{ process.processCode }}</div>
-                  <div class="process-name">{{ process.processName }}</div>
-                  <div class="process-desc">{{ process.processDesc || '鏆傛棤鎻忚堪' }}</div>
+                  <div class="process-code">{{ process.no }}</div>
+                  <div class="process-name">{{ process.name }}</div>
+                  <div class="process-desc">{{ process.remark || '鏆傛棤鎻忚堪' }}</div>
                 </div>
                 <div class="process-node-footer">
                   <!-- <el-tag size="small"
@@ -201,9 +201,6 @@
               <span>鏂板宸ュ簭</span>
             </div>
           </div>
-          <el-empty v-if="!route.processList || route.processList.length === 0"
-                    description="鏆傛棤宸ュ簭"
-                    :image-size="80" />
         </div>
       </div>
     </div>
@@ -240,16 +237,12 @@
         <el-form-item label="璺嚎缂栫爜"
                       prop="routeCode">
           <el-input v-model="routeForm.routeCode"
-                    placeholder="璇疯緭鍏ヨ矾绾跨紪鐮�" />
-        </el-form-item>
-        <el-form-item label="璺嚎鍚嶇О"
-                      prop="routeName">
-          <el-input v-model="routeForm.routeName"
-                    placeholder="璇疯緭鍏ヨ矾绾垮悕绉�" />
+                    disabled
+                    placeholder="鑷姩鐢熸垚" />
         </el-form-item>
         <el-form-item label="璺嚎鎻忚堪"
-                      prop="routeDesc">
-          <el-input v-model="routeForm.routeDesc"
+                      prop="description">
+          <el-input v-model="routeForm.description"
                     type="textarea"
                     :rows="3"
                     placeholder="璇疯緭鍏ヨ矾绾挎弿杩�" />
@@ -283,18 +276,18 @@
                ref="processFormRef"
                label-width="120px">
         <el-form-item label="宸ュ簭缂栫爜"
-                      prop="processCode">
-          <el-input v-model="processForm.processCode"
+                      prop="no">
+          <el-input v-model="processForm.no"
                     placeholder="璇疯緭鍏ュ伐搴忕紪鐮�" />
         </el-form-item>
         <el-form-item label="宸ュ簭鍚嶇О"
-                      prop="processName">
-          <el-input v-model="processForm.processName"
+                      prop="name">
+          <el-input v-model="processForm.name"
                     placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />
         </el-form-item>
         <el-form-item label="宸ュ簭鎻忚堪"
-                      prop="processDesc">
-          <el-input v-model="processForm.processDesc"
+                      prop="remark">
+          <el-input v-model="processForm.remark"
                     type="textarea"
                     :rows="3"
                     placeholder="璇疯緭鍏ュ伐搴忔弿杩�" />
@@ -302,8 +295,8 @@
         <el-form-item label="鐘舵��"
                       prop="status">
           <el-radio-group v-model="processForm.status">
-            <el-radio label="1">鍚敤</el-radio>
-            <el-radio label="0">鍋滅敤</el-radio>
+            <el-radio :label="true">鍚敤</el-radio>
+            <el-radio :label="false">鍋滅敤</el-radio>
           </el-radio-group>
         </el-form-item>
       </el-form>
@@ -341,20 +334,20 @@
                     border
                     highlight-current-row
                     @current-change="handleProcessSelect">
-            <el-table-column prop="processCode"
+            <el-table-column prop="no"
                              label="宸ュ簭缂栧彿"
                              width="100" />
-            <el-table-column prop="processName"
+            <el-table-column prop="name"
                              label="宸ュ簭鍚嶇О" />
-            <el-table-column prop="processDesc"
+            <el-table-column prop="remark"
                              label="宸ュ簭鎻忚堪" />
             <el-table-column prop="status"
                              label="鐘舵��"
                              width="80">
               <template #default="scope">
                 <el-tag size="small"
-                        :type="scope.row.status === '1' ? 'success' : 'info'">
-                  {{ scope.row.status === '1' ? '鍚敤' : '鍋滅敤' }}
+                        :type="scope.row.status ? 'success' : 'info'">
+                  {{ scope.row.status ? '鍚敤' : '鍋滅敤' }}
                 </el-tag>
               </template>
             </el-table-column>
@@ -368,23 +361,29 @@
                    label-width="100px"
                    class="process-detail-form">
             <el-form-item label="宸ュ簭缂栧彿">
-              <span class="detail-text">{{ selectedProcessItem.processCode }}</span>
+              <span class="detail-text">{{ selectedProcessItem.no }}</span>
             </el-form-item>
             <el-form-item label="宸ュ簭鍚嶇О">
-              <span class="detail-text">{{ selectedProcessItem.processName }}</span>
+              <span class="detail-text">{{ selectedProcessItem.name }}</span>
             </el-form-item>
             <el-form-item label="宸ュ簭鎻忚堪">
-              <span class="detail-text">{{ selectedProcessItem.processDesc || '-' }}</span>
+              <span class="detail-text">{{ selectedProcessItem.remark || '-' }}</span>
             </el-form-item>
             <el-form-item label="鐘舵��">
               <el-tag size="small"
-                      :type="selectedProcessItem.status === '1' ? 'success' : 'info'">
-                {{ selectedProcessItem.status === '1' ? '鍚敤' : '鍋滅敤' }}
+                      :type="selectedProcessItem.status ? 'success' : 'info'">
+                {{ selectedProcessItem.status ? '鍚敤' : '鍋滅敤' }}
               </el-tag>
             </el-form-item>
-            <el-form-item label="鍙傛暟鏁伴噺">
-              <span class="detail-text">{{ selectedProcessItem.paramCount || 0 }}涓�</span>
+            <el-form-item label="鏄惁璐ㄦ">
+              <el-tag size="small"
+                      :type="selectedProcessItem.isQuality ? 'success' : 'info'">
+                {{ selectedProcessItem.isQuality ? '璐ㄦ' : '闈炶川妫�' }}
+              </el-tag>
             </el-form-item>
+            <!-- <el-form-item label="鍙傛暟鏁伴噺">
+              <span class="detail-text">{{ selectedProcessItem.paramCount || 0 }}涓�</span>
+            </el-form-item> -->
           </el-form>
           <el-empty v-else
                     description="璇蜂粠宸︿晶閫夋嫨宸ュ簭" />
@@ -489,6 +488,186 @@
         </span>
       </template>
     </el-dialog>
+    <!-- 閫夋嫨鍙傛暟瀵硅瘽妗� -->
+    <el-dialog v-model="selectParamDialogVisible"
+               title="閫夋嫨鍙傛暟"
+               width="1000px">
+      <div class="param-select-container">
+        <!-- 宸︿晶鍙傛暟鍒楄〃 -->
+        <div class="param-list-area">
+          <div class="area-title">鍙�夊弬鏁�</div>
+          <div class="search-box">
+            <el-input v-model="paramSearchKeyword"
+                      placeholder="璇疯緭鍏ュ弬鏁板悕绉版悳绱�"
+                      clearable
+                      size="small"
+                      @input="handleParamSearch">
+              <template #prefix>
+                <el-icon>
+                  <Search />
+                </el-icon>
+              </template>
+            </el-input>
+          </div>
+          <el-table :data="filteredParamList"
+                    height="300"
+                    border
+                    highlight-current-row
+                    @current-change="handleParamSelect">
+            <el-table-column prop="paramName"
+                             label="鍙傛暟鍚嶇О" />
+            <el-table-column prop="paramType"
+                             label="鍙傛暟绫诲瀷">
+              <template #default="scope">
+                <el-tag size="small"
+                        :type="getParamTypeTag(scope.row.paramType)">
+                  {{ getParamTypeText(scope.row.paramType) }}
+                </el-tag>
+              </template>
+            </el-table-column>
+          </el-table>
+          <!-- 鍒嗛〉鎺т欢 -->
+          <div class="pagination-container"
+               style="margin-top: 10px;">
+            <el-pagination v-model:current-page="paramPage.current"
+                           v-model:page-size="paramPage.size"
+                           :page-sizes="[10, 20, 50, 100]"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="paramPage.total"
+                           @size-change="handleParamSizeChange"
+                           @current-change="handleParamCurrentChange"
+                           size="small" />
+          </div>
+        </div>
+        <!-- 鍙充晶鍙傛暟璇︽儏 -->
+        <div class="param-detail-area">
+          <div class="area-title">鍙傛暟璇︽儏</div>
+          <el-form v-if="selectedParam"
+                   :model="selectedParam"
+                   label-width="100px"
+                   class="param-detail-form">
+            <el-form-item label="鍙傛暟鍚嶇О">
+              <span class="detail-text">{{ selectedParam.paramName }}</span>
+            </el-form-item>
+            <el-form-item label="鍙傛暟妯″紡">
+              <el-tag size="small"
+                      :type="selectedParam.valueMode == '1' ? 'success' : 'warning'">
+                {{ selectedParam.valueMode == '1' ? '鍗曞��' : '鍖洪棿' }}
+              </el-tag>
+            </el-form-item>
+            <el-form-item label="鍙傛暟绫诲瀷">
+              <el-tag size="small"
+                      :type="getParamTypeTag(selectedParam.paramType)">
+                {{ getParamTypeText(selectedParam.paramType) }}
+              </el-tag>
+            </el-form-item>
+            <el-form-item label="鍙傛暟鏍煎紡">
+              <span class="detail-text">{{ selectedParam.paramFormat || '-' }}</span>
+            </el-form-item>
+            <el-form-item label="鍗曚綅">
+              <span class="detail-text">{{ selectedParam.unit || '-' }}</span>
+            </el-form-item>
+            <el-form-item label="鏍囧噯鍊�"
+                          v-if="selectedParam.valueMode == '1'">
+              <el-input v-model="selectedParam.standardValue"
+                        type="number"
+                        placeholder="璇疯緭鍏ラ粯璁ゅ��" />
+            </el-form-item>
+            <el-form-item label="鏈�灏忓��"
+                          v-if="selectedParam.valueMode == '2'">
+              <el-input v-model="selectedParam.minValue"
+                        type="number"
+                        placeholder="璇疯緭鍏ユ渶灏忓��" />
+            </el-form-item>
+            <el-form-item label="鏈�澶у��"
+                          v-if="selectedParam.valueMode == '2'">
+              <el-input v-model="selectedParam.maxValue"
+                        type="number"
+                        placeholder="璇疯緭鍏ユ渶澶у��" />
+            </el-form-item>
+            <el-form-item label="鎺掑簭">
+              <el-input v-model="selectedParam.sort"
+                        type="number"
+                        placeholder="璇疯緭鍏ユ帓搴�" />
+            </el-form-item>
+            <el-form-item label="鏄惁蹇呭~">
+              <el-switch v-model="selectedParam.isRequired"
+                         :active-value="1"
+                         :inactive-value="0" />
+            </el-form-item>
+          </el-form>
+          <el-empty v-else
+                    description="璇蜂粠宸︿晶閫夋嫨鍙傛暟" />
+        </div>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="selectParamDialogVisible = false">鍙栨秷</el-button>
+          <el-button type="primary"
+                     :disabled="!selectedParam"
+                     @click="handleParamSelectSubmit">纭畾</el-button>
+        </span>
+      </template>
+    </el-dialog>
+    <!-- 缂栬緫鍙傛暟瀵硅瘽妗� -->
+    <el-dialog v-model="editParamDialogVisible"
+               title="缂栬緫鍙傛暟"
+               width="600px">
+      <el-form :model="editParamForm"
+               :rules="editParamRules"
+               ref="editParamFormRef"
+               label-width="120px">
+        <el-form-item label="鍙傛暟鍚嶇О">
+          <span class="detail-text">{{ editParamForm.paramName }}</span>
+        </el-form-item>
+        <el-form-item label="鍙傛暟妯″紡">
+          <el-tag size="small"
+                  :type="editParamForm.valueMode == '1' ? 'success' : 'warning'">
+            {{ editParamForm.valueMode == '1' ? '鍗曞��' : '鍖洪棿' }}
+          </el-tag>
+        </el-form-item>
+        <el-form-item label="鏍囧噯鍊�"
+                      v-if="editParamForm.valueMode == '1'"
+                      prop="standardValue">
+          <el-input v-model="editParamForm.standardValue"
+                    type="number"
+                    placeholder="璇疯緭鍏ユ爣鍑嗗��" />
+        </el-form-item>
+        <el-form-item label="鏈�灏忓��"
+                      v-if="editParamForm.valueMode == '2'"
+                      prop="minValue">
+          <el-input v-model="editParamForm.minValue"
+                    type="number"
+                    placeholder="璇疯緭鍏ユ渶灏忓��" />
+        </el-form-item>
+        <el-form-item label="鏈�澶у��"
+                      v-if="editParamForm.valueMode == '2'"
+                      prop="maxValue">
+          <el-input v-model="editParamForm.maxValue"
+                    type="number"
+                    placeholder="璇疯緭鍏ユ渶澶у��" />
+        </el-form-item>
+        <el-form-item label="鎺掑簭"
+                      prop="sort">
+          <el-input v-model="editParamForm.sort"
+                    type="number"
+                    placeholder="璇疯緭鍏ユ帓搴�" />
+        </el-form-item>
+        <el-form-item label="鏄惁蹇呭~"
+                      prop="isRequired">
+          <el-switch v-model="editParamForm.isRequired"
+                     :active-value="1"
+                     :inactive-value="0" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="editParamDialogVisible = false">鍙栨秷</el-button>
+          <el-button type="primary"
+                     @click="handleEditParamSubmit">纭畾</el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -510,6 +689,9 @@
   } from "@element-plus/icons-vue";
   import { listType } from "@/api/system/dict/type";
   import { getByModel } from "@/api/productionManagement/productBom.js";
+  import { add, update, del } from "@/api/productionManagement/processRoute.js";
+  import { list as getProcessListApi } from "@/api/productionManagement/productionProcess.js";
+  import { getBaseParamList } from "@/api/basicData/parameterMaintenance.js";
   import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
 
   // 宸ヨ壓璺嚎鍒楄〃
@@ -534,17 +716,14 @@
     productModelName: "",
     bomId: null,
     routeCode: "",
-    routeName: "",
-    routeDesc: "",
-    status: "1",
+    description: "",
+    status: true,
   });
   const routeRules = {
     productModelId: [
       { required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" },
     ],
     bomId: [{ required: true, message: "璇烽�夋嫨BOM", trigger: "change" }],
-    routeCode: [{ required: true, message: "璇疯緭鍏ヨ矾绾跨紪鐮�", trigger: "blur" }],
-    routeName: [{ required: true, message: "璇疯緭鍏ヨ矾绾垮悕绉�", trigger: "blur" }],
   };
 
   // 宸ュ簭瀵硅瘽妗�
@@ -554,14 +733,14 @@
   const currentRouteId = ref(null);
   const processForm = reactive({
     id: null,
-    processCode: "",
-    processName: "",
-    processDesc: "",
-    status: "1",
+    no: "",
+    name: "",
+    remark: "",
+    status: true,
   });
   const processRules = {
-    processCode: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
-    processName: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
+    no: [{ required: true, message: "璇疯緭鍏ュ伐搴忕紪鐮�", trigger: "blur" }],
+    name: [{ required: true, message: "璇疯緭鍏ュ伐搴忓悕绉�", trigger: "blur" }],
   };
 
   // 閫夋嫨宸ュ簭瀵硅瘽妗�
@@ -599,121 +778,126 @@
     ],
   };
 
+  // 閫夋嫨鍙傛暟瀵硅瘽妗�
+  const selectParamDialogVisible = ref(false);
+  const availableParamList = ref([]);
+  const filteredParamList = ref([]);
+  const selectedParam = ref(null);
+  const paramSearchKeyword = ref("");
+
+  // 鍙�夊弬鏁板垎椤�
+  const paramPage = reactive({
+    current: 1,
+    size: 10,
+    total: 0,
+  });
+
+  // 缂栬緫鍙傛暟瀵硅瘽妗�
+  const editParamDialogVisible = ref(false);
+  const editParamFormRef = ref(null);
+  const editParamForm = reactive({
+    id: null,
+    processId: null,
+    paramId: null,
+    paramName: "",
+    valueMode: "1",
+    standardValue: null,
+    minValue: null,
+    maxValue: null,
+    sort: 1,
+    isRequired: 0,
+  });
+  const editParamRules = reactive({
+    standardValue: [
+      {
+        required: true,
+        message: "璇疯緭鍏ユ爣鍑嗗��",
+        trigger: "blur",
+        validator: (rule, value, callback) => {
+          if (value === null || value === undefined || value === "") {
+            callback(new Error("璇疯緭鍏ユ爣鍑嗗��"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+    minValue: [
+      {
+        required: true,
+        message: "璇疯緭鍏ユ渶灏忓��",
+        trigger: "blur",
+        validator: (rule, value, callback) => {
+          if (value === null || value === undefined || value === "") {
+            callback(new Error("璇疯緭鍏ユ渶灏忓��"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+    maxValue: [
+      {
+        required: true,
+        message: "璇疯緭鍏ユ渶澶у��",
+        trigger: "blur",
+        validator: (rule, value, callback) => {
+          if (value === null || value === undefined || value === "") {
+            callback(new Error("璇疯緭鍏ユ渶澶у��"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+    sort: [
+      {
+        required: true,
+        message: "璇疯緭鍏ユ帓搴�",
+        trigger: "blur",
+        validator: (rule, value, callback) => {
+          if (value === null || value === undefined || value === "") {
+            callback(new Error("璇疯緭鍏ユ帓搴�"));
+          } else if (isNaN(value) || value < 1) {
+            callback(new Error("鎺掑簭蹇呴』鏄ぇ浜�0鐨勬暣鏁�"));
+          } else {
+            callback();
+          }
+        },
+      },
+    ],
+  });
+
   // 鎷栨嫿鐩稿叧
   const draggedItem = ref(null);
   const draggedRouteId = ref(null);
 
   // 鑾峰彇宸ヨ壓璺嚎鍒楄〃
   const getRouteList = () => {
-    routeList.value = [
-      {
-        id: 1,
-        productModelId: 1,
-        productName: "鏍囧噯鐮屽潡",
-        productModelName: "3.5鍨�",
-        bomId: 1,
-        routeCode: "ROUTE001",
-        routeName: "鏍囧噯鐮屽潡鐢熶骇绾�",
-        routeDesc: "鏍囧噯鐮屽潡鐢熶骇娴佺▼",
-        status: "1",
-        expanded: false,
-        processList: [
-          {
-            id: 1,
-            processCode: "PROC001",
-            processName: "鍘熸枡閰嶆瘮",
-            processDesc: "鍘熸潗鏂欓厤姣斿伐搴�",
-            status: "1",
+    // 瀵煎叆 listPage 鏂规硶
+    import("@/api/productionManagement/processRoute.js").then(({ listPage }) => {
+      listPage({ pageNum: 1, pageSize: 100 })
+        .then(res => {
+          // 澶勭悊杩斿洖鐨勬暟鎹紝鏄犲皠鍒伴〉闈㈤渶瑕佺殑鏍煎紡
+          routeList.value = (res.data?.records || []).map(item => ({
+            id: item.id,
+            productModelId: item.productModelId,
+            productName: item.productName,
+            productModelName: item.model || item.productModelName,
+            bomId: item.bomId,
+            bomNo: item.bomNo,
+            routeCode: item.processRouteCode || item.routeCode,
+            description: item.description || item.description,
+            status: item.status,
             expanded: false,
-            paramList: [
-              {
-                id: 1,
-                parameterCode: "P001",
-                parameterName: "姘存偿姣斾緥",
-                parameterType2: "1",
-                parameterType: "鏁板�兼牸寮�",
-                parameterFormat: "",
-                standardValue: "30",
-                unit: "%",
-              },
-              {
-                id: 2,
-                parameterCode: "P002",
-                parameterName: "鐮傛瘮渚�",
-                parameterType2: "1",
-                parameterType: "鏁板�兼牸寮�",
-                parameterFormat: "",
-                standardValue: "60",
-                unit: "%",
-              },
-            ],
-          },
-          {
-            id: 2,
-            processCode: "PROC002",
-            processName: "鎼呮媽娣峰悎",
-            processDesc: "鎼呮媽娣峰悎宸ュ簭",
-            status: "1",
-            expanded: false,
-            paramList: [
-              {
-                id: 3,
-                parameterCode: "P003",
-                parameterName: "鎼呮媽鏃堕棿",
-                parameterType2: "1",
-                parameterType: "鏁板�兼牸寮�",
-                parameterFormat: "",
-                standardValue: "5",
-                unit: "鍒嗛挓",
-              },
-            ],
-          },
-          {
-            id: 3,
-            processCode: "PROC003",
-            processName: "娴囩瓚鎴愬瀷",
-            processDesc: "娴囩瓚鎴愬瀷宸ュ簭",
-            status: "1",
-            expanded: false,
-            paramList: [],
-          },
-        ],
-      },
-      {
-        id: 2,
-        productModelId: 2,
-        productName: "鏉挎潗",
-        productModelName: "5.0鍨�",
-        bomId: 2,
-        routeCode: "ROUTE002",
-        routeName: "鏉挎潗鐢熶骇绾�",
-        routeDesc: "鏉挎潗鐢熶骇娴佺▼",
-        status: "1",
-        expanded: false,
-        processList: [
-          {
-            id: 4,
-            processCode: "PROC004",
-            processName: "鍒囧壊鍔犲伐",
-            processDesc: "鍒囧壊鍔犲伐宸ュ簭",
-            status: "1",
-            expanded: false,
-            paramList: [
-              {
-                id: 4,
-                parameterCode: "P004",
-                parameterName: "鍒囧壊灏哄",
-                parameterType2: "1",
-                parameterType: "鏂囨湰鏍煎紡",
-                parameterFormat: "",
-                standardValue: "600x200x100",
-                unit: "mm",
-              },
-            ],
-          },
-        ],
-      },
-    ];
+            processList: item.processList || [],
+          }));
+        })
+        .catch(err => {
+          console.error("鑾峰彇宸ヨ壓璺嚎鍒楄〃澶辫触锛�", err);
+          routeList.value = [];
+        });
+    });
   };
 
   // 灞曞紑/鏀惰捣宸ヨ壓璺嚎
@@ -735,9 +919,8 @@
     routeForm.productModelName = "";
     routeForm.bomId = null;
     routeForm.routeCode = "";
-    routeForm.routeName = "";
-    routeForm.routeDesc = "";
-    routeForm.status = "1";
+    routeForm.description = "";
+    routeForm.status = false;
     bomOptions.value = [];
     routeDialogVisible.value = true;
   };
@@ -750,8 +933,7 @@
     routeForm.productModelName = route.productModelName;
     routeForm.bomId = route.bomId;
     routeForm.routeCode = route.routeCode;
-    routeForm.routeName = route.routeName;
-    routeForm.routeDesc = route.routeDesc;
+    routeForm.description = route.description;
     routeForm.status = route.status;
     routeDialogVisible.value = true;
   };
@@ -762,17 +944,52 @@
       cancelButtonText: "鍙栨秷",
       type: "warning",
     }).then(() => {
-      ElMessage.success("鍒犻櫎鎴愬姛");
-      getRouteList();
+      del(route.id)
+        .then(res => {
+          ElMessage.success("鍒犻櫎鎴愬姛");
+          getRouteList();
+        })
+        .catch(err => {
+          ElMessage.error("鍒犻櫎澶辫触");
+        });
     });
   };
 
   const handleRouteSubmit = () => {
     routeFormRef.value.validate(valid => {
       if (valid) {
-        ElMessage.success(isRouteEdit.value ? "缂栬緫鎴愬姛" : "鏂板鎴愬姛");
-        routeDialogVisible.value = false;
-        getRouteList();
+        // 鏋勫缓鎻愪氦鏁版嵁
+        const submitData = {
+          ...routeForm,
+          // 娉ㄦ剰锛欰PI 鏈熸湜鐨勫瓧娈靛悕鍙兘涓庤〃鍗曞瓧娈靛悕涓嶅悓
+          productId: routeForm.productModelId,
+          productModelId: routeForm.productModelId,
+          description: routeForm.description,
+        };
+
+        if (isRouteEdit.value) {
+          // 缂栬緫鎿嶄綔
+          update(submitData)
+            .then(res => {
+              ElMessage.success("缂栬緫鎴愬姛");
+              routeDialogVisible.value = false;
+              getRouteList();
+            })
+            .catch(err => {
+              ElMessage.error("缂栬緫澶辫触");
+            });
+        } else {
+          // 鏂板鎿嶄綔
+          add(submitData)
+            .then(res => {
+              ElMessage.success("鏂板鎴愬姛");
+              routeDialogVisible.value = false;
+              getRouteList();
+            })
+            .catch(err => {
+              ElMessage.error("鏂板澶辫触");
+            });
+        }
       }
     });
   };
@@ -819,8 +1036,15 @@
       cancelButtonText: "鍙栨秷",
       type: "info",
     }).then(() => {
-      route.status = "2";
-      ElMessage.success("鎵瑰噯鎴愬姛");
+      // 璋冪敤淇敼鎺ュ彛锛屽彧淇敼status瀛楁涓烘壒鍑嗙姸鎬�
+      update({ id: route.id, status: true })
+        .then(res => {
+          ElMessage.success("鎵瑰噯鎴愬姛");
+          getRouteList();
+        })
+        .catch(err => {
+          ElMessage.error("鎵瑰噯澶辫触");
+        });
     });
   };
 
@@ -830,8 +1054,15 @@
       cancelButtonText: "鍙栨秷",
       type: "warning",
     }).then(() => {
-      route.status = "1";
-      ElMessage.success("鎾ら攢鎵瑰噯鎴愬姛");
+      // 璋冪敤淇敼鎺ュ彛锛屽彧淇敼status瀛楁涓鸿崏绋跨姸鎬�
+      update({ id: route.id, status: false })
+        .then(res => {
+          ElMessage.success("鎾ら攢鎵瑰噯鎴愬姛");
+          getRouteList();
+        })
+        .catch(err => {
+          ElMessage.error("鎾ら攢鎵瑰噯澶辫触");
+        });
     });
   };
 
@@ -839,62 +1070,35 @@
   const handleSelectProcess = (route, index) => {
     currentRouteId.value = route.id;
     currentRouteIndex.value = index;
-    // 鑾峰彇鍙�夊伐搴忓垪琛紙鍋囨暟鎹級
-    availableProcessList.value = [
-      {
-        id: 1,
-        processCode: "PROC001",
-        processName: "鍘熸枡閰嶆瘮",
-        processDesc: "鍘熸潗鏂欓厤姣斿伐搴�",
-        status: "1",
-        paramCount: 3,
-      },
-      {
-        id: 2,
-        processCode: "PROC002",
-        processName: "鎼呮媽娣峰悎",
-        processDesc: "鎼呮媽娣峰悎宸ュ簭",
-        status: "1",
-        paramCount: 2,
-      },
-      {
-        id: 3,
-        processCode: "PROC003",
-        processName: "娴囩瓚鎴愬瀷",
-        processDesc: "娴囩瓚鎴愬瀷宸ュ簭",
-        status: "1",
-        paramCount: 4,
-      },
-      {
-        id: 4,
-        processCode: "PROC004",
-        processName: "钂稿帇鍏绘姢",
-        processDesc: "钂稿帇鍏绘姢宸ュ簭",
-        status: "0",
-        paramCount: 2,
-      },
-      {
-        id: 5,
-        processCode: "PROC005",
-        processName: "鍒囧壊鍔犲伐",
-        processDesc: "鍒囧壊鍔犲伐宸ュ簭",
-        status: "1",
-        paramCount: 3,
-      },
-    ];
-    filteredProcessList.value = availableProcessList.value;
-    processSearchKeyword.value = "";
-    selectedProcessItem.value = null;
-    selectProcessDialogVisible.value = true;
+    // 鑾峰彇鍙�夊伐搴忓垪琛�
+    getProcessListApi()
+      .then(res => {
+        // 澶勭悊杩斿洖鐨勬暟鎹紝鏄犲皠鍒伴〉闈㈤渶瑕佺殑鏍煎紡
+        availableProcessList.value = (res.data || []).map(item => ({
+          id: item.id,
+          no: item.no || item.no,
+          name: item.name || item.name,
+          remark: item.remark || item.remark,
+          status: item.status,
+          isQuality: item.isQuality,
+        }));
+        filteredProcessList.value = availableProcessList.value;
+        processSearchKeyword.value = "";
+        selectedProcessItem.value = null;
+        selectProcessDialogVisible.value = true;
+      })
+      .catch(() => {
+        ElMessage.error("鑾峰彇宸ュ簭鍒楄〃澶辫触");
+      });
   };
 
   const handleEditProcess = (routeId, process) => {
     currentRouteId.value = routeId;
     isProcessEdit.value = true;
     processForm.id = process.id;
-    processForm.processCode = process.processCode;
-    processForm.processName = process.processName;
-    processForm.processDesc = process.processDesc;
+    processForm.no = process.no;
+    processForm.name = process.name;
+    processForm.remark = process.remark;
     processForm.status = process.status;
     processDialogVisible.value = true;
   };
@@ -927,7 +1131,7 @@
       filteredProcessList.value = availableProcessList.value;
     } else {
       filteredProcessList.value = availableProcessList.value.filter(item =>
-        item.processName.toLowerCase().includes(keyword)
+        item.name.toLowerCase().includes(keyword)
       );
     }
   };
@@ -955,9 +1159,9 @@
     // 娣诲姞宸ュ簭鍒板伐鑹鸿矾绾�
     const newProcess = {
       id: Date.now(),
-      processCode: selectedProcessItem.value.processCode,
-      processName: selectedProcessItem.value.processName,
-      processDesc: selectedProcessItem.value.processDesc,
+      no: selectedProcessItem.value.no,
+      name: selectedProcessItem.value.name,
+      remark: selectedProcessItem.value.remark,
       status: selectedProcessItem.value.status,
       paramList: [],
       expanded: false,
@@ -972,31 +1176,39 @@
   const handleAddParam = (routeId, process) => {
     currentRouteId.value = routeId;
     currentProcessId.value = process.id;
-    isParamEdit.value = false;
-    paramForm.id = null;
-    paramForm.parameterCode = "";
-    paramForm.parameterName = "";
-    paramForm.parameterType2 = "1";
-    paramForm.parameterType = "";
-    paramForm.parameterFormat = "";
-    paramForm.standardValue = "";
-    paramForm.unit = "";
-    paramDialogVisible.value = true;
+    selectedParam.value = null;
+    paramSearchKeyword.value = "";
+    paramPage.current = 1;
+    // 鑾峰彇鍙�夊弬鏁板垪琛�
+    getBaseParamList({
+      paramName: paramSearchKeyword.value,
+      current: paramPage.current,
+      size: paramPage.size,
+    }).then(res => {
+      if (res.code === 200) {
+        filteredParamList.value = res.data?.records || [];
+        paramPage.total = res.data?.total || 0;
+      } else {
+        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+      }
+    });
+    selectParamDialogVisible.value = true;
   };
 
   const handleEditParam = (routeId, process, param) => {
     currentRouteId.value = routeId;
     currentProcessId.value = process.id;
-    isParamEdit.value = true;
-    paramForm.id = param.id;
-    paramForm.parameterCode = param.parameterCode;
-    paramForm.parameterName = param.parameterName;
-    paramForm.parameterType2 = param.parameterType2 || "1";
-    paramForm.parameterType = param.parameterType;
-    paramForm.parameterFormat = param.parameterFormat;
-    paramForm.standardValue = param.standardValue;
-    paramForm.unit = param.unit;
-    paramDialogVisible.value = true;
+    editParamForm.id = param.id;
+    editParamForm.processId = process.id;
+    editParamForm.paramId = param.paramId;
+    editParamForm.paramName = param.parameterName || param.paramName;
+    editParamForm.valueMode = param.parameterType2 || param.valueMode || "1";
+    editParamForm.standardValue = param.standardValue;
+    editParamForm.minValue = param.minValue;
+    editParamForm.maxValue = param.maxValue;
+    editParamForm.sort = param.sort || 1;
+    editParamForm.isRequired = param.isRequired || 0;
+    editParamDialogVisible.value = true;
   };
 
   const handleDeleteParam = (routeId, process, param) => {
@@ -1032,12 +1244,161 @@
 
   const getParamTypeTag = type => {
     const typeMap = {
+      1: "primary",
+      2: "info",
+      3: "warning",
+      4: "success",
       鏁板�兼牸寮�: "primary",
       鏂囨湰鏍煎紡: "info",
       涓嬫媺閫夐」: "warning",
       鏃堕棿鏍煎紡: "success",
     };
     return typeMap[type] || "default";
+  };
+
+  const getParamTypeText = type => {
+    const typeMap = {
+      1: "鏁板�兼牸寮�",
+      2: "鏂囨湰鏍煎紡",
+      3: "涓嬫媺閫夐」",
+      4: "鏃堕棿鏍煎紡",
+      鏁板�兼牸寮�: "鏁板�兼牸寮�",
+      鏂囨湰鏍煎紡: "鏂囨湰鏍煎紡",
+      涓嬫媺閫夐」: "涓嬫媺閫夐」",
+      鏃堕棿鏍煎紡: "鏃堕棿鏍煎紡",
+    };
+    return typeMap[type] || "鏈煡鍙傛暟绫诲瀷";
+  };
+
+  // 閫夋嫨鍙傛暟鐩稿叧鏂规硶
+  const handleParamSearch = () => {
+    // 閲嶇疆鍒嗛〉
+    paramPage.current = 1;
+    // 閲嶆柊鍔犺浇鏁版嵁
+    getBaseParamList({
+      paramName: paramSearchKeyword.value,
+      current: paramPage.current,
+      size: paramPage.size,
+    }).then(res => {
+      if (res.code === 200) {
+        filteredParamList.value = res.data?.records || [];
+        paramPage.total = res.data?.total || 0;
+      } else {
+        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+      }
+    });
+  };
+
+  const handleParamSelect = row => {
+    selectedParam.value = row;
+  };
+
+  // 澶勭悊鍒嗛〉澶у皬鍙樺寲
+  const handleParamSizeChange = size => {
+    paramPage.size = size;
+    getBaseParamList({
+      paramName: paramSearchKeyword.value,
+      current: paramPage.current,
+      size: paramPage.size,
+    }).then(res => {
+      if (res.code === 200) {
+        filteredParamList.value = res.data?.records || [];
+        paramPage.total = res.data?.total || 0;
+      } else {
+        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+      }
+    });
+  };
+
+  // 澶勭悊褰撳墠椤电爜鍙樺寲
+  const handleParamCurrentChange = current => {
+    paramPage.current = current;
+    getBaseParamList({
+      paramName: paramSearchKeyword.value,
+      current: paramPage.current,
+      size: paramPage.size,
+    }).then(res => {
+      if (res.code === 200) {
+        filteredParamList.value = res.data?.records || [];
+        paramPage.total = res.data?.total || 0;
+      } else {
+        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+      }
+    });
+  };
+
+  const handleParamSelectSubmit = () => {
+    if (!selectedParam.value) {
+      ElMessage.warning("璇峰厛閫夋嫨涓�涓弬鏁�");
+      return;
+    }
+
+    // 鎵惧埌瀵瑰簲鐨勫伐鑹鸿矾绾垮拰宸ュ簭
+    const route = routeList.value.find(r => r.id === currentRouteId.value);
+    const process = route?.processList.find(p => p.id === currentProcessId.value);
+
+    if (route && process) {
+      // 妫�鏌ュ弬鏁版槸鍚﹀凡瀛樺湪
+      const exists = process.paramList?.some(
+        p =>
+          p.paramId === selectedParam.value.id ||
+          p.parameterCode === selectedParam.value.paramCode
+      );
+      if (exists) {
+        ElMessage.warning("璇ュ弬鏁板凡瀛樺湪浜庡伐搴忎腑");
+        return;
+      }
+
+      // 娣诲姞宸ュ簭鍒板伐鑹鸿矾绾�
+      const newParam = {
+        id: Date.now(),
+        paramId: selectedParam.value.id,
+        parameterCode: selectedParam.value.paramCode,
+        parameterName: selectedParam.value.paramName,
+        parameterType2: selectedParam.value.valueMode || "1",
+        parameterType: selectedParam.value.paramType,
+        parameterFormat: selectedParam.value.paramFormat,
+        standardValue: selectedParam.value.standardValue,
+        minValue: selectedParam.value.minValue,
+        maxValue: selectedParam.value.maxValue,
+        unit: selectedParam.value.unit,
+        sort: selectedParam.value.sort || 1,
+        isRequired: selectedParam.value.isRequired || 0,
+      };
+
+      if (!process.paramList) {
+        process.paramList = [];
+      }
+
+      process.paramList.push(newParam);
+      ElMessage.success("娣诲姞鍙傛暟鎴愬姛");
+      selectParamDialogVisible.value = false;
+    }
+  };
+
+  const handleEditParamSubmit = () => {
+    editParamFormRef.value.validate(valid => {
+      if (valid) {
+        // 鎵惧埌瀵瑰簲鐨勫伐鑹鸿矾绾裤�佸伐搴忓拰鍙傛暟
+        const route = routeList.value.find(r => r.id === currentRouteId.value);
+        const process = route?.processList.find(
+          p => p.id === currentProcessId.value
+        );
+        const param = process?.paramList.find(p => p.id === editParamForm.id);
+
+        if (param) {
+          // 鏇存柊鍙傛暟淇℃伅
+          param.standardValue = editParamForm.standardValue;
+          param.minValue = editParamForm.minValue;
+          param.maxValue = editParamForm.maxValue;
+          param.sort = editParamForm.sort;
+          param.isRequired = editParamForm.isRequired;
+
+          ElMessage.success("缂栬緫鎴愬姛");
+          editParamDialogVisible.value = false;
+        }
+      }
+    });
   };
 
   // 鎷栨嫿鎺掑簭
@@ -1570,4 +1931,70 @@
       }
     }
   }
+
+  // 閫夋嫨鍙傛暟瀵硅瘽妗嗘牱寮�
+  .param-select-container {
+    display: flex;
+    gap: 20px;
+    height: 450px;
+
+    .param-list-area {
+      // flex: 1;
+      width: 380px;
+      display: flex;
+      flex-direction: column;
+
+      .area-title {
+        font-size: 14px;
+        font-weight: 600;
+        color: #303133;
+        margin-bottom: 12px;
+        padding-bottom: 8px;
+        border-bottom: 1px solid #ebeef5;
+      }
+
+      .search-box {
+        margin-bottom: 12px;
+
+        .el-input {
+          width: 100%;
+        }
+      }
+    }
+
+    .param-detail-area {
+      // width: 380px;
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      background: #f5f7fa;
+      border-radius: 8px;
+      padding: 16px;
+
+      .area-title {
+        font-size: 14px;
+        font-weight: 600;
+        color: #303133;
+        margin-bottom: 16px;
+        padding-bottom: 8px;
+        border-bottom: 1px solid #ebeef5;
+      }
+
+      .param-detail-form {
+        .el-form-item {
+          margin-bottom: 12px;
+
+          .el-form-item__label {
+            color: #606266;
+            font-weight: 500;
+          }
+        }
+
+        .detail-text {
+          color: #303133;
+          font-weight: 500;
+        }
+      }
+    }
+  }
 </style>
diff --git a/src/views/productionManagement/productStructure/index.vue b/src/views/productionManagement/productStructure/index.vue
index 96c0b8d..abf4fd2 100644
--- a/src/views/productionManagement/productStructure/index.vue
+++ b/src/views/productionManagement/productStructure/index.vue
@@ -50,7 +50,7 @@
                       prop="productModelId">
           <el-button type="primary"
                      @click="showProductSelectDialog = true">
-            {{ form.productName || '閫夋嫨浜у搧' }}
+            {{ form.productName || '閫夋嫨浜у搧' }}-{{ form.productModelName }}
           </el-button>
         </el-form-item>
         <el-form-item label="鐗堟湰鍙�"
diff --git a/src/views/productionManagement/productionProcess/index.vue b/src/views/productionManagement/productionProcess/index.vue
index af6bbfa..9994b94 100644
--- a/src/views/productionManagement/productionProcess/index.vue
+++ b/src/views/productionManagement/productionProcess/index.vue
@@ -70,7 +70,7 @@
           <el-button type="primary"
                      size="small"
                      :disabled="!selectedProcess"
-                     @click="handleSelectParam">
+                     @click="openParamDialog">
             <el-icon>
               <Plus />
             </el-icon>閫夋嫨鍙傛暟
@@ -681,6 +681,29 @@
       }
     });
   };
+  const openParamDialog = () => {
+    paramSearchKeyword.value = "";
+    if (!selectedProcess.value) {
+      ElMessage.warning("璇峰厛閫夋嫨涓�涓伐搴�");
+      return;
+    }
+    // 鑾峰彇鍙�夊弬鏁板垪琛�
+    getBaseParamList({
+      paramName: paramSearchKeyword.value,
+      current: paramPage.current,
+      size: paramPage.size,
+    }).then(res => {
+      if (res.code === 200) {
+        filteredParamList.value = res.data?.records || [];
+        paramPage.total = res.data?.total || 0;
+      } else {
+        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+      }
+    });
+    console.log(filteredParamList.value, "鍙�夊弬鏁板垪琛�");
+    selectedParam.value = null;
+    paramDialogVisible.value = true;
+  };
 
   // 鍙傛暟鎿嶄綔
   const handleSelectParam = () => {
diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index 145d3af..e00040b 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -5,35 +5,30 @@
                width="70%"
                @close="closeDia">
       <el-form :model="form"
-               label-width="140px"
-               label-position="top"
+               label-width="100px"
+               label-position="left"
                :rules="rules"
-               ref="formRef">
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗭細" prop="supplier">
-             <el-input v-model="form.supplier" placeholder="璇疯緭鍏�" clearable/>
+               ref="formRef"
+               class="inspection-form">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="渚涘簲鍟嗭細"
+                          prop="supplier">
+              <el-input v-model="form.supplier"
+                        placeholder="璇疯緭鍏�"
+                        clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="浜у搧锛�"
                           prop="productId">
               <el-button type="primary"
                          @click="openProductSelectDialog"
-                         :disabled="operationType === 'edit'">閫夋嫨浜у搧</el-button>
-              <div class="selected-product mt-2"
-                   v-if="form.productName">
-                <el-tag closable
-                        @close="clearProductSelection"
-                        class="mr-2">
-                  {{ form.productName }} - {{ form.model }}
-                </el-tag>
-              </div>
-              <div v-else
-                   class="text-gray-400">璇烽�夋嫨浜у搧</div>
+                         :disabled="operationType === 'edit'"
+                         class="product-select-btn">{{form.productName || "閫夋嫨浜у搧"}}{{form.model?(" - "+form.model):""}}</el-button>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="璇曟牱缂栧彿锛�"
                           prop="sampleCode">
               <el-input v-model="form.sampleCode"
@@ -41,7 +36,7 @@
                         clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="杞︾墝鍙凤細"
                           prop="licensePlateNumber">
               <el-input v-model="form.licensePlateNumber"
@@ -49,10 +44,11 @@
                         clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="妫�娴嬫�ц川锛�"
                           prop="inspectNature">
-              <el-select v-model="form.inspectNature">
+              <el-select v-model="form.inspectNature"
+                         style="width: 100%">
                 <el-option label="鏃ュ父妫�娴�"
                            value="鏃ュ父妫�娴�" />
                 <el-option label="鍏ュ満楠屾敹"
@@ -60,10 +56,11 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="璇曟牱鐘舵�侊細"
                           prop="sampleState">
-              <el-select v-model="form.sampleState">
+              <el-select v-model="form.sampleState"
+                         style="width: 100%">
                 <el-option label="鍥轰綋"
                            value="鍥轰綋" />
                 <el-option label="棰楃矑"
@@ -79,16 +76,14 @@
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="鍗曚綅锛�"
                           prop="unit">
               <el-input v-model="form.unit"
                         disabled />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="鎸囨爣閫夋嫨锛�"
                           prop="testStandardId">
               <el-select v-model="form.testStandardId"
@@ -103,9 +98,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="妫�娴嬪崟浣嶏細"
                           prop="checkCompany">
               <el-input v-model="form.checkCompany"
@@ -113,10 +106,11 @@
                         clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="妫�娴嬬粨鏋滐細"
                           prop="checkResult">
-              <el-select v-model="form.checkResult">
+              <el-select v-model="form.checkResult"
+                         style="width: 100%">
                 <el-option label="鍚堟牸"
                            value="鍚堟牸" />
                 <el-option label="涓嶅悎鏍�"
@@ -124,9 +118,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="妫�楠屽憳锛�"
                           prop="checkName">
               <el-select v-model="form.checkName"
@@ -140,7 +132,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="妫�娴嬫棩鏈燂細"
                           prop="checkTime">
               <el-date-picker v-model="form.checkTime"
@@ -152,7 +144,7 @@
                               style="width: 100%" />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="鍙栨牱鏃ユ湡锛�"
                           prop="sampleTime">
               <el-date-picker v-model="form.sampleTime"
@@ -269,7 +261,9 @@
         { required: false, message: "璇烽�夋嫨璇曟牱鐘舵��", trigger: "change" },
       ],
       sampleCode: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-      licensePlateNumber: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
+      licensePlateNumber: [
+        { required: false, message: "璇疯緭鍏�", trigger: "blur" },
+      ],
       sampleTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
     },
   });
@@ -595,4 +589,163 @@
 </script>
 
 <style scoped>
+  .inspection-form {
+    background-color: #f9f9f9;
+    border-radius: 8px;
+    padding: 20px;
+    margin-bottom: 20px;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  }
+
+  .product-select-btn {
+    width: 100%;
+    text-align: left;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    transition: all 0.3s ease;
+  }
+
+  .product-select-btn:hover {
+    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.3);
+  }
+
+  /* 澧炲姞琛ㄥ崟椤归棿璺� */
+  .el-form-item {
+    margin-bottom: 15px;
+  }
+
+  /* 杈撳叆妗嗗拰閫夋嫨鍣ㄧ殑鎮仠鏁堟灉 */
+  :deep(.el-input__wrapper) {
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-input__wrapper:hover) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  :deep(.el-select) {
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-select:hover .el-input__wrapper) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  /* 鏃ユ湡閫夋嫨鍣ㄧ殑鎮仠鏁堟灉 */
+  :deep(.el-date-picker) {
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-date-picker:hover .el-input__wrapper) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  /* 浼樺寲琛ㄦ牸鏍峰紡 */
+  :deep(.el-table) {
+    border-radius: 8px;
+    overflow: hidden;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-table:hover) {
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+  }
+
+  :deep(.el-table th) {
+    background-color: #f5f7fa;
+    font-weight: 600;
+  }
+
+  :deep(.el-table tr:hover) {
+    background-color: #f0f9ff;
+  }
+
+  /* 琛ㄦ牸杈撳叆妗嗘牱寮� */
+  :deep(.el-table .el-input__wrapper) {
+    box-shadow: none !important;
+  }
+
+  :deep(.el-table .el-input__wrapper:hover) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  /* 浼樺寲瀵硅瘽妗嗗簳閮ㄦ寜閽� */
+  .dialog-footer {
+    display: flex;
+    justify-content: flex-end;
+    gap: 10px;
+    margin-top: 20px;
+  }
+
+  .dialog-footer .el-button {
+    transition: all 0.3s ease;
+    padding: 8px 20px;
+    border-radius: 4px;
+  }
+
+  .dialog-footer .el-button:hover {
+    transform: translateY(-1px);
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+  }
+
+  .dialog-footer .el-button--primary:hover {
+    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4);
+  }
+
+  /* 琛ㄥ崟楠岃瘉鐘舵�佹牱寮� */
+  :deep(.el-form-item__error) {
+    font-size: 12px;
+    color: #f56c6c;
+    margin-top: 4px;
+  }
+
+  :deep(.el-form-item.is-error .el-input__wrapper) {
+    box-shadow: 0 0 0 2px rgba(245, 108, 108, 0.2) !important;
+  }
+
+  :deep(.el-form-item.is-success .el-input__wrapper) {
+    box-shadow: 0 0 0 2px rgba(103, 194, 58, 0.2) !important;
+  }
+
+  /* 鍝嶅簲寮忚璁� */
+  @media screen and (max-width: 1200px) {
+    .el-col {
+      :deep(.el-col) {
+        &[class*="el-col-8"] {
+          flex: 0 0 50%;
+          max-width: 50%;
+        }
+      }
+    }
+  }
+
+  @media screen and (max-width: 768px) {
+    .el-col {
+      :deep(.el-col) {
+        &[class*="el-col-8"] {
+          flex: 0 0 100%;
+          max-width: 100%;
+        }
+      }
+    }
+
+    .inspection-form {
+      padding: 15px;
+    }
+
+    .el-form {
+      label-width: 80px !important;
+    }
+
+    .dialog-footer {
+      flex-direction: column;
+      align-items: stretch;
+    }
+
+    .dialog-footer .el-button {
+      width: 100%;
+    }
+  }
 </style>
diff --git a/src/views/qualityManagement/rawMaterialInspection/index.vue b/src/views/qualityManagement/rawMaterialInspection/index.vue
index b45f050..03f9df4 100644
--- a/src/views/qualityManagement/rawMaterialInspection/index.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/index.vue
@@ -3,327 +3,365 @@
     <div class="search_form">
       <div>
         <span class="search_title">渚涘簲鍟嗭細</span>
-        <el-input
-            v-model="searchForm.supplier"
-            style="width: 240px"
-            placeholder="璇疯緭鍏ヤ緵搴斿晢鎼滅储"
-            @change="handleQuery"
-            clearable
-            :prefix-icon="Search"
-        />
-        <span style="margin-left: 10px" class="search_title">妫�娴嬫棩鏈燂細</span>
-        <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
-                        placeholder="璇烽�夋嫨" clearable @change="changeDaterange"/>
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-        >鎼滅储
-        </el-button
-        >
+        <el-input v-model="searchForm.supplier"
+                  style="width: 240px"
+                  placeholder="璇疯緭鍏ヤ緵搴斿晢鎼滅储"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <span style="margin-left: 10px"
+              class="search_title">妫�娴嬫棩鏈燂細</span>
+        <el-date-picker v-model="searchForm.entryDate"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="daterange"
+                        placeholder="璇烽�夋嫨"
+                        clearable
+                        @change="changeDaterange" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储
+        </el-button>
       </div>
       <div>
-        <el-button type="primary" @click="openForm('add')">鏂板</el-button>
+        <el-button type="primary"
+                   @click="openForm('add')">鏂板</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
-        <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+        <el-button type="danger"
+                   plain
+                   @click="handleDelete">鍒犻櫎</el-button>
       </div>
     </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>
+      <PIMTable rowKey="id"
+                :column="tableColumn"
+                :tableData="tableData"
+                :page="page"
+                :isSelection="true"
+                @selection-change="handleSelectionChange"
+                :tableLoading="tableLoading"
+                @pagination="pagination"
+                :total="page.total"></PIMTable>
     </div>
-    <InspectionFormDia ref="inspectionFormDia" @close="handleQuery"></InspectionFormDia>
-    <FormDia ref="formDia" @close="handleQuery"></FormDia>
-    <files-dia ref="filesDia" @close="handleQuery"></files-dia>
-    <el-dialog v-model="dialogFormVisible" title="缂栬緫妫�楠屽憳" width="30%"
+    <InspectionFormDia ref="inspectionFormDia"
+                       @close="handleQuery"></InspectionFormDia>
+    <FormDia ref="formDia"
+             @close="handleQuery"></FormDia>
+    <files-dia ref="filesDia"
+               @close="handleQuery"></files-dia>
+    <el-dialog v-model="dialogFormVisible"
+               title="缂栬緫妫�楠屽憳"
+               width="30%"
                @close="closeDia">
-      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
-        <el-form-item label="妫�楠屽憳锛�" prop="checkName">
-          <el-select v-model="form.checkName" placeholder="璇烽�夋嫨" clearable>
-            <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName"
-                       :value="item.nickName"/>
+      <el-form :model="form"
+               label-width="140px"
+               label-position="top"
+               :rules="rules"
+               ref="formRef">
+        <el-form-item label="妫�楠屽憳锛�"
+                      prop="checkName">
+          <el-select v-model="form.checkName"
+                     placeholder="璇烽�夋嫨"
+                     clearable>
+            <el-option v-for="item in userList"
+                       :key="item.nickName"
+                       :label="item.nickName"
+                       :value="item.nickName" />
           </el-select>
         </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary" @click="submitForm">纭</el-button>
+          <el-button type="primary"
+                     @click="submitForm">纭</el-button>
           <el-button @click="closeDia">鍙栨秷</el-button>
         </div>
       </template>
     </el-dialog>
-
   </div>
 </template>
 
 <script setup>
-import {Search} from "@element-plus/icons-vue";
-import {onMounted, ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue";
-import InspectionFormDia from "@/views/qualityManagement/rawMaterialInspection/components/inspectionFormDia.vue";
-import FormDia from "@/views/qualityManagement/rawMaterialInspection/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import {
-  downloadQualityInspect,
-  qualityInspectDel,
-  qualityInspectListPage, qualityInspectUpdate,
-  submitQualityInspect
-} from "@/api/qualityManagement/rawMaterialInspection.js";
-import FilesDia from "@/views/qualityManagement/rawMaterialInspection/components/filesDia.vue";
-import dayjs from "dayjs";
-import {userListNoPage} from "@/api/system/user.js";
-import useUserStore from "@/store/modules/user";
+  import { Search } from "@element-plus/icons-vue";
+  import {
+    onMounted,
+    ref,
+    reactive,
+    toRefs,
+    getCurrentInstance,
+    nextTick,
+  } from "vue";
+  import InspectionFormDia from "@/views/qualityManagement/rawMaterialInspection/components/inspectionFormDia.vue";
+  import FormDia from "@/views/qualityManagement/rawMaterialInspection/components/formDia.vue";
+  import { ElMessageBox } from "element-plus";
+  import {
+    downloadQualityInspect,
+    qualityInspectDel,
+    qualityInspectListPage,
+    qualityInspectUpdate,
+    submitQualityInspect,
+  } from "@/api/qualityManagement/rawMaterialInspection.js";
+  import FilesDia from "@/views/qualityManagement/rawMaterialInspection/components/filesDia.vue";
+  import dayjs from "dayjs";
+  import { userListNoPage } from "@/api/system/user.js";
+  import useUserStore from "@/store/modules/user";
 
-const data = reactive({
-  searchForm: {
-    supplier: "",
-    entryDate: undefined, // 褰曞叆鏃ユ湡
-    entryDateStart: undefined,
-    entryDateEnd: undefined,
-  },
-  rules: {
-    checkName: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
-  },
-});
-const {searchForm, rules} = toRefs(data);
-const tableColumn = ref([
-  {
-    label: "妫�娴嬫棩鏈�",
-    prop: "checkTime",
-    width: 120
-  },
-  {
-    label: "渚涘簲鍟�",
-    prop: "supplier",
-    width: 130
-  },
-  {
-    label: "妫�楠屽憳",
-    prop: "checkName",
-  },
-  {
-    label: "浜у搧鍚嶇О",
-    prop: "productName",
-  },
-  {
-    label: "瑙勬牸鍨嬪彿",
-    prop: "model",
-  },
-  {
-    label: "鍗曚綅",
-    prop: "unit",
-     width: 80
-  },
-  {
-    label: "鏁伴噺",
-    prop: "quantity",
-    width: 120
-  },
-  {
-    label: "璇曟牱缂栧彿",
-    prop: "sampleCode",
-  },
-  {
-    label: "璇曟牱鐘舵��",
-    prop: "sampleState",
-  },
-  {
-    label: "妫�娴嬫�ц川",
-    prop: "inspectNature",
-  },
-   {
-    label: "鍙栨牱鏃ユ湡",
-    prop: "sampleTime",
-  },
-  {
-    label: "妫�娴嬪崟浣�",
-    prop: "checkCompany",
-  },
-  {
-    label: "妫�娴嬬粨鏋�",
-    prop: "checkResult",
-    dataType: "tag",
-    formatType: (params) => {
-      if (params === '涓嶅悎鏍�') {
-        return "danger";
-      } else if (params === '鍚堟牸') {
-        return "success";
-      } else {
-        return null;
-      }
+  const data = reactive({
+    searchForm: {
+      supplier: "",
+      entryDate: undefined, // 褰曞叆鏃ユ湡
+      entryDateStart: undefined,
+      entryDateEnd: undefined,
     },
-  },
-  {
-    label: "鎻愪氦鐘舵��",
-    prop: "inspectState",
-    formatData: (params) => {
-      if (params) {
-        return "宸叉彁浜�";
-      } else {
-        return "鏈彁浜�";
-      }
+    rules: {
+      checkName: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
     },
-  },
-  {
-    dataType: "action",
-    label: "鎿嶄綔",
-    align: "center",
-    fixed: "right",
-    width: 280,
-    operation: [
-      {
-        name: "缂栬緫",
-        type: "text",
-        clickFun: (row) => {
-          openForm("edit", row);
-        },
-				disabled: (row) => {
-					// 宸叉彁浜ゅ垯绂佺敤
-					if (row.inspectState == 1) return true;
-					// 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳界紪杈�
-					if (row.checkName) {
-						return row.checkName !== userStore.nickName;
-					}
-					return false;
-				}
+  });
+  const { searchForm, rules } = toRefs(data);
+  const tableColumn = ref([
+    {
+      label: "妫�娴嬫棩鏈�",
+      prop: "checkTime",
+      width: 120,
+    },
+    {
+      label: "渚涘簲鍟�",
+      prop: "supplier",
+      width: 130,
+    },
+    {
+      label: "妫�楠屽憳",
+      prop: "checkName",
+    },
+    {
+      label: "浜у搧鍚嶇О",
+      prop: "productName",
+      dataType: "tag",
+    },
+    {
+      label: "瑙勬牸鍨嬪彿",
+      prop: "model",
+    },
+    {
+      label: "鍗曚綅",
+      prop: "unit",
+      width: 80,
+    },
+    {
+      label: "鏁伴噺",
+      prop: "quantity",
+      width: 120,
+    },
+    {
+      label: "璇曟牱缂栧彿",
+      prop: "sampleCode",
+    },
+    {
+      label: "璇曟牱鐘舵��",
+      prop: "sampleState",
+    },
+    {
+      label: "妫�娴嬫�ц川",
+      prop: "inspectNature",
+    },
+    {
+      label: "鍙栨牱鏃ユ湡",
+      prop: "sampleTime",
+    },
+    {
+      label: "妫�娴嬪崟浣�",
+      prop: "checkCompany",
+    },
+    {
+      label: "妫�娴嬬粨鏋�",
+      prop: "checkResult",
+      dataType: "tag",
+      formatType: params => {
+        if (params === "涓嶅悎鏍�") {
+          return "danger";
+        } else if (params === "鍚堟牸") {
+          return "success";
+        } else {
+          return null;
+        }
       },
-      {
-        name: "闄勪欢",
-        type: "text",
-        clickFun: (row) => {
-          openFilesFormDia(row);
-        },
+    },
+    {
+      label: "鎻愪氦鐘舵��",
+      prop: "inspectState",
+      dataType: "tag",
+      formatType: params => {
+        if (params) {
+          return "success";
+        } else {
+          return "info";
+        }
       },
-      {
-        name: "鎻愪氦",
-        type: "text",
-        clickFun: (row) => {
-          submit(row.id);
-        },
-				disabled: (row) => {
-					// 宸叉彁浜ゅ垯绂佺敤
-					if (row.inspectState == 1) return true;
-					// 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
-					if (row.checkName) {
-						return row.checkName !== userStore.nickName;
-					}
-					return false;
-				}
+      formatData: params => {
+        if (params) {
+          return "宸叉彁浜�";
+        } else {
+          return "鏈彁浜�";
+        }
       },
-      {
-        name: "鍒嗛厤妫�楠屽憳",
-        type: "text",
-        clickFun: (row) => {
-          if (!row.checkName) {
-            open(row)
-          } else {
-            proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
-          }
+    },
+    {
+      dataType: "action",
+      label: "鎿嶄綔",
+      align: "center",
+      fixed: "right",
+      width: 280,
+      operation: [
+        {
+          name: "缂栬緫",
+          type: "text",
+          clickFun: row => {
+            openForm("edit", row);
+          },
+          disabled: row => {
+            // 宸叉彁浜ゅ垯绂佺敤
+            if (row.inspectState == 1) return true;
+            // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳界紪杈�
+            if (row.checkName) {
+              return row.checkName !== userStore.nickName;
+            }
+            return false;
+          },
         },
-				disabled: (row) => {
-					return row.inspectState == 1 || row.checkName;
-				}
-      },
-      {
-        name: "涓嬭浇",
-        type: "text",
-        clickFun: (row) => {
-          downLoadFile(row);
+        {
+          name: "闄勪欢",
+          type: "text",
+          clickFun: row => {
+            openFilesFormDia(row);
+          },
         },
-      },
-    ],
-  },
-]);
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-const userList = ref([]);
-const dialogFormVisible = ref(false);
-const form = ref({
-  checkName: ""
-});
-const page = reactive({
-  current: 1,
-  size: 100,
-  total: 0
-});
-const currentRow = ref(null)
-const formDia = ref()
-const filesDia = ref()
-const inspectionFormDia = ref()
-const {proxy} = getCurrentInstance()
-const userStore = useUserStore()
-const changeDaterange = (value) => {
-  searchForm.value.entryDateStart = undefined;
-  searchForm.value.entryDateEnd = undefined;
-  if (value) {
-    searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
-    searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
-  }
-  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};
-  params.entryDate = undefined
-  qualityInspectListPage({...params, inspectType: 0}).then(res => {
-    tableLoading.value = false;
-    tableData.value = res.data.records
-    page.total = res.data.total;
-  }).catch(err => {
-    tableLoading.value = false;
-  })
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  selectedRows.value = selection;
-};
+        {
+          name: "鎻愪氦",
+          type: "text",
+          clickFun: row => {
+            submit(row.id);
+          },
+          disabled: row => {
+            // 宸叉彁浜ゅ垯绂佺敤
+            if (row.inspectState == 1) return true;
+            // 濡傛灉妫�楠屽憳鏈夊�硷紝鍙湁褰撳墠鐧诲綍鐢ㄦ埛鑳芥彁浜�
+            if (row.checkName) {
+              return row.checkName !== userStore.nickName;
+            }
+            return false;
+          },
+        },
+        {
+          name: "鍒嗛厤妫�楠屽憳",
+          type: "text",
+          clickFun: row => {
+            if (!row.checkName) {
+              open(row);
+            } else {
+              proxy.$modal.msgError("妫�楠屽憳宸插瓨鍦�");
+            }
+          },
+          disabled: row => {
+            return row.inspectState == 1 || row.checkName;
+          },
+        },
+        {
+          name: "涓嬭浇",
+          type: "text",
+          clickFun: row => {
+            downLoadFile(row);
+          },
+        },
+      ],
+    },
+  ]);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  const userList = ref([]);
+  const dialogFormVisible = ref(false);
+  const form = ref({
+    checkName: "",
+  });
+  const page = reactive({
+    current: 1,
+    size: 100,
+    total: 0,
+  });
+  const currentRow = ref(null);
+  const formDia = ref();
+  const filesDia = ref();
+  const inspectionFormDia = ref();
+  const { proxy } = getCurrentInstance();
+  const userStore = useUserStore();
+  const changeDaterange = value => {
+    searchForm.value.entryDateStart = undefined;
+    searchForm.value.entryDateEnd = undefined;
+    if (value) {
+      searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+      searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+    }
+    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 };
+    params.entryDate = undefined;
+    qualityInspectListPage({ ...params, inspectType: 0 })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        page.total = res.data.total;
+      })
+      .catch(err => {
+        tableLoading.value = false;
+      });
+  };
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection;
+  };
 
-// 鎵撳紑寮规
-const openForm = (type, row) => {
-  nextTick(() => {
-    formDia.value?.openDialog(type, row)
-  })
-};
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (type, row) => {
-  nextTick(() => {
-    filesDia.value?.openDialog(type, row)
-  })
-};
+  // 鎵撳紑寮规
+  const openForm = (type, row) => {
+    nextTick(() => {
+      formDia.value?.openDialog(type, row);
+    });
+  };
+  // 鎵撳紑闄勪欢寮规
+  const openFilesFormDia = (type, row) => {
+    nextTick(() => {
+      filesDia.value?.openDialog(type, row);
+    });
+  };
 
-// 鍒犻櫎
-const handleDelete = () => {
-  let ids = [];
-  if (selectedRows.value.length > 0) {
-    ids = selectedRows.value.map((item) => item.id);
-  } else {
-    proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-    return;
-  }
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  // 鍒犻櫎
+  const handleDelete = () => {
+    let ids = [];
+    if (selectedRows.value.length > 0) {
+      ids = selectedRows.value.map(item => item.id);
+    } else {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
-        qualityInspectDel(ids).then((res) => {
+        qualityInspectDel(ids).then(res => {
           proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
           getList();
         });
@@ -331,79 +369,345 @@
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  };
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
-        proxy.download("/quality/qualityInspect/export", {inspectType: 0}, "鍘熸潗鏂欐楠�.xlsx");
+        proxy.download(
+          "/quality/qualityInspect/export",
+          { inspectType: 0 },
+          "鍘熸潗鏂欐楠�.xlsx"
+        );
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-// 鎻愪环
-const submit = async (id) => {
-  const res = await submitQualityInspect({id: id})
-  if (res.code === 200) {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    getList();
-  }
-}
-
-// 鍏抽棴寮规
-const closeDia = () => {
-  proxy.resetForm("formRef");
-  dialogFormVisible.value = false;
-};
-
-const submitForm = () => {
-  if (currentRow.value) {
-    const data = {
-      ...form.value,
-      id: currentRow.value.id
-    }
-    qualityInspectUpdate(data).then(res => {
+  // 鎻愪环
+  const submit = async id => {
+    const res = await submitQualityInspect({ id: id });
+    if (res.code === 200) {
       proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-      closeDia();
       getList();
-    })
-  }
-};
+    }
+  };
 
-const open = async (row) => {
-  let userLists = await userListNoPage();
-  userList.value = userLists.data;
-  currentRow.value = row
-  dialogFormVisible.value = true
-}
+  // 鍏抽棴寮规
+  const closeDia = () => {
+    proxy.resetForm("formRef");
+    dialogFormVisible.value = false;
+  };
 
-const downLoadFile = (row) => {
-  downloadQualityInspect({ id: row.id }).then((blobData) => {
-    const blob = new Blob([blobData], {
-      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
-    })
-    const downloadUrl = window.URL.createObjectURL(blob)
+  const submitForm = () => {
+    if (currentRow.value) {
+      const data = {
+        ...form.value,
+        id: currentRow.value.id,
+      };
+      qualityInspectUpdate(data).then(res => {
+        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+        closeDia();
+        getList();
+      });
+    }
+  };
 
-    const link = document.createElement('a')
-    link.href = downloadUrl
-    link.download = '鍘熸潗鏂欐楠屾姤鍛�.docx'
-    document.body.appendChild(link)
-    link.click()
+  const open = async row => {
+    let userLists = await userListNoPage();
+    userList.value = userLists.data;
+    currentRow.value = row;
+    dialogFormVisible.value = true;
+  };
 
-    document.body.removeChild(link)
-    window.URL.revokeObjectURL(downloadUrl)
-  })
-};
+  const downLoadFile = row => {
+    downloadQualityInspect({ id: row.id }).then(blobData => {
+      const blob = new Blob([blobData], {
+        type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+      });
+      const downloadUrl = window.URL.createObjectURL(blob);
 
-onMounted(() => {
-  getList();
-});
+      const link = document.createElement("a");
+      link.href = downloadUrl;
+      link.download = "鍘熸潗鏂欐楠屾姤鍛�.docx";
+      document.body.appendChild(link);
+      link.click();
+
+      document.body.removeChild(link);
+      window.URL.revokeObjectURL(downloadUrl);
+    });
+  };
+
+  onMounted(() => {
+    getList();
+  });
 </script>
 
-<style scoped></style>
+<style scoped>
+  .app-container {
+    padding: 20px;
+    background-color: #f5f7fa;
+    min-height: 100vh;
+  }
+
+  .search_form {
+    background-color: #fff;
+    border-radius: 8px;
+    padding: 20px;
+    margin-bottom: 20px;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    flex-wrap: wrap;
+    gap: 15px;
+  }
+
+  .search_form > div {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+    flex-wrap: wrap;
+  }
+
+  .search_title {
+    font-size: 14px;
+    color: #303133;
+    font-weight: 500;
+  }
+
+  .table_list {
+    background-color: #fff;
+    border-radius: 8px;
+    padding: 20px;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+  }
+
+  /* 琛ㄦ牸鏍峰紡浼樺寲 */
+  :deep(.el-table) {
+    border-radius: 8px;
+    overflow: hidden;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-table:hover) {
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+  }
+
+  :deep(.el-table th) {
+    background-color: #f5f7fa;
+    font-weight: 600;
+    color: #303133;
+    border-bottom: 2px solid #e4e7ed;
+  }
+
+  :deep(.el-table td) {
+    border-bottom: 1px solid #ebeef5;
+  }
+
+  :deep(.el-table tr:hover) {
+    background-color: #f0f9ff;
+  }
+
+  :deep(.el-table .el-table__row) {
+    transition: background-color 0.3s ease;
+  }
+
+  /* 鎸夐挳鏍峰紡浼樺寲 */
+  .el-button {
+    transition: all 0.3s ease;
+    border-radius: 4px;
+    font-weight: 500;
+  }
+
+  .el-button:hover {
+    transform: translateY(-1px);
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+  }
+
+  .el-button--primary:hover {
+    box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4);
+  }
+
+  .el-button--danger:hover {
+    box-shadow: 0 2px 8px rgba(245, 108, 108, 0.4);
+  }
+
+  /* 杈撳叆妗嗘牱寮忎紭鍖� */
+  :deep(.el-input__wrapper) {
+    transition: all 0.3s ease;
+    border-radius: 4px;
+  }
+
+  :deep(.el-input__wrapper:hover) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  :deep(.el-input__wrapper.is-focus) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.4) !important;
+  }
+
+  /* 鏃ユ湡閫夋嫨鍣ㄦ牱寮忎紭鍖� */
+  :deep(.el-date-editor) {
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-date-editor:hover .el-input__wrapper) {
+    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2) !important;
+  }
+
+  /* 瀵硅瘽妗嗘牱寮忎紭鍖� */
+  :deep(.el-dialog) {
+    border-radius: 8px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+  }
+
+  :deep(.el-dialog__header) {
+    background-color: #f5f7fa;
+    border-bottom: 1px solid #e4e7ed;
+    padding: 15px 20px;
+    margin: 0;
+  }
+
+  :deep(.el-dialog__title) {
+    font-size: 16px;
+    font-weight: 600;
+    color: #303133;
+  }
+
+  :deep(.el-dialog__body) {
+    padding: 20px;
+  }
+
+  :deep(.el-dialog__footer) {
+    padding: 15px 20px;
+    border-top: 1px solid #e4e7ed;
+  }
+
+  .dialog-footer {
+    display: flex;
+    justify-content: flex-end;
+    gap: 10px;
+  }
+
+  /* 琛ㄥ崟鏍峰紡浼樺寲 */
+  :deep(.el-form-item__label) {
+    font-weight: 500;
+    color: #606266;
+  }
+
+  :deep(.el-select) {
+    width: 100%;
+  }
+
+  /* 鍒嗛〉鏍峰紡浼樺寲 */
+  :deep(.el-pagination) {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-pagination button) {
+    border-radius: 4px;
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-pagination button:hover) {
+    transform: translateY(-1px);
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  }
+
+  /* 鏍囩鏍峰紡浼樺寲 */
+  :deep(.el-tag) {
+    border-radius: 4px;
+    font-weight: 500;
+  }
+
+  :deep(.el-tag--success) {
+    background-color: #f0f9ff;
+    border-color: #b3d8ff;
+    color: #409eff;
+  }
+
+  :deep(.el-tag--danger) {
+    background-color: #fef0f0;
+    border-color: #fbc4c4;
+    color: #f56c6c;
+  }
+
+  /* 鎿嶄綔鎸夐挳鏍峰紡 */
+  :deep(.el-button--text) {
+    padding: 0 8px;
+    font-weight: 500;
+    transition: all 0.3s ease;
+  }
+
+  :deep(.el-button--text:hover) {
+    transform: translateY(-1px);
+  }
+
+  /* 鍝嶅簲寮忚璁� */
+  @media screen and (max-width: 1200px) {
+    .search_form {
+      flex-direction: column;
+      align-items: stretch;
+    }
+
+    .search_form > div {
+      width: 100%;
+      justify-content: space-between;
+    }
+
+    .search_form > div:first-child {
+      flex-wrap: wrap;
+    }
+
+    .search_title {
+      width: 100%;
+      margin-bottom: 8px;
+    }
+  }
+
+  @media screen and (max-width: 768px) {
+    .app-container {
+      padding: 10px;
+    }
+
+    .search_form {
+      padding: 15px;
+    }
+
+    .table_list {
+      padding: 15px;
+    }
+
+    .search_form > div {
+      flex-direction: column;
+      align-items: stretch;
+    }
+
+    .search_form > div .el-input,
+    .search_form > div .el-date-picker {
+      width: 100% !important;
+    }
+
+    .search_form > div .el-button {
+      width: 100%;
+      margin-top: 10px;
+    }
+
+    :deep(.el-dialog) {
+      width: 90% !important;
+    }
+
+    :deep(.el-table) {
+      font-size: 12px;
+    }
+  }
+</style>

--
Gitblit v1.9.3