From f198c3ce7055e0031605e9620beac5af1fa3d166 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 25 五月 2026 15:53:41 +0800
Subject: [PATCH] “产品规格”改成“规格型号”

---
 src/views/inventoryManagement/dispatchLog/Record.vue            | 1427 +++++++++---------
 src/views/financialManagement/receivable/salesOut.vue           |  257 +-
 src/views/qualityManagement/nearExpiryReturn/index.vue          |  628 ++++---
 src/views/financialManagement/payable/purchaseIn.vue            |    2 
 src/views/productionManagement/workOrder/index.vue              |    2 
 src/views/procurementManagement/procurementPlan/index.vue       | 1179 +++++++-------
 src/views/productionManagement/productionTraceability/index.vue |    2 
 src/views/productionPlan/productionPlan/index.vue               |   18 
 src/views/inventoryManagement/stockManagement/Record.vue        |  618 +++----
 src/views/inventoryManagement/receiptManagement/Record.vue      |  595 ++++---
 src/views/productionManagement/workOrderManagement/index.vue    |    2 
 11 files changed, 2,448 insertions(+), 2,282 deletions(-)

diff --git a/src/views/financialManagement/payable/purchaseIn.vue b/src/views/financialManagement/payable/purchaseIn.vue
index fcb768f..532bcb4 100644
--- a/src/views/financialManagement/payable/purchaseIn.vue
+++ b/src/views/financialManagement/payable/purchaseIn.vue
@@ -98,7 +98,7 @@
       slot: "inboundDate",
     },
     { label: "浜у搧鍚嶇О", prop: "productName", minWidth: "140" },
-    { label: "浜у搧瑙勬牸", prop: "specificationModel", minWidth: "140" },
+    { label: "瑙勬牸鍨嬪彿", prop: "specificationModel", minWidth: "140" },
     {
       label: "閲戦",
       prop: "inboundAmount",
diff --git a/src/views/financialManagement/receivable/salesOut.vue b/src/views/financialManagement/receivable/salesOut.vue
index 297a82c..0e24b37 100644
--- a/src/views/financialManagement/receivable/salesOut.vue
+++ b/src/views/financialManagement/receivable/salesOut.vue
@@ -1,27 +1,33 @@
 <template>
-<!-- 閿�鍞嚭搴� -->
+  <!-- 閿�鍞嚭搴� -->
   <div class="app-container">
-    <el-form :model="filters" :inline="true">
+    <el-form :model="filters"
+             :inline="true">
       <el-form-item label="鍑哄簱鍗曞彿:">
-        <el-input v-model="filters.outboundBatches" placeholder="璇疯緭鍏ュ嚭搴撳崟鍙�" clearable style="width: 200px;" />
+        <el-input v-model="filters.outboundBatches"
+                  placeholder="璇疯緭鍏ュ嚭搴撳崟鍙�"
+                  clearable
+                  style="width: 200px;" />
       </el-form-item>
       <el-form-item label="瀹㈡埛鍚嶇О:">
-        <el-input v-model="filters.customerName" placeholder="璇疯緭鍏ュ鎴峰悕绉�" clearable style="width: 200px;" />
+        <el-input v-model="filters.customerName"
+                  placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+                  clearable
+                  style="width: 200px;" />
       </el-form-item>
       <el-form-item label="鍑哄簱鏃ユ湡:">
-        <el-date-picker
-          v-model="filters.dateRange"
-          value-format="YYYY-MM-DD"
-          format="YYYY-MM-DD"
-          type="daterange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-          clearable
-        />
+        <el-date-picker v-model="filters.dateRange"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="daterange"
+                        range-separator="鑷�"
+                        start-placeholder="寮�濮嬫棩鏈�"
+                        end-placeholder="缁撴潫鏃ユ湡"
+                        clearable />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" @click="onSearch">鎼滅储</el-button>
+        <el-button type="primary"
+                   @click="onSearch">鎼滅储</el-button>
         <el-button @click="resetFilters">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
@@ -29,141 +35,146 @@
       <div class="actions">
         <div></div>
         <div>
-          <el-button @click="handleOut" icon="Download">瀵煎嚭</el-button>
+          <el-button @click="handleOut"
+                     icon="Download">瀵煎嚭</el-button>
         </div>
       </div>
-      <PIMTable
-        rowKey="id"
-        :column="columns"
-        :tableData="dataList"
-        :tableLoading="tableLoading"
-        :page="{
+      <PIMTable rowKey="id"
+                :column="columns"
+                :tableData="dataList"
+                :tableLoading="tableLoading"
+                :page="{
           current: pagination.currentPage,
           size: pagination.pageSize,
           total: pagination.total,
         }"
-        @pagination="changePage"
-      />
+                @pagination="changePage" />
     </div>
   </div>
 </template>
 
 <script setup>
-import { ref, reactive, onMounted, getCurrentInstance } from "vue";
-import { ElMessage } from "element-plus";
-import { listPageAccountSales } from "@/api/financialManagement/accountSales";
+  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
+  import { ElMessage } from "element-plus";
+  import { listPageAccountSales } from "@/api/financialManagement/accountSales";
 
-defineOptions({
-  name: "閿�鍞嚭搴�",
-});
+  defineOptions({
+    name: "閿�鍞嚭搴�",
+  });
 
-const { proxy } = getCurrentInstance();
+  const { proxy } = getCurrentInstance();
 
-const filters = reactive({
-  outboundBatches: "",
-  customerName: "",
-  dateRange: [],
-});
+  const filters = reactive({
+    outboundBatches: "",
+    customerName: "",
+    dateRange: [],
+  });
 
-const pagination = reactive({
-  currentPage: 1,
-  pageSize: 10,
-  total: 0,
-});
+  const pagination = reactive({
+    currentPage: 1,
+    pageSize: 10,
+    total: 0,
+  });
 
-const columns = [
-  { label: "鍑哄簱鍗曞彿", prop: "outboundBatches", minWidth: "150" },
-  { label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: "180" },
-  { label: "鍑哄簱鏃ユ湡", prop: "shippingDate", width: "170" },
-  { label: "浜у搧鍚嶇О", prop: "productName", minWidth: "140" },
-  { label: "浜у搧瑙勬牸", prop: "specificationModel", minWidth: "140" },
-  {
-    label: "閲戦",
-    prop: "outboundAmount",
-    minWidth: "120",
-    align: "right",
-    formatData: (val) => (val === null || val === undefined || val === "" ? "" : Number(val).toLocaleString("zh-CN", { minimumFractionDigits: 2, maximumFractionDigits: 2 })),
-  },
-  { label: "鍙戣揣缂栧彿", prop: "shippingNo", minWidth: "140" },
-  { label: "閿�鍞鍗曞彿", prop: "salesContractNo", minWidth: "150" },
-];
+  const columns = [
+    { label: "鍑哄簱鍗曞彿", prop: "outboundBatches", minWidth: "150" },
+    { label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: "180" },
+    { label: "鍑哄簱鏃ユ湡", prop: "shippingDate", width: "170" },
+    { label: "浜у搧鍚嶇О", prop: "productName", minWidth: "140" },
+    { label: "瑙勬牸鍨嬪彿", prop: "specificationModel", minWidth: "140" },
+    {
+      label: "閲戦",
+      prop: "outboundAmount",
+      minWidth: "120",
+      align: "right",
+      formatData: val =>
+        val === null || val === undefined || val === ""
+          ? ""
+          : Number(val).toLocaleString("zh-CN", {
+              minimumFractionDigits: 2,
+              maximumFractionDigits: 2,
+            }),
+    },
+    { label: "鍙戣揣缂栧彿", prop: "shippingNo", minWidth: "140" },
+    { label: "閿�鍞鍗曞彿", prop: "salesContractNo", minWidth: "150" },
+  ];
 
-const dataList = ref([]);
-const tableLoading = ref(false);
+  const dataList = ref([]);
+  const tableLoading = ref(false);
 
