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 | 850 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 593 insertions(+), 257 deletions(-) diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue index 38475bd..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,37 +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, - getStockManageById } 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: "", @@ -336,14 +294,8 @@ inboundBatch: '', inboundQuantity: '' }, - 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' }] - }, }); -const { searchForm, form, rules } = toRefs(data); +const { searchForm } = toRefs(data); // 鏌ヨ鍒楄〃 /** 鎼滅储鎸夐挳鎿嶄綔 */ @@ -365,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) => { // 杩囨护鎺夊瓙鏁版嵁 @@ -402,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", @@ -477,6 +355,7 @@ proxy.$modal.msg("宸插彇娑�"); }); }; + // 鍒犻櫎 const handleDelete = () => { let ids = []; @@ -492,7 +371,7 @@ type: "warning", }) .then(() => { - delStockOut(ids).then((res) => { + delStockOut({ids:ids}).then((res) => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); getList(); }); @@ -500,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() { @@ -514,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