From 4ca2aeafbb3c753d98ba849fa5ebf817049b5803 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 02 九月 2025 11:49:13 +0800
Subject: [PATCH] 合并冲突

---
 src/views/inventoryManagement/dispatchLog/index.vue |  869 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 604 insertions(+), 265 deletions(-)

diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue
index aa30f73..177868d 100644
--- a/src/views/inventoryManagement/dispatchLog/index.vue
+++ b/src/views/inventoryManagement/dispatchLog/index.vue
@@ -16,7 +16,7 @@
         >
       </div>
       <div>
-        <el-button type="primary" @click="openForm('add')">鏂板</el-button>
+        <!-- <el-button type="primary" @click="openForm('add')">鏂板</el-button> -->
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       </div>
@@ -38,14 +38,14 @@
         <el-table-column align="center" label="搴忓彿" type="index" width="60" />
         <el-table-column
           label="鍑哄簱鏃ユ湡"
-          prop="inboundTime"
-          width="100"
+          prop="createTime"
+          min-width="130"
           show-overflow-tooltip
         />
         <el-table-column
           label="渚涘簲鍟嗗悕绉�"
           prop="supplierName"
-          width="160"
+          width="250"
           show-overflow-tooltip
         />
         <el-table-column
@@ -68,41 +68,41 @@
         />
         <el-table-column
           label="鍑哄簱鏁伴噺"
-          prop="inboundQuantity"
+          prop="inboundNum"
           width="100"
           show-overflow-tooltip
         />
         <el-table-column
-          label="鍚◣鍗曚环"
+          label="鍚◣鍗曚环(鍏�)"
           prop="taxInclusiveUnitPrice"
-          width="100"
+          width="200"
           show-overflow-tooltip
         />
         <el-table-column
-          label="鍚◣鎬讳环"
+          label="鍚◣鎬讳环(鍏�)"
           prop="taxInclusiveTotalPrice"
-          width="100"
+          width="200"
           show-overflow-tooltip
         />
         <el-table-column
-          label="绋庣巼"
+          label="绋庣巼(%)"
           prop="taxRate"
           width="100"
           show-overflow-tooltip
         />
         <el-table-column
-          label="涓嶅惈绋庢�讳环"
+          label="涓嶅惈绋庢�讳环(鍏�)"
           prop="taxExclusiveTotalPrice"
-          width="100"
+          width="180"
           show-overflow-tooltip
         />
         <el-table-column
           label="鍑哄簱浜�"
-          prop="nickname"
+          prop="createBy"
           width="80"
           show-overflow-tooltip
         />
-        <el-table-column
+        <!-- <el-table-column
           fixed="right"
           label="鎿嶄綔"
           min-width="60"
@@ -117,7 +117,7 @@
               >缂栬緫</el-button
             >
           </template>
-        </el-table-column>
+        </el-table-column> -->
       </el-table>
       <pagination
         v-show="total > 0"
@@ -128,152 +128,120 @@
         @pagination="paginationChange"
       />
     </div>
+
+    <!-- 鎵撳嵃棰勮寮圭獥 -->
     <el-dialog
-      v-model="dialogFormVisible"
-      :title="operationType === 'add' ? '鏂板鍑哄簱' : '缂栬緫鍑哄簱'"
-      width="70%"
-      @close="closeDia"
+      v-model="printPreviewVisible"
+      title="鎵撳嵃棰勮"
+      width="90%"
+      :close-on-click-modal="false"
+      class="print-preview-dialog"
     >