-function buildFilterParams() {
-  const params = {
-    outboundBatches: filters.outboundBatches || undefined,
-    customerName: filters.customerName || undefined,
-  };
-  if (filters.dateRange && filters.dateRange.length === 2) {
-    params.startDate = filters.dateRange[0];
-    params.endDate = filters.dateRange[1];
+  function buildFilterParams() {
+    const params = {
+      outboundBatches: filters.outboundBatches || undefined,
+      customerName: filters.customerName || undefined,
+    };
+    if (filters.dateRange && filters.dateRange.length === 2) {
+      params.startDate = filters.dateRange[0];
+      params.endDate = filters.dateRange[1];
+    }
+    return params;
   }
-  return params;
-}
 
-const onSearch = () => {
-  pagination.currentPage = 1;
-  getTableData();
-};
+  const onSearch = () => {
+    pagination.currentPage = 1;
+    getTableData();
+  };
 
-const getTableData = () => {
-  tableLoading.value = true;
-  listPageAccountSales({
-    ...buildFilterParams(),
-    current: pagination.currentPage,
-    size: pagination.pageSize,
-  })
-    .then((res) => {
-      const ok = res.code === 200 || res.code === 0;
-      if (ok && res.data) {
-        pagination.total = res.data.total ?? 0;
-        dataList.value = res.data.records ?? [];
-      } else {
-        ElMessage.error(res.msg || "鏌ヨ澶辫触");
+  const getTableData = () => {
+    tableLoading.value = true;
+    listPageAccountSales({
+      ...buildFilterParams(),
+      current: pagination.currentPage,
+      size: pagination.pageSize,
+    })
+      .then(res => {
+        const ok = res.code === 200 || res.code === 0;
+        if (ok && res.data) {
+          pagination.total = res.data.total ?? 0;
+          dataList.value = res.data.records ?? [];
+        } else {
+          ElMessage.error(res.msg || "鏌ヨ澶辫触");
+          dataList.value = [];
+        }
+      })
+      .catch(() => {
         dataList.value = [];
-      }
-    })
-    .catch(() => {
-      dataList.value = [];
-    })
-    .finally(() => {
-      tableLoading.value = false;
-    });
-};
+      })
+      .finally(() => {
+        tableLoading.value = false;
+      });
+  };
 
-const resetFilters = () => {
-  filters.outboundBatches = "";
-  filters.customerName = "";
-  filters.dateRange = [];
-  pagination.currentPage = 1;
-  getTableData();
-};
+  const resetFilters = () => {
+    filters.outboundBatches = "";
+    filters.customerName = "";
+    filters.dateRange = [];
+    pagination.currentPage = 1;
+    getTableData();
+  };
 
-const changePage = ({ page, limit }) => {
-  pagination.currentPage = page;
-  pagination.pageSize = limit;
-  getTableData();
-};
+  const changePage = ({ page, limit }) => {
+    pagination.currentPage = page;
+    pagination.pageSize = limit;
+    getTableData();
+  };
 
-const handleOut = () => {
-  proxy.download(
-    "/accountSales/exportAccountSalesOutbound",
-    buildFilterParams(),
-    `閿�鍞嚭搴揰${new Date().getTime()}.xlsx`
-  );
-};
+  const handleOut = () => {
+    proxy.download(
+      "/accountSales/exportAccountSalesOutbound",
+      buildFilterParams(),
+      `閿�鍞嚭搴揰${new Date().getTime()}.xlsx`
+    );
+  };
 
-onMounted(() => {
-  getTableData();
-});
+  onMounted(() => {
+    getTableData();
+  });
 </script>
 
 <style lang="scss" scoped>
-.actions {
-  display: flex;
-  justify-content: space-between;
-  margin-bottom: 15px;
-}
+  .actions {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 15px;
+  }
 </style>
diff --git a/src/views/inventoryManagement/dispatchLog/Record.vue b/src/views/inventoryManagement/dispatchLog/Record.vue
index fb24e40..2d7411d 100644
--- a/src/views/inventoryManagement/dispatchLog/Record.vue
+++ b/src/views/inventoryManagement/dispatchLog/Record.vue
@@ -1,71 +1,70 @@
 <template>
   <div>
-    <div class="search_form" style="margin-bottom: 10px">
-      <el-form
-          ref="searchFormRef"
-          :model="searchForm"
-          class="demo-form-inline"
-      >
+    <div class="search_form"
+         style="margin-bottom: 10px">
+      <el-form ref="searchFormRef"
+               :model="searchForm"
+               class="demo-form-inline">
         <el-row :gutter="20">
           <el-col :span="4">
-            <el-form-item label="鍑哄簱鏃ユ湡" prop="timeStr">
+            <el-form-item label="鍑哄簱鏃ユ湡"
+                          prop="timeStr">
               <el-date-picker v-model="searchForm.timeStr"
                               type="date"
                               placeholder="璇烽�夋嫨鏃ユ湡"
                               value-format="YYYY-MM-DD"
                               format="YYYY-MM-DD"
-                              clearable/>
+                              clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="浜у搧澶х被" prop="productName">
+            <el-form-item label="浜у搧澶х被"
+                          prop="productName">
               <el-input v-model="searchForm.productName"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
-
           <el-col :span="4">
-            <el-form-item label="浜у搧瑙勬牸" prop="model">
+            <el-form-item label="瑙勬牸鍨嬪彿"
+                          prop="model">
               <el-input v-model="searchForm.model"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="鎵瑰彿" prop="batchNo">
+            <el-form-item label="鎵瑰彿"
+                          prop="batchNo">
               <el-input v-model="searchForm.batchNo"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="鏉ユ簮" prop="recordType">
-              <el-select
-                  v-model="searchForm.recordType"
-                  style="width: 240px"
-                  placeholder="璇烽�夋嫨"
-                  clearable
-              >
-                <el-option
-                    v-for="item in stockRecordTypeOptions"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                />
+            <el-form-item label="鏉ユ簮"
+                          prop="recordType">
+              <el-select v-model="searchForm.recordType"
+                         style="width: 240px"
+                         placeholder="璇烽�夋嫨"
+                         clearable>
+                <el-option v-for="item in stockRecordTypeOptions"
+                           :key="item.value"
+                           :label="item.label"
+                           :value="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
           <!-- 鎸夐挳 -->
           <el-col :span="4">
             <el-form-item>
-              <el-button type="primary" @click="getList">
+              <el-button type="primary"
+                         @click="getList">
                 鎼滅储
               </el-button>
-
               <el-button @click="resetSearch">
                 閲嶇疆
               </el-button>
@@ -75,792 +74,796 @@
       </el-form>
     </div>
     <div class="actions">
-      <el-button type="primary" @click="handleBatchApprove">瀹℃壒</el-button>
+      <el-button type="primary"
+                 @click="handleBatchApprove">瀹℃壒</el-button>
       <el-button @click="handleOut">瀵煎嚭</el-button>
-      <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-      <el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
+      <el-button type="danger"
+                 plain
+                 @click="handleDelete">鍒犻櫎</el-button>
+      <el-button type="primary"
+                 plain
+                 @click="handlePrint">鎵撳嵃</el-button>
     </div>
     <div class="table_list">
-      <el-table
-        :data="tableData"
-        border
-        v-loading="tableLoading"
-        @selection-change="handleSelectionChange"
-        :expand-row-keys="expandedRowKeys"
-        :row-key="(row) => row.id"
-        style="width: 100%"
-        height="calc(100vh - 18.5em)"
-      >
-        <el-table-column align="center" type="selection" width="55" />
-        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
-        <el-table-column
-          label="鍑哄簱鎵规"
-          prop="outboundBatches"
-          min-width="100"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍑哄簱鏃ユ湡"
-          prop="createTime"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="浜у搧澶х被"
-          prop="productName"
-          show-overflow-tooltip
-        />
-        <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
-        <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
-        <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
-        <el-table-column
-          label="鍑哄簱鏁伴噺"
-          prop="stockOutNum"
-          show-overflow-tooltip
-        />
-        <el-table-column label="鍑哄簱浜�" prop="createBy" show-overflow-tooltip />
-        <el-table-column label="鏉ユ簮" prop="recordType" show-overflow-tooltip>
+      <el-table :data="tableData"
+                border
+                v-loading="tableLoading"
+                @selection-change="handleSelectionChange"
+                :expand-row-keys="expandedRowKeys"
+                :row-key="(row) => row.id"
+                style="width: 100%"
+                height="calc(100vh - 18.5em)">
+        <el-table-column align="center"
+                         type="selection"
+                         width="55" />
+        <el-table-column align="center"
+                         label="搴忓彿"
+                         type="index"
+                         width="60" />
+        <el-table-column label="鍑哄簱鎵规"
+                         prop="outboundBatches"
+                         min-width="100"
+                         show-overflow-tooltip />
+        <el-table-column label="鍑哄簱鏃ユ湡"
+                         prop="createTime"
+                         show-overflow-tooltip />
+        <el-table-column label="浜у搧澶х被"
+                         prop="productName"
+                         show-overflow-tooltip />
+        <el-table-column label="瑙勬牸鍨嬪彿"
+                         prop="model"
+                         show-overflow-tooltip />
+        <el-table-column label="鎵瑰彿"
+                         prop="batchNo"
+                         show-overflow-tooltip />
+        <el-table-column label="鍗曚綅"
+                         prop="unit"
+                         show-overflow-tooltip />
+        <el-table-column label="鍑哄簱鏁伴噺"
+                         prop="stockOutNum"
+                         show-overflow-tooltip />
+        <el-table-column label="鍑哄簱浜�"
+                         prop="createBy"
+                         show-overflow-tooltip />
+        <el-table-column label="鏉ユ簮"
+                         prop="recordType"
+                         show-overflow-tooltip>
           <template #default="scope">
             {{ getRecordType(scope.row.recordType) }}
           </template>
         </el-table-column>
-        <el-table-column
-          label="瀹℃壒鐘舵��"
-          prop="approvalStatus"
-          show-overflow-tooltip
-        >
+        <el-table-column label="瀹℃壒鐘舵��"
+                         prop="approvalStatus"
+                         show-overflow-tooltip>
           <template #default="scope">
-            <el-tag
-              :type="getApprovalStatusTagType(scope.row.approvalStatus)"
-              size="small"
-            >
+            <el-tag :type="getApprovalStatusTagType(scope.row.approvalStatus)"
+                    size="small">
               {{ getApprovalStatusLabel(scope.row.approvalStatus) }}
             </el-tag>
           </template>
         </el-table-column>
       </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        layout="total, sizes, prev, pager, next, jumper"
-        :page="page.current"
-        :limit="page.size"
-        @pagination="paginationChange"
-      />
+      <pagination v-show="total > 0"
+                  :total="total"
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :page="page.current"
+                  :limit="page.size"
+                  @pagination="paginationChange" />
     </div>
   </div>
 </template>
 
 <script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import { ref } from "vue";
-import { ElMessageBox } from "element-plus";
-import useUserStore from "@/store/modules/user";
-import { getCurrentDate } from "@/utils/index.js";
-import {
-  getStockOutPage,
-  delPendingStockOut,
-  batchApproveStockOutRecords,
-} from "@/api/inventoryManagement/stockOut.js";
-import {
-  findAllQualifiedStockOutRecordTypeOptions,
-  findAllUnQualifiedStockOutRecordTypeOptions,
-} from "@/api/basicData/enum.js";
+  import pagination from "@/components/PIMTable/Pagination.vue";
+  import { ref } from "vue";
+  import { ElMessageBox } from "element-plus";
+  import useUserStore from "@/store/modules/user";
+  import { getCurrentDate } from "@/utils/index.js";
+  import {
+    getStockOutPage,
+    delPendingStockOut,
+    batchApproveStockOutRecords,
+  } from "@/api/inventoryManagement/stockOut.js";
+  import {
+    findAllQualifiedStockOutRecordTypeOptions,
+    findAllUnQualifiedStockOutRecordTypeOptions,
+  } from "@/api/basicData/enum.js";
 
-const userStore = useUserStore();
-const { proxy } = getCurrentInstance();
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-// 鏉ユ簮绫诲瀷閫夐」
-const stockRecordTypeOptions = ref([]);
-const page = reactive({
-  current: 1,
-  size: 100,
-});
-const total = ref(0);
+  const userStore = useUserStore();
+  const { proxy } = getCurrentInstance();
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  // 鏉ユ簮绫诲瀷閫夐」
+  const stockRecordTypeOptions = ref([]);
+  const page = reactive({
+    current: 1,
+    size: 100,
+  });
+  const total = ref(0);
 
-const props = defineProps({
-  type: {
-    type: String,
-    required: true,
-    default: "0",
-  },
-  topParentProductId: {
-    type: [String, Number],
-    default: undefined,
-  },
-});
+  const props = defineProps({
+    type: {
+      type: String,
+      required: true,
+      default: "0",
+    },
+    topParentProductId: {
+      type: [String, Number],
+      default: undefined,
+    },
+  });
 
-// 鎵撳嵃鐩稿叧
-const printPreviewVisible = ref(false);
-const printData = ref([]);
+  // 鎵撳嵃鐩稿叧
+  const printPreviewVisible = ref(false);
+  const printData = ref([]);
 
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const data = reactive({
-  searchForm: {
-    supplierName: "",
-    timeStr: "",
-    recordType: "",
-  },
-});
-const { searchForm } = toRefs(data);
+  // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
+  const data = reactive({
+    searchForm: {
+      supplierName: "",
+      timeStr: "",
+      recordType: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
 
-const searchFormRef = ref(null);
+  const searchFormRef = ref(null);
 
-const resetSearch = () => {
-  searchFormRef.value?.resetFields();
-  page.current = 1;
-  getList();
-}
+  const resetSearch = () => {
+    searchFormRef.value?.resetFields();
+    page.current = 1;
+    getList();
+  };
 
-const paginationChange = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  getStockOutPage({
-    ...searchForm.value,
-    ...page,
-    topParentProductId: props.topParentProductId,
-  })
-    .then((res) => {
-      tableLoading.value = false;
-      tableData.value = res.data.records;
-      tableData.value.map((item) => {
-        item.children = [];
-      });
-      total.value = res.data.total;
+  const paginationChange = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    getStockOutPage({
+      ...searchForm.value,
+      ...page,
+      topParentProductId: props.topParentProductId,
     })
-    .catch(() => {
-      tableLoading.value = false;
-    });
-};
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        tableData.value.map(item => {
+          item.children = [];
+        });
+        total.value = res.data.total;
+      })
+      .catch(() => {
+        tableLoading.value = false;
+      });
+  };
 
-const getRecordType = (recordType) => {
-  return (
-    stockRecordTypeOptions.value.find((item) => item.value === recordType)
-      ?.label || ""
-  );
-};
+  const getRecordType = recordType => {
+    return (
+      stockRecordTypeOptions.value.find(item => item.value === recordType)
+        ?.label || ""
+    );
+  };
 
-const approvalStatusLabelMap = {
-  0: "寰呭鎵�",
-  1: "閫氳繃",
-  2: "椹冲洖",
-  3: "寰呯‘璁�",
-  pending: "寰呭鎵�",
-  approved: "閫氳繃",
-  rejected: "椹冲洖",
-  PENDING: "寰呭鎵�",
-  APPROVED: "閫氳繃",
-  REJECTED: "椹冲洖",
-};
+  const approvalStatusLabelMap = {
+    0: "寰呭鎵�",
+    1: "閫氳繃",
+    2: "椹冲洖",
+    3: "寰呯‘璁�",
+    pending: "寰呭鎵�",
+    approved: "閫氳繃",
+    rejected: "椹冲洖",
+    PENDING: "寰呭鎵�",
+    APPROVED: "閫氳繃",
+    REJECTED: "椹冲洖",
+  };
 
-const getApprovalStatusLabel = (status) => {
-  if (status === null || status === undefined || status === "") {
-    return "寰呭鎵�";
-  }
-  return approvalStatusLabelMap[status] || "寰呭鎵�";
-};
+  const getApprovalStatusLabel = status => {
+    if (status === null || status === undefined || status === "") {
+      return "寰呭鎵�";
+    }
+    return approvalStatusLabelMap[status] || "寰呭鎵�";
+  };
 
-// 閫氳繃/椹冲洖鍥哄畾鑹诧紱鍏朵綑锛堝惈寰呭鎵广�佺┖鍊笺�佹湭鏄犲皠浣嗘枃妗堜负寰呭鎵癸級缁熶竴鐢� warning 棰勮鑹�
-const getApprovalStatusTagType = (status) => {
-  if (
-    status === 1 ||
-    status === "1" ||
-    status === "approved" ||
-    status === "APPROVED"
-  )
-    return "success";
-  if (
-    status === 2 ||
-    status === "2" ||
-    status === "rejected" ||
-    status === "REJECTED"
-  )
-    return "danger";
-  return "warning";
-};
+  // 閫氳繃/椹冲洖鍥哄畾鑹诧紱鍏朵綑锛堝惈寰呭鎵广�佺┖鍊笺�佹湭鏄犲皠浣嗘枃妗堜负寰呭鎵癸級缁熶竴鐢� warning 棰勮鑹�
+  const getApprovalStatusTagType = status => {
+    if (
+      status === 1 ||
+      status === "1" ||
+      status === "approved" ||
+      status === "APPROVED"
+    )
+      return "success";
+    if (
+      status === 2 ||
+      status === "2" ||
+      status === "rejected" ||
+      status === "REJECTED"
+    )
+      return "danger";
+    return "warning";
+  };
 
-// 鑾峰彇鏉ユ簮绫诲瀷閫夐」
-const fetchStockRecordTypeOptions = () => {
-  if (props.type === "0") {
-    findAllQualifiedStockOutRecordTypeOptions().then((res) => {
+  // 鑾峰彇鏉ユ簮绫诲瀷閫夐」
+  const fetchStockRecordTypeOptions = () => {
+    if (props.type === "0") {
+      findAllQualifiedStockOutRecordTypeOptions().then(res => {
+        stockRecordTypeOptions.value = res.data;
+      });
+      return;
+    }
+    findAllUnQualifiedStockOutRecordTypeOptions().then(res => {
       stockRecordTypeOptions.value = res.data;
     });
-    return;
-  }
-  findAllUnQualifiedStockOutRecordTypeOptions().then((res) => {
-    stockRecordTypeOptions.value = res.data;
-  });
-};
+  };
 
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  // 杩囨护鎺夊瓙鏁版嵁
-  selectedRows.value = selection.filter((item) => item.id);
-  console.log("selection", selectedRows.value);
-};
-const expandedRowKeys = ref([]);
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    // 杩囨护鎺夊瓙鏁版嵁
+    selectedRows.value = selection.filter(item => item.id);
+    console.log("selection", selectedRows.value);
+  };
+  const expandedRowKeys = ref([]);
 
-const handleBatchApprove = () => {
-  if (selectedRows.value.length === 0) {
-    proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-    return;
-  }
-  const ids = selectedRows.value.map((item) => item.id);
-  ElMessageBox.confirm("璇烽�夋嫨瀹℃壒缁撴灉", "瀹℃壒", {
-    confirmButtonText: "閫氳繃",
-    cancelButtonText: "椹冲洖",
-    type: "warning",
-    distinguishCancelAndClose: true,
-  })
-    .then(() => {
-      batchApproveStockOutRecords({ ids, approvalStatus: 1 })
-        .then(() => {
-          proxy.$modal.msgSuccess("瀹℃壒閫氳繃鎴愬姛");
-          getList();
-        })
-        .catch(() => {
-          proxy.$modal.msgError("瀹℃壒閫氳繃澶辫触");
-        });
+  const handleBatchApprove = () => {
+    if (selectedRows.value.length === 0) {
+      proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+      return;
+    }
+    const ids = selectedRows.value.map(item => item.id);
+    ElMessageBox.confirm("璇烽�夋嫨瀹℃壒缁撴灉", "瀹℃壒", {
+      confirmButtonText: "閫氳繃",
+      cancelButtonText: "椹冲洖",
+      type: "warning",
+      distinguishCancelAndClose: true,
     })
-    .catch((action) => {
-      if (action === "cancel") {
-        batchApproveStockOutRecords({ ids, approvalStatus: 2 })
+      .then(() => {
+        batchApproveStockOutRecords({ ids, approvalStatus: 1 })
           .then(() => {
-            proxy.$modal.msgSuccess("瀹℃壒椹冲洖鎴愬姛");
+            proxy.$modal.msgSuccess("瀹℃壒閫氳繃鎴愬姛");
             getList();
           })
           .catch(() => {
-            proxy.$modal.msgError("瀹℃壒椹冲洖澶辫触");
+            proxy.$modal.msgError("瀹℃壒閫氳繃澶辫触");
           });
-        return;
-      }
-      proxy.$modal.msg("宸插彇娑�");
-    });
-};
-
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      proxy.download(
-        "/stockOutRecord/exportStockOutRecord",
-        { type: props.type },
-        props.type === "0" ? "鍚堟牸鍑哄簱鍙拌处.xlsx" : "涓嶅悎鏍煎嚭搴撳彴璐�.xlsx"
-      );
-    })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
-    });
-};
-
-// 鍒犻櫎
-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(() => {
-      delPendingStockOut(ids).then((res) => {
-        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-        getList();
+      })
+      .catch(action => {
+        if (action === "cancel") {
+          batchApproveStockOutRecords({ ids, approvalStatus: 2 })
+            .then(() => {
+              proxy.$modal.msgSuccess("瀹℃壒椹冲洖鎴愬姛");
+              getList();
+            })
+            .catch(() => {
+              proxy.$modal.msgError("瀹℃壒椹冲洖澶辫触");
+            });
+          return;
+        }
+        proxy.$modal.msg("宸插彇娑�");
       });
+  };
+
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
     })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
-    });
-};
+      .then(() => {
+        proxy.download(
+          "/stockOutRecord/exportStockOutRecord",
+          { type: props.type },
+          props.type === "0" ? "鍚堟牸鍑哄簱鍙拌处.xlsx" : "涓嶅悎鏍煎嚭搴撳彴璐�.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
 
-// 鎵撳嵃鍔熻兘
-const handlePrint = () => {
-  if (selectedRows.value.length === 0) {
-    proxy.$modal.msgWarning("璇烽�夋嫨瑕佹墦鍗扮殑鏁版嵁");
-    return;
-  }
-  printData.value = [...selectedRows.value];
-  console.log("鎵撳嵃鏁版嵁:", printData.value);
-  printPreviewVisible.value = true;
-};
+  // 鍒犻櫎
+  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(() => {
+        delPendingStockOut(ids).then(res => {
+          proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          getList();
+        });
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
 
-// 鎵ц鎵撳嵃
-const executePrint = () => {
-  console.log("寮�濮嬫墽琛屾墦鍗帮紝鏁版嵁鏉℃暟:", printData.value.length);
-  console.log("鎵撳嵃鏁版嵁:", printData.value);
+  // 鎵撳嵃鍔熻兘
+  const handlePrint = () => {
+    if (selectedRows.value.length === 0) {
+      proxy.$modal.msgWarning("璇烽�夋嫨瑕佹墦鍗扮殑鏁版嵁");
+      return;
+    }
+    printData.value = [...selectedRows.value];
+    console.log("鎵撳嵃鏁版嵁:", printData.value);
+    printPreviewVisible.value = true;
+  };
 
-  // 鍒涘缓涓�涓柊鐨勬墦鍗扮獥鍙�
-  const printWindow = window.open("", "_blank", "width=800,height=600");
+  // 鎵ц鎵撳嵃
+  const executePrint = () => {
+    console.log("寮�濮嬫墽琛屾墦鍗帮紝鏁版嵁鏉℃暟:", printData.value.length);
+    console.log("鎵撳嵃鏁版嵁:", printData.value);
 
-  // 鏋勫缓鎵撳嵃鍐呭
-  let printContent = `
-    <!DOCTYPE html>
-    <html>
-    <head>
-      <meta charset="UTF-8">
-      <title>鎵撳嵃棰勮</title>
-      <style>
-        body {
-          margin: 0;
-          padding: 0;
-          font-family: "SimSun", serif;
-          background: white;
-        }
-                                                     .print-page {
-            width: 200mm;
-            height: 75mm;
-            padding: 10mm;
-            padding-left: 20mm;
-            background: white;
-            box-sizing: border-box;
-            page-break-after: always;
-            page-break-inside: avoid;
-          }
-         .print-page:last-child {
-           page-break-after: avoid;
-         }
-        .delivery-note {
-          width: 100%;
-          height: 100%;
-          font-size: 12px;
-          line-height: 1.2;
-          display: flex;
-          flex-direction: column;
-          color: #000;
-        }
-        .header {
-          text-align: center;
-          margin-bottom: 8px;
-        }
-        .company-name {
-          font-size: 18px;
-          font-weight: bold;
-          margin-bottom: 4px;
-        }
-        .document-title {
-          font-size: 16px;
-          font-weight: bold;
-        }
-        .info-section {
-          margin-bottom: 8px;
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-        }
-        .info-row {
-          line-height: 20px;
-        }
-        .label {
-          font-weight: bold;
-          width: 60px;
-          font-size: 12px;
-        }
-        .value {
-          margin-right: 20px;
-          min-width: 80px;
-          font-size: 12px;
-        }
-                 .table-section {
-                 margin-bottom: 40px;
-          //  flex: 0.6;
-         }
-        .product-table {
-          width: 100%;
-          border-collapse: collapse;
-          border: 1px solid #000;
-        }
-                 .product-table th, .product-table td {
-           border: 1px solid #000;
-           padding: 6px;
-           text-align: center;
-           font-size: 12px;
-           line-height: 1.4;
-         }
-        .product-table th {
-          font-weight: bold;
-        }
-        .total-value {
-          font-weight: bold;
-        }
-        .footer-section {
-          margin-top: auto;
-        }
-        .footer-row {
-          display: flex;
-          margin-bottom: 3px;
-          line-height: 22px;
-          justify-content: space-between;
-        }
-        .footer-item {
-          display: flex;
-          margin-right: 20px;
-        }
-        .footer-item .label {
-          font-weight: bold;
-          width: 80px;
-          font-size: 12px;
-        }
-        .footer-item .value {
-          min-width: 80px;
-          font-size: 12px;
-        }
-        .address-item .address-value {
-          min-width: 200px;
-        }
-        @media print {
+    // 鍒涘缓涓�涓柊鐨勬墦鍗扮獥鍙�
+    const printWindow = window.open("", "_blank", "width=800,height=600");
+
+    // 鏋勫缓鎵撳嵃鍐呭
+    let printContent = `
+      <!DOCTYPE html>
+      <html>
+      <head>
+        <meta charset="UTF-8">
+        <title>鎵撳嵃棰勮</title>
+        <style>
           body {
             margin: 0;
             padding: 0;
+            font-family: "SimSun", serif;
+            background: white;
           }
-                     .print-page {
-             margin: 0;
-             padding: 10mm;
-             /* padding-left: 20mm; */
-             page-break-inside: avoid;
-             page-break-after: always;
-           }
+                                                       .print-page {
+              width: 200mm;
+              height: 75mm;
+              padding: 10mm;
+              padding-left: 20mm;
+              background: white;
+              box-sizing: border-box;
+              page-break-after: always;
+              page-break-inside: avoid;
+            }
            .print-page:last-child {
              page-break-after: avoid;
            }
-        }
-      </style>
-    </head>
-    <body>
-  `;
+          .delivery-note {
+            width: 100%;
+            height: 100%;
+            font-size: 12px;
+            line-height: 1.2;
+            display: flex;
+            flex-direction: column;
+            color: #000;
+          }
+          .header {
+            text-align: center;
+            margin-bottom: 8px;
+          }
+          .company-name {
+            font-size: 18px;
+            font-weight: bold;
+            margin-bottom: 4px;
+          }
+          .document-title {
+            font-size: 16px;
+            font-weight: bold;
+          }
+          .info-section {
+            margin-bottom: 8px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+          }
+          .info-row {
+            line-height: 20px;
+          }
+          .label {
+            font-weight: bold;
+            width: 60px;
+            font-size: 12px;
+          }
+          .value {
+            margin-right: 20px;
+            min-width: 80px;
+            font-size: 12px;
+          }
+                   .table-section {
+                   margin-bottom: 40px;
+            //  flex: 0.6;
+           }
+          .product-table {
+            width: 100%;
+            border-collapse: collapse;
+            border: 1px solid #000;
+          }
+                   .product-table th, .product-table td {
+             border: 1px solid #000;
+             padding: 6px;
+             text-align: center;
+             font-size: 12px;
+             line-height: 1.4;
+           }
+          .product-table th {
+            font-weight: bold;
+          }
+          .total-value {
+            font-weight: bold;
+          }
+          .footer-section {
+            margin-top: auto;
+          }
+          .footer-row {
+            display: flex;
+            margin-bottom: 3px;
+            line-height: 22px;
+            justify-content: space-between;
+          }
+          .footer-item {
+            display: flex;
+            margin-right: 20px;
+          }
+          .footer-item .label {
+            font-weight: bold;
+            width: 80px;
+            font-size: 12px;
+          }
+          .footer-item .value {
+            min-width: 80px;
+            font-size: 12px;
+          }
+          .address-item .address-value {
+            min-width: 200px;
+          }
+          @media print {
+            body {
+              margin: 0;
+              padding: 0;
+            }
+                       .print-page {
+               margin: 0;
+               padding: 10mm;
+               /* padding-left: 20mm; */
+               page-break-inside: avoid;
+               page-break-after: always;
+             }
+             .print-page:last-child {
+               page-break-after: avoid;
+             }
+          }
+        </style>
+      </head>
+      <body>
+    `;
 
-  // 涓烘瘡鏉℃暟鎹敓鎴愭墦鍗伴〉闈�
-  printData.value.forEach((item, index) => {
-    printContent += `
-      <div class="print-page">
-        <div class="delivery-note">
-          <div class="header">
-            <div class="document-title">闆跺敭鍙戣揣鍗�</div>
-          </div>
-          
-          <div class="info-section">
-            <div class="info-row">
-              <div>
-                <span class="label">鍙戣揣鏃ユ湡锛�</span>
-                <span class="value">${formatDate(item.createTime)}</span>
+    // 涓烘瘡鏉℃暟鎹敓鎴愭墦鍗伴〉闈�
+    printData.value.forEach((item, index) => {
+      printContent += `
+        <div class="print-page">
+          <div class="delivery-note">
+            <div class="header">
+              <div class="document-title">闆跺敭鍙戣揣鍗�</div>
+            </div>
+            
+            <div class="info-section">
+              <div class="info-row">
+                <div>
+                  <span class="label">鍙戣揣鏃ユ湡锛�</span>
+                  <span class="value">${formatDate(item.createTime)}</span>
+                </div>
+                <div>
+                  <span class="label">瀹㈡埛鍚嶇О锛�</span>
+                  <span class="value">${item.supplierName}</span>
+                </div>
               </div>
-              <div>
-                <span class="label">瀹㈡埛鍚嶇О锛�</span>
-                <span class="value">${item.supplierName}</span>
+              <div class="info-row">
+                <span class="label">鍗曞彿锛�</span>
+                <span class="value">${item.code || ""}</span>
               </div>
             </div>
-            <div class="info-row">
-              <span class="label">鍗曞彿锛�</span>
-              <span class="value">${item.code || ""}</span>
-            </div>
-          </div>
 
-          <div class="table-section">
-            <table class="product-table">
-              <thead>
-                <tr>
-                  <th>浜у搧鍚嶇О</th>
-                  <th>瑙勬牸鍨嬪彿</th>
-                  <th>鍗曚綅</th>
-                  <th>鍗曚环</th>
-                  <th>闆跺敭鏁伴噺</th>
-                  <th>闆跺敭閲戦</th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr>
-                  <td>${item.productName || "鐮傜伆鐮�"}</td>
-                  <td>${item.model || "鏍囧噯"}</td>
-                  <td>${item.unit || "鍧�"}</td>
-                  <td>${item.taxInclusiveUnitPrice || "0"}</td>
-                  <td>${item.inboundNum || "2000"}</td>
-                  <td>${item.taxInclusiveTotalPrice || "0"}</td>
-                </tr>
-              </tbody>
-              <tfoot>
-                <tr>
-                  <td class="label">鍚堣</td>
-                  <td class="total-value"></td>
-                  <td class="total-value"></td>
-                  <td class="total-value"></td>
-                  <td class="total-value">${item.inboundNum || "2000"}</td>
-                  <td class="total-value">${
-                    item.taxInclusiveTotalPrice || "0"
-                  }</td>
-                </tr>
-              </tfoot>
-            </table>
-          </div>
-
-          <div class="footer-section">
-            <div class="footer-row">
-              <div class="footer-item">
-                <span class="label">鏀惰揣鐢佃瘽锛�</span>
-                <span class="value"></span>
-              </div>
-              <div class="footer-item">
-                <span class="label">鏀惰揣浜猴細</span>
-                <span class="value"></span>
-              </div>
-              <div class="footer-item address-item">
-                <span class="label">鏀惰揣鍦板潃锛�</span>
-                <span class="value address-value"></span>
-              </div>
+            <div class="table-section">
+              <table class="product-table">
+                <thead>
+                  <tr>
+                    <th>浜у搧鍚嶇О</th>
+                    <th>瑙勬牸鍨嬪彿</th>
+                    <th>鍗曚綅</th>
+                    <th>鍗曚环</th>
+                    <th>闆跺敭鏁伴噺</th>
+                    <th>闆跺敭閲戦</th>
+                  </tr>
+                </thead>
+                <tbody>
+                  <tr>
+                    <td>${item.productName || "鐮傜伆鐮�"}</td>
+                    <td>${item.model || "鏍囧噯"}</td>
+                    <td>${item.unit || "鍧�"}</td>
+                    <td>${item.taxInclusiveUnitPrice || "0"}</td>
+                    <td>${item.inboundNum || "2000"}</td>
+                    <td>${item.taxInclusiveTotalPrice || "0"}</td>
+                  </tr>
+                </tbody>
+                <tfoot>
+                  <tr>
+                    <td class="label">鍚堣</td>
+                    <td class="total-value"></td>
+                    <td class="total-value"></td>
+                    <td class="total-value"></td>
+                    <td class="total-value">${item.inboundNum || "2000"}</td>
+                    <td class="total-value">${
+                      item.taxInclusiveTotalPrice || "0"
+                    }</td>
+                  </tr>
+                </tfoot>
+              </table>
             </div>
-            <div class="footer-row">
-              <div class="footer-item">
-                <span class="label">鎿嶄綔鍛橈細</span>
-                <span class="value">${userStore.nickName || "鎾曞紑鍓�"}</span>
+
+            <div class="footer-section">
+              <div class="footer-row">
+                <div class="footer-item">
+                  <span class="label">鏀惰揣鐢佃瘽锛�</span>
+                  <span class="value"></span>
+                </div>
+                <div class="footer-item">
+                  <span class="label">鏀惰揣浜猴細</span>
+                  <span class="value"></span>
+                </div>
+                <div class="footer-item address-item">
+                  <span class="label">鏀惰揣鍦板潃锛�</span>
+                  <span class="value address-value"></span>
+                </div>
               </div>
-              <div class="footer-item">
-                <span class="label">鎵撳嵃鏃ユ湡锛�</span>
-                <span class="value">${formatDateTime(new Date())}</span>
+              <div class="footer-row">
+                <div class="footer-item">
+                  <span class="label">鎿嶄綔鍛橈細</span>
+                  <span class="value">${userStore.nickName || "鎾曞紑鍓�"}</span>
+                </div>
+                <div class="footer-item">
+                  <span class="label">鎵撳嵃鏃ユ湡锛�</span>
+                  <span class="value">${formatDateTime(new Date())}</span>
+                </div>
               </div>
             </div>
           </div>
         </div>
-      </div>
+      `;
+    });
+
+    printContent += `
+      </body>
+      </html>
     `;
+
+    // 鍐欏叆鍐呭鍒版柊绐楀彛
+    printWindow.document.write(printContent);
+    printWindow.document.close();
+
+    // 绛夊緟鍐呭鍔犺浇瀹屾垚鍚庢墦鍗�
+    printWindow.onload = () => {
+      setTimeout(() => {
+        printWindow.print();
+        printWindow.close();
+        printPreviewVisible.value = false;
+      }, 500);
+    };
+  };
+
+  // 鏍煎紡鍖栨棩鏈�
+  const formatDate = dateString => {
+    if (!dateString) return getCurrentDate();
+    const date = new Date(dateString);
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, "0");
+    const day = String(date.getDate()).padStart(2, "0");
+    return `${year}/${month}/${day}`;
+  };
+
+  // 鏍煎紡鍖栨棩鏈熸椂闂�
+  const formatDateTime = date => {
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, "0");
+    const day = String(date.getDate()).padStart(2, "0");
+    const hours = String(date.getHours()).padStart(2, "0");
+    const minutes = String(date.getMinutes()).padStart(2, "0");
+    const seconds = String(date.getSeconds()).padStart(2, "0");
+    return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
+  };
+  onMounted(() => {
+    getList();
+    fetchStockRecordTypeOptions();
   });
 
-  printContent += `
-    </body>
-    </html>
-  `;
-
-  // 鍐欏叆鍐呭鍒版柊绐楀彛
-  printWindow.document.write(printContent);
-  printWindow.document.close();
-
-  // 绛夊緟鍐呭鍔犺浇瀹屾垚鍚庢墦鍗�
-  printWindow.onload = () => {
-    setTimeout(() => {
-      printWindow.print();
-      printWindow.close();
-      printPreviewVisible.value = false;
-    }, 500);
-  };
-};
-
-// 鏍煎紡鍖栨棩鏈�
-const formatDate = (dateString) => {
-  if (!dateString) return getCurrentDate();
-  const date = new Date(dateString);
-  const year = date.getFullYear();
-  const month = String(date.getMonth() + 1).padStart(2, "0");
-  const day = String(date.getDate()).padStart(2, "0");
-  return `${year}/${month}/${day}`;
-};
-
-// 鏍煎紡鍖栨棩鏈熸椂闂�
-const formatDateTime = (date) => {
-  const year = date.getFullYear();
-  const month = String(date.getMonth() + 1).padStart(2, "0");
-  const day = String(date.getDate()).padStart(2, "0");
-  const hours = String(date.getHours()).padStart(2, "0");
-  const minutes = String(date.getMinutes()).padStart(2, "0");
-  const seconds = String(date.getSeconds()).padStart(2, "0");
-  return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
-};
-onMounted(() => {
-  getList();
-  fetchStockRecordTypeOptions();
-});
-
-watch(
-  () => props.topParentProductId,
-  () => {
-    page.current = 1;
-    getList();
-  }
-);
+  watch(
+    () => props.topParentProductId,
+    () => {
+      page.current = 1;
+      getList();
+    }
+  );
 </script>
 
 <style scoped lang="scss">
-.print-preview-dialog {
-  .el-dialog__body {
-    padding: 0;
-    max-height: 80vh;
-    overflow-y: auto;
-  }
-}
-
-.print-preview-container {
-  .print-preview-header {
-    padding: 15px;
-    border-bottom: 1px solid #e4e7ed;
-    text-align: center;
-
-    .el-button {
-      margin: 0 10px;
+  .print-preview-dialog {
+    .el-dialog__body {
+      padding: 0;
+      max-height: 80vh;
+      overflow-y: auto;
     }
   }
 
-  .print-preview-content {
-    padding: 20px;
-    background-color: #f5f5f5;
-    min-height: 400px;
-  }
-}
-
-.print-page {
-  width: 220mm;
-  height: 90mm;
-  padding: 10mm;
-  margin: 0 auto;
-  background: white;
-  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
-  margin-bottom: 10px;
-  box-sizing: border-box;
-}
-
-.delivery-note {
-  width: 100%;
-  height: 100%;
-  font-family: "SimSun", serif;
-  font-size: 10px;
-  line-height: 1.2;
-  display: flex;
-  flex-direction: column;
-}
-
-.header {
-  text-align: center;
-  margin-bottom: 8px;
-
-  .company-name {
-    font-size: 18px;
-    font-weight: bold;
-    margin-bottom: 4px;
-  }
-
-  .document-title {
-    font-size: 16px;
-    font-weight: bold;
-  }
-}
-
-.info-section {
-  margin-bottom: 8px;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-
-  .info-row {
-    line-height: 20px;
-
-    .label {
-      font-weight: bold;
-      width: 60px;
-      font-size: 14px;
-    }
-
-    .value {
-      margin-right: 20px;
-      min-width: 80px;
-      font-size: 14px;
-    }
-  }
-}
-
-.table-section {
-  margin-bottom: 4px;
-  flex: 1;
-
-  .product-table {
-    width: 100%;
-    border-collapse: collapse;
-    border: 1px solid #000;
-
-    th,
-    td {
-      border: 1px solid #000;
-      padding: 6px;
+  .print-preview-container {
+    .print-preview-header {
+      padding: 15px;
+      border-bottom: 1px solid #e4e7ed;
       text-align: center;
-      font-size: 14px;
-      line-height: 1.4;
+
+      .el-button {
+        margin: 0 10px;
+      }
     }
 
-    th {
+    .print-preview-content {
+      padding: 20px;
+      background-color: #f5f5f5;
+      min-height: 400px;
+    }
+  }
+
+  .print-page {
+    width: 220mm;
+    height: 90mm;
+    padding: 10mm;
+    margin: 0 auto;
+    background: white;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+    margin-bottom: 10px;
+    box-sizing: border-box;
+  }
+
+  .delivery-note {
+    width: 100%;
+    height: 100%;
+    font-family: "SimSun", serif;
+    font-size: 10px;
+    line-height: 1.2;
+    display: flex;
+    flex-direction: column;
+  }
+
+  .header {
+    text-align: center;
+    margin-bottom: 8px;
+
+    .company-name {
+      font-size: 18px;
       font-weight: bold;
+      margin-bottom: 4px;
     }
 
-    .total-label {
-      text-align: right;
-      font-weight: bold;
-    }
-
-    .total-value {
+    .document-title {
+      font-size: 16px;
       font-weight: bold;
     }
   }
-}
 
-.footer-section {
-  .footer-row {
+  .info-section {
+    margin-bottom: 8px;
     display: flex;
-    margin-bottom: 3px;
-    line-height: 20px;
     justify-content: space-between;
+    align-items: center;
 
-    .footer-item {
-      display: flex;
-      margin-right: 20px;
+    .info-row {
+      line-height: 20px;
 
       .label {
         font-weight: bold;
-        width: 80px;
+        width: 60px;
         font-size: 14px;
       }
 
       .value {
+        margin-right: 20px;
         min-width: 80px;
         font-size: 14px;
       }
+    }
+  }
 
-      &.address-item {
-        .address-value {
-          min-width: 200px;
+  .table-section {
+    margin-bottom: 4px;
+    flex: 1;
+
+    .product-table {
+      width: 100%;
+      border-collapse: collapse;
+      border: 1px solid #000;
+
+      th,
+      td {
+        border: 1px solid #000;
+        padding: 6px;
+        text-align: center;
+        font-size: 14px;
+        line-height: 1.4;
+      }
+
+      th {
+        font-weight: bold;
+      }
+
+      .total-label {
+        text-align: right;
+        font-weight: bold;
+      }
+
+      .total-value {
+        font-weight: bold;
+      }
+    }
+  }
+
+  .footer-section {
+    .footer-row {
+      display: flex;
+      margin-bottom: 3px;
+      line-height: 20px;
+      justify-content: space-between;
+
+      .footer-item {
+        display: flex;
+        margin-right: 20px;
+
+        .label {
+          font-weight: bold;
+          width: 80px;
+          font-size: 14px;
+        }
+
+        .value {
+          min-width: 80px;
+          font-size: 14px;
+        }
+
+        &.address-item {
+          .address-value {
+            min-width: 200px;
+          }
         }
       }
     }
   }
-}
 
-@media print {
-  .app-container {
-    display: none;
+  @media print {
+    .app-container {
+      display: none;
+    }
+
+    .print-page {
+      box-shadow: none;
+      margin: 0;
+      padding: 10mm;
+      padding-left: 20mm;
+      page-break-inside: avoid;
+      page-break-after: always;
+    }
+    .print-page:last-child {
+      page-break-after: avoid;
+    }
   }
 
-  .print-page {
-    box-shadow: none;
-    margin: 0;
-    padding: 10mm;
-    padding-left: 20mm;
-    page-break-inside: avoid;
-    page-break-after: always;
+  .actions {
+    display: flex;
+    justify-content: flex-end;
+    margin-bottom: 10px;
   }
-  .print-page:last-child {
-    page-break-after: avoid;
-  }
-}
-
-.actions {
-  display: flex;
-  justify-content: flex-end;
-  margin-bottom: 10px;
-}
 </style>
diff --git a/src/views/inventoryManagement/receiptManagement/Record.vue b/src/views/inventoryManagement/receiptManagement/Record.vue
index 3fce379..0a01def 100644
--- a/src/views/inventoryManagement/receiptManagement/Record.vue
+++ b/src/views/inventoryManagement/receiptManagement/Record.vue
@@ -1,49 +1,52 @@
 <template>
   <div>
-    <div class="search_form" style="margin-bottom: 10px;">
-      <el-form
-          ref="searchFormRef"
-          :model="searchForm"
-          class="demo-form-inline"
-      >
+    <div class="search_form"
+         style="margin-bottom: 10px;">
+      <el-form ref="searchFormRef"
+               :model="searchForm"
+               class="demo-form-inline">
         <el-row :gutter="20">
           <el-col :span="4">
-            <el-form-item label="鍏ュ簱鏃ユ湡" prop="timeStr">
+            <el-form-item label="鍏ュ簱鏃ユ湡"
+                          prop="timeStr">
               <el-date-picker v-model="searchForm.timeStr"
                               type="date"
                               placeholder="璇烽�夋嫨鏃ユ湡"
                               value-format="YYYY-MM-DD"
                               format="YYYY-MM-DD"
-                              clearable/>
+                              clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="浜у搧澶х被" prop="productName">
+            <el-form-item label="浜у搧澶х被"
+                          prop="productName">
               <el-input v-model="searchForm.productName"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
-
           <el-col :span="4">
-            <el-form-item label="浜у搧瑙勬牸" prop="model">
+            <el-form-item label="瑙勬牸鍨嬪彿"
+                          prop="model">
               <el-input v-model="searchForm.model"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="鎵瑰彿" prop="batchNo">
+            <el-form-item label="鎵瑰彿"
+                          prop="batchNo">
               <el-input v-model="searchForm.batchNo"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="鏉ユ簮" prop="recordType">
+            <el-form-item label="鏉ユ簮"
+                          prop="recordType">
               <el-select v-model="searchForm.recordType"
                          style="width: 240px"
                          placeholder="璇烽�夋嫨"
@@ -51,17 +54,17 @@
                 <el-option v-for="item in stockRecordTypeOptions"
                            :key="item.value"
                            :label="item.label"
-                           :value="item.value"/>
+                           :value="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
           <!-- 鎸夐挳 -->
           <el-col :span="4">
             <el-form-item>
-              <el-button type="primary" @click="getList">
+              <el-button type="primary"
+                         @click="getList">
                 鎼滅储
               </el-button>
-
               <el-button @click="resetSearch">
                 閲嶇疆
               </el-button>
@@ -95,36 +98,36 @@
         <el-table-column align="center"
                          type="selection"
                          :selectable="isRowSelectable"
-                         width="55"/>
+                         width="55" />
         <el-table-column align="center"
                          label="搴忓彿"
                          type="index"
-                         width="60"/>
+                         width="60" />
         <el-table-column label="鍏ュ簱鎵规"
                          prop="inboundBatches"
                          width="200"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鍏ュ簱鏃堕棿"
                          prop="createTime"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="浜у搧澶х被"
                          prop="productName"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="瑙勬牸鍨嬪彿"
                          prop="model"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鎵瑰彿"
                          prop="batchNo"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鍗曚綅"
                          prop="unit"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鍏ュ簱鏁伴噺"
                          prop="stockInNum"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鍏ュ簱浜�"
                          prop="createBy"
-                         show-overflow-tooltip/>
+                         show-overflow-tooltip />
         <el-table-column label="鏉ユ簮"
                          prop="recordType"
                          show-overflow-tooltip>
@@ -132,12 +135,11 @@
             {{ getRecordType(scope.row.recordType) }}
           </template>
         </el-table-column>
-        <el-table-column
-            v-if="showSourceOrderNoColumn"
-            label="婧愬崟鍙�"
-            width="150"
-            prop="sourceOrderNo"
-            show-overflow-tooltip>
+        <el-table-column v-if="showSourceOrderNoColumn"
+                         label="婧愬崟鍙�"
+                         width="150"
+                         prop="sourceOrderNo"
+                         show-overflow-tooltip>
           <template #default="scope">
             {{ formatSourceOrderNo(scope.row?.sourceOrderNo) }}
           </template>
@@ -146,7 +148,8 @@
                          prop="approvalStatus"
                          show-overflow-tooltip>
           <template #default="scope">
-            <el-tag :type="getApprovalStatusTagType(scope.row.approvalStatus)" size="small">
+            <el-tag :type="getApprovalStatusTagType(scope.row.approvalStatus)"
+                    size="small">
               {{ getApprovalStatusLabel(scope.row.approvalStatus) }}
             </el-tag>
           </template>
@@ -157,305 +160,355 @@
                   layout="total, sizes, prev, pager, next, jumper"
                   :page="page.current"
                   :limit="page.size"
-                  @pagination="pageProductChange"/>
+                  @pagination="pageProductChange" />
     </div>
   </div>
 </template>
 
 <script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import {
-  ref,
-  reactive,
-  toRefs,
-  computed,
-  onMounted,
-  getCurrentInstance,
-} from "vue";
-import {ElMessageBox} from "element-plus";
-import {
-  getStockInRecordListPage,
-  batchDeletePendingStockInRecords,
-  batchApproveStockInRecords,
-  batchUnapproveStockInRecords,
-} from "@/api/inventoryManagement/stockInRecord.js";
-import {
-  findAllQualifiedStockInRecordTypeOptions, 
-  // findAllUnQualifiedStockInRecordTypeOptions,
-} from "@/api/basicData/enum.js";
+  import pagination from "@/components/PIMTable/Pagination.vue";
+  import {
+    ref,
+    reactive,
+    toRefs,
+    computed,
+    onMounted,
+    getCurrentInstance,
+  } from "vue";
+  import { ElMessageBox } from "element-plus";
+  import {
+    getStockInRecordListPage,
+    batchDeletePendingStockInRecords,
+    batchApproveStockInRecords,
+    batchUnapproveStockInRecords,
+  } from "@/api/inventoryManagement/stockInRecord.js";
+  import {
+    findAllQualifiedStockInRecordTypeOptions,
+    // findAllUnQualifiedStockInRecordTypeOptions,
+  } from "@/api/basicData/enum.js";
 
-const {proxy} = getCurrentInstance();
+  const { proxy } = getCurrentInstance();
 
-const props = defineProps({
-  type: {
-    type: String,
-    required: true,
-    default: '0'
-  },
-  topParentProductId: {
-    type: [String, Number],
-    default: undefined
-  }
-})
+  const props = defineProps({
+    type: {
+      type: String,
+      required: true,
+      default: "0",
+    },
+    topParentProductId: {
+      type: [String, Number],
+      default: undefined,
+    },
+  });
 
-const tableData = ref([]);
-const selectedRows = ref([]);
-const tableLoading = ref(false);
-// 鏉ユ簮绫诲瀷閫夐」
-const stockRecordTypeOptions = ref([]);
-const page = reactive({
-  current: 1,
-  size: 10,
-});
-const total = ref(0);
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const tableLoading = ref(false);
+  // 鏉ユ簮绫诲瀷閫夐」
+  const stockRecordTypeOptions = ref([]);
+  const page = reactive({
+    current: 1,
+    size: 10,
+  });
+  const total = ref(0);
 
-const data = reactive({
-  searchForm: {
-    productName: "",
-    batchNo: "",
-    model: "",
-    timeStr: "",
-    recordType: "",
-  },
-});
-const {searchForm} = toRefs(data);
-const searchFormRef = ref(null);
+  const data = reactive({
+    searchForm: {
+      productName: "",
+      batchNo: "",
+      model: "",
+      timeStr: "",
+      recordType: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
+  const searchFormRef = ref(null);
 
-const resetSearch = () => {
-  searchFormRef.value?.resetFields();
-  page.current = 1;
-  getList();
-}
+  const resetSearch = () => {
+    searchFormRef.value?.resetFields();
+    page.current = 1;
+    getList();
+  };
 
-const getRecordType = (recordType) => {
-  return stockRecordTypeOptions.value.find(item => item.value === recordType)?.label || ''
-}
+  const getRecordType = recordType => {
+    return (
+      stockRecordTypeOptions.value.find(item => item.value === recordType)
+        ?.label || ""
+    );
+  };
 
-const approvalStatusLabelMap = {
-  0: "寰呭鎵�",
-  1: "閫氳繃",
-  2: "椹冲洖",
-  pending: "寰呭鎵�",
-  approved: "閫氳繃",
-  rejected: "椹冲洖",
-  PENDING: "寰呭鎵�",
-  APPROVED: "閫氳繃",
-  REJECTED: "椹冲洖",
-};
-approvalStatusLabelMap[3] = "寰呯‘璁�";
+  const approvalStatusLabelMap = {
+    0: "寰呭鎵�",
+    1: "閫氳繃",
+    2: "椹冲洖",
+    pending: "寰呭鎵�",
+    approved: "閫氳繃",
+    rejected: "椹冲洖",
+    PENDING: "寰呭鎵�",
+    APPROVED: "閫氳繃",
+    REJECTED: "椹冲洖",
+  };
+  approvalStatusLabelMap[3] = "寰呯‘璁�";
 
-const getApprovalStatusLabel = (status) => {
-  if (status === null || status === undefined || status === "") {
-    return "寰呭鎵�";
-  }
-  return approvalStatusLabelMap[status] || "寰呭鎵�";
-};
+  const getApprovalStatusLabel = status => {
+    if (status === null || status === undefined || status === "") {
+      return "寰呭鎵�";
+    }
+    return approvalStatusLabelMap[status] || "寰呭鎵�";
+  };
 
-// 閫氳繃/椹冲洖鍥哄畾鑹诧紱鍏朵綑锛堝惈寰呭鎵广�佺┖鍊笺�佹湭鏄犲皠浣嗘枃妗堜负寰呭鎵癸級缁熶竴鐢� warning 棰勮鑹�
-const getApprovalStatusTagType = (status) => {
-  if (status === 1 || status === "1" || status === "approved" || status === "APPROVED") return "success";
-  if (status === 2 || status === "2" || status === "rejected" || status === "REJECTED") return "danger";
-  return "warning";
-};
+  // 閫氳繃/椹冲洖鍥哄畾鑹诧紱鍏朵綑锛堝惈寰呭鎵广�佺┖鍊笺�佹湭鏄犲皠浣嗘枃妗堜负寰呭鎵癸級缁熶竴鐢� warning 棰勮鑹�
+  const getApprovalStatusTagType = status => {
+    if (
+      status === 1 ||
+      status === "1" ||
+      status === "approved" ||
+      status === "APPROVED"
+    )
+      return "success";
+    if (
+      status === 2 ||
+      status === "2" ||
+      status === "rejected" ||
+      status === "REJECTED"
+    )
+      return "danger";
+    return "warning";
+  };
 
-const isPendingApproval = status => {
-  return status === 0 || status === "0" || status === "pending" || status === "PENDING" || status === null || status === undefined || status === "";
-};
+  const isPendingApproval = status => {
+    return (
+      status === 0 ||
+      status === "0" ||
+      status === "pending" ||
+      status === "PENDING" ||
+      status === null ||
+      status === undefined ||
+      status === ""
+    );
+  };
 
-const isRejectedApproval = status => {
-  return status === 2 || status === "2" || status === "rejected" || status === "REJECTED";
-};
+  const isRejectedApproval = status => {
+    return (
+      status === 2 ||
+      status === "2" ||
+      status === "rejected" ||
+      status === "REJECTED"
+    );
+  };
 
-const isRowSelectable = row => {
-  return isPendingApproval(row?.approvalStatus) || isRejectedApproval(row?.approvalStatus);
-};
+  const isRowSelectable = row => {
+    return (
+      isPendingApproval(row?.approvalStatus) ||
+      isRejectedApproval(row?.approvalStatus)
+    );
+  };
 
-const canBatchApprove = computed(() => {
-  return selectedRows.value.length > 0
-      && selectedRows.value.every(row => isPendingApproval(row.approvalStatus));
-});
+  const canBatchApprove = computed(() => {
+    return (
+      selectedRows.value.length > 0 &&
+      selectedRows.value.every(row => isPendingApproval(row.approvalStatus))
+    );
+  });
 
-const canReverseApprove = computed(() => {
-  return selectedRows.value.length > 0
-      && selectedRows.value.every(row => isRejectedApproval(row.approvalStatus));
-});
+  const canReverseApprove = computed(() => {
+    return (
+      selectedRows.value.length > 0 &&
+      selectedRows.value.every(row => isRejectedApproval(row.approvalStatus))
+    );
+  });
 
-const canDelete = computed(() => canBatchApprove.value);
-const showSourceOrderNoColumn = computed(() => {
-  const topParentProductId = Number(props.topParentProductId);
-  return topParentProductId === 276 || topParentProductId === 278;
-});
+  const canDelete = computed(() => canBatchApprove.value);
+  const showSourceOrderNoColumn = computed(() => {
+    const topParentProductId = Number(props.topParentProductId);
+    return topParentProductId === 276 || topParentProductId === 278;
+  });
 
-const formatSourceOrderNo = (value) => {
-  const text = String(value ?? "").trim();
-  return text || "--";
-};
+  const formatSourceOrderNo = value => {
+    const text = String(value ?? "").trim();
+    return text || "--";
+  };
 
-const pageProductChange = obj => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
+  const pageProductChange = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
 
-const getList = () => {
-  tableLoading.value = true;
-  getStockInRecordListPage(Object.assign({}, {...searchForm.value, ...page,  topParentProductId: props.topParentProductId}))
+  const getList = () => {
+    tableLoading.value = true;
+    getStockInRecordListPage(
+      Object.assign(
+        {},
+        {
+          ...searchForm.value,
+          ...page,
+          topParentProductId: props.topParentProductId,
+        }
+      )
+    )
       .then(res => {
         tableData.value = res.data.records;
         total.value = res.data.total || 0;
-      }).finally(() => {
-    tableLoading.value = false;
-  })
-};
+      })
+      .finally(() => {
+        tableLoading.value = false;
+      });
+  };
 
-// 鑾峰彇鏉ユ簮绫诲瀷閫夐」
-const fetchStockRecordTypeOptions = () => {
-  if (props.type === '0') {
-    findAllQualifiedStockInRecordTypeOptions()
-        .then(res => {
-          stockRecordTypeOptions.value = res.data;
-        })
-    return
-  }
-  // findAllUnQualifiedStockInRecordTypeOptions()
-  //     .then(res => {
-  //       stockRecordTypeOptions.value = res.data;
-  //     })
-}
+  // 鑾峰彇鏉ユ簮绫诲瀷閫夐」
+  const fetchStockRecordTypeOptions = () => {
+    if (props.type === "0") {
+      findAllQualifiedStockInRecordTypeOptions().then(res => {
+        stockRecordTypeOptions.value = res.data;
+      });
+      return;
+    }
+    // findAllUnQualifiedStockInRecordTypeOptions()
+    //     .then(res => {
+    //       stockRecordTypeOptions.value = res.data;
+    //     })
+  };
 
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = selection => {
-  selectedRows.value = selection.filter(item => item.id && isRowSelectable(item));
-};
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    selectedRows.value = selection.filter(
+      item => item.id && isRowSelectable(item)
+    );
+  };
 
-const expandedRowKeys = ref([]);
+  const expandedRowKeys = ref([]);
 
-const handleReverseApprove = () => {
-  if (!canReverseApprove.value) {
-    proxy.$modal.msgWarning("璇烽�夋嫨宸查┏鍥炵殑鏁版嵁");
-    return;
-  }
-  const ids = selectedRows.value.map(item => item.id);
-  ElMessageBox.confirm("鍙嶅鍚庤褰曞皢鎭㈠涓哄緟瀹℃壒鐘舵�侊紝鏄惁纭鍙嶅锛�", "鍙嶅", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  const handleReverseApprove = () => {
+    if (!canReverseApprove.value) {
+      proxy.$modal.msgWarning("璇烽�夋嫨宸查┏鍥炵殑鏁版嵁");
+      return;
+    }
+    const ids = selectedRows.value.map(item => item.id);
+    ElMessageBox.confirm("鍙嶅鍚庤褰曞皢鎭㈠涓哄緟瀹℃壒鐘舵�侊紝鏄惁纭鍙嶅锛�", "鍙嶅", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
-        batchUnapproveStockInRecords({ids})
-            .then(() => {
-              proxy.$modal.msgSuccess("鍙嶅鎴愬姛");
-              getList();
-            })
-            .catch(() => {
-              proxy.$modal.msgError("鍙嶅澶辫触");
-            });
+        batchUnapproveStockInRecords({ ids })
+          .then(() => {
+            proxy.$modal.msgSuccess("鍙嶅鎴愬姛");
+            getList();
+          })
+          .catch(() => {
+            proxy.$modal.msgError("鍙嶅澶辫触");
+          });
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-const handleBatchApprove = () => {
-  if (!canBatchApprove.value) {
-    proxy.$modal.msgWarning("璇烽�夋嫨寰呭鎵圭殑鏁版嵁");
-    return;
-  }
-  const ids = selectedRows.value.map(item => item.id);
-  ElMessageBox.confirm("璇烽�夋嫨瀹℃壒缁撴灉", "瀹℃壒", {
-    confirmButtonText: "閫氳繃",
-    cancelButtonText: "椹冲洖",
-    type: "warning",
-    distinguishCancelAndClose: true,
-  })
+  const handleBatchApprove = () => {
+    if (!canBatchApprove.value) {
+      proxy.$modal.msgWarning("璇烽�夋嫨寰呭鎵圭殑鏁版嵁");
+      return;
+    }
+    const ids = selectedRows.value.map(item => item.id);
+    ElMessageBox.confirm("璇烽�夋嫨瀹℃壒缁撴灉", "瀹℃壒", {
+      confirmButtonText: "閫氳繃",
+      cancelButtonText: "椹冲洖",
+      type: "warning",
+      distinguishCancelAndClose: true,
+    })
       .then(() => {
-        batchApproveStockInRecords({ids, approvalStatus: 1})
+        batchApproveStockInRecords({ ids, approvalStatus: 1 })
+          .then(() => {
+            proxy.$modal.msgSuccess("瀹℃壒閫氳繃鎴愬姛");
+            getList();
+          })
+          .catch(() => {
+            proxy.$modal.msgError("瀹℃壒閫氳繃澶辫触");
+          });
+      })
+      .catch(action => {
+        if (action === "cancel") {
+          batchApproveStockInRecords({ ids, approvalStatus: 2 })
             .then(() => {
-              proxy.$modal.msgSuccess("瀹℃壒閫氳繃鎴愬姛");
+              proxy.$modal.msgSuccess("瀹℃壒椹冲洖鎴愬姛");
               getList();
             })
             .catch(() => {
-              proxy.$modal.msgError("瀹℃壒閫氳繃澶辫触");
+              proxy.$modal.msgError("瀹℃壒椹冲洖澶辫触");
             });
-      })
-      .catch((action) => {
-        if (action === "cancel") {
-          batchApproveStockInRecords({ids, approvalStatus: 2})
-              .then(() => {
-                proxy.$modal.msgSuccess("瀹℃壒椹冲洖鎴愬姛");
-                getList();
-              })
-              .catch(() => {
-                proxy.$modal.msgError("瀹℃壒椹冲洖澶辫触");
-              });
           return;
         }
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         // 鏍规嵁涓嶅悓鐨� tab 绫诲瀷璋冪敤涓嶅悓鐨勫鍑烘帴鍙�
-        proxy.download("/stockInRecord/exportStockInRecord", {type: props.type}, props.type === '0' ? "鍚堟牸鍏ュ簱.xlsx" : "涓嶅悎鏍煎叆搴�.xlsx");
+        proxy.download(
+          "/stockInRecord/exportStockInRecord",
+          { type: props.type },
+          props.type === "0" ? "鍚堟牸鍏ュ簱.xlsx" : "涓嶅悎鏍煎叆搴�.xlsx"
+        );
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-// 鍒犻櫎
-const handleDelete = () => {
-  if (!canDelete.value) {
-    proxy.$modal.msgWarning("璇烽�夋嫨寰呭鎵圭殑鏁版嵁");
-    return;
-  }
-  const ids = selectedRows.value.map(item => item.id);
+  // 鍒犻櫎
+  const handleDelete = () => {
+    if (!canDelete.value) {
+      proxy.$modal.msgWarning("璇烽�夋嫨寰呭鎵圭殑鏁版嵁");
+      return;
+    }
+    const ids = selectedRows.value.map(item => item.id);
 
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+    ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         batchDeletePendingStockInRecords(ids)
-            .then(() => {
-              proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-              getList();
-            })
-            .catch(() => {
-              proxy.$modal.msgError("鍒犻櫎澶辫触");
-            });
+          .then(() => {
+            proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+            getList();
+          })
+          .catch(() => {
+            proxy.$modal.msgError("鍒犻櫎澶辫触");
+          });
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-};
+  };
 
-onMounted(() => {
-  getList();
-  fetchStockRecordTypeOptions();
-});
-
-watch(
-  () => props.topParentProductId,
-  () => {
-    page.current = 1;
+  onMounted(() => {
     getList();
-  }
-);
+    fetchStockRecordTypeOptions();
+  });
+
+  watch(
+    () => props.topParentProductId,
+    () => {
+      page.current = 1;
+      getList();
+    }
+  );
 </script>
 
 <style scoped lang="scss">
-.actions {
-  display: flex;
-  justify-content: flex-end;
-  margin-bottom: 10px;
-}
+  .actions {
+    display: flex;
+    justify-content: flex-end;
+    margin-bottom: 10px;
+  }
 </style>
diff --git a/src/views/inventoryManagement/stockManagement/Record.vue b/src/views/inventoryManagement/stockManagement/Record.vue
index dee5e66..934ae06 100644
--- a/src/views/inventoryManagement/stockManagement/Record.vue
+++ b/src/views/inventoryManagement/stockManagement/Record.vue
@@ -1,44 +1,44 @@
 <template>
   <div>
     <div class="search_form mb10">
-      <el-form
-          ref="searchFormRef"
-          :model="searchForm"
-          class="demo-form-inline"
-      >
+      <el-form ref="searchFormRef"
+               :model="searchForm"
+               class="demo-form-inline">
         <el-row :gutter="20">
           <el-col :span="4">
-            <el-form-item label="浜у搧澶х被" prop="productName">
+            <el-form-item label="浜у搧澶х被"
+                          prop="productName">
               <el-input v-model="searchForm.productName"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
-
           <el-col :span="4">
-            <el-form-item label="浜у搧瑙勬牸" prop="model">
+            <el-form-item label="瑙勬牸鍨嬪彿"
+                          prop="model">
               <el-input v-model="searchForm.model"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <el-col :span="4">
-            <el-form-item label="鎵瑰彿" prop="batchNo">
+            <el-form-item label="鎵瑰彿"
+                          prop="batchNo">
               <el-input v-model="searchForm.batchNo"
                         style="width: 240px"
                         placeholder="璇疯緭鍏�"
-                        clearable/>
+                        clearable />
             </el-form-item>
           </el-col>
           <!-- 鎸夐挳 -->
           <el-col :span="4">
             <el-form-item>
-              <el-button type="primary" @click="getList">
+              <el-button type="primary"
+                         @click="getList">
                 鎼滅储
               </el-button>
-
               <el-button @click="resetSearch">
                 閲嶇疆
               </el-button>
@@ -47,337 +47,313 @@
         </el-row>
       </el-form>
       <div>
-        <el-button type="primary" @click="isShowNewModal = true"
-          >鏂板搴撳瓨</el-button
-        >
-        <el-button
-          type="info"
-          plain
-          icon="Upload"
-          @click="isShowImportModal = true"
-        >
+        <el-button type="primary"
+                   @click="isShowNewModal = true">鏂板搴撳瓨</el-button>
+        <el-button type="info"
+                   plain
+                   icon="Upload"
+                   @click="isShowImportModal = true">
           瀵煎叆搴撳瓨
         </el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
       </div>
     </div>
     <div class="table_list">
-      <el-table
-        :data="tableData"
-        border
-        v-loading="tableLoading"
-        @selection-change="handleSelectionChange"
-        :expand-row-keys="expandedRowKeys"
-        :row-key="(row, index) => index"
-        style="width: 100%"
-        :row-class-name="tableRowClassName"
-        height="calc(100vh - 18.5em)"
-      >
-        <el-table-column align="center" type="selection" width="55" />
-        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
-        <el-table-column
-          label="浜у搧鍚嶇О"
-          prop="productName"
-          show-overflow-tooltip
-        />
-        <el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
-        <el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
-        <el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
-        <el-table-column
-          label="鍚堟牸搴撳瓨鏁伴噺"
-          prop="qualifiedQuantity"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="涓嶅悎鏍煎簱瀛樻暟閲�"
-          prop="unQualifiedQuantity"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍚堟牸鍐荤粨鏁伴噺"
-          prop="qualifiedLockedQuantity"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="涓嶅悎鏍煎喕缁撴暟閲�"
-          prop="unQualifiedLockedQuantity"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="搴撳瓨棰勮鏁伴噺"
-          prop="warnNum"
-          show-overflow-tooltip
-        />
-        <el-table-column label="澶囨敞" prop="remark" show-overflow-tooltip />
-        <el-table-column
-          label="鏈�杩戞洿鏂版椂闂�"
-          prop="updateTime"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          fixed="right"
-          label="鎿嶄綔"
-          min-width="80"
-          align="center"
-        >
+      <el-table :data="tableData"
+                border
+                v-loading="tableLoading"
+                @selection-change="handleSelectionChange"
+                :expand-row-keys="expandedRowKeys"
+                :row-key="(row, index) => index"
+                style="width: 100%"
+                :row-class-name="tableRowClassName"
+                height="calc(100vh - 18.5em)">
+        <el-table-column align="center"
+                         type="selection"
+                         width="55" />
+        <el-table-column align="center"
+                         label="搴忓彿"
+                         type="index"
+                         width="60" />
+        <el-table-column label="浜у搧鍚嶇О"
+                         prop="productName"
+                         show-overflow-tooltip />
+        <el-table-column label="瑙勬牸鍨嬪彿"
+                         prop="model"
+                         show-overflow-tooltip />
+        <el-table-column label="鍗曚綅"
+                         prop="unit"
+                         show-overflow-tooltip />
+        <el-table-column label="鎵瑰彿"
+                         prop="batchNo"
+                         show-overflow-tooltip />
+        <el-table-column label="鍚堟牸搴撳瓨鏁伴噺"
+                         prop="qualifiedQuantity"
+                         show-overflow-tooltip />
+        <el-table-column label="涓嶅悎鏍煎簱瀛樻暟閲�"
+                         prop="unQualifiedQuantity"
+                         show-overflow-tooltip />
+        <el-table-column label="鍚堟牸鍐荤粨鏁伴噺"
+                         prop="qualifiedLockedQuantity"
+                         show-overflow-tooltip />
+        <el-table-column label="涓嶅悎鏍煎喕缁撴暟閲�"
+                         prop="unQualifiedLockedQuantity"
+                         show-overflow-tooltip />
+        <el-table-column label="搴撳瓨棰勮鏁伴噺"
+                         prop="warnNum"
+                         show-overflow-tooltip />
+        <el-table-column label="澶囨敞"
+                         prop="remark"
+                         show-overflow-tooltip />
+        <el-table-column label="鏈�杩戞洿鏂版椂闂�"
+                         prop="updateTime"
+                         show-overflow-tooltip />
+        <el-table-column fixed="right"
+                         label="鎿嶄綔"
+                         min-width="80"
+                         align="center">
           <template #default="scope">
-            <el-button
-              link
-              type="primary"
-              @click="showDetailModal(scope.row)"
-              >璇︽儏</el-button
-            >
+            <el-button link
+                       type="primary"
+                       @click="showDetailModal(scope.row)">璇︽儏</el-button>
           </template>
         </el-table-column>
       </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        layout="total, sizes, prev, pager, next, jumper"
-        :page="page.current"
-        :limit="page.size"
-        @pagination="paginationChange"
-      />
+      <pagination v-show="total > 0"
+                  :total="total"
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :page="page.current"
+                  :limit="page.size"
+                  @pagination="paginationChange" />
     </div>
-    <batch-no-qty-detail
-      v-if="isShowDetailModal"
-      v-model:visible="isShowDetailModal"
-      :record="record"
-      @subtract="handleDetailSubtract"
-      @frozen="handleDetailFrozen"
-      @thaw="handleDetailThaw"
-    />
-    <new-stock-inventory
-      v-if="isShowNewModal"
-      v-model:visible="isShowNewModal"
-      :top-product-parent-id="props.productId"
-      @completed="handleQuery"
-    />
-
-    <subtract-stock-inventory
-      v-if="isShowSubtractModal"
-      v-model:visible="isShowSubtractModal"
-      :record="record"
-      :type="record.stockType"
-      @completed="handleQuery"
-    />
+    <batch-no-qty-detail v-if="isShowDetailModal"
+                         v-model:visible="isShowDetailModal"
+                         :record="record"
+                         @subtract="handleDetailSubtract"
+                         @frozen="handleDetailFrozen"
+                         @thaw="handleDetailThaw" />
+    <new-stock-inventory v-if="isShowNewModal"
+                         v-model:visible="isShowNewModal"
+                         :top-product-parent-id="props.productId"
+                         @completed="handleQuery" />
+    <subtract-stock-inventory v-if="isShowSubtractModal"
+                              v-model:visible="isShowSubtractModal"
+                              :record="record"
+                              :type="record.stockType"
+                              @completed="handleQuery" />
     <!-- 瀵煎叆搴撳瓨-->
-    <import-stock-inventory
-      v-if="isShowImportModal"
-      v-model:visible="isShowImportModal"
-      type="qualified"
-      @uploadSuccess="handleQuery"
-    />
+    <import-stock-inventory v-if="isShowImportModal"
+                            v-model:visible="isShowImportModal"
+                            type="qualified"
+                            @uploadSuccess="handleQuery" />
     <!-- 鍐荤粨/瑙e喕搴撳瓨-->
-    <frozen-and-thaw-stock-inventory
-      v-if="isShowFrozenAndThawModal"
-      v-model:visible="isShowFrozenAndThawModal"
-      :record="record"
-      :operation-type="operationType"
-      :type="record.stockType"
-      @completed="handleQuery"
-    />
+    <frozen-and-thaw-stock-inventory v-if="isShowFrozenAndThawModal"
+                                     v-model:visible="isShowFrozenAndThawModal"
+                                     :record="record"
+                                     :operation-type="operationType"
+                                     :type="record.stockType"
+                                     @completed="handleQuery" />
   </div>
 </template>
 
 <script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue";
-import { ElMessage, ElMessageBox } from "element-plus";
-import { getStockInventoryListPageCombined } from "@/api/inventoryManagement/stockInventory.js";
-const props = defineProps({
-  productId: {
-    type: Number,
-    required: true,
-    default: 0,
-  },
-});
+  import pagination from "@/components/PIMTable/Pagination.vue";
+  import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue";
+  import { ElMessage, ElMessageBox } from "element-plus";
+  import { getStockInventoryListPageCombined } from "@/api/inventoryManagement/stockInventory.js";
+  const props = defineProps({
+    productId: {
+      type: Number,
+      required: true,
+      default: 0,
+    },
+  });
 
-const NewStockInventory = defineAsyncComponent(() =>
-  import("@/views/inventoryManagement/stockManagement/New.vue")
-);
-const SubtractStockInventory = defineAsyncComponent(() =>
-  import("@/views/inventoryManagement/stockManagement/Subtract.vue")
-);
-const ImportStockInventory = defineAsyncComponent(() =>
-  import("@/views/inventoryManagement/stockManagement/Import.vue")
-);
-const FrozenAndThawStockInventory = defineAsyncComponent(() =>
-  import("@/views/inventoryManagement/stockManagement/FrozenAndThaw.vue")
-);
-const BatchNoQtyDetail = defineAsyncComponent(() =>
-  import("@/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue")
-);
-const { proxy } = getCurrentInstance();
-const tableData = ref([]);
-const selectedRows = ref([]);
-const record = ref({});
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-});
-const total = ref(0);
-// 鏄惁鏄剧ず鏂板寮规
-const isShowNewModal = ref(false);
-// 鏄惁鏄剧ず棰嗙敤寮规
-const isShowSubtractModal = ref(false);
-// 鏄惁鏄剧ず鍐荤粨/瑙e喕寮规
-const isShowFrozenAndThawModal = ref(false);
-// 鏄惁鏄剧ず璇︽儏寮规
-const isShowDetailModal = ref(false);
-// 鎿嶄綔绫诲瀷
-const operationType = ref("frozen");
-// 鏄惁鏄剧ず瀵煎叆寮规
-const isShowImportModal = ref(false);
-const data = reactive({
-  searchForm: {
-    productName: "",
-    model: "",
-    batchNo: "",
-    topParentProductId: props.productId,
-  },
-});
-const { searchForm } = toRefs(data);
-const searchFormRef = ref(null);
+  const NewStockInventory = defineAsyncComponent(() =>
+    import("@/views/inventoryManagement/stockManagement/New.vue")
+  );
+  const SubtractStockInventory = defineAsyncComponent(() =>
+    import("@/views/inventoryManagement/stockManagement/Subtract.vue")
+  );
+  const ImportStockInventory = defineAsyncComponent(() =>
+    import("@/views/inventoryManagement/stockManagement/Import.vue")
+  );
+  const FrozenAndThawStockInventory = defineAsyncComponent(() =>
+    import("@/views/inventoryManagement/stockManagement/FrozenAndThaw.vue")
+  );
+  const BatchNoQtyDetail = defineAsyncComponent(() =>
+    import("@/views/inventoryManagement/stockManagement/BatchNoQtyDetail.vue")
+  );
+  const { proxy } = getCurrentInstance();
+  const tableData = ref([]);
+  const selectedRows = ref([]);
+  const record = ref({});
+  const tableLoading = ref(false);
+  const page = reactive({
+    current: 1,
+    size: 100,
+  });
+  const total = ref(0);
+  // 鏄惁鏄剧ず鏂板寮规
+  const isShowNewModal = ref(false);
+  // 鏄惁鏄剧ず棰嗙敤寮规
+  const isShowSubtractModal = ref(false);
+  // 鏄惁鏄剧ず鍐荤粨/瑙e喕寮规
+  const isShowFrozenAndThawModal = ref(false);
+  // 鏄惁鏄剧ず璇︽儏寮规
+  const isShowDetailModal = ref(false);
+  // 鎿嶄綔绫诲瀷
+  const operationType = ref("frozen");
+  // 鏄惁鏄剧ず瀵煎叆寮规
+  const isShowImportModal = ref(false);
+  const data = reactive({
+    searchForm: {
+      productName: "",
+      model: "",
+      batchNo: "",
+      topParentProductId: props.productId,
+    },
+  });
+  const { searchForm } = toRefs(data);
+  const searchFormRef = ref(null);
 
-const resetSearch = () => {
-  searchFormRef.value?.resetFields();
-  page.current = 1;
-  getList();
-}
+  const resetSearch = () => {
+    searchFormRef.value?.resetFields();
+    page.current = 1;
+    getList();
+  };
 
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const paginationChange = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  getStockInventoryListPageCombined({ ...searchForm.value, ...page })
-    .then((res) => {
-      tableLoading.value = false;
-      tableData.value = res.data.records;
-      total.value = res.data.total;
-      // 鏁版嵁鍔犺浇瀹屾垚鍚庢鏌ュ簱瀛�
-      // checkStockAndCreatePurchase();
+  // 鏌ヨ鍒楄〃
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const paginationChange = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    getStockInventoryListPageCombined({ ...searchForm.value, ...page })
+      .then(res => {
+        tableLoading.value = false;
+        tableData.value = res.data.records;
+        total.value = res.data.total;
+        // 鏁版嵁鍔犺浇瀹屾垚鍚庢鏌ュ簱瀛�
+        // checkStockAndCreatePurchase();
+      })
+      .catch(() => {
+        tableLoading.value = false;
+      });
+  };
+
+  const handleFileSuccess = response => {
+    const { code, msg } = response;
+    if (code == 200) {
+      ElMessage({ message: "瀵煎叆鎴愬姛", type: "success" });
+      upload.open = false;
+      emits("uploadSuccess");
+    } else {
+      ElMessage({ message: msg, type: "error" });
+    }
+  };
+
+  // 鐐瑰嚮棰嗙敤
+  const showSubtractModal = row => {
+    record.value = row;
+    isShowSubtractModal.value = true;
+  };
+
+  // 鐐瑰嚮璇︽儏
+  const showDetailModal = row => {
+    if (!row?.productId || !row?.productModelId) {
+      proxy.$modal.msgError("褰撳墠鏁版嵁缂哄皯浜у搧ID鎴栬鏍煎瀷鍙稩D");
+      return;
+    }
+    record.value = row;
+    isShowDetailModal.value = true;
+  };
+
+  const handleDetailSubtract = row => {
+    isShowDetailModal.value = false;
+    showSubtractModal(row);
+  };
+
+  const handleDetailFrozen = row => {
+    isShowDetailModal.value = false;
+    showFrozenModal(row);
+  };
+
+  const handleDetailThaw = row => {
+    isShowDetailModal.value = false;
+    showThawModal(row);
+  };
+
+  // 鐐瑰嚮鍐荤粨
+  const showFrozenModal = row => {
+    record.value = row;
+    isShowFrozenAndThawModal.value = true;
+    operationType.value = "frozen";
+  };
+
+  // 鐐瑰嚮瑙e喕
+  const showThawModal = row => {
+    record.value = row;
+    isShowFrozenAndThawModal.value = true;
+    operationType.value = "thaw";
+  };
+
+  // 琛ㄦ牸閫夋嫨鏁版嵁
+  const handleSelectionChange = selection => {
+    // 杩囨护鎺夊瓙鏁版嵁
+    selectedRows.value = selection.filter(item => item.id);
+    console.log("selection", selectedRows.value);
+  };
+  const expandedRowKeys = ref([]);
+
+  // 琛ㄦ牸琛岀被鍚�
+  const tableRowClassName = ({ row }) => {
+    const stock = Number(row?.qualifiedUnLockedQuantity ?? 0);
+    const warn = Number(row?.warnNum ?? 0);
+    if (!Number.isFinite(stock) || !Number.isFinite(warn)) {
+      return "";
+    }
+    return stock < warn ? "row-low-stock" : "";
+  };
+
+  // 瀵煎嚭
+  const handleOut = () => {
+    ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
     })
-    .catch(() => {
-      tableLoading.value = false;
-    });
-};
+      .then(() => {
+        proxy.download(
+          "/stockInventory/exportStockInventory",
+          { topParentProductId: props.productId },
+          "搴撳瓨淇℃伅.xlsx"
+        );
+      })
+      .catch(() => {
+        proxy.$modal.msg("宸插彇娑�");
+      });
+  };
 
-const handleFileSuccess = (response) => {
-  const { code, msg } = response;
-  if (code == 200) {
-    ElMessage({ message: "瀵煎叆鎴愬姛", type: "success" });
-    upload.open = false;
-    emits("uploadSuccess");
-  } else {
-    ElMessage({ message: msg, type: "error" });
-  }
-};
-
-// 鐐瑰嚮棰嗙敤
-const showSubtractModal = (row) => {
-  record.value = row;
-  isShowSubtractModal.value = true;
-};
-
-// 鐐瑰嚮璇︽儏
-const showDetailModal = (row) => {
-  if (!row?.productId || !row?.productModelId) {
-    proxy.$modal.msgError("褰撳墠鏁版嵁缂哄皯浜у搧ID鎴栬鏍煎瀷鍙稩D");
-    return;
-  }
-  record.value = row;
-  isShowDetailModal.value = true;
-};
-
-const handleDetailSubtract = (row) => {
-  isShowDetailModal.value = false;
-  showSubtractModal(row);
-};
-
-const handleDetailFrozen = (row) => {
-  isShowDetailModal.value = false;
-  showFrozenModal(row);
-};
-
-const handleDetailThaw = (row) => {
-  isShowDetailModal.value = false;
-  showThawModal(row);
-};
-
-// 鐐瑰嚮鍐荤粨
-const showFrozenModal = (row) => {
-  record.value = row;
-  isShowFrozenAndThawModal.value = true;
-  operationType.value = "frozen";
-};
-
-// 鐐瑰嚮瑙e喕
-const showThawModal = (row) => {
-  record.value = row;
-  isShowFrozenAndThawModal.value = true;
-  operationType.value = "thaw";
-};
-
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
-  // 杩囨护鎺夊瓙鏁版嵁
-  selectedRows.value = selection.filter((item) => item.id);
-  console.log("selection", selectedRows.value);
-};
-const expandedRowKeys = ref([]);
-
-// 琛ㄦ牸琛岀被鍚�
-const tableRowClassName = ({ row }) => {
-  const stock = Number(row?.qualifiedUnLockedQuantity ?? 0);
-  const warn = Number(row?.warnNum ?? 0);
-  if (!Number.isFinite(stock) || !Number.isFinite(warn)) {
-    return "";
-  }
-  return stock < warn ? "row-low-stock" : "";
-};
-
-// 瀵煎嚭
-const handleOut = () => {
-  ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      proxy.download(
-        "/stockInventory/exportStockInventory",
-        { topParentProductId: props.productId },
-        "搴撳瓨淇℃伅.xlsx"
-      );
-    })
-    .catch(() => {
-      proxy.$modal.msg("宸插彇娑�");
-    });
-};
-
-onMounted(() => {
-  getList();
-});
+  onMounted(() => {
+    getList();
+  });
 </script>
 
 <style scoped lang="scss">
-:deep(.row-low-stock td) {
-  background-color: #fde2e2;
-  color: #c45656;
-}
+  :deep(.row-low-stock td) {
+    background-color: #fde2e2;
+    color: #c45656;
+  }
 
-:deep(.row-low-stock:hover > td) {
-  background-color: #fcd4d4;
-}
+  :deep(.row-low-stock:hover > td) {
+    background-color: #fcd4d4;
+  }
 </style>
diff --git a/src/views/procurementManagement/procurementPlan/index.vue b/src/views/procurementManagement/procurementPlan/index.vue
index 42a1bcf..2232272 100644
--- a/src/views/procurementManagement/procurementPlan/index.vue
+++ b/src/views/procurementManagement/procurementPlan/index.vue
@@ -1,141 +1,183 @@
 <template>
   <div class="app-container">
     <!-- 鎼滅储鍖哄煙 -->
-    <el-card class="search-card" shadow="never">
-      <el-form :model="searchForm" :inline="true" class="search-form">
+    <el-card class="search-card"
+             shadow="never">
+      <el-form :model="searchForm"
+               :inline="true"
+               class="search-form">
         <el-form-item label="璁″垝鍚嶇О">
-          <el-input v-model="searchForm.planName" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" clearable />
+          <el-input v-model="searchForm.planName"
+                    placeholder="璇疯緭鍏ヨ鍒掑悕绉�"
+                    clearable />
         </el-form-item>
         <el-form-item label="鐘舵��">
-          <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨鐘舵��" clearable style="width: 150px">
-            <el-option label="鍚敤" value="active" />
-            <el-option label="绂佺敤" value="disabled" />
+          <el-select v-model="searchForm.status"
+                     placeholder="璇烽�夋嫨鐘舵��"
+                     clearable
+                     style="width: 150px">
+            <el-option label="鍚敤"
+                       value="active" />
+            <el-option label="绂佺敤"
+                       value="disabled" />
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="handleSearch">
-            <el-icon><Search /></el-icon>
+          <el-button type="primary"
+                     @click="handleSearch">
+            <el-icon>
+              <Search />
+            </el-icon>
             鎼滅储
           </el-button>
           <el-button @click="handleReset">
-            <el-icon><Refresh /></el-icon>
+            <el-icon>
+              <Refresh />
+            </el-icon>
             閲嶇疆
           </el-button>
         </el-form-item>
       </el-form>
     </el-card>
-
     <!-- 鎿嶄綔鎸夐挳 -->
-    <el-card class="table-card" shadow="never">
+    <el-card class="table-card"
+             shadow="never">
       <div class="table-header">
         <div class="table-title">閲囪喘璁″垝鍒楄〃</div>
         <div class="table-actions">
-          <el-button type="primary" @click="handleAdd">
-            <el-icon><Plus /></el-icon>
+          <el-button type="primary"
+                     @click="handleAdd">
+            <el-icon>
+              <Plus />
+            </el-icon>
             鏂板璁″垝
           </el-button>
-          <el-button type="info" @click="handleExport">
-            <el-icon><Download /></el-icon>
+          <el-button type="info"
+                     @click="handleExport">
+            <el-icon>
+              <Download />
+            </el-icon>
             瀵煎嚭
           </el-button>
         </div>
       </div>
-
       <!-- 鏁版嵁琛ㄦ牸 -->
-      <el-table
-        v-loading="loading"
-        :data="tableData"
-        stripe
-        border
-        style="width: 100%"
-      >
-        <el-table-column prop="planName" label="璁″垝鍚嶇О" min-width="150" />
-        <el-table-column prop="description" label="鎻忚堪" min-width="200" show-overflow-tooltip />
-        <el-table-column prop="formula" label="璁$畻鍏紡" min-width="200" show-overflow-tooltip>
+      <el-table v-loading="loading"
+                :data="tableData"
+                stripe
+                border
+                style="width: 100%">
+        <el-table-column prop="planName"
+                         label="璁″垝鍚嶇О"
+                         min-width="150" />
+        <el-table-column prop="description"
+                         label="鎻忚堪"
+                         min-width="200"
+                         show-overflow-tooltip />
+        <el-table-column prop="formula"
+                         label="璁$畻鍏紡"
+                         min-width="200"
+                         show-overflow-tooltip>
           <template #default="{ row }">
-            <el-tag type="info" size="small">{{ row.formula }}</el-tag>
+            <el-tag type="info"
+                    size="small">{{ row.formula }}</el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="status" label="鐘舵��" width="80" align="center">
+        <el-table-column prop="status"
+                         label="鐘舵��"
+                         width="80"
+                         align="center">
           <template #default="{ row }">
-            <el-tag :type="row.status === 'active' ? 'success' : 'info'" size="small">
+            <el-tag :type="row.status === 'active' ? 'success' : 'info'"
+                    size="small">
               {{ row.status === 'active' ? '鍚敤' : '绂佺敤' }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="updateTime" label="鏈�鍚庤绠楁椂闂�" width="160" />
-        <el-table-column label="鎿嶄綔" width="200" fixed="right" align="center">
+        <el-table-column prop="updateTime"
+                         label="鏈�鍚庤绠楁椂闂�"
+                         width="160" />
+        <el-table-column label="鎿嶄綔"
+                         width="200"
+                         fixed="right"
+                         align="center">
           <template #default="{ row }">
-            <el-button type="primary" link @click="handleEdit(row)">缂栬緫</el-button>
-            <el-button type="success" link @click="handleCalculate(row)">璁$畻</el-button>
-            <el-button type="danger" link @click="handleDelete(row)">鍒犻櫎</el-button>
+            <el-button type="primary"
+                       link
+                       @click="handleEdit(row)">缂栬緫</el-button>
+            <el-button type="success"
+                       link
+                       @click="handleCalculate(row)">璁$畻</el-button>
+            <el-button type="danger"
+                       link
+                       @click="handleDelete(row)">鍒犻櫎</el-button>
           </template>
         </el-table-column>
       </el-table>
-
       <!-- 鍒嗛〉 -->
       <div class="pagination-container">
-        <el-pagination
-          v-model:current-page="pagination.current"
-          v-model:page-size="pagination.size"
-          :page-sizes="[10, 20, 50, 100]"
-          :total="total"
-          layout="total, sizes, prev, pager, next, jumper"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
+        <el-pagination v-model:current-page="pagination.current"
+                       v-model:page-size="pagination.size"
+                       :page-sizes="[10, 20, 50, 100]"
+                       :total="total"
+                       layout="total, sizes, prev, pager, next, jumper"
+                       @size-change="handleSizeChange"
+                       @current-change="handleCurrentChange" />
       </div>
     </el-card>
-
     <!-- 鏂板/缂栬緫瀵硅瘽妗� -->
-    <FormDialog
-      v-model="dialogVisible"
-      :title="dialogType === 'add' ? '鏂板閲囪喘璁″垝' : '缂栬緫閲囪喘璁″垝'"
-      :width="'1000px'"
-      :operation-type="dialogType"
-      :close-on-click-modal="false"
-      @close="dialogVisible = false"
-      @confirm="handleSubmit"
-      @cancel="dialogVisible = false"
-    >
+    <FormDialog v-model="dialogVisible"
+                :title="dialogType === 'add' ? '鏂板閲囪喘璁″垝' : '缂栬緫閲囪喘璁″垝'"
+                :width="'1000px'"
+                :operation-type="dialogType"
+                :close-on-click-modal="false"
+                @close="dialogVisible = false"
+                @confirm="handleSubmit"
+                @cancel="dialogVisible = false">
       <div class="form-container">
         <!-- 鍩烘湰淇℃伅 -->
         <div class="form-section">
           <div class="section-title">鍩烘湰淇℃伅</div>
-          <el-form
-            ref="formRef"
-            :model="formData"
-            :rules="formRules"
-            label-width="120px"
-          >
+          <el-form ref="formRef"
+                   :model="formData"
+                   :rules="formRules"
+                   label-width="120px">
             <el-row :gutter="20">
               <el-col :span="12">
-                <el-form-item label="缂栫爜" prop="code">
-                  <el-input v-model="formData.code" placeholder="绯荤粺鑷姩鐢熸垚" disabled />
+                <el-form-item label="缂栫爜"
+                              prop="code">
+                  <el-input v-model="formData.code"
+                            placeholder="绯荤粺鑷姩鐢熸垚"
+                            disabled />
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="鍚嶇О" prop="planName" required>
-                  <el-input v-model="formData.planName" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" />
+                <el-form-item label="鍚嶇О"
+                              prop="planName"
+                              required>
+                  <el-input v-model="formData.planName"
+                            placeholder="璇疯緭鍏ヨ鍒掑悕绉�" />
                 </el-form-item>
               </el-col>
             </el-row>
-
-            <el-form-item label="鎻忚堪" prop="description">
-              <el-input
-                v-model="formData.description"
-                type="textarea"
-                :rows="3"
-                placeholder="璇疯緭鍏ヨ鍒掓弿杩�"
-              />
+            <el-form-item label="鎻忚堪"
+                          prop="description">
+              <el-input v-model="formData.description"
+                        type="textarea"
+                        :rows="3"
+                        placeholder="璇疯緭鍏ヨ鍒掓弿杩�" />
             </el-form-item>
-
             <el-row :gutter="20">
               <el-col :span="12">
-                <el-form-item label="鐘舵��" prop="status">
-                  <el-select v-model="formData.status" placeholder="璇烽�夋嫨鐘舵��" style="width: 100%">
-                    <el-option label="鍚敤" value="active" />
-                    <el-option label="绂佺敤" value="disabled" />
+                <el-form-item label="鐘舵��"
+                              prop="status">
+                  <el-select v-model="formData.status"
+                             placeholder="璇烽�夋嫨鐘舵��"
+                             style="width: 100%">
+                    <el-option label="鍚敤"
+                               value="active" />
+                    <el-option label="绂佺敤"
+                               value="disabled" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -147,12 +189,13 @@
             </el-row>
           </el-form>
         </div>
-
         <!-- 璁$畻鍙傛暟 -->
         <div class="form-section">
           <div class="section-title">璁$畻鍙傛暟</div>
-          <el-tabs v-model="activeTab" class="param-tabs">
-            <el-tab-pane label="闇�姹傚弬鏁�" name="demand">
+          <el-tabs v-model="activeTab"
+                   class="param-tabs">
+            <el-tab-pane label="闇�姹傚弬鏁�"
+                         name="demand">
               <div class="checkbox-group">
                 <el-checkbox v-model="formData.considerExistingStock">鑰冭檻鐜版湁搴撳瓨</el-checkbox>
                 <el-checkbox v-model="formData.warehouseControl">浠撳簱杩愯MRP鐨勬帶鍒�</el-checkbox>
@@ -163,7 +206,8 @@
                 <el-checkbox v-model="formData.negativeStockAsDemand">璐熷簱瀛樹綔涓洪渶姹�</el-checkbox>
               </div>
             </el-tab-pane>
-            <el-tab-pane label="璁$畻鍙傛暟" name="calculation">
+            <el-tab-pane label="璁$畻鍙傛暟"
+                         name="calculation">
               <div class="checkbox-group">
                 <el-checkbox v-model="formData.considerExistingStock">鑰冭檻鐜版湁搴撳瓨</el-checkbox>
                 <el-checkbox v-model="formData.warehouseControl">浠撳簱杩愯MRP鐨勬帶鍒�</el-checkbox>
@@ -176,7 +220,6 @@
             </el-tab-pane>
           </el-tabs>
         </div>
-
         <!-- 姹囨�诲悎骞堕�夐」 -->
         <div class="form-section">
           <div class="section-title">姹囨�诲悎骞堕�夐」</div>
@@ -186,20 +229,20 @@
             <el-checkbox v-model="formData.summaryDemandDate">闇�姹傛棩鏈�</el-checkbox>
           </div>
         </div>
-
         <!-- 璁$畻鍏紡 -->
         <div class="form-section">
           <div class="section-title">璁$畻鍏紡</div>
           <div class="formula-input-section">
-            <el-form-item label="璁$畻鍏紡" prop="formula" required>
-              <el-input
-                v-model="formData.formula"
-                placeholder="渚嬪: 棰勮鍑哄簱鏁伴噺 - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺"
-                @input="validateFormula"
-              />
+            <el-form-item label="璁$畻鍏紡"
+                          prop="formula"
+                          required>
+              <el-input v-model="formData.formula"
+                        placeholder="渚嬪: 棰勮鍑哄簱鏁伴噺 - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺"
+                        @input="validateFormula" />
             </el-form-item>
             <div class="formula-help">
-              <el-text type="info" size="small">
+              <el-text type="info"
+                       size="small">
                 鏀寔鍙橀噺锛氶璁″嚭搴撴暟閲忋�佺幇鏈夊簱瀛樸�佸畨鍏ㄥ簱瀛樸�侀璁″叆搴撴暟閲�
               </el-text>
             </div>
@@ -207,87 +250,117 @@
         </div>
       </div>
     </FormDialog>
-
     <!-- 浜у搧閫夋嫨瀵硅瘽妗� -->
-    <FormDialog
-      v-model="productSelectDialogVisible"
-      title="閫夋嫨浜у搧"
-      :width="'800px'"
-      :close-on-click-modal="false"
-      @close="productSelectDialogVisible = false"
-      @confirm="handleConfirmProductSelection"
-      @cancel="productSelectDialogVisible = false"
-    >
+    <FormDialog v-model="productSelectDialogVisible"
+                title="閫夋嫨浜у搧"
+                :width="'800px'"
+                :close-on-click-modal="false"
+                @close="productSelectDialogVisible = false"
+                @confirm="handleConfirmProductSelection"
+                @cancel="productSelectDialogVisible = false">
       <div class="product-select">
-        <el-alert
-          title="璇烽�夋嫨瑕佽绠楃殑浜у搧"
-          type="info"
-          :closable="false"
-          show-icon
-        >
+        <el-alert title="璇烽�夋嫨瑕佽绠楃殑浜у搧"
+                  type="info"
+                  :closable="false"
+                  show-icon>
           <template #default>
             <p>閫夋嫨浜у搧鍚庯紝绯荤粺灏嗘牴鎹綋鍓嶈绠楀叕寮忓拰浜у搧搴撳瓨鎯呭喌杩涜璁$畻銆�</p>
           </template>
         </el-alert>
-
-        <el-table
-          v-loading="productLoading"
-          :data="productList"
-          @selection-change="handleProductSelectionChange"
-          stripe
-          border
-          style="width: 100%; margin-top: 20px;"
-        >
-          <el-table-column type="selection" width="55" />
-          <el-table-column prop="productCategory" label="浜у搧澶х被" min-width="150" />
-          <el-table-column prop="specificationModel" label="浜у搧瑙勬牸" width="120" />
-          <el-table-column prop="inboundNum0" label="鐜版湁搴撳瓨" width="100" align="right" />
-          <el-table-column prop="inboundNum" label="瀹夊叏搴撳瓨" width="100" align="right" />
-          <el-table-column prop="inboundNum" label="棰勮鍑哄簱" width="100" align="right" />
-          <el-table-column prop="inboundNum0" label="棰勮鍏ュ簱" width="100" align="right" />
+        <el-table v-loading="productLoading"
+                  :data="productList"
+                  @selection-change="handleProductSelectionChange"
+                  stripe
+                  border
+                  style="width: 100%; margin-top: 20px;">
+          <el-table-column type="selection"
+                           width="55" />
+          <el-table-column prop="productCategory"
+                           label="浜у搧澶х被"
+                           min-width="150" />
+          <el-table-column prop="specificationModel"
+                           label="瑙勬牸鍨嬪彿"
+                           width="120" />
+          <el-table-column prop="inboundNum0"
+                           label="鐜版湁搴撳瓨"
+                           width="100"
+                           align="right" />
+          <el-table-column prop="inboundNum"
+                           label="瀹夊叏搴撳瓨"
+                           width="100"
+                           align="right" />
+          <el-table-column prop="inboundNum"
+                           label="棰勮鍑哄簱"
+                           width="100"
+                           align="right" />
+          <el-table-column prop="inboundNum0"
+                           label="棰勮鍏ュ簱"
+                           width="100"
+                           align="right" />
         </el-table>
       </div>
     </FormDialog>
-
     <!-- 璁$畻缁撴灉瀵硅瘽妗� -->
-    <FormDialog
-      v-model="calculateDialogVisible"
-      title="閲囪喘璁$畻缁撴灉"
-      :width="'1000px'"
-      :close-on-click-modal="false"
-      @close="calculateDialogVisible = false"
-      @confirm="handleCreatePurchaseOrder"
-      @cancel="calculateDialogVisible = false"
-    >
+    <FormDialog v-model="calculateDialogVisible"
+                title="閲囪喘璁$畻缁撴灉"
+                :width="'1000px'"
+                :close-on-click-modal="false"
+                @close="calculateDialogVisible = false"
+                @confirm="handleCreatePurchaseOrder"
+                @cancel="calculateDialogVisible = false">
       <div class="calculate-result">
-        <el-alert
-          title="璁$畻缁撴灉"
-          type="success"
-          :closable="false"
-          show-icon
-        >
+        <el-alert title="璁$畻缁撴灉"
+                  type="success"
+                  :closable="false"
+                  show-icon>
           <template #default>
             <p>鍩轰簬褰撳墠閰嶇疆鐨勮绠楀叕寮忓拰搴撳瓨鎯呭喌锛岀郴缁熷凡璁$畻鍑哄悇浜у搧鐨勯噰璐渶姹傘��</p>
           </template>
         </el-alert>
-
-        <el-table :data="calculateResult" stripe border style="width: 100%; margin-top: 20px;">
-          <el-table-column prop="productCategory" label="浜у搧澶х被" min-width="150" />
-          <el-table-column prop="specificationModel" label="浜у搧瑙勬牸" width="120" />
-          <el-table-column prop="inboundNum0" label="鐜版湁搴撳瓨" width="100" align="right" />
-          <el-table-column prop="inboundNum" label="瀹夊叏搴撳瓨" width="100" align="right" />
-          <el-table-column prop="inboundNum" label="棰勮鍑哄簱鏁伴噺" width="120" align="right" />
-          <el-table-column prop="inboundNum0" label="棰勮鍏ュ簱鏁伴噺" width="120" align="right" />
-          <el-table-column prop="weeklyNetDemand" label="鎸夊懆鍑�闇�姹�" width="120" align="right">
+        <el-table :data="calculateResult"
+                  stripe
+                  border
+                  style="width: 100%; margin-top: 20px;">
+          <el-table-column prop="productCategory"
+                           label="浜у搧澶х被"
+                           min-width="150" />
+          <el-table-column prop="specificationModel"
+                           label="瑙勬牸鍨嬪彿"
+                           width="120" />
+          <el-table-column prop="inboundNum0"
+                           label="鐜版湁搴撳瓨"
+                           width="100"
+                           align="right" />
+          <el-table-column prop="inboundNum"
+                           label="瀹夊叏搴撳瓨"
+                           width="100"
+                           align="right" />
+          <el-table-column prop="inboundNum"
+                           label="棰勮鍑哄簱鏁伴噺"
+                           width="120"
+                           align="right" />
+          <el-table-column prop="inboundNum0"
+                           label="棰勮鍏ュ簱鏁伴噺"
+                           width="120"
+                           align="right" />
+          <el-table-column prop="weeklyNetDemand"
+                           label="鎸夊懆鍑�闇�姹�"
+                           width="120"
+                           align="right">
             <template #default="{ row }">
-              <el-tag :type="row.weeklyNetDemand > 0 ? 'warning' : 'success'" size="small">
+              <el-tag :type="row.weeklyNetDemand > 0 ? 'warning' : 'success'"
+                      size="small">
                 {{ row.weeklyNetDemand }}
               </el-tag>
             </template>
           </el-table-column>
-          <el-table-column prop="suggestedPurchase" label="寤鸿閲囪喘" width="100" align="right">
+          <el-table-column prop="suggestedPurchase"
+                           label="寤鸿閲囪喘"
+                           width="100"
+                           align="right">
             <template #default="{ row }">
-              <el-tag :type="row.suggestedPurchase > 0 ? 'danger' : 'success'" size="small">
+              <el-tag :type="row.suggestedPurchase > 0 ? 'danger' : 'success'"
+                      size="small">
                 {{ row.suggestedPurchase }}
               </el-tag>
             </template>
@@ -299,214 +372,49 @@
 </template>
 
 <script setup>
-import FormDialog from '@/components/Dialog/FormDialog.vue';
-import {ref, reactive, onMounted, getCurrentInstance} from 'vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { Search, Refresh, Plus, Download } from '@element-plus/icons-vue'
-import {listPage,add,update,del,listPageCopy} from "@/api/procurementManagement/procurementPlan.js"
+  import FormDialog from "@/components/Dialog/FormDialog.vue";
+  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
+  import { ElMessage, ElMessageBox } from "element-plus";
+  import { Search, Refresh, Plus, Download } from "@element-plus/icons-vue";
+  import {
+    listPage,
+    add,
+    update,
+    del,
+    listPageCopy,
+  } from "@/api/procurementManagement/procurementPlan.js";
 
-// 鍝嶅簲寮忔暟鎹�
-const loading = ref(false)
-const submitLoading = ref(false)
-const dialogVisible = ref(false)
-const productSelectDialogVisible = ref(false)
-const calculateDialogVisible = ref(false)
-const dialogType = ref('add')
-const productLoading = ref(false)
-const selectedProducts = ref([])
-const currentPlan = ref(null)
+  // 鍝嶅簲寮忔暟鎹�
+  const loading = ref(false);
+  const submitLoading = ref(false);
+  const dialogVisible = ref(false);
+  const productSelectDialogVisible = ref(false);
+  const calculateDialogVisible = ref(false);
+  const dialogType = ref("add");
+  const productLoading = ref(false);
+  const selectedProducts = ref([]);
+  const currentPlan = ref(null);
 
-// 鎼滅储琛ㄥ崟
-const searchForm = reactive({
-  planName: '',
-  status: ''
-})
+  // 鎼滅储琛ㄥ崟
+  const searchForm = reactive({
+    planName: "",
+    status: "",
+  });
 
-// 鍒嗛〉鏁版嵁
-const pagination = reactive({
-  current: 1,
-  size: 20
-})
+  // 鍒嗛〉鏁版嵁
+  const pagination = reactive({
+    current: 1,
+    size: 20,
+  });
 
-// 琛ㄥ崟鏁版嵁
-const formData = reactive({
-  code: '',
-  planName: '',
-  description: '',
-  status: '',
-  isSystemPreset: false,
-  formula: '',
-  // 璁$畻鍙傛暟
-  considerExistingStock: false,
-  warehouseControl: false,
-  calculateTotalDemand: false,
-  considerSafetyStock: false,
-  considerLockedStock: false,
-  notConsiderMaterialAux: false,
-  negativeStockAsDemand: false,
-  // 姹囨�诲悎骞堕�夐」
-  summaryMaterial: false,
-  summaryAuxAttributes: false,
-  summaryDemandDate: false
-})
-
-// 褰撳墠婵�娲荤殑鏍囩椤�
-const activeTab = ref('demand')
-
-// 琛ㄥ崟楠岃瘉瑙勫垯
-const formRules = {
-  planName: [
-    { required: true, message: '璇疯緭鍏ヨ鍒掑悕绉�', trigger: 'blur' }
-  ],
-  status: [
-    { required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'change' }
-  ],
-  formula: [
-    { required: true, message: '璇疯緭鍏ヨ绠楀叕寮�', trigger: 'blur' }
-  ]
-}
-
-// 琛ㄦ牸鏁版嵁
-const tableData = ref([])
-
-// 浜у搧鍒楄〃鏁版嵁
-const productList = ref([
-  {
-    id: 4,
-    productName: '浜у搧D',
-    productCode: 'PD004',
-    existingStock: 90,
-    safetyStock: 40,
-    expectedOutbound: 160,
-    expectedInbound: 35
-  }
-])
-
-// 璁$畻缁撴灉鏁版嵁
-const calculateResult = ref([
-  {
-    productName: '浜у搧A',
-    existingStock: 100,
-    safetyStock: 50,
-    expectedOutbound: 200,
-    expectedInbound: 30,
-    weeklyNetDemand: 120,
-    suggestedPurchase: 150
-  },
-  {
-    productName: '浜у搧B',
-    existingStock: 80,
-    safetyStock: 30,
-    expectedOutbound: 150,
-    expectedInbound: 20,
-    weeklyNetDemand: 100,
-    suggestedPurchase: 120
-  }
-])
-const total = ref(0)
-// 鏂规硶
-const handleSearch = () => {
-  pagination.current = 1
-  loadData()
-}
-
-const handleReset = () => {
-  Object.assign(searchForm, {
-    planName: '',
-    status: ''
-  })
-  handleSearch()
-}
-
-const loadData = () => {
-  loading.value = true
-  listPage({...searchForm,...pagination}).then(res => {
-    if(res.code === 200){
-      tableData.value = res.data.records
-      total.value = res.data.total
-      loading.value = false
-    }
-  })
-}
-
-const handleAdd = () => {
-  dialogType.value = 'add'
-  resetForm()
-  // 鑷姩鐢熸垚缂栫爜
-  formData.code = 'CGJH' + String(Date.now()).slice(-4)
-  dialogVisible.value = true
-}
-
-const handleEdit = (row) => {
-  dialogType.value = 'edit'
-  Object.assign(formData, row)
-  dialogVisible.value = true
-}
-
-const handleDelete = async (row) => {
-  try {
-    await ElMessageBox.confirm('纭畾瑕佸垹闄よ繖涓噰璐鍒掑悧锛�', '鎻愮ず', {
-      confirmButtonText: '纭畾',
-      cancelButtonText: '鍙栨秷',
-      type: 'warning'
-    })
-    let ids = [row.id]
-    del(ids).then(res =>{
-     if(res.code === 200){
-      ElMessage.success('鍒犻櫎鎴愬姛')
-      loadData()
-    }
-   })
-  } catch {
-    // 鐢ㄦ埛鍙栨秷鍒犻櫎
-  }
-}
-
-const handleSubmit = async () => {
-  try {
-    // 琛ㄥ崟楠岃瘉
-    if (!formData.planName || !formData.formula) {
-      ElMessage.error('璇峰~鍐欏繀濉」')
-      return
-    }
-
-    submitLoading.value = true
-
-    if (dialogType.value === 'add') {
-      add(formData).then(res => {
-        if(res.code === 200){
-          ElMessage.success('鏂板鎴愬姛')
-          dialogVisible.value = false
-          loadData()
-        }
-      })
-    } else {
-      // 缂栬緫
-      update(formData).then(res => {
-        if(res.code === 200){
-          ElMessage.success('缂栬緫鎴愬姛')
-          dialogVisible.value = false
-          loadData()
-        }
-      })
-    }
-
-
-  } catch (error) {
-    ElMessage.error('鎿嶄綔澶辫触')
-  } finally {
-    submitLoading.value = false
-  }
-}
-
-const resetForm = () => {
-  Object.assign(formData, {
-    code: '',
-    planName: '',
-    description: '',
-    status: '',
+  // 琛ㄥ崟鏁版嵁
+  const formData = reactive({
+    code: "",
+    planName: "",
+    description: "",
+    status: "",
     isSystemPreset: false,
-    formula: '棰勮鍑哄簱鏁伴噺 - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺',
+    formula: "",
     // 璁$畻鍙傛暟
     considerExistingStock: false,
     warehouseControl: false,
@@ -518,255 +426,420 @@
     // 姹囨�诲悎骞堕�夐」
     summaryMaterial: false,
     summaryAuxAttributes: false,
-    summaryDemandDate: false
-  })
-  activeTab.value = 'demand'
-}
+    summaryDemandDate: false,
+  });
 
-const validateFormula = () => {
-  // 绠�鍗曠殑鍏紡楠岃瘉
-  const formula = formData.formula
-  if (formula && !/^[a-zA-Z\u4e00-\u9fa5\s\*\+\-\/\(\)\d\.]+$/.test(formula)) {
-    ElMessage.warning('鍏紡鏍煎紡鍙兘涓嶆纭紝璇锋鏌�')
-  }
-}
+  // 褰撳墠婵�娲荤殑鏍囩椤�
+  const activeTab = ref("demand");
 
-const handleCalculate = (row) => {
-  currentPlan.value = row
-  productSelectDialogVisible.value = true
-  loadProductList()
-}
+  // 琛ㄥ崟楠岃瘉瑙勫垯
+  const formRules = {
+    planName: [{ required: true, message: "璇疯緭鍏ヨ鍒掑悕绉�", trigger: "blur" }],
+    status: [{ required: true, message: "璇烽�夋嫨鐘舵��", trigger: "change" }],
+    formula: [{ required: true, message: "璇疯緭鍏ヨ绠楀叕寮�", trigger: "blur" }],
+  };
 
-const loadProductList = () => {
-  productLoading.value = true
-  // 妯℃嫙鍔犺浇浜у搧鏁版嵁
-  listPageCopy({size:-1}).then(res => {
-    if(res.code === 200){
-      productList.value = res.data.records
-      productLoading.value = false
+  // 琛ㄦ牸鏁版嵁
+  const tableData = ref([]);
+
+  // 浜у搧鍒楄〃鏁版嵁
+  const productList = ref([
+    {
+      id: 4,
+      productName: "浜у搧D",
+      productCode: "PD004",
+      existingStock: 90,
+      safetyStock: 40,
+      expectedOutbound: 160,
+      expectedInbound: 35,
+    },
+  ]);
+
+  // 璁$畻缁撴灉鏁版嵁
+  const calculateResult = ref([
+    {
+      productName: "浜у搧A",
+      existingStock: 100,
+      safetyStock: 50,
+      expectedOutbound: 200,
+      expectedInbound: 30,
+      weeklyNetDemand: 120,
+      suggestedPurchase: 150,
+    },
+    {
+      productName: "浜у搧B",
+      existingStock: 80,
+      safetyStock: 30,
+      expectedOutbound: 150,
+      expectedInbound: 20,
+      weeklyNetDemand: 100,
+      suggestedPurchase: 120,
+    },
+  ]);
+  const total = ref(0);
+  // 鏂规硶
+  const handleSearch = () => {
+    pagination.current = 1;
+    loadData();
+  };
+
+  const handleReset = () => {
+    Object.assign(searchForm, {
+      planName: "",
+      status: "",
+    });
+    handleSearch();
+  };
+
+  const loadData = () => {
+    loading.value = true;
+    listPage({ ...searchForm, ...pagination }).then(res => {
+      if (res.code === 200) {
+        tableData.value = res.data.records;
+        total.value = res.data.total;
+        loading.value = false;
+      }
+    });
+  };
+
+  const handleAdd = () => {
+    dialogType.value = "add";
+    resetForm();
+    // 鑷姩鐢熸垚缂栫爜
+    formData.code = "CGJH" + String(Date.now()).slice(-4);
+    dialogVisible.value = true;
+  };
+
+  const handleEdit = row => {
+    dialogType.value = "edit";
+    Object.assign(formData, row);
+    dialogVisible.value = true;
+  };
+
+  const handleDelete = async row => {
+    try {
+      await ElMessageBox.confirm("纭畾瑕佸垹闄よ繖涓噰璐鍒掑悧锛�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      });
+      let ids = [row.id];
+      del(ids).then(res => {
+        if (res.code === 200) {
+          ElMessage.success("鍒犻櫎鎴愬姛");
+          loadData();
+        }
+      });
+    } catch {
+      // 鐢ㄦ埛鍙栨秷鍒犻櫎
     }
-  })
-}
+  };
 
-const handleProductSelectionChange = (selection) => {
-  selectedProducts.value = selection
-}
+  const handleSubmit = async () => {
+    try {
+      // 琛ㄥ崟楠岃瘉
+      if (!formData.planName || !formData.formula) {
+        ElMessage.error("璇峰~鍐欏繀濉」");
+        return;
+      }
 
-const handleConfirmProductSelection = () => {
-  if (selectedProducts.value.length === 0) {
-    ElMessage.warning('璇烽�夋嫨瑕佽绠楃殑浜у搧')
-    return
-  }
-  
-  ElMessage.success(`姝e湪璁$畻 ${currentPlan.value.planName} 鐨勯噰璐渶姹�...`)
-  productSelectDialogVisible.value = false
-  
-  // 鏍规嵁閫夋嫨鐨勪骇鍝佸拰璁$畻鍏紡杩涜璁$畻
-  calculateWithSelectedProducts()
-}
+      submitLoading.value = true;
 
-const calculateWithSelectedProducts = () => {
-  // 妯℃嫙璁$畻杩囩▼
-  // 鏍规嵁閫夋嫨鐨勪骇鍝佹洿鏂拌绠楃粨鏋�
-  const result = selectedProducts.value.map(product => {
-    // 杩欓噷搴旇鏍规嵁瀹為檯鐨勮绠楀叕寮忚繘琛岃绠�
-    // 绀轰緥锛氶璁″嚭搴撴暟閲� - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺
-    const weeklyNetDemand = product.inboundNum - product.inboundNum0 + product.inboundNum - product.inboundNum0
-    const suggestedPurchase = Math.max(0, weeklyNetDemand)
-
-    return {
-      productCategory: product.productCategory,
-      specificationModel: product.specificationModel,
-      inboundNum0: product.inboundNum0,
-      inboundNum: product.inboundNum,
-      weeklyNetDemand: weeklyNetDemand,
-      suggestedPurchase: suggestedPurchase
+      if (dialogType.value === "add") {
+        add(formData).then(res => {
+          if (res.code === 200) {
+            ElMessage.success("鏂板鎴愬姛");
+            dialogVisible.value = false;
+            loadData();
+          }
+        });
+      } else {
+        // 缂栬緫
+        update(formData).then(res => {
+          if (res.code === 200) {
+            ElMessage.success("缂栬緫鎴愬姛");
+            dialogVisible.value = false;
+            loadData();
+          }
+        });
+      }
+    } catch (error) {
+      ElMessage.error("鎿嶄綔澶辫触");
+    } finally {
+      submitLoading.value = false;
     }
-  })
+  };
 
-  calculateResult.value = result
-  calculateDialogVisible.value = true
-}
+  const resetForm = () => {
+    Object.assign(formData, {
+      code: "",
+      planName: "",
+      description: "",
+      status: "",
+      isSystemPreset: false,
+      formula: "棰勮鍑哄簱鏁伴噺 - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺",
+      // 璁$畻鍙傛暟
+      considerExistingStock: false,
+      warehouseControl: false,
+      calculateTotalDemand: false,
+      considerSafetyStock: false,
+      considerLockedStock: false,
+      notConsiderMaterialAux: false,
+      negativeStockAsDemand: false,
+      // 姹囨�诲悎骞堕�夐」
+      summaryMaterial: false,
+      summaryAuxAttributes: false,
+      summaryDemandDate: false,
+    });
+    activeTab.value = "demand";
+  };
 
+  const validateFormula = () => {
+    // 绠�鍗曠殑鍏紡楠岃瘉
+    const formula = formData.formula;
+    if (formula && !/^[a-zA-Z\u4e00-\u9fa5\s\*\+\-\/\(\)\d\.]+$/.test(formula)) {
+      ElMessage.warning("鍏紡鏍煎紡鍙兘涓嶆纭紝璇锋鏌�");
+    }
+  };
 
-const handleCreatePurchaseOrder = () => {
-  calculateDialogVisible.value = false
-}
-const { proxy } = getCurrentInstance();
-const handleExport = () => {
-  ElMessageBox.confirm("鍐呭灏嗚瀵煎嚭锛屾槸鍚︾‘璁ゅ鍑猴紵", "瀵煎嚭", {
-    confirmButtonText: "纭",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
+  const handleCalculate = row => {
+    currentPlan.value = row;
+    productSelectDialogVisible.value = true;
+    loadProductList();
+  };
+
+  const loadProductList = () => {
+    productLoading.value = true;
+    // 妯℃嫙鍔犺浇浜у搧鏁版嵁
+    listPageCopy({ size: -1 }).then(res => {
+      if (res.code === 200) {
+        productList.value = res.data.records;
+        productLoading.value = false;
+      }
+    });
+  };
+
+  const handleProductSelectionChange = selection => {
+    selectedProducts.value = selection;
+  };
+
+  const handleConfirmProductSelection = () => {
+    if (selectedProducts.value.length === 0) {
+      ElMessage.warning("璇烽�夋嫨瑕佽绠楃殑浜у搧");
+      return;
+    }
+
+    ElMessage.success(`姝e湪璁$畻 ${currentPlan.value.planName} 鐨勯噰璐渶姹�...`);
+    productSelectDialogVisible.value = false;
+
+    // 鏍规嵁閫夋嫨鐨勪骇鍝佸拰璁$畻鍏紡杩涜璁$畻
+    calculateWithSelectedProducts();
+  };
+
+  const calculateWithSelectedProducts = () => {
+    // 妯℃嫙璁$畻杩囩▼
+    // 鏍规嵁閫夋嫨鐨勪骇鍝佹洿鏂拌绠楃粨鏋�
+    const result = selectedProducts.value.map(product => {
+      // 杩欓噷搴旇鏍规嵁瀹為檯鐨勮绠楀叕寮忚繘琛岃绠�
+      // 绀轰緥锛氶璁″嚭搴撴暟閲� - 鐜版湁搴撳瓨 + 瀹夊叏搴撳瓨 - 棰勮鍏ュ簱鏁伴噺
+      const weeklyNetDemand =
+        product.inboundNum -
+        product.inboundNum0 +
+        product.inboundNum -
+        product.inboundNum0;
+      const suggestedPurchase = Math.max(0, weeklyNetDemand);
+
+      return {
+        productCategory: product.productCategory,
+        specificationModel: product.specificationModel,
+        inboundNum0: product.inboundNum0,
+        inboundNum: product.inboundNum,
+        weeklyNetDemand: weeklyNetDemand,
+        suggestedPurchase: suggestedPurchase,
+      };
+    });
+
+    calculateResult.value = result;
+    calculateDialogVisible.value = true;
+  };
+
+  const handleCreatePurchaseOrder = () => {
+    calculateDialogVisible.value = false;
+  };
+  const { proxy } = getCurrentInstance();
+  const handleExport = () => {
+    ElMessageBox.confirm("鍐呭灏嗚瀵煎嚭锛屾槸鍚︾‘璁ゅ鍑猴紵", "瀵煎嚭", {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    })
       .then(() => {
         proxy.download("/procurementPlan/export", {}, "閲囪喘璁″垝.xlsx");
       })
       .catch(() => {
         proxy.$modal.msg("宸插彇娑�");
       });
-}
+  };
 
+  const handleSizeChange = size => {
+    pagination.size = size;
+    loadData();
+  };
 
-const handleSizeChange = (size) => {
-  pagination.size = size
-  loadData()
-}
+  const handleCurrentChange = current => {
+    pagination.current = current;
+    loadData();
+  };
 
-const handleCurrentChange = (current) => {
-  pagination.current = current
-  loadData()
-}
-
-// 鐢熷懡鍛ㄦ湡
-onMounted(() => {
-  loadData()
-})
+  // 鐢熷懡鍛ㄦ湡
+  onMounted(() => {
+    loadData();
+  });
 </script>
 
 <style scoped>
-.app-container {
-  padding: 20px;
-}
+  .app-container {
+    padding: 20px;
+  }
 
-.page-header {
-  margin-bottom: 20px;
-}
+  .page-header {
+    margin-bottom: 20px;
+  }
 
-.page-header h2 {
-  margin: 0 0 8px 0;
-  color: #303133;
-  font-size: 24px;
-  font-weight: 600;
-}
+  .page-header h2 {
+    margin: 0 0 8px 0;
+    color: #303133;
+    font-size: 24px;
+    font-weight: 600;
+  }
 
-.page-header p {
-  margin: 0;
-  color: #909399;
-  font-size: 14px;
-}
+  .page-header p {
+    margin: 0;
+    color: #909399;
+    font-size: 14px;
+  }
 
-.search-card {
-  margin-bottom: 20px;
-}
+  .search-card {
+    margin-bottom: 20px;
+  }
 
-.search-form {
-  margin-bottom: 0;
-}
+  .search-form {
+    margin-bottom: 0;
+  }
 
-.table-card {
-  margin-bottom: 20px;
-}
+  .table-card {
+    margin-bottom: 20px;
+  }
 
-.table-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 20px;
-}
+  .table-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 20px;
+  }
 
-.table-title {
-  font-size: 16px;
-  font-weight: 600;
-  color: #303133;
-}
+  .table-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #303133;
+  }
 
-.table-actions {
-  display: flex;
-  gap: 10px;
-}
+  .table-actions {
+    display: flex;
+    gap: 10px;
+  }
 
-.pagination-container {
-  margin-top: 20px;
-  display: flex;
-  justify-content: end;
-}
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: end;
+  }
 
-.form-container {
-  padding: 0 20px;
-}
+  .form-container {
+    padding: 0 20px;
+  }
 
-.formula-help {
-  margin-top: 5px;
-}
+  .formula-help {
+    margin-top: 5px;
+  }
 
-.calculate-result {
-  padding: 20px 0;
-}
+  .calculate-result {
+    padding: 20px 0;
+  }
 
-.dialog-footer {
-  text-align: right;
-}
+  .dialog-footer {
+    text-align: right;
+  }
 
-:deep(.el-card__body) {
-  padding: 20px;
-}
+  :deep(.el-card__body) {
+    padding: 20px;
+  }
 
-:deep(.el-table) {
-  font-size: 14px;
-}
+  :deep(.el-table) {
+    font-size: 14px;
+  }
 
-:deep(.el-form-item__label) {
-  font-weight: 500;
-}
+  :deep(.el-form-item__label) {
+    font-weight: 500;
+  }
 
-.form-container {
-  padding: 0;
-}
+  .form-container {
+    padding: 0;
+  }
 
-.form-section {
-  margin-bottom: 24px;
-  border: 1px solid #e4e7ed;
-  border-radius: 6px;
-  overflow: hidden;
-}
+  .form-section {
+    margin-bottom: 24px;
+    border: 1px solid #e4e7ed;
+    border-radius: 6px;
+    overflow: hidden;
+  }
 
-.section-title {
-  background-color: #f5f7fa;
-  padding: 12px 16px;
-  font-weight: 600;
-  color: #303133;
-  border-bottom: 1px solid #e4e7ed;
-}
+  .section-title {
+    background-color: #f5f7fa;
+    padding: 12px 16px;
+    font-weight: 600;
+    color: #303133;
+    border-bottom: 1px solid #e4e7ed;
+  }
 
-.form-section .el-form {
-  padding: 20px;
-}
+  .form-section .el-form {
+    padding: 20px;
+  }
 
-.param-tabs {
-  padding: 20px;
-}
+  .param-tabs {
+    padding: 20px;
+  }
 
-.param-tabs :deep(.el-tabs__header) {
-  margin-bottom: 20px;
-}
+  .param-tabs :deep(.el-tabs__header) {
+    margin-bottom: 20px;
+  }
 
-.param-tabs :deep(.el-tabs__item.is-active) {
-  color: #f56c6c;
-  border-bottom-color: #f56c6c;
-}
+  .param-tabs :deep(.el-tabs__item.is-active) {
+    color: #f56c6c;
+    border-bottom-color: #f56c6c;
+  }
 
-.checkbox-group {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 16px;
-}
+  .checkbox-group {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 16px;
+  }
 
-.checkbox-group .el-checkbox {
-  margin-right: 0;
-  margin-bottom: 8px;
-}
+  .checkbox-group .el-checkbox {
+    margin-right: 0;
+    margin-bottom: 8px;
+  }
 
-.formula-input-section {
-  padding: 20px;
-}
+  .formula-input-section {
+    padding: 20px;
+  }
 
-.formula-input-section .el-form-item {
-  margin-bottom: 12px;
-}
+  .formula-input-section .el-form-item {
+    margin-bottom: 12px;
+  }
 
-.formula-help {
-  text-align: center;
-  margin-top: 8px;
-}
+  .formula-help {
+    text-align: center;
+    margin-top: 8px;
+  }
 </style>
diff --git a/src/views/productionManagement/productionTraceability/index.vue b/src/views/productionManagement/productionTraceability/index.vue
index b9d37a1..a726ad0 100644
--- a/src/views/productionManagement/productionTraceability/index.vue
+++ b/src/views/productionManagement/productionTraceability/index.vue
@@ -35,7 +35,7 @@
                          border>
           <el-descriptions-item label="鐢熶骇璁㈠崟鍙�">{{ rowData.productionOrderDto?.npsNo || '-' }}</el-descriptions-item>
           <el-descriptions-item label="浜у搧鍚嶇О">{{ rowData.productionOrderDto?.productName || '-' }}</el-descriptions-item>
-          <el-descriptions-item label="浜у搧瑙勬牸">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="瑙勬牸鍨嬪彿">{{ rowData.productionOrderDto?.model || '-' }}</el-descriptions-item>
           <!-- <el-descriptions-item label="鐗╂枡缂栫爜">{{ rowData.productionOrderDto?.materialCode || '-' }}</el-descriptions-item> -->
           <el-descriptions-item label="璁″垝鏁伴噺">{{ rowData.productionOrderDto?.quantity || 0 }} <span class="unit">{{ rowData.productionOrderDto?.unit || '-' }}</span></el-descriptions-item>
           <el-descriptions-item label="褰撳墠鐘舵��">
diff --git a/src/views/productionManagement/workOrder/index.vue b/src/views/productionManagement/workOrder/index.vue
index 1e4810a..8c76b2e 100644
--- a/src/views/productionManagement/workOrder/index.vue
+++ b/src/views/productionManagement/workOrder/index.vue
@@ -93,7 +93,7 @@
               <span class="info-value">{{ transferCardRowData.productName }}</span>
             </div>
             <div class="info-item">
-              <span class="info-label">浜у搧瑙勬牸</span>
+              <span class="info-label">瑙勬牸鍨嬪彿</span>
               <span class="info-value">{{ transferCardRowData.model }}</span>
             </div>
             <!-- <div class="info-item">
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index 60fe511..8bc6dc2 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -57,7 +57,7 @@
               <span class="info-value">{{ transferCardRowData.productName }}</span>
             </div>
             <div class="info-item">
-              <span class="info-label">浜у搧瑙勬牸</span>
+              <span class="info-label">瑙勬牸鍨嬪彿</span>
               <span class="info-value">{{ transferCardRowData.model }}</span>
             </div>
             <div class="info-item">
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 4251daa..f4127ae 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -56,7 +56,7 @@
                     style="width: 160px;"
                     @keyup.enter="handleQuery" />
         </el-form-item>
-        <el-form-item label="浜у搧瑙勬牸:"
+        <el-form-item label="瑙勬牸鍨嬪彿:"
                       prop="model">
           <el-input v-model="searchForm.model"
                     placeholder="璇疯緭鍏�"
@@ -121,7 +121,7 @@
         </el-row>
         <el-row :gutter="20">
           <el-col>
-            <el-form-item label="浜у搧瑙勬牸">
+            <el-form-item label="瑙勬牸鍨嬪彿">
               <div class="info-display">{{ mergeForm.model || '-' }}</div>
             </el-form-item>
           </el-col>
@@ -186,7 +186,7 @@
                           @change="handleProductChange"
                           style="width: 100%" />
         </el-form-item>
-        <el-form-item label="浜у搧瑙勬牸"
+        <el-form-item label="瑙勬牸鍨嬪彿"
                       prop="productModelId">
           <el-select v-model="form.productModelId"
                      @change="handleChangeSpecification"
@@ -321,7 +321,7 @@
       },
     },
     {
-      label: "浜у搧瑙勬牸",
+      label: "瑙勬牸鍨嬪彿",
       prop: "model",
       width: "150px",
       className: "spec-cell",
@@ -507,7 +507,7 @@
   const rules = reactive({
     productId: [{ required: true, message: "璇烽�夋嫨浜у搧", trigger: "change" }],
     productModelId: [
-      { required: true, message: "璇烽�夋嫨浜у搧瑙勬牸", trigger: "change" },
+      { required: true, message: "璇烽�夋嫨瑙勬牸鍨嬪彿", trigger: "change" },
     ],
     qtyRequired: [{ required: true, message: "璇疯緭鍏ユ暟閲�", trigger: "blur" }],
     requiredDate: [
@@ -686,17 +686,17 @@
       });
   };
 
-  // 閫変腑鐨勪骇鍝佽鏍糏D
+  // 閫変腑鐨勮鏍煎瀷鍙稩D
   const selectedProductModelId = ref("");
 
   // 琛ㄦ牸閫夋嫨鏁版嵁
   const handleSelectionChange = selection => {
     selectedRows.value = selection;
-    // 濡傛灉鏈夐�変腑鐨勮锛岃褰曠涓�涓�変腑琛岀殑浜у搧瑙勬牸ID
+    // 濡傛灉鏈夐�変腑鐨勮锛岃褰曠涓�涓�変腑琛岀殑瑙勬牸鍨嬪彿ID
     if (selection.length > 0) {
       selectedProductModelId.value = selection[0].productModelId;
     } else {
-      // 濡傛灉娌℃湁閫変腑鐨勮锛屾竻绌轰骇鍝佽鏍糏D
+      // 濡傛灉娌℃湁閫変腑鐨勮锛屾竻绌鸿鏍煎瀷鍙稩D
       selectedProductModelId.value = "";
     }
   };
@@ -717,7 +717,7 @@
     if (!selectedProductModelId.value) {
       return true;
     }
-    // 濡傛灉鏈夐�変腑鐨勮锛屽彧鏈変骇鍝佽鏍糏D鐩稿悓鐨勮鎵嶅彲閫夋嫨
+    // 濡傛灉鏈夐�変腑鐨勮锛屽彧鏈夎鏍煎瀷鍙稩D鐩稿悓鐨勮鎵嶅彲閫夋嫨
     return row.productModelId === selectedProductModelId.value;
   };
   // 鎷夊彇鏁版嵁鎸夐挳鎿嶄綔
diff --git a/src/views/qualityManagement/nearExpiryReturn/index.vue b/src/views/qualityManagement/nearExpiryReturn/index.vue
index 93e19c2..26dc747 100644
--- a/src/views/qualityManagement/nearExpiryReturn/index.vue
+++ b/src/views/qualityManagement/nearExpiryReturn/index.vue
@@ -1,213 +1,257 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="浜у搧鍚嶇О" prop="productName">
-        <el-input
-          v-model="queryParams.productName"
-          placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+    <el-form :model="queryParams"
+             ref="queryForm"
+             :inline="true"
+             v-show="showSearch"
+             label-width="68px">
+      <el-form-item label="浜у搧鍚嶇О"
+                    prop="productName">
+        <el-input v-model="queryParams.productName"
+                  placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
+                  clearable
+                  @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="鎵规鍙�" prop="batchNumber">
-        <el-input
-          v-model="queryParams.batchNumber"
-          placeholder="璇疯緭鍏ユ壒娆″彿"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+      <el-form-item label="鎵规鍙�"
+                    prop="batchNumber">
+        <el-input v-model="queryParams.batchNumber"
+                  placeholder="璇疯緭鍏ユ壒娆″彿"
+                  clearable
+                  @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="閫�鍥炴棩鏈�" prop="returnDate">
-        <el-date-picker
-          clearable
-          v-model="queryParams.returnDate"
-          type="date"
-          value-format="YYYY-MM-DD"
-          placeholder="璇烽�夋嫨閫�鍥炴棩鏈�">
+      <el-form-item label="閫�鍥炴棩鏈�"
+                    prop="returnDate">
+        <el-date-picker clearable
+                        v-model="queryParams.returnDate"
+                        type="date"
+                        value-format="YYYY-MM-DD"
+                        placeholder="璇烽�夋嫨閫�鍥炴棩鏈�">
         </el-date-picker>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+        <el-button type="primary"
+                   icon="Search"
+                   @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="Refresh"
+                   @click="resetQuery">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
-
-    <el-row :gutter="10" class="mb8">
+    <el-row :gutter="10"
+            class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="Plus"
-          @click="handleAdd"
-        >鏂板</el-button>
+        <el-button type="primary"
+                   plain
+                   icon="Plus"
+                   @click="handleAdd">鏂板</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="Edit"
-          :disabled="single"
-          @click="handleUpdate"
-        >淇敼</el-button>
+        <el-button type="success"
+                   plain
+                   icon="Edit"
+                   :disabled="single"
+                   @click="handleUpdate">淇敼</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="Delete"
-          :disabled="multiple"
-          @click="handleDelete"
-        >鍒犻櫎</el-button>
+        <el-button type="danger"
+                   plain
+                   icon="Delete"
+                   :disabled="multiple"
+                   @click="handleDelete">鍒犻櫎</el-button>
       </el-col>
       <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="Download"
-          @click="handleExport"
-        >瀵煎嚭</el-button>
+        <el-button type="warning"
+                   plain
+                   icon="Download"
+                   @click="handleExport">瀵煎嚭</el-button>
       </el-col>
-      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar v-model:showSearch="showSearch"
+                     @queryTable="getList"></right-toolbar>
     </el-row>
-
-    <el-table v-loading="loading" :data="nearExpiryReturnList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="搴忓彿" type="index" width="50" align="center" />
-      <el-table-column label="浜у搧鍚嶇О" prop="productName" />
-      <el-table-column label="浜у搧瑙勬牸" prop="productSpec" />
-      <el-table-column label="鎵规鍙�" prop="batchNumber" />
-      <el-table-column label="鐢熶骇鏃ユ湡" prop="productionDate" align="center">
+    <el-table v-loading="loading"
+              :data="nearExpiryReturnList"
+              @selection-change="handleSelectionChange">
+      <el-table-column type="selection"
+                       width="55"
+                       align="center" />
+      <el-table-column label="搴忓彿"
+                       type="index"
+                       width="50"
+                       align="center" />
+      <el-table-column label="浜у搧鍚嶇О"
+                       prop="productName" />
+      <el-table-column label="瑙勬牸鍨嬪彿"
+                       prop="productSpec" />
+      <el-table-column label="鎵规鍙�"
+                       prop="batchNumber" />
+      <el-table-column label="鐢熶骇鏃ユ湡"
+                       prop="productionDate"
+                       align="center">
         <template #default="scope">
           <span>{{ parseTime(scope.row.productionDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="鍒版湡鏃ユ湡" prop="expiryDate" align="center">
+      <el-table-column label="鍒版湡鏃ユ湡"
+                       prop="expiryDate"
+                       align="center">
         <template #default="scope">
           <span>{{ parseTime(scope.row.expiryDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="閫�鍥炴暟閲�" prop="returnQuantity" />
-      <el-table-column label="閫�鍥炲師鍥�" prop="returnReason" />
-      <el-table-column label="閫�鍥炴棩鏈�" prop="returnDate" align="center">
+      <el-table-column label="閫�鍥炴暟閲�"
+                       prop="returnQuantity" />
+      <el-table-column label="閫�鍥炲師鍥�"
+                       prop="returnReason" />
+      <el-table-column label="閫�鍥炴棩鏈�"
+                       prop="returnDate"
+                       align="center">
         <template #default="scope">
           <span>{{ parseTime(scope.row.returnDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="澶勭悊鐘舵��" prop="status" align="center">
+      <el-table-column label="澶勭悊鐘舵��"
+                       prop="status"
+                       align="center">
         <template #default="scope">
-          <dict-tag :options="statusOptions" :value="scope.row.status"/>
+          <dict-tag :options="statusOptions"
+                    :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="鎿嶄綔"
+                       align="center"
+                       class-name="small-padding fixed-width">
         <template #default="scope">
-          <el-button size="mini" type="text" icon="Edit" @click="handleUpdate(scope.row)">淇敼</el-button>
-          <el-button size="mini" type="text" icon="Delete" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+          <el-button size="mini"
+                     type="text"
+                     icon="Edit"
+                     @click="handleUpdate(scope.row)">淇敼</el-button>
+          <el-button size="mini"
+                     type="text"
+                     icon="Delete"
+                     @click="handleDelete(scope.row)">鍒犻櫎</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-
+    <pagination v-show="total>0"
+                :total="total"
+                v-model:page="queryParams.pageNum"
+                v-model:limit="queryParams.pageSize"
+                @pagination="getList" />
     <!-- 娣诲姞鎴栦慨鏀逛复鏈熼��鍥炲彴璐﹀璇濇 -->
-    <el-dialog :title="title" v-model="open" width="800px" append-to-body>
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
+    <el-dialog :title="title"
+               v-model="open"
+               width="800px"
+               append-to-body>
+      <el-form ref="formRef"
+               :model="form"
+               :rules="rules"
+               label-width="100px">
         <el-row>
           <el-col :span="12">
-            <el-form-item label="浜у搧鍚嶇О" prop="productName">
-              <el-input v-model="form.productName" placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" />
+            <el-form-item label="浜у搧鍚嶇О"
+                          prop="productName">
+              <el-input v-model="form.productName"
+                        placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="浜у搧瑙勬牸" prop="productSpec">
-              <el-input v-model="form.productSpec" placeholder="璇疯緭鍏ヤ骇鍝佽鏍�" />
+            <el-form-item label="瑙勬牸鍨嬪彿"
+                          prop="productSpec">
+              <el-input v-model="form.productSpec"
+                        placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="鎵规鍙�" prop="batchNumber">
-              <el-input v-model="form.batchNumber" placeholder="璇疯緭鍏ユ壒娆″彿" />
+            <el-form-item label="鎵规鍙�"
+                          prop="batchNumber">
+              <el-input v-model="form.batchNumber"
+                        placeholder="璇疯緭鍏ユ壒娆″彿" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="閫�鍥炴暟閲�" prop="returnQuantity">
-              <el-input-number v-model="form.returnQuantity" controls-position="right" :min="1" />
+            <el-form-item label="閫�鍥炴暟閲�"
+                          prop="returnQuantity">
+              <el-input-number v-model="form.returnQuantity"
+                               controls-position="right"
+                               :min="1" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="鐢熶骇鏃ユ湡" prop="productionDate">
-              <el-date-picker
-                clearable
-                v-model="form.productionDate"
-                type="date"
-                value-format="YYYY-MM-DD"
-                placeholder="璇烽�夋嫨鐢熶骇鏃ユ湡">
+            <el-form-item label="鐢熶骇鏃ユ湡"
+                          prop="productionDate">
+              <el-date-picker clearable
+                              v-model="form.productionDate"
+                              type="date"
+                              value-format="YYYY-MM-DD"
+                              placeholder="璇烽�夋嫨鐢熶骇鏃ユ湡">
               </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鍒版湡鏃ユ湡" prop="expiryDate">
-              <el-date-picker
-                clearable
-                v-model="form.expiryDate"
-                type="date"
-                value-format="YYYY-MM-DD"
-                placeholder="璇烽�夋嫨鍒版湡鏃ユ湡">
+            <el-form-item label="鍒版湡鏃ユ湡"
+                          prop="expiryDate">
+              <el-date-picker clearable
+                              v-model="form.expiryDate"
+                              type="date"
+                              value-format="YYYY-MM-DD"
+                              placeholder="璇烽�夋嫨鍒版湡鏃ユ湡">
               </el-date-picker>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="閫�鍥炴棩鏈�" prop="returnDate">
-              <el-date-picker
-                clearable
-                v-model="form.returnDate"
-                type="date"
-                value-format="YYYY-MM-DD"
-                placeholder="璇烽�夋嫨閫�鍥炴棩鏈�">
+            <el-form-item label="閫�鍥炴棩鏈�"
+                          prop="returnDate">
+              <el-date-picker clearable
+                              v-model="form.returnDate"
+                              type="date"
+                              value-format="YYYY-MM-DD"
+                              placeholder="璇烽�夋嫨閫�鍥炴棩鏈�">
               </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="澶勭悊鐘舵��" prop="status">
-              <el-select v-model="form.status" placeholder="璇烽�夋嫨澶勭悊鐘舵��">
-                <el-option
-                  v-for="dict in statusOptions"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
+            <el-form-item label="澶勭悊鐘舵��"
+                          prop="status">
+              <el-select v-model="form.status"
+                         placeholder="璇烽�夋嫨澶勭悊鐘舵��">
+                <el-option v-for="dict in statusOptions"
+                           :key="dict.value"
+                           :label="dict.label"
+                           :value="dict.value"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="閫�鍥炲師鍥�" prop="returnReason">
-              <el-input v-model="form.returnReason" type="textarea" placeholder="璇疯緭鍏ラ��鍥炲師鍥�" />
+            <el-form-item label="閫�鍥炲師鍥�"
+                          prop="returnReason">
+              <el-input v-model="form.returnReason"
+                        type="textarea"
+                        placeholder="璇疯緭鍏ラ��鍥炲師鍥�" />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="澶囨敞" prop="remark">
-              <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�" />
+            <el-form-item label="澶囨敞"
+                          prop="remark">
+              <el-input v-model="form.remark"
+                        type="textarea"
+                        placeholder="璇疯緭鍏ュ娉�" />
             </el-form-item>
           </el-col>
         </el-row>
       </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="cancel">鍙� 娑�</el-button>
         </div>
       </template>
@@ -216,180 +260,186 @@
 </template>
 
 <script setup name="NearExpiryReturn">
-import { ref, reactive, onMounted } from "vue";
-import { ElMessageBox } from "element-plus";
-// API鎺ュ彛宸茬Щ闄わ紝涓嶅啀璋冪敤鍚庣鎺ュ彛
+  import { ref, reactive, onMounted } from "vue";
+  import { ElMessageBox } from "element-plus";
+  // API鎺ュ彛宸茬Щ闄わ紝涓嶅啀璋冪敤鍚庣鎺ュ彛
 
-const { proxy } = getCurrentInstance();
-const { parseTime } = proxy;
+  const { proxy } = getCurrentInstance();
+  const { parseTime } = proxy;
 
-const nearExpiryReturnList = ref([]);
-const open = ref(false);
-const loading = ref(true);
-const showSearch = ref(true);
-const ids = ref([]);
-const single = ref(true);
-const multiple = ref(true);
-const total = ref(0);
-const title = ref("");
+  const nearExpiryReturnList = ref([]);
+  const open = ref(false);
+  const loading = ref(true);
+  const showSearch = ref(true);
+  const ids = ref([]);
+  const single = ref(true);
+  const multiple = ref(true);
+  const total = ref(0);
+  const title = ref("");
 
-// 鐘舵�佸瓧鍏�
-const statusOptions = ref([
-  { label: "寰呭鐞�", value: "0" },
-  { label: "澶勭悊涓�", value: "1" },
-  { label: "宸插畬鎴�", value: "2" }
-]);
+  // 鐘舵�佸瓧鍏�
+  const statusOptions = ref([
+    { label: "寰呭鐞�", value: "0" },
+    { label: "澶勭悊涓�", value: "1" },
+    { label: "宸插畬鎴�", value: "2" },
+  ]);
 
-const data = reactive({
-  form: {},
-  queryParams: {
-    pageNum: 1,
-    pageSize: 10,
-    productName: null,
-    batchNumber: null,
-    returnDate: null
-  },
-  rules: {
-    productName: [
-      { required: true, message: "浜у搧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-    ],
-    productSpec: [
-      { required: true, message: "浜у搧瑙勬牸涓嶈兘涓虹┖", trigger: "blur" }
-    ],
-    batchNumber: [
-      { required: true, message: "鎵规鍙蜂笉鑳戒负绌�", trigger: "blur" }
-    ],
-    returnQuantity: [
-      { required: true, message: "閫�鍥炴暟閲忎笉鑳戒负绌�", trigger: "blur" }
-    ],
-    productionDate: [
-      { required: true, message: "鐢熶骇鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-    ],
-    expiryDate: [
-      { required: true, message: "鍒版湡鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-    ],
-    returnDate: [
-      { required: true, message: "閫�鍥炴棩鏈熶笉鑳戒负绌�", trigger: "blur" }
-    ],
-    returnReason: [
-      { required: true, message: "閫�鍥炲師鍥犱笉鑳戒负绌�", trigger: "blur" }
-    ],
-    status: [
-      { required: true, message: "澶勭悊鐘舵�佷笉鑳戒负绌�", trigger: "change" }
-    ]
-  }
-});
-
-const { queryParams, form, rules } = toRefs(data);
-
-/** 鏌ヨ涓存湡閫�鍥炲彴璐﹀垪琛� */
-function getList() {
-  loading.value = true;
-  // 涓嶈皟鐢ㄦ帴鍙o紝杩斿洖绌烘暟鎹�
-  nearExpiryReturnList.value = [];
-  total.value = 0;
-  loading.value = false;
-}
-
-// 鍙栨秷鎸夐挳
-function cancel() {
-  open.value = false;
-  reset();
-}
-
-// 琛ㄥ崟閲嶇疆
-function reset() {
-  form.value = {
-    id: null,
-    productName: null,
-    productSpec: null,
-    batchNumber: null,
-    productionDate: null,
-    expiryDate: null,
-    returnQuantity: null,
-    returnReason: null,
-    returnDate: null,
-    status: null,
-    remark: null
-  };
-  proxy.resetForm("formRef");
-}
-
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-function handleQuery() {
-  queryParams.value.pageNum = 1;
-  getList();
-}
-
-/** 閲嶇疆鎸夐挳鎿嶄綔 */
-function resetQuery() {
-  proxy.resetForm("queryForm");
-  handleQuery();
-}
-
-// 澶氶�夋閫変腑鏁版嵁
-function handleSelectionChange(selection) {
-  ids.value = selection.map(item => item.id);
-  single.value = selection.length !== 1;
-  multiple.value = !selection.length;
-}
-
-/** 鏂板鎸夐挳鎿嶄綔 */
-function handleAdd() {
-  reset();
-  open.value = true;
-  title.value = "娣诲姞涓存湡閫�鍥炲彴璐�";
-}
-
-/** 淇敼鎸夐挳鎿嶄綔 */
-function handleUpdate(row) {
-  reset();
-  // 涓嶈皟鐢ㄦ帴鍙o紝鐩存帴浣跨敤浼犲叆鐨勬暟鎹�
-  if (row) {
-    form.value = { ...row };
-    open.value = true;
-    title.value = "淇敼涓存湡閫�鍥炲彴璐�";
-  }
-}
-
-/** 鎻愪氦鎸夐挳 */
-function submitForm() {
-  proxy.$refs["formRef"].validate(valid => {
-    if (valid) {
-      // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘垚鍔熸彁绀�
-      if (form.value.id != null) {
-        proxy.$modal.msgSuccess("淇敼鎴愬姛");
-      } else {
-        proxy.$modal.msgSuccess("鏂板鎴愬姛");
-      }
-      open.value = false;
-      getList();
-    }
+  const data = reactive({
+    form: {},
+    queryParams: {
+      pageNum: 1,
+      pageSize: 10,
+      productName: null,
+      batchNumber: null,
+      returnDate: null,
+    },
+    rules: {
+      productName: [
+        { required: true, message: "浜у搧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
+      ],
+      productSpec: [
+        { required: true, message: "瑙勬牸鍨嬪彿涓嶈兘涓虹┖", trigger: "blur" },
+      ],
+      batchNumber: [
+        { required: true, message: "鎵规鍙蜂笉鑳戒负绌�", trigger: "blur" },
+      ],
+      returnQuantity: [
+        { required: true, message: "閫�鍥炴暟閲忎笉鑳戒负绌�", trigger: "blur" },
+      ],
+      productionDate: [
+        { required: true, message: "鐢熶骇鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" },
+      ],
+      expiryDate: [
+        { required: true, message: "鍒版湡鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" },
+      ],
+      returnDate: [
+        { required: true, message: "閫�鍥炴棩鏈熶笉鑳戒负绌�", trigger: "blur" },
+      ],
+      returnReason: [
+        { required: true, message: "閫�鍥炲師鍥犱笉鑳戒负绌�", trigger: "blur" },
+      ],
+      status: [
+        { required: true, message: "澶勭悊鐘舵�佷笉鑳戒负绌�", trigger: "change" },
+      ],
+    },
   });
-}
 
-/** 鍒犻櫎鎸夐挳鎿嶄綔 */
-function handleDelete(row) {
-  const deleteIds = row.id || ids.value;
-  ElMessageBox.confirm('鏄惁纭鍒犻櫎涓存湡閫�鍥炲彴璐︾紪鍙蜂负"' + deleteIds + '"鐨勬暟鎹」锛�', "璀﹀憡", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning"
-  }).then(function() {
-    // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘垚鍔熸彁绀�
-    proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+  const { queryParams, form, rules } = toRefs(data);
+
+  /** 鏌ヨ涓存湡閫�鍥炲彴璐﹀垪琛� */
+  function getList() {
+    loading.value = true;
+    // 涓嶈皟鐢ㄦ帴鍙o紝杩斿洖绌烘暟鎹�
+    nearExpiryReturnList.value = [];
+    total.value = 0;
+    loading.value = false;
+  }
+
+  // 鍙栨秷鎸夐挳
+  function cancel() {
+    open.value = false;
+    reset();
+  }
+
+  // 琛ㄥ崟閲嶇疆
+  function reset() {
+    form.value = {
+      id: null,
+      productName: null,
+      productSpec: null,
+      batchNumber: null,
+      productionDate: null,
+      expiryDate: null,
+      returnQuantity: null,
+      returnReason: null,
+      returnDate: null,
+      status: null,
+      remark: null,
+    };
+    proxy.resetForm("formRef");
+  }
+
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
     getList();
-  }).catch(() => {});
-}
+  }
 
-/** 瀵煎嚭鎸夐挳鎿嶄綔 */
-function handleExport() {
-  // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘彁绀�
-  proxy.$modal.msgSuccess("瀵煎嚭鍔熻兘鏆傛湭瀹炵幇");
-}
+  /** 閲嶇疆鎸夐挳鎿嶄綔 */
+  function resetQuery() {
+    proxy.resetForm("queryForm");
+    handleQuery();
+  }
 
-onMounted(() => {
-  getList();
-});
+  // 澶氶�夋閫変腑鏁版嵁
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.id);
+    single.value = selection.length !== 1;
+    multiple.value = !selection.length;
+  }
+
+  /** 鏂板鎸夐挳鎿嶄綔 */
+  function handleAdd() {
+    reset();
+    open.value = true;
+    title.value = "娣诲姞涓存湡閫�鍥炲彴璐�";
+  }
+
+  /** 淇敼鎸夐挳鎿嶄綔 */
+  function handleUpdate(row) {
+    reset();
+    // 涓嶈皟鐢ㄦ帴鍙o紝鐩存帴浣跨敤浼犲叆鐨勬暟鎹�
+    if (row) {
+      form.value = { ...row };
+      open.value = true;
+      title.value = "淇敼涓存湡閫�鍥炲彴璐�";
+    }
+  }
+
+  /** 鎻愪氦鎸夐挳 */
+  function submitForm() {
+    proxy.$refs["formRef"].validate(valid => {
+      if (valid) {
+        // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘垚鍔熸彁绀�
+        if (form.value.id != null) {
+          proxy.$modal.msgSuccess("淇敼鎴愬姛");
+        } else {
+          proxy.$modal.msgSuccess("鏂板鎴愬姛");
+        }
+        open.value = false;
+        getList();
+      }
+    });
+  }
+
+  /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+  function handleDelete(row) {
+    const deleteIds = row.id || ids.value;
+    ElMessageBox.confirm(
+      '鏄惁纭鍒犻櫎涓存湡閫�鍥炲彴璐︾紪鍙蜂负"' + deleteIds + '"鐨勬暟鎹」锛�',
+      "璀﹀憡",
+      {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      }
+    )
+      .then(function () {
+        // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘垚鍔熸彁绀�
+        proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        getList();
+      })
+      .catch(() => {});
+  }
+
+  /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+  function handleExport() {
+    // 涓嶈皟鐢ㄦ帴鍙o紝鍙樉绀烘彁绀�
+    proxy.$modal.msgSuccess("瀵煎嚭鍔熻兘鏆傛湭瀹炵幇");
+  }
+
+  onMounted(() => {
+    getList();
+  });
 </script>
 

--
Gitblit v1.9.3