| 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/printView.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/printView1.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/outbound/extend/printView.vue
@@ -2,38 +2,33 @@ <div> <vol-box v-model="showDetialBox" :lazy="true" width="500px" :padding="15" title=""> <!-- æå°ä¸ç¨å®¹å¨ --> <div id="printContainer" style="position: absolute; left: -9999px;"> <div id="printContainer" style="position: absolute; left: -9999px"> <div class="print-page" v-for="(item, index) in printData" :key="index"> <div class="material-card"> <!-- <div class="header">ååè½ç©ææ è¯å¡(å°å )</div> --> <div class="dual-column preview-card-header-qrcode"> <div class="preview-card-header">ç©æå¡ {{ idx + 1 }}</div> <VueQrcode :value="generateQr(item)" :size="20" id="qrcode" /> <div class="dual-column header-section"> <div class="header">ååè½ç©ææ è¯å¡(å°å )</div> <VueQrcode :value="generateQr(item)" :size="60" class="qrcode" /> </div> <div class="content"> <!-- äºç»´ç æ¾å¨å³ä¸è§ --> <!-- <div class="qr-section"> --> <!-- <VueQrcode :value="generateQr(item)" id="qrcode" /> --> <!-- </div> --> <div class="row dual-column"> <div class="column"> <span class="label">æå·</span> <span class="value code-value">{{ item.materialCode }}</span> <span class="value code-value full-width">{{ item.materialCode }}</span> </div> <div class="column"> <span class="label">ä¾åºåç¼ç </span> <span class="value">{{ item.supplierCode }}</span> <span class="value full-width">{{ item.supplierCode }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">åå</span> <span class="value">{{ item.materialName }}</span> <span class="value full-width">{{ item.materialName }}</span> </div> <div class="column"> <span class="label">éè´åå·</span> <span class="value">{{ item.purchaseOrderNo }}</span> <span class="value full-width">{{ item.purchaseOrderNo }}</span> </div> </div> @@ -44,29 +39,29 @@ </div> <div class="column"> <span class="label">æ°é/æ»æ°</span> <span class="value">{{ item.quantityTotal }}</span> <span class="value full-width">{{ item.quantityTotal }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">æ¹å·</span> <span class="value">{{ item.batchNumber }}</span> <span class="value full-width">{{ item.batchNumber }}</span> </div> <div class="column"> <span class="label">æ¹æ¬¡</span> <span class="value">{{ item.batch }}</span> <span class="value full-width">{{ item.batch }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">ååº</span> <span class="value">{{ item.factory }}</span> <span class="value full-width">{{ item.factory }}</span> </div> <div class="column"> <span class="label">æ¥æ</span> <span class="value">{{ item.date }}</span> <span class="value full-width">{{ item.date }}</span> </div> </div> </div> @@ -74,36 +69,36 @@ </div> </div> <!-- é¢è§åºå --> <!-- é¢è§åºåä¿æä¸å --> <div id="previewContent" class="preview-container"> <div class="preview-header">ååè½ç©ææ è¯å¡(å°å ) - é¢è§ (å ±{{ printData.length }}个)</div> <div class="preview-scroll"> <div v-for="(item, idx) in printData" :key="idx" class="preview-card"> <div class="dual-column preview-card-header-qrcode"> <div class="preview-card-header">ç©æå¡ {{ idx + 1 }}</div> <VueQrcode :value="generateQr(item)" :size="20" id="qrcode" /> <div class="preview-card-header">ååè½ç©ææ è¯å¡(å°å )</div> <VueQrcode :value="generateQr(item)" :size="40" class="qrcode-preview" /> </div> <div class="preview-wrapper"> <div class="content-preview"> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">æå·</span> <span class="value-preview code-value">{{ item.materialCode }}</span> <span class="value-preview code-value full-width">{{ item.materialCode }}</span> </div> <div class="column-preview"> <span class="label-preview">ä¾åºåç¼ç </span> <span class="value-preview">{{ item.supplierCode }}</span> <span class="value-preview full-width">{{ item.supplierCode }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">åå</span> <span class="value-preview">{{ item.materialName }}</span> <span class="value-preview full-width">{{ item.materialName }}</span> </div> <div class="column-preview"> <span class="label-preview">éè´åå·</span> <span class="value-preview">{{ item.purchaseOrderNo }}</span> <span class="value-preview full-width">{{ item.purchaseOrderNo }}</span> </div> </div> @@ -114,29 +109,29 @@ </div> <div class="column-preview"> <span class="label-preview">æ°é/æ»æ°</span> <span class="value-preview">{{ item.quantityTotal }}</span> <span class="value-preview full-width">{{ item.quantityTotal }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">æ¹å·</span> <span class="value-preview">{{ item.batchNumber }}</span> <span class="value-preview full-width">{{ item.batchNumber }}</span> </div> <div class="column-preview"> <span class="label-preview">æ¹æ¬¡</span> <span class="value-preview">{{ item.batch }}</span> <span class="value-preview full-width">{{ item.batch }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">ååº</span> <span class="value-preview">{{ item.factory }}</span> <span class="value-preview full-width">{{ item.factory }}</span> </div> <div class="column-preview"> <span class="label-preview">æ¥æ</span> <span class="value-preview">{{ item.date }}</span> <span class="value-preview full-width">{{ item.date }}</span> </div> </div> </div> @@ -159,42 +154,42 @@ </template> <script> import VolBox from "@/components/basic/VolBox.vue"; import VueQrcode from "vue-qrcode"; import VolBox from '@/components/basic/VolBox.vue' import VueQrcode from 'vue-qrcode' export default { components: { VolBox, VueQrcode }, data() { return { showDetialBox: false, printData: [], // å卿尿°æ®éå }; printData: [] } }, methods: { generateQr(item) { return `${item.batchNumber}`; return `${item.batchNumber}` }, open(rows) { this.showDetialBox = true; this.printData = Array.isArray(rows) ? rows : [rows]; this.showDetialBox = true this.printData = Array.isArray(rows) ? rows : [rows] console.log('æå°æ°æ®:', this.printData); }, async print() { if (this.printData.length === 0) { this.$message.warning('没æå¯æå°çæ°æ®'); return; this.$message.warning('没æå¯æå°çæ°æ®') return } this.$nextTick(() => { try { const printContent = document.getElementById("printContainer").innerHTML; const printWindow = window.open("", "_blank", "width=800,height=600,scrollbars=yes"); const printContent = document.getElementById('printContainer').innerHTML const printWindow = window.open('', '_blank', 'width=800,height=600,scrollbars=yes') if (!printWindow) { this.$message.error('æ æ³æå¼æå°çªå£ï¼è¯·æ£æ¥æµè§å¨å¼¹çªè®¾ç½®'); return; this.$message.error('æ æ³æå¼æå°çªå£ï¼è¯·æ£æ¥æµè§å¨å¼¹çªè®¾ç½®') return } printWindow.document.write(` @@ -204,36 +199,48 @@ <meta charset="UTF-8"> <title>ç©ææ è¯å¡æå° - å ±${this.printData.length}个</title> <style> /* éç½®æææ ·å¼ */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: SimSun, "å®ä½", sans-serif; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; color-adjust: exact !important; } #qrcode { width: 60px; height: 60px; display: block; margin: 0, 15px } @media print { @page { size: 80mm 60mm; margin: 0; padding: 0; } body { font-family: "Microsoft YaHei", "SimHei", Arial, sans-serif; background: white !important; margin: 0 !important; padding: 0 !important; width: 80mm !important; } .qrcode { width: 15mm !important; height: 15mm !important; display: block; } .qrcode canvas { width: 15mm !important; height: 15mm !important; image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; } @media print { @page { size: 80mm 60mm !important; margin: 0 !important; padding: 0 !important; } body { width: 80mm !important; height: 60mm !important; margin: 0 !important; padding: 0 !important; background: white !important; } @@ -241,44 +248,52 @@ width: 80mm !important; height: 60mm !important; page-break-after: always !important; break-after: page !important; margin: 0 !important; padding: 2mm !important; display: block !important; } .print-page:last-child { page-break-after: auto !important; } .material-card { width: 80mm !important; height: 56mm !important; border: 0.3mm solid #000 !important; padding: 1mm !important; box-sizing: border-box !important; position: relative !important; display: block !important; background: white !important; } .print-page:last-child { page-break-after: avoid !important; } .material-card { width: 78mm !important; height: 58mm !important; border: 0.5mm solid #000 !important; padding: 1.5mm !important; box-sizing: border-box !important; position: relative !important; background: white !important; font-family: "Microsoft YaHei", "SimHei", Arial, sans-serif !important; } .header-section { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 1.5mm !important; padding-bottom: 1mm !important; border-bottom: 0.3mm solid #000 !important; } .header { font-size: 3.5mm !important; font-size: 4mm !important; font-weight: bold !important; text-align: center !important; margin-bottom: 1mm !important; padding-bottom: 0.5mm !important; border-bottom: 0.2mm solid #000 !important; white-space: nowrap !important; } .content { height: calc(100% - 6mm) !important; height: calc(100% - 10mm) !important; position: relative !important; } .row { display: flex !important; margin-bottom: 0.8mm !important; min-height: 6mm !important; margin-bottom: 1.2mm !important; min-height: 6.5mm !important; align-items: stretch !important; } .dual-column { @@ -290,101 +305,44 @@ flex: 1 !important; display: flex !important; align-items: center !important; min-height: 5mm !important; } .column:first-child { margin-right: 2mm !important; margin-right: 2.5mm !important; } .label { font-weight: bold !important; flex: 0 0 15mm !important; flex: 0 0 8mm !important; white-space: nowrap !important; font-size: 2.2mm !important; font-size: 2.5mm !important; line-height: 1.3 !important; } .value { flex: 1 !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; border-bottom: 0.1mm dashed #666 !important; padding-bottom: 0.2mm !important; min-height: 2.5mm !important; font-size: 2.2mm !important; white-space: normal !important; word-break: break-all !important; word-wrap: break-word !important; min-height: 4mm !important; font-size: 2.5mm !important; line-height: 1.3 !important; border-bottom: none !important; padding: 0.5mm !important; } .full-width { display: block !important; white-space: normal !important; word-break: break-all !important; word-wrap: break-word !important; line-height: 1.3 !important; } .code-value { font-weight: bold !important; } .full-width { white-space: normal !important; word-break: break-all !important; line-height: 1.2 !important; } /* äºç»´ç æ ·å¼ */ .qr-section { width: 10mm !important; height: 12mm !important; font-siz:10px; } .qr-section canvas { width: 10mm !important; height: 10mm !important; max-width: 100% !important; max-height: 100% !important; } } /* å±å¹é¢è§æ ·å¼ */ @media screen { body { background: #f5f5f5; padding: 10px; display: flex; flex-direction: column; align-items: center; } .print-page { width: 80mm; height: 60mm; margin: 10px 0; padding: 2mm; background: white; box-shadow: 0 2px 10px rgba(0,0,0,0.1); border: 1px dashed #ccc; } .material-card { width: 80mm; height: 60mm; border: 0.3mm solid #000; padding: 1.5mm; background: white; position: relative; } .qr-section { position: absolute; top: 4mm; right: 2mm; width: 12mm; height: 12mm; border: 0.2mm solid #ccc; padding: 0.5mm; background: white; display: flex; align-items: center; justify-content: center; } .qr-section canvas { width: 10mm !important; height: 10mm !important; } } </style> @@ -393,47 +351,45 @@ ${printContent} <script> window.onload = function() { console.log('æå°é¡µé¢å è½½å®æï¼å ±${this.printData.length}ä¸ªç©æå¡'); // çå¾ äºç»´ç 渲æå®æ setTimeout(() => { // 强å¶è®¾ç½®äºç»´ç canvas尺寸 const canvases = document.querySelectorAll('canvas'); canvases.forEach(canvas => { canvas.style.width = '10mm !important'; canvas.style.height = '10mm !important'; canvas.setAttribute('width', '60'); canvas.setAttribute('height', '60'); canvas.style.width = '15mm'; canvas.style.height = '15mm'; }); window.print(); setTimeout(() => { window.close(); }, 500); }, 800); }; window.onafterprint = function() { setTimeout(() => { window.close(); }, 500); }; <\/script> </body> </html> `); `) printWindow.document.close(); printWindow.document.close() } catch (error) { console.error('æå°é误:', error); this.$message.error('æå°å¤±è´¥: ' + error.message); console.error('æå°é误:', error) this.$message.error('æå°å¤±è´¥: ' + error.message) } }); }) } } }; } </script> <style scoped> #qrcode { .qrcode { width: 60px; height: 60px; display: block; margin: 0, 15px } .qrcode-preview { width: 40px; height: 40px; display: block; } .preview-container { @@ -467,10 +423,9 @@ height: 240px; margin: 0 auto 15px auto; padding: 8px; border: 1px solid #ccc; font-family: SimSun; box-sizing: border-box; border: 2px solid #000; font-family: 'Microsoft YaHei', sans-serif; box-sizing: border-box; background: white; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); position: relative; @@ -481,21 +436,14 @@ } .preview-card-header { text-align: center; font-size: 14px; /* font-weight: bold; margin-bottom: 8px; padding-bottom: 4px; border-bottom: 1px solid #000; background: #f5f5f5; padding: 4px; */ height: 60px; width: 60px; font-weight: bold; white-space: nowrap; } .preview-wrapper { position: relative; height: calc(100% - 40px); height: calc(100% - 30px); } .content-preview { @@ -504,8 +452,10 @@ } .row-preview { /* margin-bottom: px; */ min-height: 32px; margin-bottom: 6px; min-height: 24px; display: flex; align-items: center; } .dual-column { @@ -517,17 +467,19 @@ flex: 1; display: flex; align-items: center; min-height: 22px; } .column-preview:first-child { margin-right: 10px; margin-right: 8px; } .label-preview { font-weight: bold; flex: 0 0 60px; flex: 0 0 30px; white-space: nowrap; font-size: 12px; line-height: 1.2; } .value-preview { @@ -535,9 +487,10 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; border-bottom: 1px dashed #666; font-size: 10px; padding-bottom: 2px; line-height: 1.2; font-weight: normal; } .code-value { @@ -546,31 +499,21 @@ .full-width { display: block; margin-top: 2px; white-space: normal; word-break: break-all; word-break: break-all !important; line-height: 1.2; font-size: 12px; font-size: 11px; min-height: auto; word-wrap: break-word !important; } /* é¢è§åºåäºç»´ç æ ·å¼ */ .qr-section-preview { position: absolute; top: 10px; right: 10px; width: 150px; height: 175px; .preview-card-header-qrcode { display: flex; align-items: center; justify-content: center; border: 1px solid #ddd; background: white; padding: 2px; } .qr-section-preview canvas { width: 56px !important; height: 56px !important; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; border-bottom: 2px solid #000; padding-bottom: 4px; } .footer-actions { @@ -582,7 +525,7 @@ .print-count { font-size: 14px; color: #409EFF; color: #409eff; font-weight: bold; } </style> ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/outbound/extend/printView1.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,588 @@ <template> <div> <vol-box v-model="showDetialBox" :lazy="true" width="500px" :padding="15" title=""> <!-- æå°ä¸ç¨å®¹å¨ --> <div id="printContainer" style="position: absolute; left: -9999px;"> <div class="print-page" v-for="(item, index) in printData" :key="index"> <div class="material-card"> <!-- <div class="header">ååè½ç©ææ è¯å¡(å°å )</div> --> <div class="dual-column preview-card-header-qrcode"> <div class="preview-card-header">ç©æå¡ {{ idx + 1 }}</div> <VueQrcode :value="generateQr(item)" :size="20" id="qrcode" /> </div> <div class="content"> <!-- äºç»´ç æ¾å¨å³ä¸è§ --> <!-- <div class="qr-section"> --> <!-- <VueQrcode :value="generateQr(item)" id="qrcode" /> --> <!-- </div> --> <div class="row dual-column"> <div class="column"> <span class="label">æå·</span> <span class="value code-value">{{ item.materialCode }}</span> </div> <div class="column"> <span class="label">ä¾åºåç¼ç </span> <span class="value">{{ item.supplierCode }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">åå</span> <span class="value">{{ item.materialName }}</span> </div> <div class="column"> <span class="label">éè´åå·</span> <span class="value">{{ item.purchaseOrderNo }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">è§æ ¼</span> <span class="value full-width">{{ item.specification }}</span> </div> <div class="column"> <span class="label">æ°é/æ»æ°</span> <span class="value">{{ item.quantityTotal }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">æ¹å·</span> <span class="value">{{ item.batchNumber }}</span> </div> <div class="column"> <span class="label">æ¹æ¬¡</span> <span class="value">{{ item.batch }}</span> </div> </div> <div class="row dual-column"> <div class="column"> <span class="label">ååº</span> <span class="value">{{ item.factory }}</span> </div> <div class="column"> <span class="label">æ¥æ</span> <span class="value">{{ item.date }}</span> </div> </div> </div> </div> </div> </div> <!-- é¢è§åºå --> <div id="previewContent" class="preview-container"> <div class="preview-header">ååè½ç©ææ è¯å¡(å°å ) - é¢è§ (å ±{{ printData.length }}个)</div> <div class="preview-scroll"> <div v-for="(item, idx) in printData" :key="idx" class="preview-card"> <div class="dual-column preview-card-header-qrcode"> <div class="preview-card-header">ç©æå¡ {{ idx + 1 }}</div> <VueQrcode :value="generateQr(item)" :size="20" id="qrcode" /> </div> <div class="preview-wrapper"> <div class="content-preview"> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">æå·</span> <span class="value-preview code-value">{{ item.materialCode }}</span> </div> <div class="column-preview"> <span class="label-preview">ä¾åºåç¼ç </span> <span class="value-preview">{{ item.supplierCode }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">åå</span> <span class="value-preview">{{ item.materialName }}</span> </div> <div class="column-preview"> <span class="label-preview">éè´åå·</span> <span class="value-preview">{{ item.purchaseOrderNo }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">è§æ ¼</span> <span class="value-preview full-width">{{ item.specification }}</span> </div> <div class="column-preview"> <span class="label-preview">æ°é/æ»æ°</span> <span class="value-preview">{{ item.quantityTotal }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">æ¹å·</span> <span class="value-preview">{{ item.batchNumber }}</span> </div> <div class="column-preview"> <span class="label-preview">æ¹æ¬¡</span> <span class="value-preview">{{ item.batch }}</span> </div> </div> <div class="row-preview dual-column"> <div class="column-preview"> <span class="label-preview">ååº</span> <span class="value-preview">{{ item.factory }}</span> </div> <div class="column-preview"> <span class="label-preview">æ¥æ</span> <span class="value-preview">{{ item.date }}</span> </div> </div> </div> </div> </div> </div> </div> <template #footer> <div class="footer-actions"> <span class="print-count">å ± {{ printData.length }} ä¸ªç©æå¡å¾ æå°</span> <div> <el-button type="primary" size="small" @click="print">æå°å ¨é¨</el-button> <el-button type="danger" size="small" @click="showDetialBox = false">å ³é</el-button> </div> </div> </template> </vol-box> </div> </template> <script> import VolBox from "@/components/basic/VolBox.vue"; import VueQrcode from "vue-qrcode"; export default { components: { VolBox, VueQrcode }, data() { return { showDetialBox: false, printData: [], // å卿尿°æ®éå }; }, methods: { generateQr(item) { return `${item.batchNumber}`; }, open(rows) { this.showDetialBox = true; this.printData = Array.isArray(rows) ? rows : [rows]; console.log('æå°æ°æ®:', this.printData); }, async print() { if (this.printData.length === 0) { this.$message.warning('没æå¯æå°çæ°æ®'); return; } this.$nextTick(() => { try { const printContent = document.getElementById("printContainer").innerHTML; const printWindow = window.open("", "_blank", "width=800,height=600,scrollbars=yes"); if (!printWindow) { this.$message.error('æ æ³æå¼æå°çªå£ï¼è¯·æ£æ¥æµè§å¨å¼¹çªè®¾ç½®'); return; } printWindow.document.write(` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ç©ææ è¯å¡æå° - å ±${this.printData.length}个</title> <style> /* éç½®æææ ·å¼ */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: SimSun, "å®ä½", sans-serif; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; color-adjust: exact !important; } #qrcode { width: 60px; height: 60px; display: block; margin: 0, 15px } @media print { @page { size: 80mm 60mm; margin: 0; padding: 0; } body { margin: 0 !important; padding: 0 !important; width: 80mm !important; background: white !important; } .print-page { width: 80mm !important; height: 60mm !important; page-break-after: always !important; break-after: page !important; margin: 0 !important; padding: 2mm !important; display: block !important; } .print-page:last-child { page-break-after: auto !important; } .material-card { width: 80mm !important; height: 56mm !important; border: 0.3mm solid #000 !important; padding: 1mm !important; box-sizing: border-box !important; position: relative !important; background: white !important; } .header { font-size: 3.5mm !important; font-weight: bold !important; text-align: center !important; margin-bottom: 1mm !important; padding-bottom: 0.5mm !important; border-bottom: 0.2mm solid #000 !important; } .content { height: calc(100% - 6mm) !important; position: relative !important; } .row { display: flex !important; margin-bottom: 0.8mm !important; min-height: 6mm !important; } .dual-column { display: flex !important; justify-content: space-between !important; } .column { flex: 1 !important; display: flex !important; align-items: center !important; } .column:first-child { margin-right: 2mm !important; } .label { font-weight: bold !important; flex: 0 0 15mm !important; white-space: nowrap !important; font-size: 2.2mm !important; } .value { flex: 1 !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; border-bottom: 0.1mm dashed #666 !important; padding-bottom: 0.2mm !important; min-height: 2.5mm !important; font-size: 2.2mm !important; } .code-value { font-weight: bold !important; } .full-width { white-space: normal !important; word-break: break-all !important; line-height: 1.2 !important; } /* äºç»´ç æ ·å¼ */ .qr-section { width: 10mm !important; height: 12mm !important; font-siz:10px; } .qr-section canvas { width: 10mm !important; height: 10mm !important; max-width: 100% !important; max-height: 100% !important; } } /* å±å¹é¢è§æ ·å¼ */ @media screen { body { background: #f5f5f5; padding: 10px; display: flex; flex-direction: column; align-items: center; } .print-page { width: 80mm; height: 60mm; margin: 10px 0; padding: 2mm; background: white; box-shadow: 0 2px 10px rgba(0,0,0,0.1); border: 1px dashed #ccc; } .material-card { width: 80mm; height: 60mm; border: 0.3mm solid #000; padding: 1.5mm; background: white; position: relative; } .qr-section { position: absolute; top: 4mm; right: 2mm; width: 12mm; height: 12mm; border: 0.2mm solid #ccc; padding: 0.5mm; background: white; display: flex; align-items: center; justify-content: center; } .qr-section canvas { width: 10mm !important; height: 10mm !important; } } </style> </head> <body> ${printContent} <script> window.onload = function() { console.log('æå°é¡µé¢å è½½å®æï¼å ±${this.printData.length}ä¸ªç©æå¡'); // çå¾ äºç»´ç 渲æå®æ setTimeout(() => { // 强å¶è®¾ç½®äºç»´ç canvas尺寸 const canvases = document.querySelectorAll('canvas'); canvases.forEach(canvas => { canvas.style.width = '10mm !important'; canvas.style.height = '10mm !important'; }); window.print(); }, 800); }; window.onafterprint = function() { setTimeout(() => { window.close(); }, 500); }; <\/script> </body> </html> `); printWindow.document.close(); } catch (error) { console.error('æå°é误:', error); this.$message.error('æå°å¤±è´¥: ' + error.message); } }); } } }; </script> <style scoped> #qrcode { width: 60px; height: 60px; display: block; margin: 0, 15px } .preview-container { max-height: 500px; overflow: hidden; display: flex; flex-direction: column; } .preview-header { text-align: center; font-size: 16px; font-weight: bold; margin-bottom: 10px; padding: 8px; background: #f0f0f0; border-radius: 4px; } .preview-scroll { max-height: 400px; overflow-y: auto; padding: 10px; border: 1px solid #e0e0e0; border-radius: 4px; background: #f9f9f9; } .preview-card { width: 320px; height: 240px; margin: 0 auto 15px auto; padding: 8px; border: 1px solid #ccc; font-family: SimSun; box-sizing: border-box; border: 2px solid #000; background: white; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); position: relative; } .preview-card:last-child { margin-bottom: 0; } .preview-card-header { text-align: center; font-size: 14px; /* font-weight: bold; margin-bottom: 8px; padding-bottom: 4px; border-bottom: 1px solid #000; background: #f5f5f5; padding: 4px; */ height: 60px; width: 60px; } .preview-wrapper { position: relative; height: calc(100% - 40px); } .content-preview { width: 100%; height: 100%; } .row-preview { /* margin-bottom: px; */ min-height: 32px; } .dual-column { display: flex; justify-content: space-between; } .column-preview { flex: 1; display: flex; align-items: center; } .column-preview:first-child { margin-right: 10px; } .label-preview { font-weight: bold; flex: 0 0 60px; white-space: nowrap; font-size: 12px; } .value-preview { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; border-bottom: 1px dashed #666; padding-bottom: 2px; } .code-value { font-weight: bold; } .full-width { display: block; margin-top: 2px; white-space: normal; word-break: break-all; line-height: 1.2; font-size: 12px; } /* é¢è§åºåäºç»´ç æ ·å¼ */ .qr-section-preview { position: absolute; top: 10px; right: 10px; width: 150px; height: 175px; display: flex; align-items: center; justify-content: center; border: 1px solid #ddd; background: white; padding: 2px; } .qr-section-preview canvas { width: 56px !important; height: 56px !important; } .footer-actions { display: flex; justify-content: space-between; align-items: center; width: 100%; } .print-count { font-size: 14px; color: #409EFF; font-weight: bold; } </style> ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs
@@ -115,9 +115,11 @@ public async Task<ResponseModel> FeedbackAllocate(AllocateDto model) { _logger.LogInformation($"InvokeMESService FeedbackAllocate åºååå: {JsonConvert.SerializeObject(model)}"); string json = JsonConvert.SerializeObject(model, new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Include }); var content = new StringContent(json, Encoding.UTF8, "application/json"); var _client = _httpClientFactory.CreateClient("MESUrl"); ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_DTO/Allocate/AllocateDto.cs
@@ -39,8 +39,10 @@ [JsonProperty("business_type")] public string BusinessType { get; set; } [JsonProperty("fromWarehouse")] public string fromWarehouse { get; set; } [JsonProperty("toWarehouse")] public string toWarehouse { get; set; } /// <summary> ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -593,6 +593,7 @@ bool allCompleted = true; foreach (var detail in orderDetails) { _logger.LogInformation($"TaskService HandleOutboundOrderToMESCompletion: {outboundOrder.OrderNo} , {detail.NeedOutQuantity}"); if (detail.OverOutQuantity < detail.NeedOutQuantity) { allCompleted = false; @@ -662,7 +663,6 @@ allocatefeedmodel.Details.Add(detailModel); } var result = await _invokeMESService.FeedbackAllocate(allocatefeedmodel); if (result != null && result.code == 200) { @@ -728,7 +728,6 @@ feedmodel.details.Add(detailModel); } var result = await _invokeMESService.FeedbackOutbound(feedmodel); if (result != null && result.code == 200) { ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -32,7 +32,12 @@ Dt_Task dbtask = Repository.Db.Queryable<Dt_Task>().Where(x => x.PalletCode == palletCode).OrderByDescending(x=>x.CreateDate).First(); if (dbtask != null) { if (dbtask.TaskType == TaskTypeEnum.Outbound.ObjToInt() || dbtask.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) _logger.LogInformation(dbtask.TaskType.ToString()); if (dbtask.TaskType == TaskTypeEnum.Outbound.ObjToInt()) { return WebResponseContent.Instance.Error($"åºåºå¾ 忣任å¡"); } else if (dbtask.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) { return WebResponseContent.Instance.Error($"åºåºå¾ 忣任å¡"); }