From 7118f393605f8ef28457430d43a2608aa02f1696 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 22 一月 2026 14:28:42 +0800
Subject: [PATCH] 湟水峡 1.发货分开类型货车和快递,并可以上传图片

---
 src/views/procurementManagement/procurementLedger/index.vue |  397 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 309 insertions(+), 88 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index d498c29..68b956e 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -2,26 +2,42 @@
   <div class="app-container">
     <div class="search_form">
       <div>
-        <span class="search_title">閲囪喘鍚堝悓鍙凤細</span>
-        <el-input
-          v-model="searchForm.purchaseContractNumber"
-          style="width: 240px"
-          placeholder="璇疯緭鍏�"
-          @change="handleQuery"
-          clearable
-          :prefix-icon="Search"
-        />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-          >鎼滅储</el-button
-        >
+        <el-form :model="searchForm" :inline="true">
+          <el-form-item label="渚涘簲鍟嗗悕绉帮細">
+            <el-input v-model="searchForm.supplierName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+                      @change="handleQuery" />
+          </el-form-item>
+          <el-form-item label="閲囪喘鍚堝悓鍙凤細">
+            <el-input
+                v-model="searchForm.purchaseContractNumber"
+                style="width: 240px"
+                placeholder="璇疯緭鍏�"
+                @change="handleQuery"
+                clearable
+                :prefix-icon="Search"
+            />
+          </el-form-item>
+          <el-form-item label="閿�鍞悎鍚屽彿锛�">
+            <el-input v-model="searchForm.salesContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+                      @change="handleQuery" />
+          </el-form-item>
+          <el-form-item label="褰曞叆鏃ユ湡锛�">
+            <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
+                            placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
+          </el-form-item>
+        </el-form>
       </div>
-      <div>
+
+    </div>
+    <div class="table_list">
+      <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
         <el-button type="primary" @click="openForm('add')">鏂板鍙拌处</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       </div>
-    </div>
-    <div class="table_list">
       <el-table
         :data="tableData"
         border
@@ -32,7 +48,7 @@
         show-summary
         :summary-method="summarizeMainTable"
         @expand-change="expandChange"
-        height="calc(100vh - 18.5em)"
+        height="calc(100vh - 19em)"
       >
         <el-table-column align="center" type="selection" width="55" />
         <el-table-column type="expand">
@@ -92,12 +108,6 @@
           show-overflow-tooltip
         />
         <el-table-column
-          label="椤圭洰鍚嶇О"
-          prop="projectName"
-          width="420"
-          show-overflow-tooltip
-        />
-        <el-table-column
           label="浠樻鏂瑰紡"
           width="100"
           prop="paymentMethod"
@@ -125,7 +135,7 @@
         <el-table-column
           fixed="right"
           label="鎿嶄綔"
-          min-width="60"
+          width="100"
           align="center"
         >
           <template #default="scope">
@@ -137,6 +147,7 @@
 							:disabled="scope.row.receiptPaymentAmount>0 || scope.row.recorderName !== userStore.nickName"
               >缂栬緫</el-button
             >
+
           </template>
         </el-table-column>
       </el-table>
@@ -196,6 +207,7 @@
               <el-select
                 v-model="form.supplierId"
                 placeholder="璇烽�夋嫨"
+								filterable
                 clearable
               >
                 <el-option
@@ -207,16 +219,31 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
-              <el-input
-                v-model="form.projectName"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
         </el-row>
+				<el-row :gutter="30">
+					<el-col :span="12">
+						<el-form-item label="浠樻鏂瑰紡">
+							<el-input
+								v-model="form.paymentMethod"
+								placeholder="璇疯緭鍏�"
+								clearable
+							/>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="绛捐鏃ユ湡锛�" prop="executionDate">
+							<el-date-picker
+								style="width: 100%"
+								v-model="form.executionDate"
+								value-format="YYYY-MM-DD"
+								format="YYYY-MM-DD"
+								type="date"
+								placeholder="璇烽�夋嫨"
+								clearable
+							/>
+						</el-form-item>
+					</el-col>
+				</el-row>
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="褰曞叆浜猴細" prop="recorderId">
@@ -238,24 +265,12 @@
           <el-col :span="12">
             <el-form-item label="褰曞叆鏃ユ湡锛�" prop="entryDate">
               <el-date-picker