-      <el-form
-        :model="form"
-        label-width="140px"
-        label-position="top"
-        :rules="rules"
-        ref="formRef"
-      >
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="salesContractNo">
-              <el-input
-                v-model="form.salesContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浜у搧澶х被锛�" prop="salesman">
-              <el-select v-model="form.salesman" placeholder="璇烽�夋嫨" clearable>
-                <el-option
-                  v-for="item in userList"
-                  :key="item.nickName"
-                  :label="item.nickName"
-                  :value="item.nickName"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="customerContractNo">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍗曚綅锛�" prop="customerId">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍑哄簱鏃堕棿锛�" prop="projectName">
-              <el-date-picker
-                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-col :span="12">
-            <el-form-item label="鍑哄簱鏁伴噺锛�" prop="customerContractNo">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍚◣鍗曚环锛�" prop="customerId">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍚◣鎬讳环锛�" prop="customerContractNo">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="绋庣巼锛�" prop="customerId">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="涓嶅惈绋庢�讳环锛�" prop="entryDate">
-              <el-input
-                v-model="form.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍑哄簱浜猴細" prop="entryPerson">
-              <el-select
-                v-model="form.entryPerson"
-                placeholder="璇烽�夋嫨"
-                clearable
-              >
-                <el-option
-                  v-for="item in userList"
-                  :key="item.userId"
-                  :label="item.nickName"
-                  :value="item.userId"
-                />
-              </el-select>
-            </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 @click="closeDia">鍙栨秷</el-button>
+      <div class="print-preview-container">
+                 <div class="print-preview-header">
+           <el-button type="primary" @click="executePrint">鎵ц鎵撳嵃</el-button>
+           <el-button @click="printPreviewVisible = false">鍏抽棴棰勮</el-button>
+         </div>
+                   <div class="print-preview-content">
+          <div v-if="printData.length === 0" style="text-align: center; padding: 50px; color: #999;">
+            鏆傛棤鎵撳嵃鏁版嵁
+          </div>
+          <div v-else style="text-align: center; padding: 10px; color: #666; font-size: 14px; background: #e8f4fd; margin-bottom: 10px;">
+            鍏� {{ printData.length }} 鏉℃暟鎹緟鎵撳嵃
+          </div>
+          <div v-for="(item, index) in printData" :key="index" class="print-page">
+            <div class="delivery-note">
+              <div class="header">
+                <div class="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
+                <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 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.productCategory || '鐮傜伆鐮�' }}</td>
+                      <td>{{ item.specificationModel || '鏍囧噯' }}</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>
+                <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>
-      </template>
+      </div>
     </el-dialog>
+
+
   </div>
 </template>
 
@@ -282,36 +250,27 @@
 import { ref } from "vue";
 import { ElMessageBox } from "element-plus";
 import useUserStore from "@/store/modules/user";
-import { userListNoPage } from "@/api/system/user.js";
 import {
   getStockOutPage,
-  addStockOut,
-  updateStockOut,
   delStockOut,
-  exportStockOut
 } from "@/api/inventoryManagement/stockOut.js";
 
 const userStore = useUserStore();
 const { proxy } = getCurrentInstance();
 const tableData = ref([]);
-// const productData = ref([]);
 const selectedRows = ref([]);
-const userList = ref([]);
-// const customerOption = ref([]);
 const tableLoading = ref(false);
-const supplierList = ref([])
-const productList = ref([])
-const productModelList = ref([])
 const page = reactive({
   current: 1,
   size: 100,
 });
 const total = ref(0);
-const fileList = ref([]);
+
+// 鎵撳嵃鐩稿叧
+const printPreviewVisible = ref(false);
+const printData = ref([]);
 
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const operationType = ref("");
-const dialogFormVisible = ref(false);
 const data = reactive({
   searchForm: {
     supplierName: "",
@@ -320,27 +279,23 @@
     supplierId: null,
     supplierName: '',
     productId: null,
-    productCategory: '',
-    specificationModel: '',
+    productName: '',
+    userId: userStore.userId,
+    nickname: '',
+    model: '',
+    productModelId: null,
     unit: '',
+    productrecordId: null,
+    taxInclusiveUnitPrice: '',
+    taxInclusiveTotalPrice: '',
+    taxRate: '',
+    taxExclusiveTotalPrice: '',
     inboundTime: '',
     inboundBatch: '',
-    inboundQuantity: 0,
-    taxInclusiveUnitPrice: 0,
-    taxInclusiveTotalPrice: 0,
-    taxRate: 0,
-    taxExclusiveTotalPrice: 0,
-    userId: null,
-    nickname: ''
-  },
-  rules: {
-    supplierId: [{ required: true, message: '璇烽�夋嫨渚涘簲鍟�', trigger: 'change' }],
-    productRecordid: [{ required: true, message: '璇烽�夋嫨浜у搧', trigger: 'change' }],
-    inboundTime: [{ required: true, message: '璇烽�夋嫨鍏ュ簱鏃堕棿', trigger: 'change' }],
-    inboundQuantity: [{ required: true, message: '璇疯緭鍏ュ叆搴撴暟閲�', trigger: 'blur' }]
+    inboundQuantity: ''
   },
 });
-const { searchForm, form, rules } = toRefs(data);
+const { searchForm } = toRefs(data);
 
 // 鏌ヨ鍒楄〃
 /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -362,26 +317,13 @@
       tableData.value.map((item) => {
         item.children = [];
       });
