This commit is contained in:
linfso 2024-05-30 20:39:28 +08:00
parent a2b76d32d2
commit 0d1ba882ae
10 changed files with 427 additions and 274 deletions

View File

@ -2771,7 +2771,9 @@
--editor-toolbar-base-offset:105px; --editor-toolbar-base-offset:105px;
--main-color:rgb(12 12 13); --main-color:rgb(12 12 13);
--body-bg-color:rgb(212 212 215); /* --body-bg-color:rgb(212 212 215); */
--body-bg-color: #282829;
--progressBar-color:rgb(10 132 255); --progressBar-color:rgb(10 132 255);
--progressBar-bg-color:rgb(221 221 222); --progressBar-bg-color:rgb(221 221 222);
--progressBar-blend-color:rgb(116 177 239); --progressBar-blend-color:rgb(116 177 239);
@ -2782,7 +2784,8 @@
--sidebar-narrow-bg-color:rgb(212 212 215 / 0.9); --sidebar-narrow-bg-color:rgb(212 212 215 / 0.9);
--sidebar-toolbar-bg-color:rgb(245 246 247); --sidebar-toolbar-bg-color:rgb(245 246 247);
--toolbar-bg-color:rgb(249 249 250); /* --toolbar-bg-color:rgb(249 249 250); */
--toolbar-bg-color:#fff;
--toolbar-border-color:rgb(184 184 184); --toolbar-border-color:rgb(184 184 184);
--toolbar-box-shadow:0 1px 0 var(--toolbar-border-color); --toolbar-box-shadow:0 1px 0 var(--toolbar-border-color);
--toolbar-border-bottom:none; --toolbar-border-bottom:none;
@ -3130,6 +3133,7 @@ body{
.editorParamsToolbar{ .editorParamsToolbar{
position:relative; position:relative;
height:32px; height:32px;
/* background-color:var(--toolbar-bg-color); */
background-color:var(--toolbar-bg-color); background-color:var(--toolbar-bg-color);
box-shadow:var(--toolbar-box-shadow); box-shadow:var(--toolbar-box-shadow);
border-bottom:var(--toolbar-border-bottom); border-bottom:var(--toolbar-border-bottom);

View File

@ -276,7 +276,7 @@ See https://github.com/adobe-type-tools/cmap-resources
<span data-l10n-id="pdfjs-toggle-sidebar-button-label">Toggle Sidebar</span> <span data-l10n-id="pdfjs-toggle-sidebar-button-label">Toggle Sidebar</span>
</button> </button>
<div class="toolbarButtonSpacer"></div> <div class="toolbarButtonSpacer"></div>
<button id="viewFind" class="toolbarButton" title="Find in Document" tabindex="12" data-l10n-id="pdfjs-findbar-button" aria-expanded="false" aria-controls="findbar"> <button id="viewFind" style="display: none;" class="toolbarButton" title="Find in Document" tabindex="12" data-l10n-id="pdfjs-findbar-button" aria-expanded="false" aria-controls="findbar">
<span data-l10n-id="pdfjs-findbar-button-label">Find</span> <span data-l10n-id="pdfjs-findbar-button-label">Find</span>
</button> </button>
<div class="splitToolbarButton hiddenSmallView"> <div class="splitToolbarButton hiddenSmallView">
@ -293,7 +293,8 @@ See https://github.com/adobe-type-tools/cmap-resources
</span> </span>
<span id="numPages" class="toolbarLabel"></span> <span id="numPages" class="toolbarLabel"></span>
</div> </div>
<div id="toolbarViewerRight"> <!-- style="display: none;" -->
<div id="toolbarViewerRight" style="display: none;">
<div id="editorModeButtons" class="splitToolbarButton toggled" role="radiogroup"> <div id="editorModeButtons" class="splitToolbarButton toggled" role="radiogroup">
<button id="editorHighlight" class="toolbarButton" hidden="true" disabled="disabled" title="Highlight" role="radio" aria-checked="false" aria-controls="editorHighlightParamsToolbar" tabindex="31" data-l10n-id="pdfjs-editor-highlight-button"> <button id="editorHighlight" class="toolbarButton" hidden="true" disabled="disabled" title="Highlight" role="radio" aria-checked="false" aria-controls="editorHighlightParamsToolbar" tabindex="31" data-l10n-id="pdfjs-editor-highlight-button">
<span data-l10n-id="pdfjs-editor-highlight-button-label">Highlight</span> <span data-l10n-id="pdfjs-editor-highlight-button-label">Highlight</span>

View File

@ -20,11 +20,11 @@ export function realMatchWaybill() {
} }
// 获取总的可以使用面单数 // 获取总的可以使用面单数
export function getTotalAvailablePag() { export function getTotalAvailablePag(useSiteCode,prefix) {
return request({ return request({
url: '/emis/common/getTotalAvailablePag', url: '/emis/common/getTotalAvailablePag',
method: 'post', method: 'post',
data: {} data: {sendSiteCode:useSiteCode,prefix:prefix}
}) })
} }

View File

@ -13,7 +13,6 @@
</template> </template>
<script> <script>
import pdf from 'vue-pdf'
export default { export default {
name: "PdfViewer", name: "PdfViewer",
@ -23,22 +22,14 @@ export default {
required: false required: false
}, },
}, },
components: {
pdf
},
computed: {
},
created () { created () {
}, },
destroyed () {
},
mounted () { mounted () {
}, },
data() { data() {
return { return {
isExit: false, isExit: false,
value: 1, value: 1,
src: this.pdfUrl,
pdfLoadUrl:null, pdfLoadUrl:null,
currentPage: 0, currentPage: 0,
pageCount: 0, pageCount: 0,
@ -48,91 +39,23 @@ export default {
}, },
watch: { watch: {
pdfUrl(newVal) { pdfUrl(newVal) {
console.log(this.pdfUrl) this.showPdfViewer();
if(this.pdfUrl){ },
// this.src=this.pdfUrl;
this.pdfLoadUrl='/static/pdfjs/4.2.67/web/viewer.html?file=' + encodeURIComponent(this.pdfUrl)
console.log(this.pdfLoadUrl)
}
},
}, },
mounted () { mounted () {
this.loadPdfHandler(); this.showPdfViewer();
}, },
methods: { methods: {
async loadPdfHandler () { showPdfViewer(){
console.log(this.pdfUrl) this.pdfLoadUrl='/static/pdfjs/4.2.67/web/viewer.html?file=' + encodeURIComponent(this.pdfUrl)+"&t="+new Date().getTime()
this.pdfLoadUrl = pdf.createLoadingTask(this.pdfUrl); console.log(this.pdfLoadUrl)
console.log(this.pdfLoadUrl)
this.pdfLoadUrl.promise.then(pdf => {
this.pageCount = pdf.numPages
console.log(this.pageCount)
})
},
// pdf加载时
// loadPdfHandler() {
// this.value = this.currentPage = 1 // 加载的时候先加载第一页
// },
// 第一页
FirstPage() {
this.value = this.currentPage = 1
this.isExit = false
},
// 最后一页
lastPage() {
this.value = this.currentPage = this.pageCount
this.isExit = false
},
// 改变PDF页码,val 传过来区分上一页下一页的值,0 上一页,1 下一页
changePdfPage(val) {
if (val === 0 && this.currentPage > 1) {
this.currentPage--
}
if (val === 1 && this.currentPage < this.pageCount) {
this.currentPage++
}
this.value = this.currentPage
this.isExit = false
},
// 页码选择
pageSelect() {
this.currentPage = this.value
this.isExit = false
},
// 控制下拉选择框显示隐藏
setIsExit() {
this.isExit = true
},
// 放大
scaleD() {
this.scale += 5
this.$refs.pdf.$el.style.width = parseInt(this.scale) + '%'
},
// 缩小
scaleX() {
if (this.scale === 100) {
return
}
this.scale += -5
this.$refs.pdf.$el.style.width = parseInt(this.scale) + '%'
},
// 顺时针
clock() {
this.pageRotate += 90
},
// 逆时针
counterClock() {
this.pageRotate -= 90
}, },
// 下载 // 下载
downPDF() { downPDF() {
var url = this.src
var tempLink = document.createElement('a') var tempLink = document.createElement('a')
tempLink.style.display = 'none' tempLink.style.display = 'none'
tempLink.href = url tempLink.href = this.pdfUrl
tempLink.setAttribute('download', (new Date()).getTime()+'.pdf') tempLink.setAttribute('download', (new Date()).getTime()+'.pdf')
// console.log(typeof tempLink.download,11111);
if (typeof tempLink.download === 'undefined') { if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank') tempLink.setAttribute('target', '_blank')
} }

View File

@ -46,6 +46,7 @@ class TanexPrinterSdk {
onGetPrinterCallback =[]; onGetPrinterCallback =[];
onGetPrintTplCallback =[]; onGetPrintTplCallback =[];
onBatchGetPDFCallback = []; onBatchGetPDFCallback = [];
onBatchGetPDFCompleteCallback = [];
// 自定义 回调函数 // 自定义 回调函数
callbacks ={} callbacks ={}
@ -96,10 +97,22 @@ class TanexPrinterSdk {
setOnOpen(callback){ setOnOpen(callback){
this.onOpenCallback.push(callback); this.onOpenCallback.push(callback);
if(this.connected){
if(callback!=null){
callback();
}
}
} }
setOnClose(callback){ setOnClose(callback){
this.onCloseCallback.push(callback); this.onCloseCallback.push(callback);
if(!this.connected){
if(callback!=null){
callback();
}
}
} }
setOnError(callback){ setOnError(callback){
@ -108,17 +121,31 @@ class TanexPrinterSdk {
setOnGetPrinter(callback){ setOnGetPrinter(callback){
this.onGetPrinterCallback.push(callback); this.onGetPrinterCallback.push(callback);
if(this.connected){
if(callback!=null){
callback();
}
}
} }
setOnGetPrintTpl(callback){ setOnGetPrintTpl(callback){
this.onGetPrintTplCallback.push(callback); this.onGetPrintTplCallback.push(callback);
if(this.connected){
if(callback!=null){
callback();
}
}
} }
// 只支持一个事件响应 // 只支持一个事件响应
setOnBatchGetPDF(callback){ setOnBatchGetPDF(callback,completeCallback){
// this.onBatchGetPDFCallback.push(callback); // this.onBatchGetPDFCallback.push(callback);
this.onBatchGetPDFCallback=[]; this.onBatchGetPDFCallback=[];
this.onBatchGetPDFCallback.push(callback); this.onBatchGetPDFCallback.push(callback);
this.onBatchGetPDFCompleteCallback=[];
this.onBatchGetPDFCompleteCallback.push(completeCallback);
} }
// 获取打印机列表 // 获取打印机列表
@ -160,6 +187,31 @@ class TanexPrinterSdk {
} }
} }
batchGetPDFAdv(printDataList,billCount,callback){
if(printDataList&&printDataList.length>0){
if(callback){
this.setOnBatchGetPDF(callback);
}
// 超时计算
this.sendBatchGetPDFAdvCMD(printDataList,billCount);
this.recievePdfFileTimer = setTimeout(function(){
if(this.onBatchGetPDFCallback){
if(this.onBatchGetPDFCallback.length>0){
this.onBatchGetPDFCallback.forEach(callback=>{
if(callback!=null){
callback([],false,"打印超时");
}
})
}
}
clearTimeout(this.recievePdfFileTimer);
}, 6000)
}
}
// 批量打印 // 批量打印
batchPrint(tplCode,printerName,orderList){ batchPrint(tplCode,printerName,orderList){
if(tplCode&&printerName&&orderList&&orderList.length>0){ if(tplCode&&printerName&&orderList&&orderList.length>0){
@ -167,6 +219,13 @@ class TanexPrinterSdk {
} }
} }
// 高级打印接口,多个模版
batchPrintAdv(printDataList){
if(printDataList&&printDataList.length>0){
this.sendBatchPrintAdvCMD(printDataList);
}
}
refreshPrintTpl(){ refreshPrintTpl(){
this.sendRefreshPrintTplListCMD(); this.sendRefreshPrintTplListCMD();
} }
@ -191,6 +250,56 @@ class TanexPrinterSdk {
this.send(JSON.stringify(printCmd),null); this.send(JSON.stringify(printCmd),null);
} }
sendBatchPrintAdvCMD(printDataList){
// {"CMD":"batchPrint","status":"1","Data":["DT20210901001","DT20210901002"]}
var printCmd={};
printCmd['RequestId']=this.getRequestId();
printCmd['CMD']="batchPrint";
printCmd['Status']="1";
if(printDataList && printDataList.length>0){
printCmd['Data']=printDataList
this.send(JSON.stringify(printCmd),null);
}
/*
[
{
"tplCode":tplCode,
"printerName":printerName,
"orderList":orderList.toString()
}
]
*/
// if(orderList!=null && orderList.length>0){
// let printData=[{
// "tplCode":tplCode,
// "printerName":printerName,
// "orderList":orderList.toString()
// }]
// printCmd['Data']=printData
// // console.log(JSON.stringify(printCmd));
// this.send(JSON.stringify(printCmd),null);
// }
}
sendBatchGetPDFAdvCMD(printDataList,billCount){
// {"CMD":"batchGetPDF","status":"1","Data":["DT20210901001","DT20210901002"]}
var printCmd={};
printCmd['RequestId']=this.getRequestId();
printCmd['CMD']="batchGetPDF";
printCmd['Status']="1";
if(printDataList && printDataList.length>0){
printCmd['Data']=printDataList
this.sendPdfFileListCount = billCount;
this.send(JSON.stringify(printCmd),null);
}
}
sendBatchPrintCMD(tplCode,printerName,orderList){ sendBatchPrintCMD(tplCode,printerName,orderList){
// {"CMD":"batchPrint","status":"1","Data":["DT20210901001","DT20210901002"]} // {"CMD":"batchPrint","status":"1","Data":["DT20210901001","DT20210901002"]}
var printCmd={}; var printCmd={};
@ -198,11 +307,11 @@ class TanexPrinterSdk {
printCmd['CMD']="batchPrint"; printCmd['CMD']="batchPrint";
printCmd['Status']="1"; printCmd['Status']="1";
if(orderList!=null && orderList.length>0){ if(orderList!=null && orderList.length>0){
let printData={ let printData=[{
"tplCode":tplCode, "tplCode":tplCode,
"printerName":printerName, "printerName":printerName,
"orderList":orderList.toString() "orderList":orderList.toString()
} }]
printCmd['Data']=printData printCmd['Data']=printData
// console.log(JSON.stringify(printCmd)); // console.log(JSON.stringify(printCmd));
this.send(JSON.stringify(printCmd),null); this.send(JSON.stringify(printCmd),null);
@ -216,17 +325,17 @@ class TanexPrinterSdk {
printCmd['CMD']="batchGetPDF"; printCmd['CMD']="batchGetPDF";
printCmd['Status']="1"; printCmd['Status']="1";
if(orderList!=null && orderList.length>0){ if(orderList!=null && orderList.length>0){
let printData={ let printData=[{
"tplCode":tplCode, "tplCode":tplCode,
"printerName":printerName, "printerName":printerName,
"orderList":orderList.toString() "orderList":orderList.toString()
} }]
this.recievePdfFileList = [] this.recievePdfFileList = []
this.sendPdfFileListCount = orderList.length; this.sendPdfFileListCount = orderList.length;
printCmd['Data']=printData printCmd['Data']=printData
console.log(JSON.stringify(printCmd)); // console.log(JSON.stringify(printCmd));
this.send(JSON.stringify(printCmd),null); this.send(JSON.stringify(printCmd),null);
} }
} }
@ -516,7 +625,7 @@ class TanexPrinterSdk {
// 发送数据的方法 // 发送数据的方法
send(data) { send(data) {
console.log("send:"+data) // console.log("send:"+data)
if (this.getWSReadyState() === this.WS_OPEN ) { if (this.getWSReadyState() === this.WS_OPEN ) {
this.sendRetryCount = 0 this.sendRetryCount = 0
this.ws.send(data) this.ws.send(data)

View File

@ -87,7 +87,7 @@
let queryParams = { let queryParams = {
pageNum:1, pageNum:1,
pageSize:50, pageSize:100,
countryCode:this.countryCode, countryCode:this.countryCode,
regionCode:key, regionCode:key,
regionType:1 regionType:1

View File

@ -9,41 +9,44 @@
<el-tag type="danger" >{{ printerStatusMessage }}</el-tag> <el-tag type="danger" >{{ printerStatusMessage }}</el-tag>
</div> </div>
<div v-if="printerStatus==1" style="display: inline-flex;"> <div v-if="printerStatus==1" style="display: inline-flex;">
<div style="font-size: 12px; line-height: 28px;font-weight: 600;">模板:</div> <div v-if="isShowPinters==1" style="font-size: 12px; line-height: 28px;font-weight: 600;">模板:</div>
<div> <div v-if="isShowTpl==1" style="width: 150px;">
<el-select v-model="selTplCode" size="mini" placeholder="选择打印模板" clearable filterable> <el-select v-model="selTplCode" size="mini" placeholder="选择打印模板" clearable filterable>
<template slot="prefix"> <template slot="prefix">
<span style="padding: 5px;line-height: 28px;font-size: 16px;color: rgb(111 111 111);cursor: pointer;" @click="refreshPrintTpl()"> <span style="padding: 5px;line-height: 28px;font-size: 16px;color: rgb(111 111 111);cursor: pointer;" @click="refreshPrintTpl()">
<i class="el-icon-refresh"></i> <i class="el-icon-refresh"></i>
</span> </span>
</template> </template>
<el-option <el-option
v-for="item in printTplList" v-for="item in printTplList"
:key="item.tplCode" :key="item.tplCode"
:label="item.tplName" :label="item.tplName"
:value="item.tplCode" :value="item.tplCode"
/> />
</el-select> </el-select>
</div> </div>
<div v-if="selTplCode=='TAN-GC-130'" class="subBillRange" style="display: inline-flex;font-size: 12px; line-height: 28px; font-weight: 600;"> <div v-if="selTplCode=='TAN-GC-130' && isShowSubBillRange" class="subBillRange" style="display: inline-flex;font-size: 12px; line-height: 28px; font-weight: 600;">
<span >子单: <span >子单范围:
<el-input size="mini" style="width:40px" v-model="subBillStart" type="text" maxlength="4" ></el-input> <el-input size="mini" style="width:40px" v-model="subBillStart" type="text" maxlength="4" ></el-input>
- -
<el-input size="mini" style="width:40px" v-model="subBillEnd" type="text" maxlength="4" ></el-input> <el-input size="mini" style="width:40px" v-model="subBillEnd" type="text" maxlength="4" ></el-input>
</span> </span>
</div> </div>
<div style="font-size: 12px;line-height: 28px;font-weight: 600;">打印机:</div> <div v-if="isShowPinters==1" style="font-size: 12px;line-height: 28px;font-weight: 600;">打印机:</div>
<div> <div v-if="isShowPinters==1" style="width: 150px;">
<el-select v-model="selPrinterName" size="mini" placeholder="打印机" clearable filterable> <el-select v-model="selPrinterName" size="mini" placeholder="打印机" clearable filterable>
<el-option <el-option
v-for="item in printerList" v-for="item in printerList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</div> </div>
</div>
<div v-if="printerStatus==1" style="display: inline-flex;">
<span style="color: green;font-weight: 600;font-size:13px;">【Printer Online】</span>
</div> </div>
<div v-if="printerStatus==0" style="display: inline-flex;"> <div v-if="printerStatus==0" style="display: inline-flex;">
<a :href="printerDownUrl" style="color: blue;font-weight: 600;font-size:13px;text-decoration: underline">下载打印组件</a> <a :href="printerDownUrl" style="color: blue;font-weight: 600;font-size:13px;text-decoration: underline">下载打印组件</a>
@ -55,7 +58,7 @@
<el-dialog class="printPreDialog" title="预览" :visible.sync="openPdfView" width="95%" :close-on-click-modal="false" v-dialogDrag append-to-body> <el-dialog class="printPreDialog" title="预览" :visible.sync="openPdfView" width="95%" :close-on-click-modal="false" v-dialogDrag append-to-body>
<div style="height: 1600px;width:100%;overflow: auto;"> <div style="height: 1600px;width:100%;overflow: auto;">
<PdfViewer :pdfUrl="pdfUrl" style="width:100%" @onPrint="batchPrint" ></PdfViewer> <PdfViewer :pdfUrl="pdfUrl" style="width:100%" @onPrint="onPdfViewPrint" ></PdfViewer>
</div> </div>
</el-dialog> </el-dialog>
@ -76,12 +79,27 @@
mixins: [emitter], mixins: [emitter],
props: { props: {
value: { value: {
type: [String], type: [Number],
required: false required: false
}, },
placeholder:{ placeholder:{
type: [String], type: [String],
required: false required: false
},
isShowPinters:{
type: [Boolean],
required: false,
default: false
},
isShowTpl:{
type: [Boolean],
required: false,
default: false
},
isShowSubBillRange:{
type: [Boolean],
required: false,
default: false
} }
}, },
data() { data() {
@ -120,7 +138,7 @@
this.initTanexPrinterSdk(); this.initTanexPrinterSdk();
}, },
beforeDestroy(){ beforeDestroy(){
this.tanexPrinter.close(); // this.tanexPrinter.close();
}, },
methods: { methods: {
initTanexPrinterSdk(){ initTanexPrinterSdk(){
@ -142,17 +160,20 @@
onPrinterOpen(evt){ onPrinterOpen(evt){
// console.log("onPrinterOpen") // console.log("onPrinterOpen")
this.printerStatus = 1; this.printerStatus = 1;
this.$emit("input",this.printerStatus);
this.printerStatusMessage="打印组件已连接,可以打印."; this.printerStatusMessage="打印组件已连接,可以打印.";
}, },
onPrinterClose(evt){ onPrinterClose(evt){
// console.log("onPrinterClose") // console.log("onPrinterClose")
this.printerStatus = 0; this.printerStatus = 0;
this.$emit("input",this.printerStatus);
this.printerStatusMessage="打印组件已断开!"; this.printerStatusMessage="打印组件已断开!";
}, },
onPrinterError(evt){ onPrinterError(evt){
// console.log("onPrinterError") // console.log("onPrinterError")
this.printerStatus = 0; this.printerStatus = 0;
this.$emit("input",this.printerStatus);
this.printerStatusMessage="打印组件已断开!"; this.printerStatusMessage="打印组件已断开!";
}, },
onGetPrinter(msg){ onGetPrinter(msg){
@ -170,6 +191,9 @@
this.selTplCode=this.printTplList[0].tplCode; this.selTplCode=this.printTplList[0].tplCode;
}, },
getDefaultPrinter(){
return this.tanexPrinter.getDefaultPrinter();
},
refreshPrintTpl(){ refreshPrintTpl(){
this.printTplList=[]; this.printTplList=[];
this.selTplCode=null; this.selTplCode=null;
@ -178,53 +202,82 @@
lpadZero(val,len) { lpadZero(val,len) {
return (new Array(len + 1).join('0') + val).slice(-len); return (new Array(len + 1).join('0') + val).slice(-len);
}, },
batchPrint(orderList){ /*
高级批量打印
[
{
"tplCode":tplCode,
"printerName":printerName,
"orderList":orderList.toString()
}
]
*/
batchPrintAdv(printDataList){
this.tanexPrinter.batchPrintAdv(printDataList);
},
batchPrint(orderList,tplCode){
let that = this; let that = this;
let newOrderList=[]; let newOrderList=[];
if(orderList){ if(orderList){
this.orderList=[...orderList] this.orderList=[...orderList]
} }
// 打印子单 if(tplCode){
if(this.selTplCode=="TAN-GC-130"){ this.selTplCode=tplCode
for(let i=0;i<this.orderList.length;i++){
let billCode=this.orderList[i];
// 循环子单范围
for(let i=this.subBillStart;i<=this.subBillEnd;i++){
let subBillCode = billCode+""+this.lpadZero(i,4);
newOrderList.push(subBillCode);
}
}
}else{
newOrderList=[...orderList];
} }
newOrderList=[...orderList];
that.tanexPrinter.batchPrint(that.selTplCode,that.selPrinterName,newOrderList) that.tanexPrinter.batchPrint(that.selTplCode,that.selPrinterName,newOrderList)
}, },
printPreview(orderList){ printPreviewAdv(printDataList,billCount){
let that = this;
const loadingInstance = this.$loading({
text: '正在生成预览...'
})
this.tanexPrinter.batchGetPDFAdv(printDataList,billCount,function(pdfList,success,erroMsg){
// console.log(erroMsg);
if(success){
const pdfDataList=[...pdfList];
let pdfUtils=new PdfUtils({});
pdfUtils.mergePdf3(pdfDataList, (new Date()).getTime()+".pdf",false )
.then(url=>{
loadingInstance.close();
that.pdfUrl=url;
that.openPdfView = true;
})
.catch(error => {
// console.log(error)
that.$modal.msgError("打印出错:"+erroMsg);
});
}else{
that.$modal.msgError("打印出错:"+erroMsg);
}
});
},
printPreview(orderList,tplCode,subStart,subEnd){
let that = this; let that = this;
let newOrderList=[]; let newOrderList=[];
if(orderList){ if(orderList){
this.orderList=[...orderList] this.orderList=[...orderList]
} }
// 打印子单 if(tplCode){
if(this.selTplCode=="TAN-GC-130"){ this.selTplCode=tplCode
for(let i=0;i<this.orderList.length;i++){
let billCode=this.orderList[i];
// 循环子单范围
for(let i=this.subBillStart;i<=this.subBillEnd;i++){
let subBillCode = billCode+""+this.lpadZero(i,4);
newOrderList.push(subBillCode);
}
}
}else{
newOrderList=[...orderList];
} }
if(subStart){
this.subBillStart=subStart;
}
if(subEnd){
this.subBillEnd=subEnd;
}
newOrderList=[...orderList];
const loadingInstance = this.$loading({ const loadingInstance = this.$loading({
text: '正在生成预览...' text: '正在生成预览...'
}) })
@ -278,6 +331,7 @@
if(success){ if(success){
const pdfDataList=[...pdfList]; const pdfDataList=[...pdfList];
let pdfUtils=new PdfUtils({}); let pdfUtils=new PdfUtils({});
// for()
pdfUtils.mergePdf3(pdfDataList, (new Date()).getTime()+".pdf",true ) pdfUtils.mergePdf3(pdfDataList, (new Date()).getTime()+".pdf",true )
}else{ }else{
that.$modal.msgError("下载出错:"+erroMsg); that.$modal.msgError("下载出错:"+erroMsg);
@ -285,6 +339,11 @@
}); });
}, },
// 响应PDF预览
onPdfViewPrint(){
this.$emit("onPrint");
}
} }
}; };
</script> </script>

View File

@ -1,9 +1,19 @@
<template> <template>
<XdPageContainer class="app-container"> <XdPageContainer class="app-container">
<SearchForm slot="pageHeader" class="queryForm" :model="queryParams" ref="queryForm" size="mini" :maxShow="9" label-width="100px" v-show="showSearch" @search="handleQuery" @reset="resetQuery"> <SearchForm slot="pageHeader" class="queryForm" :model="queryParams" ref="queryForm" size="mini" :maxShow="9" label-width="100px" v-show="showSearch" @search="handleQuery" @reset="resetQuery">
<!-- <el-row :gutter="10">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6"><div class="grid-content bg-purple">123</div></el-col>
<el-col :xs="8" :sm="6" :md="8" :lg="8" :xl="6"><div class="grid-content bg-purple-light">123</div></el-col>
<el-col :xs="8" :sm="6" :md="8" :lg="8" :xl="6"><div class="grid-content bg-purple">123</div></el-col>
<el-col :xs="8" :sm="6" :md="8" :lg="8" :xl="6"><div class="grid-content bg-purple-light">123</div></el-col>
</el-row> -->
<!-- label-width="100px" --> <!-- label-width="100px" -->
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;"> <el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<el-col :span="6"> <!-- :span="6" -->
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;"> <el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="" prop="billCode"> <el-form-item label="" prop="billCode">
@ -25,31 +35,31 @@
</el-row> </el-row>
</el-col> </el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item label="寄件网点" prop="productType">
<EmisSiteSimplePicker1 v-model="queryParams.sendSiteCode" ></EmisSiteSimplePicker1>
</el-form-item>
<el-form-item label="目的网点" prop="dispatchUnderlingSiteCode">
<EmisSiteSimplePicker2 v-model="queryParams.dispatchUnderlingSiteCode" ></EmisSiteSimplePicker2>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="寄件网点" prop="productType"> <el-form-item label="月结客户" prop="custNo">
<EmisSiteSimplePicker1 v-model="queryParams.sendSiteCode" ></EmisSiteSimplePicker1> <EmisMonthpayAccountPicker v-model="queryParams.custNo" @onChange="handleQuery"></EmisMonthpayAccountPicker>
</el-form-item>
<el-form-item label="目的网点" prop="dispatchUnderlingSiteCode">
<EmisSiteSimplePicker2 v-model="queryParams.dispatchUnderlingSiteCode" ></EmisSiteSimplePicker2>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="月结客户" prop="custNo">
<EmisMonthpayAccountPicker v-model="queryParams.custNo" @onChange="handleQuery"></EmisMonthpayAccountPicker>
</el-form-item>
<el-form-item label="付款方式" prop="paymentType" >
<el-select clearable v-model="queryParams.paymentType" placeholder="请选择">
<el-option
v-for="dict in dict.type.emis_payment_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="付款方式" prop="paymentType" >
<el-select clearable v-model="queryParams.paymentType" placeholder="请选择">
<el-option
v-for="dict in dict.type.emis_payment_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-col> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-col :span="6">
<el-form-item label="线路" prop="transLineType"> <el-form-item label="线路" prop="transLineType">
<TransLinePicker v-model="queryParams.transLineType" isInitiated="true" @onChange="handleQuery"></TransLinePicker> <TransLinePicker v-model="queryParams.transLineType" isInitiated="true" @onChange="handleQuery"></TransLinePicker>
</el-form-item> </el-form-item>
@ -59,8 +69,6 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;"> <el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
@ -83,7 +91,7 @@
</el-row> </el-row>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;"> <el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<el-col :span="6"> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item label="寄件人" prop="sendName"> <el-form-item label="寄件人" prop="sendName">
<el-input <el-input
v-model="queryParams.sendName" v-model="queryParams.sendName"
@ -131,7 +139,7 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item label="收件人" prop="receiveName"> <el-form-item label="收件人" prop="receiveName">
<el-input <el-input
@ -176,7 +184,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<!-- <el-form-item label="运单状态" prop="siteType"> <!-- <el-form-item label="运单状态" prop="siteType">
<el-select v-model="queryParams.waybillStatus" placeholder="运单状态" clearable filterable> <el-select v-model="queryParams.waybillStatus" placeholder="运单状态" clearable filterable>
@ -249,7 +257,7 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item label="问题件方式" prop="pickupMethod"> <el-form-item label="问题件方式" prop="pickupMethod">
<el-select clearable="" v-model="queryParams.params.problemQueryType" placeholder="请选择"> <el-select clearable="" v-model="queryParams.params.problemQueryType" placeholder="请选择">
@ -555,6 +563,7 @@
</template> </template>
<script> <script>
import 'element-ui/lib/theme-chalk/display.css';
import { listEmisWaybill, getEmisWaybill, delEmisWaybill, addEmisWaybill, updateEmisWaybill } from "@/api/emis/emisWaybill"; import { listEmisWaybill, getEmisWaybill, delEmisWaybill, addEmisWaybill, updateEmisWaybill } from "@/api/emis/emisWaybill";
import elDateSimplePicker from '@/components/DatePickerAdv/elDateSimplePicker'; import elDateSimplePicker from '@/components/DatePickerAdv/elDateSimplePicker';
// import emisWaybillView from '@/views/emis/emisWaybill/emisWaybillView'; // import emisWaybillView from '@/views/emis/emisWaybill/emisWaybillView';

View File

@ -257,7 +257,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<TanexPrinterPanel ref="tanexPrinter"></TanexPrinterPanel> <TanexPrinterPanel ref="tanexPrinter" :isShowPinters="true" :isShowTpl="true" :isShowSubBillRange="true" @onPrint="handleBatchPrint"></TanexPrinterPanel>
</el-col> </el-col>

View File

@ -4,22 +4,30 @@
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item title="" name="1"> <el-collapse-item title="" name="1">
<template slot="title"> <template slot="title">
<div class="form-group-title"><span class="title">{{ $t('发货信息') }}</span></div> <div style="display:inline-flex">
<div class="form-group-title"><span class="title">{{ $t('发货信息') }}</span></div>
</div>
</template> </template>
<div> <div>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;"> <el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<!-- 运单录入 --> <!-- 运单录入 -->
<!-- <el-col :span="4">
<el-form-item label="寄件网点" prop="sendSiteCode">
<EmisSiteSimplePicker v-if="$store.getters.ownerSiteCode== '88888'" v-model="form.sendSiteCode" @onChange="onSendSiteSelect" ></EmisSiteSimplePicker>
<el-input v-else v-model="form.sendSiteName" placeholder="" disabled />
</el-form-item>
</el-col> -->
<el-col :span="6" v-if="action=='add'"> <el-col :span="6" v-if="action=='add'">
<el-form-item :label="$t('发货时间')" prop="sendDate"> <el-form-item :label="$t('发货时间')" prop="sendDate">
<el-input v-model="form.sendDate" placeholder="" readonly="" disabled /> <el-input v-model="form.sendDate" placeholder="" readonly="" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="action=='add'"> <el-col :span="18" v-if="action=='add'">
<el-form-item label="运单号" prop="billCode" > <el-form-item label="运单号" prop="billCode" >
<div style="display:inline-flex"> <div style="display:inline-flex">
<div> <div>
@ -33,19 +41,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" v-if="action=='add'">
<div v-if="totalAvailablePag.mainHasCnt>0" style="display:inline-flex;font-size: 15px;font-weight: 700;">
<div>
主单剩余:<el-tag type="info">{{ totalAvailablePag.mainHasCnt }}</el-tag>
</div>
<div>
子单剩余:<el-tag type="info">{{ totalAvailablePag.subHasCnt }}</el-tag>
</div>
</div>
<div v-else >
<div @click="handleApplyPag" style="font-size: 15px;font-weight: 700;color:red;cursor: pointer;">主单余量:0,请立即【<span style="color:blue">申购</span>】</div>
</div>
</el-col>
<!-- 运单录入 end --> <!-- 运单录入 end -->
<!-- 运单修改 --> <!-- 运单修改 -->
@ -150,32 +146,9 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="寄件网点" prop="sendSiteCode">
<!-- <el-input v-model="form.sendSiteCode" placeholder="" /> -->
<EmisSiteSimplePicker v-if="$store.getters.ownerSiteCode== '88888'" v-model="form.sendSiteCode" @onChange="onSendSiteSelect" ></EmisSiteSimplePicker>
<el-input v-else v-model="form.sendSiteName" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="18" v-if="action=='add'">
<el-form-item label="打印选项:" prop="printTypeCheckList" style="display:inline-flex">
<div>
<el-checkbox-group v-model="form.printTypeCheckList">
<el-checkbox :key="1" :label="1" >
<span >寄件网点存根联</span>
</el-checkbox>
<el-checkbox :key="5" :label="5" >
<span >子单</span>
</el-checkbox>
</el-checkbox-group>
</div>
<div>
<TanexPrinterPanel ref="tanexPrinter" ></TanexPrinterPanel>
</div>
</el-form-item>
</el-col>
<!-- <el-col :xs="{span: 24}" :sm="{span: 12}" :md="{span: 12}" :lg="{span: 6}" :xl="{span: 6}"> <!-- <el-col :xs="{span: 24}" :sm="{span: 12}" :md="{span: 12}" :lg="{span: 6}" :xl="{span: 6}">
<el-form-item label="寄件客户" prop="customerCode"> <el-form-item label="寄件客户" prop="customerCode">
@ -184,6 +157,48 @@
</el-col> --> </el-col> -->
</el-row> </el-row>
<div v-if="action=='add'" style="position: absolute;right: 80px;top: 60px;z-index: 9999;">
<div v-if="totalAvailablePag.mainHasCnt>0" style="display:inline-flex;font-size: 15px;font-weight: 700;">
<div style="width:230px">
<el-form-item prop="sendSiteCode">
<span slot="label" style="color:gray">寄件网点:</span>
<EmisSiteSimplePicker v-if="$store.getters.ownerSiteCode== '88888'" v-model="form.sendSiteCode" @onChange="onSendSiteSelect" ></EmisSiteSimplePicker>
<el-input v-else v-model="form.sendSiteName" placeholder="" disabled />
</el-form-item>
</div>
<div style="margin-left: 12px;">
主单剩余:<span>{{ totalAvailablePag.mainHasCnt }}</span>
</div>
<div>
子单剩余:<span>{{ totalAvailablePag.subHasCnt }}</span>
</div>
</div>
<div v-else >
<div @click="handleApplyPag" style="font-size: 15px;font-weight: 700;color:red;cursor: pointer;">主单余量:0,请立即【<span style="color:blue">申购</span>】</div>
</div>
</div>
<div v-if="action=='add'" style="position: absolute;right: 80px;top: 260px;z-index: 1;">
<el-form-item label="打印选项:" prop="printTypeCheckList">
<div style="display:inline-flex">
<div>
<el-checkbox-group v-model="form.printTypeCheckList">
<el-checkbox :key="1" :label="1" >
<span >寄件网点存根联</span>
</el-checkbox>
<el-checkbox :key="5" :label="5" >
<span >子单</span>
</el-checkbox>
</el-checkbox-group>
</div>
<div style="margin-left:10px">
<TanexPrinterPanel ref="tanexPrinter" v-model="printerStatus" @onPrint="handleBatchPrint"></TanexPrinterPanel>
</div>
</div>
</el-form-item>
</div>
</div> </div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="" name="2"> <el-collapse-item title="" name="2">
@ -839,6 +854,7 @@ data() {
isNeedCalc:false, isNeedCalc:false,
titleSelectAddress:'', titleSelectAddress:'',
openSelectAddress:false, openSelectAddress:false,
printerStatus:0,
// 可用面单数 // 可用面单数
totalAvailablePag:{ totalAvailablePag:{
@ -1023,8 +1039,8 @@ methods: {
this.initData(); this.initData();
}, },
// 初始化可用面单数量 // 初始化可用面单数量
initGetTotalAvailablePag(){ initGetTotalAvailablePag(useSiteCode){
getTotalAvailablePag().then(response => { getTotalAvailablePag(useSiteCode,"T7080").then(response => {
let dataMap=response.data; let dataMap=response.data;
this.totalAvailablePag.mainHasCnt=dataMap["1001"]; this.totalAvailablePag.mainHasCnt=dataMap["1001"];
this.totalAvailablePag.subHasCnt=dataMap["1002"]; this.totalAvailablePag.subHasCnt=dataMap["1002"];
@ -1061,29 +1077,41 @@ methods: {
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
closeOnClickModal: false closeOnClickModal: false
}).then(() => { }).then(() => {
let printDataList=[]
// 打印主单,子单 // 打印主单,子单
let orderList=[]; let orderList=[];
// this.currentSelection.forEach(item=>{
// orderList.push(item.billCode);
// });
// 打印主单
orderList.push(this.form.billCode); orderList.push(this.form.billCode);
let selPrinterName=this.tanexPrinter.getDefaultPrinter(); let mainBillItem ={
let selTplName="探路速运-主单联(通用)"; "tplCode":"TAN-GM-130",
this.tanexPrinter.batchPrint(selTplName,selPrinterName,orderList) "printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":orderList.toString()
}
printDataList.push(mainBillItem);
// 打印子单 // 打印子单
selTplName="探路速运-子单联(通用)"; // tplCode="探路速运-子单联(通用)";
// tplCode="TAN-GC-130";
let childOrderList=[] let childOrderList=[]
orderList=this.form.billCodeSub.split(','); let subBillArr=this.form.billCodeSub.split(',');
orderList.forEach(item=>{
for(let i=0;i<subBillArr.length&&i<50;i++){
let item=subBillArr[i];
if(item!=null && item!=''){ if(item!=null && item!=''){
childOrderList.push(item); childOrderList.push(item);
} }
}); }
this.tanexPrinter.batchPrint(selTplName,selPrinterName,childOrderList)
let subBillItem ={
"tplCode":"TAN-GC-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":childOrderList.toString()
}
printDataList.push(subBillItem);
// 直接打印主子单
this.$refs.tanexPrinter.batchPrintAdv(printDataList)
}).catch(() => {}); }).catch(() => {});
@ -1108,34 +1136,45 @@ methods: {
if(this.printerStatus == 1){ if(this.printerStatus == 1){
if(this.form.billCode){ if(this.form.billCode){
let pdfUrlList=[];
let selPrinterName=this.tanexPrinter.getDefaultPrinter(); let billCount=1;
let selTplName="探路速运-主单联(通用)";
let url=this.tanexPrinter.getPdfUrl(this.form.billCode,selTplName,selPrinterName); let printDataList=[]
pdfUrlList.push(url) // 打印主单,子单
// 子单url let orderList=[];
if(this.form.billCodeSub){ orderList.push(this.form.billCode);
selTplName="探路速运-子单联(通用)"; let mainBillItem ={
let orderList=this.form.billCodeSub.split(','); "tplCode":"TAN-GM-130",
orderList.forEach(item=>{ "printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
if(item!=null && item!=''){ "orderList":orderList.toString()
let url=this.tanexPrinter.getPdfUrl(item,selTplName,selPrinterName); }
pdfUrlList.push(url) printDataList.push(mainBillItem);
}
}); // 打印子单
// tplCode="探路速运-子单联(通用)";
// tplCode="TAN-GC-130";
let childOrderList=[]
let subBillArr=this.form.billCodeSub.split(',');
for(let i=0;i<subBillArr.length&&i<7;i++){
let item=subBillArr[i];
if(item!=null && item!=''){
childOrderList.push(item);
billCount=billCount+1;
} }
let pdfUtils=new PdfUtils({}); }
const loadingInstance = this.$loading({
text: '正在生成预览...' let subBillItem ={
}) "tplCode":"TAN-GC-130",
pdfUtils.mergePdf2(pdfUrlList, (new Date()).getTime()+".pdf" ) "printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
.then(url=>{ "orderList":childOrderList.toString()
loadingInstance.close(); }
this.pdfUrl=url; printDataList.push(subBillItem);
this.openPdfView = true;
}) // 预览主子单
.catch(error => { this.$refs.tanexPrinter.printPreviewAdv(printDataList,billCount)
});
} }
} }
else{ else{
@ -1227,8 +1266,7 @@ methods: {
initData() { initData() {
this.reset(); this.reset();
// 获取可用运单数
this.initGetTotalAvailablePag();
if(this.billCode && this.billCode!=undefined) { if(this.billCode && this.billCode!=undefined) {
this.loading = true; this.loading = true;
@ -1247,6 +1285,8 @@ methods: {
}); });
}else{ }else{
this.form.sendDate = parseTime(new Date()); this.form.sendDate = parseTime(new Date());
this.form.sendSiteCode=this.$store.getters.ownerSiteCode; this.form.sendSiteCode=this.$store.getters.ownerSiteCode;
this.form.sendSiteName=this.$store.getters.ownerSiteName; this.form.sendSiteName=this.$store.getters.ownerSiteName;
@ -1269,6 +1309,9 @@ methods: {
this.isNeedSave=true; this.isNeedSave=true;
this.form.printTypeCheckList=[1,5], this.form.printTypeCheckList=[1,5],
// 获取可用运单数
this.initGetTotalAvailablePag(this.form.sendSiteCode);
this.handleInitGenGoods(); this.handleInitGenGoods();
} }
@ -1395,6 +1438,11 @@ methods: {
} }
this.form.sendSiteCode=item.siteCode; this.form.sendSiteCode=item.siteCode;
this.form.sendSiteName=item.siteName; this.form.sendSiteName=item.siteName;
this.initGetTotalAvailablePag(this.form.sendSiteCode);
this.calcBillFee();
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
@ -1426,8 +1474,8 @@ methods: {
realSaveOrderInfo(){ realSaveOrderInfo(){
// 调整包装类型为多选 // 调整包装类型为多选
if(this.form.packType){ if(this.form.packType&&this.form.packType.length>0){
this.form.packType=this.form.packType.join(","); this.form.packType=this.form.packType.join(",");
} }