-                disabled
                 style="width: 100%"
                 v-model="form.entryDate"
                 value-format="YYYY-MM-DD"
                 format="YYYY-MM-DD"
                 type="date"
                 placeholder="璇烽�夋嫨"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="浠樻鏂瑰紡">
-              <el-input
-                v-model="form.paymentMethod"
-                placeholder="璇疯緭鍏�"
                 clearable
               />
             </el-form-item>
@@ -289,6 +304,7 @@
           <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
           <el-table-column label="鍗曚綅" prop="unit" width="70" />
           <el-table-column label="鏁伴噺" prop="quantity" width="70" />
+					<el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" width="120" show-overflow-tooltip />
           <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
           <el-table-column
             label="鍚◣鍗曚环(鍏�)"
@@ -432,22 +448,24 @@
           </el-col>
 					<el-col :span="12">
 						<el-form-item label="绋庣巼(%)锛�" prop="taxRate">
-							<el-select
-								v-model="productForm.taxRate"
-								placeholder="璇烽�夋嫨"
-								clearable
-								@change="mathNum"
-							>
-								<el-option label="1" value="1" />
-								<el-option label="6" value="6" />
-								<el-option label="13" value="13" />
-							</el-select>
+<!--							<el-select-->
+<!--								v-model="productForm.taxRate"-->
+<!--								placeholder="璇烽�夋嫨"-->
+<!--								clearable-->
+<!--								@change="mathNum"-->
+<!--							>-->
+<!--								<el-option label="1" value="1" />-->
+<!--								<el-option label="6" value="6" />-->
+<!--								<el-option label="13" value="13" />-->
+<!--							</el-select>-->
+              <el-input-number :step="1" :min="0" v-model="productForm.taxRate" style="width: 100%"
+                               placeholder="璇疯緭鍏�" clearable @change="calculateFromTaxRate" />
 						</el-form-item>
 					</el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍚◣鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice">
+            <el-form-item label="鍚◣/涓嶅惈绋庡崟浠�(鍏�)锛�" prop="taxInclusiveUnitPrice">
               <el-input-number
                 v-model="productForm.taxInclusiveUnitPrice"
                 :precision="2"
@@ -490,7 +508,7 @@
               label="涓嶅惈绋庢�讳环(鍏�)锛�"
               prop="taxExclusiveTotalPrice"
             >
-              <el-input 
+              <el-input
                 v-model="productForm.taxExclusiveTotalPrice"
                 @change="reverseMathNum('taxExclusiveTotalPrice')"
               />
@@ -510,6 +528,17 @@
               </el-select>
             </el-form-item>
           </el-col>
+					<el-col :span="12">
+						<el-form-item label="搴撳瓨棰勮鏁伴噺锛�" prop="warnNum">
+							<el-input-number
+								v-model="productForm.warnNum"
+								:precision="2"
+								:step="0.1"
+								clearable
+								style="width: 100%"
+							/>
+						</el-form-item>
+					</el-col>
         </el-row>
       </el-form>
       <template #footer>