-      total.value = res.total;
+      total.value = res.data.total;
     })
     .catch(() => {
       tableLoading.value = false;
     });
 };
-// const findNodeById = (nodes, productId) => {
-//   for (let i = 0; i < nodes.length; i++) {
-//     if (nodes[i].value === productId) {
-//       return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
-//     }
-//     if (nodes[i].children && nodes[i].children.length > 0) {
-//       const foundNode = findNodeById(nodes[i].children, productId);
-//       if (foundNode) {
-//         return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
-//       }
-//     }
-//   }
-//   return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
-// };
+
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
   // 杩囨护鎺夊瓙鏁版嵁
@@ -399,70 +341,9 @@
   ]);
 };
 
-// 鎵撳紑寮规
-const openForm = async (type, row) => {
-  operationType.value = type;
-  form.value = {};
-  productData.value = [];
-  let userLists = await userListNoPage();
-  userList.value = userLists.data;
-  customerList().then((res) => {
-    customerOption.value = res;
-  });
-  console.log("userStore.id", userStore.id);
-  form.value.entryPerson = userStore.id;
-  if (type === "edit") {
-    currentId.value = row.id;
-    getSalesLedgerWithProducts({ id: row.id, type: 1 }).then((res) => {
-      form.value = { ...res };
-      form.value.entryPerson = Number(res.entryPerson);
-      productData.value = form.value.productData;
-      fileList.value = form.value.salesLedgerFiles;
-    });
-  }
-  // let userAll = await userStore.getInfo()
-  // userList.value.forEach(element => {
-  //   if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) {
-  //     form.value.entryPerson = userAll.user.userId // 璁剧疆榛樿涓氬姟鍛樹负褰撳墠鐢ㄦ埛
-  //   }
-  // });
-  form.value.entryDate = getCurrentDate(); // 璁剧疆榛樿褰曞叆鏃ユ湡涓哄綋鍓嶆棩鏈�
-  dialogFormVisible.value = true;
-};
-
-// 鎻愪氦琛ㄥ崟
-const submitForm = () => {
-  proxy.$refs["formRef"].validate((valid) => {
-    if (valid) {
-      if (productData.value.length > 0) {
-        form.value.productData = proxy.HaveJson(productData.value);
-      } else {
-        proxy.$modal.msgWarning("璇锋坊鍔犱骇鍝佷俊鎭�");
-        return;
-      }
-      let tempFileIds = [];
-      if (fileList.value.length > 0) {
-        tempFileIds = fileList.value.map((item) => item.tempId);
-      }
-      form.value.tempFileIds = tempFileIds;
-      form.value.type = 1;
-      addOrUpdateSalesLedger(form.value).then((res) => {
-        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-        closeDia();
-        getList();
-      });
-    }
-  });
-};
-// 鍏抽棴寮规
-const closeDia = () => {
-  proxy.resetForm("formRef");
-  dialogFormVisible.value = false;
-};
-
 // 瀵煎嚭
 const handleOut = () => {
-  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+  ElMessageBox.confirm("鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
     confirmButtonText: "纭",
     cancelButtonText: "鍙栨秷",
     type: "warning",
@@ -474,6 +355,7 @@
       proxy.$modal.msg("宸插彇娑�");
     });
 };
+
 // 鍒犻櫎
 const handleDelete = () => {
   let ids = [];
@@ -489,7 +371,7 @@
     type: "warning",
   })
     .then(() => {
-      delStockOut(ids).then((res) => {
+      delStockOut({ids:ids}).then((res) => {
         proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
         getList();
       });
@@ -497,6 +379,296 @@
     .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 executePrint = () => {
+  console.log('寮�濮嬫墽琛屾墦鍗帮紝鏁版嵁鏉℃暟:', printData.value.length);
+  console.log('鎵撳嵃鏁版嵁:', printData.value);
+  
+  // 鍒涘缓涓�涓柊鐨勬墦鍗扮獥鍙�
+  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 {
+            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 {
+          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="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
+            <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 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.productCategory || '鐮傜伆鐮�'}</td>
+                  <td>${item.specificationModel || '鏍囧噯'}</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>
+            <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>
+    `;
+  });
+  
+  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}`;
 };
 // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
 function getCurrentDate() {
@@ -511,4 +683,171 @@
 });
 </script>
 
-<style scoped lang="scss"></style>
+<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-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;
+       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;
+  }
+  
+           .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;
+   }
+}
+</style>

--
Gitblit v1.9.3