This commit is contained in:
linfso 2024-05-20 08:49:06 +08:00
parent b81d42aae5
commit 06a85a0e45
6 changed files with 500 additions and 141 deletions

View File

@ -20,11 +20,11 @@ class TanexPrinterSdk {
VERSION="1.0.0"
MAX_SENT_RETRY_COUNT = 9;
WS_URL = "ws://127.0.0.1:17080/ws";
// WS_URL = "ws://192.168.88.100:17080";
// WS_URL = "ws://192.168.88.100:17080/ws";
// HTTP_GET_PDF = "http://192.168.88.100:17080/api/downPdfFile";
HTTP_GET_PDF = "http://127.0.0.1:17080/api/downPdfFile";
// WS_URL = "ws://127.0.0.1:17080/ws";
// HTTP_GET_PDF = "http://127.0.0.1:17080/api/downPdfFile";
WS_URL = "ws://192.168.88.100:17080/ws";
HTTP_GET_PDF = "http://192.168.88.100:17080/api/downPdfFile";
AUTH_TOKEN=null;

View File

@ -12,6 +12,7 @@
@change="onChange"
@focus="onFocus"
@visible-change="reverseArrow"
:disabled="disabled"
>
<el-option v-for="item in optionItems" :key="item.empName" :label="item.empName" :value="item.empName" ></el-option>
</el-select>
@ -31,6 +32,11 @@
placeholder:{
type: [String],
required: false
},
disabled:{
type: [Boolean],
required: false,
default:false,
}
},
data() {

View File

@ -12,6 +12,7 @@
@change="onChange"
@focus="onFocus"
@visible-change="reverseArrow"
:disabled="disabled"
>
<el-option v-for="item in optionItems" :key="item.empName" :label="item.empName" :value="item.empName" ></el-option>
</el-select>
@ -31,6 +32,11 @@
placeholder:{
type: [String],
required: false
},
disabled:{
type: [Boolean],
required: false,
default:false,
}
},
data() {

View File

@ -30,9 +30,6 @@
<el-col :span="10">
</el-col>
<el-col :span="6">
<el-form-item label="目的国" prop="reciever.country">
<CountryPicker0 v-model="form.reciever.country"></CountryPicker0>
@ -108,20 +105,30 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="寄件网点" prop="sendSiteName">
<el-input v-model="form.sendSiteName" placeholder="" disabled />
<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">
<el-form-item label="打印选项:" prop="sendSiteName">
<el-checkbox-group v-model="printTypeCheckList">
<el-checkbox
<el-form-item label="打印选项:" prop="printTypeCheckList">
<el-checkbox-group v-model="form.printTypeCheckList">
<!-- <el-checkbox
v-for="dict in dict.type.emis_print_type"
:key="dict.value"
:label="dict.label"
>
<span style="font-size:13px" >{{dict.label}}</span>
<span >{{dict.label}}</span>
</el-checkbox> -->
<el-checkbox :key="1" :label="1" >
<span >寄件网点存根联</span>
</el-checkbox>
<el-checkbox :key="5" :label="5" >
<span >子单</span>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
@ -184,6 +191,11 @@
<el-input v-model="form.sender.phone" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="寄件公司" prop="sender.company">
<el-input v-model="form.sender.company" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="国家地区" prop="sender.province" >
<div style="display:inline-flex">
@ -199,11 +211,6 @@
<el-input v-model="form.sender.address" rows="3" type="textarea" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="寄件公司" prop="sender.company">
<el-input v-model="form.sender.company" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="" prop="blMessage">
@ -246,6 +253,11 @@
<el-input v-model="form.reciever.phone" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收件公司" prop="reciever.company">
<el-input v-model="form.reciever.company" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="国家地区" prop="reciever.province">
<div style="display:inline-flex">
@ -261,11 +273,7 @@
<el-input v-model="form.reciever.address" type="textarea" rows="3" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收件公司" prop="reciever.company">
<el-input v-model="form.reciever.company" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="目的地" prop="destinationCode">
<DestinationPicker v-model="form.destinationCode" :countryCode="form.reciever.country" :lineCode="form.transLine" @onChange="onDestinationChange"></DestinationPicker>
@ -292,7 +300,7 @@
</el-collapse-item>
<el-collapse-item title="" name="3">
<template slot="title">
<div class="form-group-title"><span class="title">{{ $t('重量收费信息') }}</span>
<div class="form-group-title"><span class="title">{{ $t('货物收费信息') }}</span>
</div>
</template>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
@ -300,10 +308,35 @@
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;padding: 0px 15px;">
<el-col :span="24"><div style="font-weight:600">货物信息</div></el-col>
<el-col :span="24">
<el-form-item label="货物大类" prop="goodsType" label-width="70px">
<GoodsMultiplePicker v-model="form.goodsType" @onChange="onGoodsChange" placeholder="选择货物信息"></GoodsMultiplePicker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="货物名称" prop="goodsType" label-width="70px">
<el-input v-model="form.goodsInfo" type="textarea" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总件数" prop="parcelQty" label-width="70px">
<el-input v-model="form.parcelQty" style="text-align: right;" @blur="handleGenGoods" @keyup.enter.native="handleGenGoods" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实际重量" prop="billWeight" label-width="70px">
<el-input v-model="form.billWeight" @blur="reCalcSettlementWeight" style="text-align: right;min-width: 80px" placeholder="请输入实际重量" >
<span slot="suffix">(kg)</span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="" prop="goodsType" label-width="0px">
<GoodsSimplePicker v-model="form.goodsType" @onChange="onGoodsChange" placeholder="选择货物信息"></GoodsSimplePicker>
<el-table
<!-- <GoodsSimplePicker v-model="form.goodsType" @onChange="onGoodsChange" placeholder="选择货物信息"></GoodsSimplePicker> -->
<!-- <div style="width:50%">
<GoodsMultiplePicker v-model="form.goodsType" @onChange="onGoodsChange" placeholder="选择货物信息"></GoodsMultiplePicker>
</div> -->
<el-table
class="cargoList"
:cell-style="{
'padding': '0px!important',
@ -322,13 +355,11 @@
max-height="300px"
>
<el-table-column prop="goodsName" label="描述" align="center" min-width="100">
<template slot-scope="scope">
<el-input v-model="scope.row.goodsName" @input="(val)=>handleCalcQty(val,scope.row)" size="mini" placeholder=""></el-input>
</template>
<el-table-column label="序号" align="center" width="60">
<template slot-scope="scope">
<span > {{scope.$index+1}}</span>
</template>
</el-table-column>
<el-table-column prop="length" label="长(cm)" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.length" @input="(val)=>handleCalcVolume(val,scope.row)" size="mini" placeholder=""></el-input>
@ -351,12 +382,18 @@
</el-table-column>
<el-table-column prop="cargoQty" label="件数" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.cargoQty" @input="(val)=>handleCalcQty(val,scope.row)" size="mini" placeholder=""></el-input>
<el-input v-model="scope.row.cargoQty" size="mini" placeholder=""></el-input>
</template>
</el-table-column>
<!-- @input="(val)=>handleCalcQty(val,scope.row)" -->
<!-- <el-table-column prop="goodsName" label="描述" align="center" width="100">
<template slot-scope="scope">
<el-input v-model="scope.row.goodsName" @input="(val)=>handleCalcQty(val,scope.row)" size="mini" placeholder=""></el-input>
</template>
</el-table-column> -->
<el-table-column label="操作" align="center" width="50">
<el-table-column label="操作" align="left" min-width="50">
<template slot-scope="scope">
<span class="icon iconfont"
style="cursor: pointer;font-size: 21px;color: #6e6e6e;"
@ -366,17 +403,10 @@
</el-table>
<el-input v-model="form.goodsInfo" type="textarea" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实际重量" prop="billWeight" label-width="70px">
<el-input v-model="form.billWeight" @blur="reCalcSettlementWeight" style="text-align: right;min-width: 80px" placeholder="请输入实际重量" >
<span slot="suffix">(kg)</span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总体积" prop="totalVolume" label-width="70px" >
<div style="">
@ -386,11 +416,7 @@
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总件数" prop="parcelQty" label-width="70px">
<el-input v-model="form.parcelQty" style="text-align: right;" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="体积重量" prop="volumeWeight" label-width="70px">
@ -479,6 +505,12 @@
</el-form-item>
</el-col>
<el-form-item label="特殊报价" prop="ext" label-width="70px">
<el-checkbox style="font-size:400;margin-right:10px;font-size:10px" v-model="form.blSpecialQuote" :true-label="1" :false-label="0">特殊报价</el-checkbox>
<el-checkbox style="font-size:400;margin-right:10px;font-size:10px" v-model="form.blSensitive" :true-label="1" :false-label="0">敏感物</el-checkbox>
</el-form-item>
<el-col :span="24">
<el-form-item label="" prop="goodsType" label-width="0px">
<el-table
@ -514,22 +546,27 @@
<el-table-column prop="initialWeightFee" label="首重费" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.initialWeightFee" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<el-input v-if="form.blSpecialQuote==1" v-model="scope.row.initialWeightFee" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<div v-else> {{scope.row.initialWeightFee}} </div>
</template>
</el-table-column>
<el-table-column prop="addWeightPrice" label="续重单价" align="center" width="70">
<template slot-scope="scope">
<el-input v-model="scope.row.addWeightPrice" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<el-input v-if="form.blSpecialQuote==1" v-model="scope.row.addWeightPrice" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<div v-else> {{scope.row.addWeightPrice}} </div>
</template>
</el-table-column>
<el-table-column prop="realFee" label="实收" align="center" width="50">
<template slot-scope="scope">
<el-input v-model="scope.row.realFee" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<el-input v-if="form.blSpecialQuote==1" v-model="scope.row.realFee" @input="(val)=>handleCalcFeeItem(val,scope.row)" size="mini" placeholder=""></el-input>
<div v-else> {{scope.row.realFee}} </div>
</template>
</el-table-column>
<el-table-column prop="remark" label="描述" align="center" min-width="50">
<el-table-column prop="remark" label="描述" align="center" min-width="50">
<template slot-scope="scope">
<el-input v-model="scope.row.remark" size="mini" placeholder=""></el-input>
<el-input v-if="form.blSpecialQuote==1" v-model="scope.row.remark" size="mini" placeholder=""></el-input>
<div v-else> {{scope.row.remark}} </div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="50">
@ -591,18 +628,21 @@
</el-col>
<el-col :span="24" v-show="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5">
<el-form-item label="月结账号" prop="thirdCustomerCode" label-width="70px">
<EmisMonthpayAccountPicker v-model="form.custNo"></EmisMonthpayAccountPicker>
<EmisMonthpayAccountPicker v-model="form.custNo" @onChange="onSelectMonthUser"></EmisMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="回款联系人" prop="payee" label-width="80px">
<EmisUserSimplePicker2 :placeholder="$t('回款联系人')" v-model="form.payee" ></EmisUserSimplePicker2>
<PayeePicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('回款联系人')" v-model="form.payee" :disabled="true" ></PayeePicker>
<PayeePicker v-else :placeholder="$t('回款联系人')" v-model="form.payee" ></PayeePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="销售联系人" prop="salesmen" label-width="80px">
<EmisUserSimplePicker3 :placeholder="$t('销售联系人')" v-model="form.salesmen" ></EmisUserSimplePicker3>
<SalemanPicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('销售联系人')" v-model="form.salesmen" :disabled="true" ></SalemanPicker>
<SalemanPicker v-else :placeholder="$t('销售联系人')" v-model="form.salesmen" ></SalemanPicker>
</el-form-item>
</el-col>
@ -628,6 +668,17 @@
<AddressSelectPicker0 :addressType="addressType" @onSelected="onAddressChangeSelect"></AddressSelectPicker0>
</el-dialog>
<el-dialog class="previe_dialog" title="打印预览" :visible.sync="openPdfView" width="80%" :close-on-click-modal="false" v-dialogDrag append-to-body>
<PdfViewer :pdfUrl="pdfUrl" width="100%" @onPrint="handleBatchPrint" ></PdfViewer>
</el-dialog>
<!-- 打印机状态 -->
<div style="padding:5px 0px;text-align: right;position: fixed;top: 150px;right: 10px; z-index: 9999;">
<el-tag type="danger" v-if="printerStatus==0">{{ printerStatusMessage }}</el-tag>
<el-tag type="success" v-if="printerStatus==1">{{ printerStatusMessage }}</el-tag>
</div>
</div>
</template>
@ -643,6 +694,7 @@ import EmisUserSimplePicker0 from '@/views/emis/EmisBaseTools/EmisUserSimplePick
import EmisUserSimplePicker1 from '@/views/emis/EmisBaseTools/EmisUserSimplePicker.vue';
import EmisUserSimplePicker2 from '@/views/emis/EmisBaseTools/EmisUserSimplePicker.vue';
import EmisUserSimplePicker3 from '@/views/emis/EmisBaseTools/EmisUserSimplePicker.vue';
import EmisSiteSimplePicker from '@/views/emis/EmisBaseTools/EmisSiteSimplePicker.vue';
import TransLinePicker from '@/views/emis/EmisBaseTools/TransLinePicker.vue';
import TransProductPicker from '@/views/emis/EmisBaseTools/TransProductPicker.vue';
@ -666,6 +718,8 @@ import DistrictPicker2 from '@/views/emis/EmisBaseTools/DistrictPicker.vue';
// import CustomerPicker2 from '@/views/emis/EmisBaseTools/CustomerPicker.vue';
import GoodsSimplePicker from '@/views/emis/EmisBaseTools/GoodsSimplePicker.vue';
import GoodsMultiplePicker from '@/views/emis/EmisBaseTools/GoodsMultiplePicker.vue';
import CustomerAddressSimplePicker0 from '@/views/emis/EmisBaseTools/CustomerAddressSimplePicker.vue';
import CustomerAddressSimplePicker1 from '@/views/emis/EmisBaseTools/CustomerAddressSimplePicker.vue';
import AddressSelectPicker0 from '@/views/emis/EmisBaseTools/AddressSelectPicker.vue';
@ -673,19 +727,27 @@ import AddressSelectPicker1 from '@/views/emis/EmisBaseTools/AddressSelectPicker
import EmisMonthpayAccountPicker from '@/views/emis/EmisBaseTools/EmisMonthpayAccountPicker.vue';
import WarehouseInNoPicker from '@/views/emis/EmisBaseTools/WarehouseInNoPicker.vue';
import PayeePicker from '@/views/emis/EmisBaseTools/PayeePicker.vue';
import SalemanPicker from '@/views/emis/EmisBaseTools/SalemanPicker.vue';
import TransProductCasPicker from '@/views/emis/EmisBaseTools/TransProductCasPicker.vue';
import feeItemForm from './feeItemForm.vue';
import PdfViewer from '@/components/PdfViewer/index.vue';
import PdfUtils from '@/utils/pdfUtils'
export default {
name: "WaybillModify",
name: "WaybillEntry",
// props:{
// billCode:{
// type:String
// }
// },
components: {
SalemanPicker,
PayeePicker,
PdfViewer,
feeItemForm,
TransProductCasPicker,
WarehouseInNoPicker,
@ -695,28 +757,24 @@ components: {
CustomerAddressSimplePicker0,
CustomerAddressSimplePicker1,
GoodsSimplePicker,
GoodsMultiplePicker,
EmisUserSimplePicker0,
EmisUserSimplePicker1,
EmisUserSimplePicker2,
EmisUserSimplePicker3,
// CustomerPicker0,
// CustomerPicker1,
// CustomerPicker2,
EmisSiteSimplePicker,
DestinationPicker,
TransLinePicker,
TransProductPicker,
// AreaPicker0,
CountryPicker0,
CountryPicker1,
ProvincePicker1,
CityPicker1,
DistrictPicker1,
// TownPicker1,
CountryPicker2,
ProvincePicker2,
CityPicker2,
DistrictPicker2,
// TownPicker2,
},
dicts: ['emis_qujian_fangshi','emis_declare_mode','emis_customs_clear',
'emis_tab_packing_type','emis_tab_dispatch_mode','emis_payment_type',
@ -731,13 +789,25 @@ data() {
loading: true,
isNeedSave:false,
triggerCount:0,
printTypeCheckList:['1','2','5'],
// 表单参数
form: {},
timer:null,
isNeedCalc:false,
titleSelectAddress:'',
openSelectAddress:false,
tanexPrinter:null,
printerDownUrl:null,
printerStatus:0,
printerStatusMessage:'打印组件未连接',
printerList:[],
printTplList:[],
selTplName:null,
selPrinterName:null,
openPdfView:false,
pdfUrl:null,
// 表单校验
rules: {
billCode: [
@ -911,6 +981,20 @@ data() {
immediate: false,
deep: true
},
"form.billCode":{
handler (newValue, oldValue) {
this.handleGenSubbill();
},
immediate: false,
deep: true
},
"form.blGenSubbill":{
handler (newValue, oldValue) {
this.handleGenSubbill();
},
immediate: false,
deep: true
},
},
activated(){
@ -922,6 +1006,7 @@ updated(){
created() {
this.billCode=this.$route.query.billCode;
this.initData();
this.initTanexPrinterSdk();
},
methods: {
@ -933,6 +1018,104 @@ methods: {
this.billCode=this.form.billCode;
this.initData();
},
initTanexPrinterSdk(){
this.tanexPrinter = this.$tanexPrinter;
this.getConfigKey("sys.printer.downurl").then(response => {
this.printerDownUrl = response.msg;
});
this.tanexPrinter.init();
this.tanexPrinter.setOnOpen(this.onPrinterOpen);
this.tanexPrinter.setOnClose(this.onPrinterClose);
this.tanexPrinter.setOnError(this.onPrinterError);
// this.tanexPrinter.setOnGetPrinter(this.onGetPrinter);
// this.tanexPrinter.setOnGetPrintTpl(this.onGetPrintTpl);
},
onPrinterOpen(evt){
console.log("onPrinterOpen")
this.printerStatus = 1;
this.printerStatusMessage="打印组件已连接,可以打印.";
},
onPrinterClose(evt){
console.log("onPrinterClose")
this.printerStatus = 0;
this.printerStatusMessage="打印组件已断开!";
},
onPrinterError(evt){
console.log("onPrinterError")
this.printerStatus = 0;
this.printerStatusMessage="打印组件已断开!";
},
handleBatchPrint(){
if(this.form.billCode){
// 重要,设置为true才会把右上角X和取消区分开来
this.$confirm("确定打印?", "提示", {
cancelButtonText: "不打印",
confirmButtonText: "确定打印",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false
}).then(() => {
// 打印主单,子单
let orderList=[];
// this.currentSelection.forEach(item=>{
// orderList.push(item.billCode);
// });
// 打印主单
orderList.push(this.form.billCode);
let selPrinterName=this.tanexPrinter.getDefaultPrinter();
let selTplName="探路速运-主单联(通用)";
this.tanexPrinter.batchPrint(selTplName,selPrinterName,orderList)
// 打印子单
orderList=this.form.subBillCode.split(',');
selTplName="探路速运-子单联(通用)";
this.tanexPrinter.batchPrint(selTplName,selPrinterName,orderList)
}).catch(() => {});
}
},
async handlePrintPreview(){
if(this.form.billCode){
let pdfUrlList=[];
let selPrinterName=this.tanexPrinter.getDefaultPrinter();
let selTplName="探路速运-主单联(通用)";
let url=this.tanexPrinter.getPdfUrl(this.form.billCode,selTplName,selPrinterName);
pdfUrlList.push(url)
// 子单url
if(this.form.subBillCode){
orderList=this.form.subBillCode.split(',');
selTplName="探路速运-子单联(通用)";
this.orderList.forEach(item=>{
let url=this.tanexPrinter.getPdfUrl(item,selTplName,selPrinterName);
pdfUrlList.push(url)
});
}
let pdfUtils=new PdfUtils({});
const loadingInstance = this.$loading({
text: '正在生成预览...'
})
pdfUtils.mergePdf2(pdfUrlList, (new Date()).getTime()+".pdf" )
.then(url=>{
loadingInstance.close();
this.pdfUrl=url;
this.openPdfView = true;
})
.catch(error => {
});
}
},
onSelectMonthUser(item){
console.log(item);
this.form.payee=item.payee;
this.form.salesmen=item.salesmen;
},
handleAddFee(){
this.triggerCount++;
},
@ -943,7 +1126,6 @@ methods: {
this.form.feeItems.push(newItem);
this.handleCalcFeeItem();
}
},
deleteFeeItem(row){
if(row.blAutoGen==1){
@ -981,13 +1163,13 @@ methods: {
},
handleGenSubbill(value){
if(this.form.blGenSubbill==1 && this.form.parcelQty > 0 && this.form.billCode){
// let billSubCodeStr="";
// for(let i=1;i<this.form.parcelQty;i++){
// let subBillCode = this.form.billCode+""+this.lpadZero(i,3);
// billSubCodeStr=billSubCodeStr+subBillCode+";"
// console.log(billSubCodeStr);
// }
let billSubCodeStr = this.form.billCode+"["+this.lpadZero(1,3)+"-"+this.lpadZero(this.form.parcelQty,3)+"]";
let billSubCodeStr="";
for(let i=1;i<=this.form.parcelQty;i++){
let subBillCode = this.form.billCode+""+this.lpadZero(i,4);
billSubCodeStr=billSubCodeStr+subBillCode+","
console.log(billSubCodeStr);
}
// let billSubCodeStr = this.form.billCode+"["+this.lpadZero(1,3)+"-"+this.lpadZero(this.form.parcelQty,3)+"]";
console.log(billSubCodeStr);
this.form.billCodeSub=billSubCodeStr;
}else{
@ -1000,7 +1182,7 @@ methods: {
},
initData() {
this.reset();
this.form.sendDate = parseTime(new Date());
this.form.sendSiteCode=this.$store.getters.ownerSiteCode;
this.form.sendSiteName=this.$store.getters.ownerSiteName;
console.log(this.form.sendSiteName)
@ -1014,8 +1196,6 @@ methods: {
this.isNeedSave=true;
this.form.sendDate = parseTime(new Date());
});
}else{
// console.log(this.dict.type.emis_declare_mode[0]);
@ -1023,19 +1203,22 @@ methods: {
// this.form.customsEclaration = this.dict.type.emis_declare_mode[0].value;
this.form.customsEclaration='1';
this.form.customsClear='1';
this.form.pickupMethod='2';
// this.form.pickupMethod='2';
this.form.dispatchMethod='1';
// this.form.billWeight=1.0;
// this.form.totalVolume=0.0;
this.form.parcelQty=1;
this.form.packType='2';
this.form.blOverWeight='0';
this.form.blGenSubbill=0;
this.form.blGenSubbill=1;
this.form.paymentType='1';
this.form.calcFeeType='1';
this.form.blMessage='1'
this.form.blAcceptMessage='1'
this.isNeedSave=true;
this.form.printTypeCheckList=[1,5],
this.handleGenGoods();
}
@ -1140,6 +1323,8 @@ methods: {
meterType:null,
blGenSubbill:null,
billCodeSub:null,
blSpecialQuote:null,
blSensitive:null,
};
this.resetForm("form");
},
@ -1147,13 +1332,26 @@ methods: {
this.form.transLine=item[0];
this.form.productType=item[1];
},
onSendSiteSelect(item){
if(!item){
this.form.sendSiteCode = null;
this.form.sendSiteName = null;
return;
}
this.form.sendSiteCode=item.siteCode;
this.form.sendSiteName=item.siteName;
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
realSubmitOrder(this.form).then(response => {
this.$modal.msgSuccess("下单成功");
this.$emit("on-changed");
// 弹出打印预览界面
this.handlePrintPreview();
// this.$emit("on-changed");
});
}
});
@ -1249,12 +1447,28 @@ methods: {
});
this.form.goodsInfo = goodsInfo;
this.form.parcelQty = totalCargoQty;
this.handleGenSubbill();
},
handleCalcFeeItem(val,row){
let childRealFee=0.0;
if(row!=null){
if(row.calcExp){
let expr=row.calcExp+"";
expr=expr.replace("s",row.initialWeightFee);
expr=expr.replace("d",row.addWeightPrice);
expr=expr.replace("w",this.form.settlementWeight);
console.log(expr);
let childRealFee=parseFloat(eval(expr)).toFixed(2);
row.realFee=childRealFee;
console.log(childRealFee);
}
}
let totalFee=0;
this.form.feeItems.forEach(item=>{
totalFee=totalFee+parseInt(item.realFee);
@ -1358,7 +1572,43 @@ methods: {
this.form.dispatchUnderlingSite= item.siteName;
this.form.dispatchSite= item.siteName;
},
onGoodsChange(goodsName){
onGoodsChange(goodsList,selNameStr){
this.form.goodsInfo = selNameStr;
},
handleGenGoods(){
if(this.form.parcelQty>0){
// 新件数大于
if(this.form.parcelQty>=this.form.cargoList.length){
console.log()
let len=this.form.parcelQty-this.form.cargoList.length;
for(let i=0;i<len;i++){
let cargo={
"goodsCode": "",
"goodsName": "",
"cargoQty": 1,
"length": 0,
"width": 0,
"height": 0,
"volume": 0,
}
this.form.cargoList.push(cargo);
}
}
else{
let newList=[];
for(let i=0;i<this.form.parcelQty;i++){
newList.push(this.form.cargoList[i])
}
this.form.cargoList=newList;
}
}else{
this.form.cargoList=[];
}
},
onGoodsChange_old(goodsName){
if(goodsName&& goodsName!='') {
// 旧map
let nameOldMap = new Map();

View File

@ -17,7 +17,12 @@
<el-col :span="18">
<el-form-item label="运单号" prop="billCode" >
<div style="display:inline-flex">
<div><el-input v-model="form.billCode" placeholder="运单号" style="font-weight:600;color:black" /></div>
<div>
<!-- <el-input v-model="form.billCode" placeholder="运单号" style="font-weight:600;color:black" /> -->
<el-input v-model="form.billCode" placeholder="单号输入后按回车" @keyup.enter.native="handleScanInput" style="font-weight:600;color:black" >
<i slot="suffix" class="iconfont">&#xe656;</i>
</el-input>
</div>
<div style="padding-left:5px"> <el-checkbox style="font-size:400;margin-right:10px;font-size:10px" @change="checked=>handleBillCodeChange(checked)"><span style="font-size:10px">电子主单</span></el-checkbox></div>
</div>
</el-form-item>
@ -621,20 +626,20 @@
</el-col>
<el-col :span="24" v-show="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5">
<el-form-item label="月结账号" prop="thirdCustomerCode" label-width="70px">
<EmisMonthpayAccountPicker v-model="form.custNo"></EmisMonthpayAccountPicker>
<EmisMonthpayAccountPicker v-model="form.custNo" @onChange="onSelectMonthUser"></EmisMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="回款联系人" prop="payee" label-width="80px">
<PayeePicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('回款联系人')" v-model="form.payee" disabled ></PayeePicker>
<PayeePicker :placeholder="$t('回款联系人')" v-model="form.payee" ></PayeePicker>
<PayeePicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('回款联系人')" v-model="form.payee" :disabled="true" ></PayeePicker>
<PayeePicker v-else :placeholder="$t('回款联系人')" v-model="form.payee" ></PayeePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="销售联系人" prop="salesmen" label-width="80px">
<SalemanPicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('销售联系人')" v-model="form.salesmen" disabled ></SalemanPicker>
<SalemanPicker :placeholder="$t('销售联系人')" v-model="form.salesmen" ></SalemanPicker>
<SalemanPicker v-if="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5" :placeholder="$t('销售联系人')" v-model="form.salesmen" :disabled="true" ></SalemanPicker>
<SalemanPicker v-else :placeholder="$t('销售联系人')" v-model="form.salesmen" ></SalemanPicker>
</el-form-item>
</el-col>
@ -974,6 +979,20 @@ data() {
immediate: false,
deep: true
},
"form.billCode":{
handler (newValue, oldValue) {
this.handleGenSubbill();
},
immediate: false,
deep: true
},
"form.blGenSubbill":{
handler (newValue, oldValue) {
this.handleGenSubbill();
},
immediate: false,
deep: true
},
},
activated(){
@ -989,6 +1008,14 @@ created() {
},
methods: {
handleScanInput(){
if(this.form.billCode==null || this.form.billCode==''){
this.$message.error("输入单号后回车");
return;
}
this.billCode=this.form.billCode;
this.initData();
},
initTanexPrinterSdk(){
this.tanexPrinter = this.$tanexPrinter;
@ -1019,43 +1046,84 @@ methods: {
this.printerStatusMessage="打印组件已断开!";
},
handleBatchPrint(){
// 重要,设置为true才会把右上角X和取消区分开来
this.$confirm("确定打印?", "提示", {
cancelButtonText: "不打印",
confirmButtonText: "确定打印",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false
}).then(() => {
let orderList=[];
this.currentSelection.forEach(item=>{
orderList.push(item.billCode);
});
this.tanexPrinter.batchPrint(this.selTplName,this.selPrinterName,orderList)
}).catch(() => {});
if(this.form.billCode){
// 重要,设置为true才会把右上角X和取消区分开来
this.$confirm("确定打印?", "提示", {
cancelButtonText: "不打印",
confirmButtonText: "确定打印",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false
}).then(() => {
// 打印主单,子单
let orderList=[];
// this.currentSelection.forEach(item=>{
// orderList.push(item.billCode);
// });
// 打印主单
orderList.push(this.form.billCode);
let selPrinterName=this.tanexPrinter.getDefaultPrinter();
let selTplName="探路速运-主单联(通用)";
this.tanexPrinter.batchPrint(selTplName,selPrinterName,orderList)
// 打印子单
selTplName="探路速运-子单联(通用)";
let childOrderList=[]
orderList=this.form.billCodeSub.split(',');
orderList.forEach(item=>{
if(item!=null && item!=''){
childOrderList.push(item);
}
});
this.tanexPrinter.batchPrint(selTplName,selPrinterName,childOrderList)
}).catch(() => {});
}
},
async handlePrintPreview(){
let pdfUrlList=[];
this.currentSelection.forEach(item=>{
let url=this.tanexPrinter.getPdfUrl(item.billCode,this.selTplName,this.selPrinterName);
pdfUrlList.push(url)
});
let pdfUtils=new PdfUtils({});
const loadingInstance = this.$loading({
text: '正在生成预览...'
})
pdfUtils.mergePdf2(pdfUrlList, (new Date()).getTime()+".pdf" )
.then(url=>{
loadingInstance.close();
this.pdfUrl=url;
this.openPdfView = true;
})
.catch(error => {
});
if(this.form.billCode){
let pdfUrlList=[];
let selPrinterName=this.tanexPrinter.getDefaultPrinter();
let selTplName="探路速运-主单联(通用)";
let url=this.tanexPrinter.getPdfUrl(this.form.billCode,selTplName,selPrinterName);
pdfUrlList.push(url)
// 子单url
if(this.form.billCodeSub){
selTplName="探路速运-子单联(通用)";
let orderList=this.form.billCodeSub.split(',');
orderList.forEach(item=>{
if(item!=null && item!=''){
let url=this.tanexPrinter.getPdfUrl(item,selTplName,selPrinterName);
pdfUrlList.push(url)
}
});
}
let pdfUtils=new PdfUtils({});
const loadingInstance = this.$loading({
text: '正在生成预览...'
})
pdfUtils.mergePdf2(pdfUrlList, (new Date()).getTime()+".pdf" )
.then(url=>{
loadingInstance.close();
this.pdfUrl=url;
this.openPdfView = true;
})
.catch(error => {
});
}
},
onSelectMonthUser(item){
console.log(item);
this.form.payee=item.payee;
this.form.salesmen=item.salesmen;
},
handleAddFee(){
this.triggerCount++;
},
@ -1104,9 +1172,9 @@ methods: {
handleGenSubbill(value){
if(this.form.blGenSubbill==1 && this.form.parcelQty > 0 && this.form.billCode){
let billSubCodeStr="";
for(let i=1;i<this.form.parcelQty;i++){
for(let i=1;i<=this.form.parcelQty;i++){
let subBillCode = this.form.billCode+""+this.lpadZero(i,4);
billSubCodeStr=billSubCodeStr+subBillCode+";"
billSubCodeStr=billSubCodeStr+subBillCode+","
console.log(billSubCodeStr);
}
// let billSubCodeStr = this.form.billCode+"["+this.lpadZero(1,3)+"-"+this.lpadZero(this.form.parcelQty,3)+"]";
@ -1287,7 +1355,11 @@ methods: {
if (valid) {
realSubmitOrder(this.form).then(response => {
this.$modal.msgSuccess("下单成功");
this.$emit("on-changed");
// 弹出打印预览界面
this.handlePrintPreview();
// this.$emit("on-changed");
});
}
});

View File

@ -73,26 +73,51 @@ module.exports = {
}
}
},
configureWebpack: {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
},
output: { // 输出重构 打包编译后的 文件名称 【模块名称.版本号.时间戳】
filename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`,
chunkFilename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`
},
plugins: [
new CompressionPlugin({
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
}),
],
configureWebpack: config => {
// 开发环境不配置
if (process.env.NODE_ENV !== 'production') return
// 生产环境才去配置
return {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
},
output: { // 输出重构 打包编译后的 文件名称 【模块名称.版本号.时间戳】
filename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`,
chunkFilename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`
},
plugins: [
new CompressionPlugin({
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
}),
]
}
},
// configureWebpack: {
// name: name,
// resolve: {
// alias: {
// '@': resolve('src')
// }
// },
// output: { // 输出重构 打包编译后的 文件名称 【模块名称.版本号.时间戳】
// filename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`,
// chunkFilename: `static/js/[name].${process.env.VUE_APP_VERSION}.${Timestamp}.js`
// },
// plugins: [
// new CompressionPlugin({
// test: /\.(js|css|html)?$/i, // 压缩文件格式
// filename: '[path].gz[query]', // 压缩后的文件名
// algorithm: 'gzip', // 使用gzip压缩
// minRatio: 0.8 // 压缩率小于1才会压缩
// }),
// ],
// },
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test