@@ -519,13 +548,100 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 鎵爜鐧昏瀵硅瘽妗� -->
+    <el-dialog
+      v-model="scanDialogVisible"
+      title="鎵爜鐧昏"
+      width="60%"
+      @close="closeScanDialog"
+    >
+      <el-form
+        :model="scanForm"
+        label-width="120px"
+        label-position="left"
+        :rules="scanRules"
+        ref="scanFormRef"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="閲囪喘鍚堝悓鍙凤細">
+              <el-input v-model="scanForm.purchaseContractNumber" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="渚涘簲鍟嗗悕绉帮細">
+              <el-input v-model="scanForm.supplierName" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鎵爜鏃堕棿锛�">
+              <el-input v-model="scanForm.scanTime" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鎵爜浜猴細">
+              <el-input v-model="scanForm.scannerName" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎵爜鐘舵�侊細">
+              <el-tag :type="scanForm.scanStatus === '宸叉壂鐮�' ? 'success' : 'warning'">
+                {{ scanForm.scanStatus }}
+              </el-tag>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鎵爜澶囨敞锛�">
+              <el-input
+                v-model="scanForm.scanRemark"
+                type="textarea"
+                :rows="3"
+                placeholder="璇疯緭鍏ユ壂鐮佸娉ㄤ俊鎭�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鎵爜璁板綍锛�">
+              <el-table :data="scanRecords" border style="width: 100%">
+                <el-table-column label="搴忓彿" type="index" width="60" align="center" />
+                <el-table-column label="鎵爜鏃堕棿" prop="scanTime" width="180" />
+                <el-table-column label="鎵爜浜�" prop="scannerName" width="120" />
+                <el-table-column label="鎵爜鐘舵��" prop="scanStatus" width="100">
+                  <template #default="scope">
+                    <el-tag :type="scope.row.scanStatus === '宸叉壂鐮�' ? 'success' : 'warning'">
+                      {{ scope.row.scanStatus }}
+                    </el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column label="澶囨敞" prop="scanRemark" />
+              </el-table>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitScan">纭鎵爜</el-button>
+          <el-button @click="closeScanDialog">鍙栨秷</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup>
 import { getToken } from "@/utils/auth";
 import pagination from "@/components/PIMTable/Pagination.vue";
-import { ref, onMounted } from "vue";
+import { ref, onMounted, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
 import { Search } from "@element-plus/icons-vue";
 import { ElMessageBox } from "element-plus";
 import { userListNoPage } from "@/api/system/user.js";
@@ -546,6 +662,8 @@
   getOptions,
   createPurchaseNo,
 } from "@/api/procurementManagement/procurementLedger.js";
+import useFormData from "@/hooks/useFormData.js";
+import QRCode from "qrcode";
 const { proxy } = getCurrentInstance();
 const tableData = ref([]);
 const productData = ref([]);
@@ -565,6 +683,7 @@
 const fileList = ref([]);
 import useUserStore from "@/store/modules/user";
 import { modelList, productTreeList } from "@/api/basicData/product.js";
+import dayjs from "dayjs";
 
 const userStore = useUserStore();
 
@@ -573,7 +692,12 @@
 const dialogFormVisible = ref(false);
 const data = reactive({
   searchForm: {
-    purchaseContractNumber: "",
+    supplierName: "", // 渚涘簲鍟嗗悕绉�
+    purchaseContractNumber: "", // 閲囪喘鍚堝悓缂栧彿
+    salesContractNo: "", // 閿�鍞悎鍚岀紪鍙�
+    entryDate: null, // 褰曞叆鏃ユ湡
+    entryDateStart: undefined,
+    entryDateEnd: undefined,
   },
   form: {
     purchaseContractNumber: "",
@@ -585,6 +709,7 @@
     supplierName: "",
     supplierId: "",
     paymentMethod: "",
+		executionDate: "",
   },
   rules: {
     purchaseContractNumber: [
@@ -592,9 +717,13 @@
     ],
     projectName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+		entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+		executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
   },
 });
-const { searchForm, form, rules } = toRefs(data);
+const {  form, rules } = toRefs(data);
+const { form: searchForm } = useFormData(data.searchForm);
+
 // 浜у搧琛ㄥ崟寮规鏁版嵁
 const productFormVisible = ref(false);
 const productOperationType = ref("");
@@ -613,6 +742,7 @@
     taxInclusiveTotalPrice: "",
     taxExclusiveTotalPrice: "",
     invoiceType: "",
+		warnNum: "",
   },
   productRules: {
     productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
@@ -622,14 +752,15 @@
     taxInclusiveUnitPrice: [
       { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
-    taxRate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    // taxRate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+		warnNum: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
     taxInclusiveTotalPrice: [
       { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
     taxExclusiveTotalPrice: [
       { required: true, message: "璇疯緭鍏�", trigger: "blur" },
     ],
-    invoiceType: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+    // invoiceType: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
   },
 });
 const { productForm, productRules } = toRefs(productFormData);
@@ -639,6 +770,17 @@
   // 璁剧疆涓婁紶鐨勮姹傚ご閮�
   headers: { Authorization: "Bearer " + getToken() },
 });
