From 86c6109d652a6b863b4f890e3bea573877503932 Mon Sep 17 00:00:00 2001
From: deslrey <deslre0381@gmail.com>
Date: 星期一, 12 一月 2026 11:56:09 +0800
Subject: [PATCH] 外购订单的标签打印功能
---
src/api/business/productOrder.js | 10 +
src/views/business/outsourcingFinishProduct/index.vue | 4
src/views/business/outsourcingFinishProduct/components/printDialog.vue | 318 +++++++++++++++++++++++++++++++++-------------------
3 files changed, 211 insertions(+), 121 deletions(-)
diff --git a/src/api/business/productOrder.js b/src/api/business/productOrder.js
index 881ca80..32c583b 100644
--- a/src/api/business/productOrder.js
+++ b/src/api/business/productOrder.js
@@ -98,6 +98,16 @@
data: query
})
}
+
+// 澶栬喘涓嬪崟鎴愬搧鏍囩鎵撳嵃淇℃伅
+export function labelOutsideOrderPrinting(query) {
+ return request({
+ url: '/insOrder/labelOutsideOrderPrinting',
+ method: 'post',
+ data: query
+ })
+}
+
// 鏍规嵁璁㈠崟id鏌ヨ鏍峰搧
export function getSampleByOrderId(query) {
return request({
diff --git a/src/views/business/outsourcingFinishProduct/components/printDialog.vue b/src/views/business/outsourcingFinishProduct/components/printDialog.vue
index 77a921f..67aea38 100644
--- a/src/views/business/outsourcingFinishProduct/components/printDialog.vue
+++ b/src/views/business/outsourcingFinishProduct/components/printDialog.vue
@@ -1,60 +1,67 @@
<template>
<div>
- <el-dialog :visible.sync="isShow" title="鏍囩鎵撳嵃" top="5vh" width="600px" @close="$emit('closePrintDialog')">
+ <el-dialog title="鏍囩鎵撳嵃" :visible.sync="isShow" width="600px" top="5vh" @close="$emit('closePrintDialog')">
<div style="width:100%;height: 400px;overflow-y: auto;text-align: left">
<div class="dia_body">
- <el-checkbox
- v-model="checkAll"
- :indeterminate="isIndeterminate"
- style="margin: 10px 5px;"
+ <el-checkbox style="margin: 10px 5px;" :indeterminate="isIndeterminate" v-model="checkAll"
@change="handleCheckAllChange">鍏ㄩ��</el-checkbox>
- <el-checkbox-group v-model="checkIndexList" @change="changePrintCode()">
- <el-card v-for="(item, i) in barcodeData" :key="i" class="box-card" style="margin-bottom: 15px; font-size: 16px !important;">
- <el-checkbox :key="i" :label="i" style="position: relative;top:0;left:10px"><br></el-checkbox>
+ <el-checkbox-group @change="changePrintCode()" v-model="checkIndexList">
+ <el-card class="box-card" v-for="(item, i) in barcodeData" :key="i"
+ style="margin-bottom: 15px; font-size: 16px !important;">
+ <el-checkbox :label="i" :key="i" style="position: relative;top:0;left:10px"><br></el-checkbox>
<div>
- <div class="titleH1" style="text-align: center; margin-bottom: 2px;font-size: 16px">妫�娴嬩腑蹇冩牱鍝佹爣璇嗗崱</div>
- <div style="text-align: center;">
- <barcode :displayValue="false" :height="34" :value="item.barcode" :width="2"></barcode>
- </div>
- <div style="margin-left: 20px;text-align: left">
- <div class="item">
- <span class="full-title">鏍峰搧鍚嶇О</span>:
- <span class="info">{{ item.sampleView }}</span>
+ <div style="text-align: center; margin-bottom: 2px;font-size: 22px;font-weight: bold;">鎴愬搧妫�娴�</div>
+ <div style="text-align: center; margin-bottom: 2px;font-size: 16px;font-weight: bold;">{{ item.partDesc
+ }}</div>
+ <div style="display: flex; align-items: center;">
+ <div style="flex: 0 0 45%; text-align: center;">
+ <vueQr :text="getQrCodeText(item)" :size="160" :margin="2"></vueQr>
+ <div style="margin-top: 5px; font-size: 14px;">
+ <span class="print-person-label">鎵撳嵃浜�</span>
+ <span style="margin-left: 20px; font-weight: bold;">{{ nickName }}</span>
+ </div>
</div>
- <div class="item">
- <span class="full-title">鐢熶骇鍗曚綅</span>:
- <span class="info">{{ item.production }}</span>
- </div>
- <div class="item2">
- <span class="full-title">瑙勬牸鍨嬪彿</span>:
- <span class="info">{{ item.sampleModel }}</span>
- </div>
- <div class="item">
- <span class="full-title">濮旀墭鏃ユ湡</span>:
- <span class="info">{{ item.sendTime }}</span>
- </div>
- <div class="item">
- <span class="full-title">濮旀墭浜�</span>:
- <span class="info2">{{ item.prepareUser }}</span>
- <span class="full-title">妫�娴嬬紪鍙�</span>:
- <span class="info">{{ item.entrustCode }}</span>
- </div>
- <div class="item">
- <span class="full-title">鏍峰搧鏁伴噺</span>:
- <span class="info2">{{ item.testQuantity }}</span>
- </div>
- <div style="font-weight: bold;display: flex;align-items: center;">
- <span class="full-title">鏍峰搧鐘舵��</span>:
- <el-radio-group v-model="item.insState" v-removeAriaHidden style="margin-top: 7px;margin-left: 4px;">
- <el-radio :label="0" style="font-weight: bold;margin-right: 7px;">寰呮</el-radio>
- <el-radio :label="1" style="font-weight: bold;margin-right: 7px;">鍦ㄦ</el-radio>
- <el-radio :label="2" style="font-weight: bold;margin-right: 7px;">宸叉</el-radio>
- </el-radio-group>
- <span>
- <el-radio v-model="item.isLeave"
- :label="true"
- size="small" style="margin-left: 14px;margin-top: 3px;" @click.native.prevent="changeIsLeave(item)">鐣欐牱</el-radio>
- </span>
+ <div style="flex: 1; margin-left: 10px;text-align: left">
+ <div class="item">
+ <span class="full-title">SN鍙�</span>
+ <span class="info">{{ item.lotBatchNo }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">缁濈紭棰滆壊</span>
+ <span class="info">{{ item.insulationColor }}</span>
+ </div>
+ <div class="item2">
+ <span class="full-title">鎶ゅ棰滆壊</span>
+ <span class="info">{{ item.outerColor }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">杞藉叿缂栧彿</span>
+ <span class="info">{{ item.drumNo }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">璧锋绫虫爣</span>
+ <span class="info">{{ item.startMeterMark }} - {{ item.endMeterMark }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">闀垮害(km)</span>
+ <span class="info">{{ calcInbondLength(item.startMeterMark, item.endMeterMark) }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">妫�娴嬩汉鍛�</span>
+ <span class="info">{{ item.inspectorName }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">妫�娴嬬粨璁�</span>
+ <span class="info">{{ formatData(item.insState) }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">鍏ュ簱鏃堕棿</span>
+ <span class="info">{{ item.updateTime }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">闆朵欢鍙�</span>
+ <span class="info">{{ item.partNo }}</span>
+ </div>
</div>
</div>
</div>
@@ -69,49 +76,63 @@
</el-row>
</span>
</el-dialog>
- <div class="el-dialog-body" style="overflow-y: auto;margin-top: 0;position: fixed;top: 20px;right: 10px;z-index: 99999;">
- <div id="printOrder" ref="printOrder" class="printOrder">
- <el-card v-for="(item, i) in checkDataList" :key="i" class="box-card" style="font-size: 0.29cm !important;font-weight: 700;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
+ <div class="el-dialog-body"
+ style="overflow-y: auto;margin-top: 0;position: fixed;top: 20px;right: 10px;z-index: 99999;width: 500px;">
+ <div id="printOrder" class="printOrder" ref="printOrder">
+ <el-card class="box-card" v-for="(item, i) in checkDataList" :key="i"
+ style="font-size: 0.29cm !important;font-weight: 700;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
<div>
- <div class="titleH1" style="text-align: center;margin-bottom: 1px">妫�娴嬩腑蹇冩牱鍝佹爣璇嗗崱</div>
- <div style="text-align: center;">
- <barcode :displayValue="false" :height="22" :value="item.barcode" :width="1.6"></barcode>
- </div>
- <div style="margin-left: 12px;text-align: left">
- <div class="item">
- <span class="full-title4">鏍峰搧鍚嶇О:</span>
- <span class="info4">{{ item.sampleView }}</span>
+ <div class="titleH1" style="text-align: center;margin-bottom: 1px">鎴愬搧妫�娴�</div>
+ <div class="titleH1" style="text-align: center;margin-bottom: 1px">{{ item.partDesc }}</div>
+ <div style="display: flex; align-items: center;">
+ <div style="flex: 0 0 45%; text-align: center;">
+ <vueQr :text="getQrCodeText(item)" :size="160" :margin="2"></vueQr>
+ <div style="margin-top: 5px;">
+ <span class="print-person-label">鎵撳嵃浜�</span>
+ <span style="margin-left: 20px; font-weight: bold;">{{ nickName }}</span>
+ </div>
</div>
- <div class="item">
- <span class="full-title2">鐢熶骇鍗曚綅</span>:
- <span class="info">{{ item.production }}</span>
- </div>
- <div class="item2">
- <span class="full-title4">瑙勬牸鍨嬪彿:</span>
- <span class="info4">{{ item.sampleModel }}</span>
- </div>
- <div class="item">
- <span class="full-title2">濮旀墭鏃ユ湡</span>:
- <span class="info">{{ item.sendTime }}</span>
- </div>
- <div class="item">
- <span class="full-title2">濮旀墭浜�</span>:
- <span class="info3">{{ item.prepareUser }}</span>
- <span class="full-title2">妫�娴嬬紪鍙�</span>:
- <span class="info">{{ item.entrustCode }}</span>
- </div>
- <div class="item">
- <span class="full-title2">鏍峰搧鏁伴噺</span>:
- <span class="info3">{{ item.testQuantity }}</span>
- </div>
- <div>
- <span class="full-title2">鏍峰搧鐘舵��</span>:
- <span style="white-space: nowrap;margin-left: 2px">
- 寰呮<span v-if="item.insState!==0" class="scor"></span><span v-if="item.insState===0" class="checked">鈭�</span>
- 鍦ㄦ<span v-if="item.insState!==1" class="scor"></span><span v-if="item.insState===1" class="checked">鈭�</span>
- 宸叉<span v-if="item.insState!==2" class="scor"></span><span v-if="item.insState===2" class="checked">鈭�</span>
- 鐣欐牱<span v-if="!item.isLeave" class="scor"></span><span v-if="item.isLeave" class="checked">鈭�</span>
- </span>
+ <div style="flex: 1; margin-left: 5px;text-align: left">
+ <div class="item">
+ <span class="full-title">SN鍙�</span>
+ <span class="info">{{ item.lotBatchNo }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">缁濈紭棰滆壊</span>
+ <span class="info">{{ item.insulationColor }}</span>
+ </div>
+ <div class="item2">
+ <span class="full-title">鎶ゅ棰滆壊</span>
+ <span class="info">{{ item.outerColor }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">杞藉叿缂栧彿</span>
+ <span class="info">{{ item.drumNo }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">璧锋绫虫爣</span>
+ <span class="info">{{ item.startMeterMark }} - {{ item.endMeterMark }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">闀垮害(km)</span>
+ <span class="info">{{ calcInbondLength(item.startMeterMark, item.endMeterMark) }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">妫�娴嬩汉鍛�</span>
+ <span class="info">{{ item.inspectorName }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">妫�娴嬬粨璁�</span>
+ <span class="info">{{ formatData(item.insState) }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">鍏ュ簱鏃堕棿</span>
+ <span class="info">{{ item.updateTime }}</span>
+ </div>
+ <div class="item">
+ <span class="full-title">闆朵欢鍙�</span>
+ <span class="info">{{ item.partNo }}</span>
+ </div>
</div>
</div>
</div>
@@ -123,17 +144,25 @@
<script>
import PrintJS from "print-js";
-import {labelOrderPrinting} from "@/api/business/productOrder";
+import vueQr from "vue-qr";
+import { labelOutsideOrderPrinting } from "@/api/business/productOrder";
+import { mapGetters } from "vuex";
export default {
name: "printDialog",
// import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
- components: {},
+ // 2. 鍦ㄨ繖閲屾敞鍐岀粍浠�
+ components: {
+ vueQr
+ },
props: {
printDialog: {
type: Boolean,
default: () => false
},
+ },
+ computed: {
+ ...mapGetters(["nickName"]),
},
data() {
// 杩欓噷瀛樻斁鏁版嵁
@@ -158,17 +187,17 @@
selection.map(m => {
ids.push(m.id)
})
- labelOrderPrinting({
- ids: ids
- }).then(res => {
+ labelOutsideOrderPrinting({ ids: ids }).then(res => {
if (res.code === 200 && res.data.length > 0) {
res.data.forEach(item => {
+ console.log('item---', item)
item.sendTime = item.sendTime && item.sendTime.substring(0, 10)
item.sampleNumber = item.qtyArrived + item.buyUnitMeas
this.$set(item, 'barcode', item.entrustCode)
- this.$set(item, 'isLeave', item.insState === '2')
+ this.$set(item, 'isLeave', item.labelStatus === '2')
})
this.barcodeData = res.data
+ console.log('barcodeData---', this.barcodeData)
}
})
} catch (e) {
@@ -176,10 +205,27 @@
}
},
- changeIsLeave(item) {
- const index = this.barcodeData.findIndex(val => val.entrustCode === item.entrustCode)
- if (index > -1) {
- this.barcodeData[index].isLeave = !this.barcodeData[index].isLeave
+ calcInbondLength(startMeterMark, endMeterMark) {
+ let inboundLength = null;
+ if ((startMeterMark != null && startMeterMark !== '') && (endMeterMark != null && endMeterMark !== '')) {
+ let minus = this.$Big(endMeterMark).minus(this.$Big(startMeterMark));
+ inboundLength = Math.abs(minus)
+ }
+ return inboundLength;
+ },
+ formatData(params) {
+ if (params == 0) {
+ return '妫�楠屼腑'
+ } else if (params == 1) {
+ return '鍚堟牸'
+ } else if (params == 2) {
+ return '涓嶅悎鏍�'
+ } else if (params == 3) {
+ return '鏈笅鍗�'
+ } else if (params == 4) {
+ return '璁╂鏀捐'
+ } else {
+ return null
}
},
// 鍏ㄩ�夊閫夋鍥炶皟
@@ -197,6 +243,17 @@
},
changeType(type) {
type = type === '1' ? '0' : '1'
+ },
+ // 鐢熸垚浜岀淮鐮佸唴瀹�
+ getQrCodeText(item) {
+ const data = {
+ sn_no: item.lotBatchNo,
+ vehicle_no: item.drumNo,
+ qty_arrived: this.calcInbondLength(item.startMeterMark, item.endMeterMark),
+ lot_batch_no: item.lotBatchNo,
+ part_no: item.partNo,
+ };
+ return JSON.stringify(data, null, 2);
},
//閫夋嫨瑕佹墦鍗扮殑浜岀淮鐮�
changePrintCode() {
@@ -238,7 +295,7 @@
}
@media print{
width: 400px;
- height: 75px;
+ height: 800px;
margin:0;
}`,
onPrintDialogClose: this.erexcel = false,
@@ -261,56 +318,70 @@
<style scoped>
.item {
- margin-bottom: 4px;
+ margin-bottom: 2px;
+ line-height: 1.2;
}
.item2 {
- margin-bottom: 8px;
+ margin-bottom: 2px;
vertical-align: top;
+ line-height: 1.2;
}
.full-title {
display: inline-block;
- width: 80px;
+ width: 70px;
text-align-last: justify;
+ text-align: justify;
+ font-weight: bold;
}
+/* For the print section which might use smaller font */
.full-title2 {
display: inline-block;
- width: 50px;
+ width: 60px;
text-align-last: justify;
+ text-align: justify;
+ font-weight: bold;
}
.full-title4 {
display: inline-block;
- width: 53px;
+ width: 60px;
text-align-last: justify;
+ text-align: justify;
vertical-align: top;
+ font-weight: bold;
}
.info {
- margin-left: 2px;
+ margin-left: 15px;
+ font-weight: bold;
}
.info2 {
- margin-left: 2px;
- margin-right: 30px;
- width: 80px;
+ margin-left: 15px;
+ margin-right: 10px;
+ width: auto;
display: inline-block;
+ font-weight: bold;
}
.info3 {
- margin-left: 2px;
- margin-right: 8px;
- width: 44px;
+ margin-left: 15px;
+ margin-right: 10px;
+ width: auto;
display: inline-block;
+ font-weight: bold;
}
.info4 {
display: inline-block;
- margin-left: 2px;
+ margin-left: 15px;
white-space: normal;
- width: 260px;
+ width: 200px;
+ font-weight: bold;
+ vertical-align: top;
}
.checkboxInfo {
@@ -331,17 +402,26 @@
.checked {
margin-right: 14px;
margin-left: 4px;
+ font-weight: bold;
}
->>> .el-checkbox {
+.print-person-label {
+ display: inline-block;
+ width: 50px;
+ text-align-last: justify;
+ text-align: justify;
+ font-weight: bold;
+}
+
+>>>.el-checkbox {
margin-right: 10px;
}
->>> .el-card {
+>>>.el-card {
border: none;
}
->>> .el-card__body {
+>>>.el-card__body {
padding: 4px 2px 6px 14px;
}
</style>
diff --git a/src/views/business/outsourcingFinishProduct/index.vue b/src/views/business/outsourcingFinishProduct/index.vue
index 1acea36..3caa180 100644
--- a/src/views/business/outsourcingFinishProduct/index.vue
+++ b/src/views/business/outsourcingFinishProduct/index.vue
@@ -124,7 +124,7 @@
<!-- 鎾ら攢鎶ユ -->
<el-dialog :visible.sync="declareDialogVisible" title="鎶ユ鎾ら攢" width="30%">
<p style="font-size:16px;color:#333333">鎵瑰彿<span style="color:#34BD66">{{ this.insOrderRow.updateBatchNo
- }}</span>鐨勪俊鎭槸鍚�<span style="color: #FF4902">鎾ら攢鎶ユ</span>
+ }}</span>鐨勪俊鎭槸鍚�<span style="color: #FF4902">鎾ら攢鎶ユ</span>
</p>
<span slot="footer" class="dialog-footer">
<el-row>
@@ -187,7 +187,7 @@
</template>
<script>
-import PrintDialog from "@/views/business/materialOrderComponents/materialOrder/printDialog.vue";
+import PrintDialog from "@/views/business/outsourcingFinishProduct/components/printDialog.vue";
import ShowInfo from "@/views/business/materialOrderComponents/materialOrder/showInfo.vue";
import DataLookVisible from "@/views/business/materialOrderComponents/materialOrder/dataLookVisible.vue";
import FilesLookVisible from "@/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue";
--
Gitblit v1.9.3