+
+const changeDaterange = (value) => {
+  if (value) {
+    searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+    searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+  } else {
+    searchForm.entryDateStart = undefined;
+    searchForm.entryDateEnd = undefined;
+  }
+  handleQuery();
+};
 
 const formattedNumber = (row, column, cellValue) => {
   return parseFloat(cellValue).toFixed(2);
@@ -675,7 +817,8 @@
 };
 const getList = () => {
   tableLoading.value = true;
-  purchaseListPage({ ...searchForm.value, ...page })
+  const { entryDate, ...rest } = searchForm;
+  purchaseListPage({ ...rest, ...page })
     .then((res) => {
       tableLoading.value = false;
       tableData.value = res.data.records;
@@ -793,9 +936,9 @@
 // 绉婚櫎鏂囦欢
 function handleRemove(file) {
   console.log("handleRemove", file.id);
-  if (file.size > 1024 * 1024 * 10) { 
+  if (file.size > 1024 * 1024 * 10) {
     // 浠呭墠绔竻鐞嗭紝涓嶈皟鐢ㄥ垹闄ゆ帴鍙e拰鎻愮ず
-    return; 
+    return;
   }
   if (operationType.value === "edit") {
     let ids = [];
@@ -852,10 +995,15 @@
   });
 };
 const getModels = (value) => {
-  productForm.value.productCategory = findNodeById(productOptions.value, value);
-  modelList({ id: value }).then((res) => {
-    modelOptions.value = res;
-  });
+  if (value) {
+    productForm.value.productCategory = findNodeById(productOptions.value, value) || "";
+    modelList({ id: value }).then((res) => {
+      modelOptions.value = res;
+    });
+  } else {
+    productForm.value.productCategory = "";
+    modelOptions.value = [];
+  }
 };
 const getProductModel = (value) => {
   const index = modelOptions.value.findIndex((item) => item.id === value);
@@ -870,12 +1018,12 @@
 const findNodeById = (nodes, productId) => {
   for (let i = 0; i < nodes.length; i++) {
     if (nodes[i].value === productId) {
-      return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+      return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣鐨刲abel
     }
     if (nodes[i].children && nodes[i].children.length > 0) {
       const foundNode = findNodeById(nodes[i].children, productId);
       if (foundNode) {
-        return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
+        return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝鐩存帴杩斿洖锛堝凡缁忔槸label瀛楃涓诧級
       }
     }
   }
@@ -1025,10 +1173,10 @@
   return `${year}-${month}-${day}`;
 }
 const mathNum = () => {
-	if (!productForm.value.taxRate) {
-		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
-		return;
-	}
+	// if (!productForm.value.taxRate) {
+	// 	proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+	// 	return;
+	// }
   if (!productForm.value.taxInclusiveUnitPrice) {
     return;
   }
@@ -1041,48 +1189,54 @@
       productForm.value.taxInclusiveUnitPrice,
       productForm.value.quantity
     );
-  if (productForm.value.taxRate) {
     // 涓嶅惈绋庢�讳环璁$畻
     productForm.value.taxExclusiveTotalPrice =
       proxy.calculateTaxExclusiveTotalPrice(
         productForm.value.taxInclusiveTotalPrice,
         productForm.value.taxRate
       );
-  }
+  // if (productForm.value.taxRate) {
+  //   // 涓嶅惈绋庢�讳环璁$畻
+  //   productForm.value.taxExclusiveTotalPrice =
+  //     proxy.calculateTaxExclusiveTotalPrice(
+  //       productForm.value.taxInclusiveTotalPrice,
+  //       productForm.value.taxRate
+  //     );
+  // }
 };
 const reverseMathNum = (field) => {
-	if (!productForm.value.taxRate) {
-		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
-		return;
-	}
-  const taxRate = Number(productForm.value.taxRate);
-  if (!taxRate) return;
+	// if (!productForm.value.taxRate) {
+	// 	proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+	// 	return;
+	// }
+  const taxRate = productForm.value.taxRate?Number(productForm.value.taxRate):0;
+  // if (!taxRate) return;
   if (field === 'taxInclusiveTotalPrice') {
     // 宸茬煡鍚◣鎬讳环鍜屾暟閲忥紝鍙嶇畻鍚◣鍗曚环
     if (productForm.value.quantity) {
-      productForm.value.taxInclusiveUnitPrice = 
+      productForm.value.taxInclusiveUnitPrice =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
     }
     // 宸茬煡鍚◣鎬讳环鍜屽惈绋庡崟浠凤紝鍙嶇畻鏁伴噺
     else if (productForm.value.taxInclusiveUnitPrice) {
-      productForm.value.quantity = 
+      productForm.value.quantity =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
     }
     // 鍙嶇畻涓嶅惈绋庢�讳环
-    productForm.value.taxExclusiveTotalPrice = 
+    productForm.value.taxExclusiveTotalPrice =
       (Number(productForm.value.taxInclusiveTotalPrice) / (1 + taxRate / 100)).toFixed(2);
   } else if (field === 'taxExclusiveTotalPrice') {
     // 鍙嶇畻鍚◣鎬讳环
-    productForm.value.taxInclusiveTotalPrice = 
+    productForm.value.taxInclusiveTotalPrice =
       (Number(productForm.value.taxExclusiveTotalPrice) * (1 + taxRate / 100)).toFixed(2);
     // 宸茬煡鏁伴噺锛屽弽绠楀惈绋庡崟浠�
     if (productForm.value.quantity) {
-      productForm.value.taxInclusiveUnitPrice = 
+      productForm.value.taxInclusiveUnitPrice =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
     }
     // 宸茬煡鍚◣鍗曚环锛屽弽绠楁暟閲�
     else if (productForm.value.taxInclusiveUnitPrice) {
-      productForm.value.quantity = 
+      productForm.value.quantity =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
     }
   }
@@ -1107,6 +1261,73 @@
   }
 };
 
+// 鎵爜鐧昏瀵硅瘽妗嗙浉鍏冲彉閲�
+const scanDialogVisible = ref(false);
+const scanForm = reactive({
+  purchaseContractNumber: "",
+  supplierName: "",
+  projectName: "",
+  scanTime: "",
+  scannerName: "",
+  scanStatus: "鏈壂鐮�",
+  scanRemark: "",
+});
+const scanRules = {
+  scanRemark: [{ required: true, message: "璇疯緭鍏ユ壂鐮佸娉�", trigger: "blur" }],
+};
+const scanRecords = ref([]);
+
+// 鎵撳紑鎵爜鐧昏瀵硅瘽妗�
+const openScanDialog = (row) => {
+  scanForm.purchaseContractNumber = row.purchaseContractNumber;
+  scanForm.supplierName = row.supplierName;
+  scanForm.projectName = row.projectName;
+  scanForm.scanTime = getCurrentDateTime();
+  scanForm.scannerName = userStore.nickName;
+  scanForm.scanStatus = "鏈壂鐮�";
+  scanForm.scanRemark = "";
+  scanRecords.value = [];
+  scanDialogVisible.value = true;
+};
+
+// 鍏抽棴鎵爜鐧昏瀵硅瘽妗�
+const closeScanDialog = () => {
+  scanDialogVisible.value = false;
+  proxy.resetForm("scanFormRef");
+};
+
+// 鎻愪氦鎵爜鐧昏
+const submitScan = () => {
+  proxy.$refs["scanFormRef"].validate((valid) => {
+    if (valid) {
+      // 娣诲姞鎵爜璁板綍
+      scanRecords.value.push({
+        ...scanForm,
+        id: Date.now(), // 妯℃嫙ID
+        scanTime: getCurrentDateTime(),
+      });
+      scanForm.scanStatus = "宸叉壂鐮�";
+      scanForm.scanRemark = scanForm.scanRemark || "鏃�";
+      proxy.$modal.msgSuccess("鎵爜鐧昏鎴愬姛锛�");
+      closeScanDialog();
+    }
+  });
+};
+
+// 鑾峰彇褰撳墠鏃ユ湡鏃堕棿
+function getCurrentDateTime() {
+  const now = new Date();
+  const year = now.getFullYear();
+  const month = String(now.getMonth() + 1).padStart(2, "0");
+  const day = String(now.getDate()).padStart(2, "0");
+  const hours = String(now.getHours()).padStart(2, "0");
+  const minutes = String(now.getMinutes()).padStart(2, "0");
+  const seconds = String(now.getSeconds()).padStart(2, "0");
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+}
+
+
+
 onMounted(() => {
   getList();
 });

--
Gitblit v1.9.3