emis-frontend/src/views/emis/emisWaybill/waybillModify.vue
2024-06-24 22:36:04 +08:00

2102 lines
80 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container" >
<el-form ref="form" size="mini" :model="form" :rules="rules" :disabled="this.form.lockFlag=='T'" label-width="100px">
<el-collapse v-model="activeNames">
<el-collapse-item title="" name="1">
<template slot="title">
<div style="display:inline-flex">
<div class="form-group-title"><span class="title">{{ $t('发货信息') }}</span></div>
</div>
</template>
<div>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<!-- 运单录入 -->
<el-col :span="6" v-if="action=='add'">
<el-form-item :label="$t('发货时间')" prop="sendDate">
<el-input v-model="sendDate" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="18" v-if="action=='add'">
<el-form-item label="运单号" prop="billCode" >
<div style="display:inline-flex">
<div>
<el-input v-model="form.billCode" placeholder="运单号" @blur="onBillCodeChange" style="font-weight:600;color:black" />
</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>
</el-col>
<!-- 运单录入 end -->
<!-- 运单修改 -->
<el-col :span="8" v-if="action=='modify'">
<el-form-item label="运单号" prop="billCode" >
<div style="display:inline-flex">
<div>
<el-form :disabled="false" @submit.native.prevent>
<el-input v-model="form.billCode" placeholder="单号输入后按回车" @keyup.enter.native="handleScanInput" :disabled="false" style="font-weight:600;color:black" >
<i slot="suffix" class="iconfont">&#xe656;</i>
</el-input>
</el-form>
</div>
</div>
</el-form-item>
</el-col>
<el-col :span="6" v-if="action=='modify'">
<el-form-item :label="$t('发货时间')" prop="sendDate">
<el-input v-model="form.sendDate" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="10" v-if="action=='modify'">
</el-col>
<!-- 运单修改 end -->
<el-col :span="6">
<el-form-item label="目的国" prop="destinationCountry">
<CountryPicker0 v-model="form.destinationCountry" @onChange="onDestCountryChange"></CountryPicker0>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品类型" prop="productType">
<TransProductCasPicker v-model="form.productTypeSelArr" :countryCode="form.destinationCountry" @onChange="onProductChange" ></TransProductCasPicker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="报关方式" prop="customsEclaration">
<el-select v-model="form.customsEclaration" placeholder="请选择" @change="calcBillFee">
<el-option
v-for="dict in dict.type.emis_declare_mode"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="清关方式" prop="customsClear">
<el-select v-model="form.customsClear" placeholder="请选择" @change="calcBillFee">
<el-option
v-for="dict in dict.type.emis_customs_clear"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="取件方式" prop="pickupMethod">
<el-select v-model="form.pickupMethod" placeholder="请选择" @change="calcBillFee">
<el-option
v-for="dict in dict.type.emis_qujian_fangshi"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" v-if="form.pickupMethod==2">
<el-form-item :label="$t('取件员')" prop="takePieceEmployeeCode" >
<EmisUserSimplePicker0 :placeholder="$t('取件员')" v-model="form.takePieceEmployeeCode" postCode="RSD" ></EmisUserSimplePicker0>
</el-form-item>
</el-col>
<el-col :span="6" v-if="form.pickupMethod==1">
<el-form-item :label="$t('操作员')" prop="operateEmployeeCode" >
<EmisUserSimplePicker1 :placeholder="$t('操作员')" v-model="form.operateEmployeeCode" postCode="OP" ></EmisUserSimplePicker1>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="派件方式" prop="dispatchMethod">
<el-radio-group v-model="form.dispatchMethod">
<el-radio
v-for="dict in dict.type.emis_tab_dispatch_mode"
:key="dict.value"
:label="dict.value"
>
<span >{{dict.label}}</span>
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<el-col :span="8">
<el-form-item label="月结客户" prop="custNo" :rules="(form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5)?rules.custNo:[]" >
<EmisMonthpayAccountPicker v-model="form.custNo" @onChange="onSelectMonthUser"></EmisMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="回款联系人" prop="payee" label-width="85px">
<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="6">
<el-form-item label="销售联系人" prop="salesmen" label-width="85px">
<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>
</el-row>
</el-col>
</el-row>
<div v-if="action=='add'" style="position: absolute;right: 80px;top: 60px;z-index: 100;">
<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="0" :label="0" >
<span >客户联</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>
</div>
<div style="margin-left:10px">
<TanexPrinterPanel ref="tanexPrinter" v-model="printerStatus" @onPrint="handleBatchPrint" :isInitA4="false" @onPrintComplete="onComplete"></TanexPrinterPanel>
</div>
</div>
</el-form-item>
</div> -->
</div>
</el-collapse-item>
<el-collapse-item title="" name="2">
<template slot="title">
<div class="form-group-title"><span class="title">{{ $t('收寄件信息') }}</span></div>
</template>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;border: 1px dotted #f5f7fa;border-radius: 5px;">
<el-col :span="12">
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;background: #fdfdfd;padding:15px">
<el-col :span="24" style="display:inline-flex; margin-bottom: 10px;border-bottom: 1px dotted #e6ebf5">
<div class="form-group-title" style="width:50%">
<span style="border-radius: 15px;
padding: 5px 15px;
background: black;
font-size: 13px;
color: white;">寄件信息</span>
</div>
<div style="width:50%;text-align:right;padding-right: 15px;">
<!-- icon="el-icon-edit" -->
<el-button
size="mini"
type="text"
style="cursor:hand;font-weight:700;border:1px dotted #e2d8d8;padding: 2px 5px;color: black;"
class="iconfont icon-dizhibao"
@click="handleSelectCustomerAddress(1)"
>寄件地址薄</el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="寄件人" prop="sender.name">
<CustomerAddressSimplePicker0 addressType="1" :useSiteCode="form.sendSiteCode" v-model="form.sender.name" @onChange="onChangeSelectSender"></CustomerAddressSimplePicker0>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="寄件电话" prop="sender.phone">
<el-input v-model="form.sender.phone" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="寄件公司" prop="sender.company"
:rules="form.paymentType != 2 ? rules.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">
<country-picker1 v-model="form.sender.country" ></country-picker1>
<province-picker1 v-model="form.sender.province" :countryCode="form.sender.country" style="margin-left:5px"></province-picker1>
<city-picker1 v-model="form.sender.city" :parentCode="form.sender.province" style="margin-left:5px"></city-picker1>
<district-picker1 v-model="form.sender.county" :parentCode="form.sender.city" style="margin-left:5px"></district-picker1>
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="寄件地址" prop="sender.address">
<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="blMessage">
<el-checkbox style="font-size:400;margin-right:10px;font-size:10px" v-model="form.blMessage" :true-label="'1'" :false-label="'0'"><span style="font-size:10px">寄件/签收短信</span></el-checkbox>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;padding:15px">
<el-col :span="24" style="display:inline-flex;margin-bottom: 10px;border-bottom: 1px dotted #e6ebf5">
<div class="form-group-title" style="width:50%">
<span style="border-radius: 15px;
padding: 5px 15px;
background: #b12e29;
font-size: 13px;
color: white;">收件信息</span>
</div>
<div style="width:50%;text-align:right;padding-right: 15px;">
<el-button
size="mini"
type="text"
style="cursor:hand;font-weight:700;border:1px dotted #e2d8d8;padding: 2px 5px;"
class="iconfont icon-dizhibao"
@click="handleSelectCustomerAddress(2)"
>收件地址薄</el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="收件人" prop="reciever.name">
<CustomerAddressSimplePicker1 addressType="2" :useSiteCode="form.sendSiteCode" :countryCode="form.reciever.country" v-model="form.reciever.name" @onChange="onChangeSelectReceiver"></CustomerAddressSimplePicker1>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收件电话" prop="reciever.phone">
<el-input v-model="form.reciever.phone" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收件公司" prop="reciever.company"
:rules="form.paymentType != 4 ? rules.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">
<country-picker2 v-model="form.reciever.country" ></country-picker2>
<ProvincePicker2 v-model="form.reciever.province" :countryCode="form.reciever.country" style="margin-left:5px" @onChange="handleCalcDestSite" ></ProvincePicker2>
<city-picker2 v-model="form.reciever.city" :parentCode="form.reciever.province" style="margin-left:5px"></city-picker2>
<district-picker2 v-model="form.reciever.county" :parentCode="form.reciever.city" style="margin-left:5px"></district-picker2>
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收件地址" prop="reciever.address">
<el-input v-model="form.reciever.address" type="textarea" rows="3" 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>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="目的网点" prop="dispatchUnderlingSiteCode">
<el-input v-model="form.dispatchUnderlingSiteCode" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="" prop="blAcceptMessage">
<el-checkbox style="font-size:400;margin-right:10px;font-size:10px" v-model="form.blAcceptMessage" :true-label="'1'" :false-label="'0'"><span style="font-size:10px">派件短信</span></el-checkbox>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="" name="3">
<template slot="title">
<div class="form-group-title"><span class="title">{{ $t('货物收费信息') }}</span>
</div>
</template>
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<el-col :span="12">
<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="goodsInfo" 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="handleCargoQtyChangeDebounce" @keyup.enter.native="handleCargoQtyChangeDebounce" 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="handleCalcSettlementWeight" @keyup.enter.native="handleCalcSettlementWeight" 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">
<el-table
class="cargoList"
:cell-style="{
'padding': '0px!important',
'padding-left': '0px!important',
'padding-right': '0px!important',
'font-size':'11px'
}"
:header-cell-style="{
'font-size':'11px'
}"
border
stripe
:data="form.cargoList"
size="small"
style="width: 100%"
max-height="300px"
>
<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)=>handleCalcVolumeDebounce(scope.row)" size="mini" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column prop="width" label="宽(cm)" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.width" @input="(val)=>handleCalcVolumeDebounce(scope.row)" size="mini" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column prop="height" label="高(cm)" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.height" @input="(val)=>handleCalcVolumeDebounce(scope.row)" size="mini" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column prop="cargoQty" label="件数" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.cargoQty" @blur="(val)=>handleCargoQtyChangeDebounce(scope.row)" @keyup.enter.native="(val)=>handleCargoQtyChange(scope.row)" size="mini" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column prop="volume" label="体积(m³)" align="center" width="80">
<template slot-scope="scope">
<el-input v-model="scope.row.volume" size="mini" placeholder="" disabled></el-input>
</template>
</el-table-column>
<!-- @input="(val)=>handleCalcQty(val,scope.row)" -->
<!-- <el-table-column prop="goodsName" label="描述" align="center" width="60">
<template slot-scope="scope">
<el-input v-model="scope.row.goodsName" size="mini" placeholder=""></el-input>
</template>
</el-table-column> -->
<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;"
@click="()=>deleteGoodsItem(scope.row,scope.$index)">&#xe7ae;</span>
<span class="icon iconfont"
style="cursor: pointer;font-size: 21px;color: #6e6e6e;"
@click="()=>copyGoodsItem(scope.row,scope.$index)">&#xe620;</span>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总体积" prop="totalVolume" label-width="70px" >
<div style="">
<el-input v-model="form.totalVolume" @blur="handleCalcVolumeWeight" @keyup.enter.native="handleCalcVolumeWeight" style="text-align: right;width: 120px" placeholder="体积" >
<span slot="suffix">(m³)</span>
</el-input>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="体积重量" prop="volumeWeight" label-width="70px">
<el-input v-model="form.volumeWeight" placeholder="" disabled>
<span slot="suffix">(kg)</span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算重量" prop="settlementWeight" label-width="70px">
<el-input v-model="form.settlementWeight" placeholder="" disabled >
<span slot="suffix">(kg)</span>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="包装类型" prop="packType" label-width="70px"">
<el-select multiple="" v-model="form.packType" placeholder="请选择">
<el-option
v-for="dict in dict.type.emis_tab_packing_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="" prop="blOverWeight">
<el-checkbox style="font-size:400;margin-right:10px;font-size:10px" v-model="form.blOverWeight" :true-label="'1'" :false-label="'0'" ><span style="font-size:10px">是否超重</span></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.blOverWeight==1">
<el-form-item label="超重件数" prop="overWeightNumber" label-width="70px">
<el-input :disabled="!form.blOverWeight" v-model="form.overWeightNumber" placeholder="超重件数" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生成子单" prop="blGenSubbill" label-width="70px" >
<el-radio-group v-model="form.blGenSubbill" @change="handleGenSubbill" >
<el-radio :key="'1'" label="1">是</el-radio>
<el-radio :key="'0'" label="0">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.blGenSubbill==1">
<el-form-item label="子单号" prop="billCodeSub" label-width="70px">
<el-input v-model="form.billCodeSub" rows="5" type="textarea" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="进仓单" prop="warehouseInNo" label-width="70px">
<WarehouseInNoPicker v-model="form.warehouseInNo"></WarehouseInNoPicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同号" prop="custOrderId" label-width="70px">
<el-input v-model="form.custOrderId" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="运单备注" prop="remark" label-width="70px">
<el-input v-model="form.remark" type="textarea" placeholder="" />
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="12" >
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;padding: 0px 15px;">
<el-col :span="12">
<el-form-item label="付款方式" prop="paymentType" label-width="70px">
<el-select v-model="form.paymentType" placeholder="请选择" @change="onPaymentTypeChange">
<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 :span="12">
</el-col>
<el-col :span="24" v-show="form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5">
<el-form-item label="付款客户" prop="custNo" :rules="(form.paymentType == 2 || form.paymentType == 4 || form.paymentType == 5)?rules.custNo:[]" label-width="70px">
<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="85px">
<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="85px">
<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>
<el-col :span="24">
<el-form-item label="计费方式" prop="calcFeeType" label-width="70px">
<el-radio-group v-model="form.calcFeeType" @change="calcBillFee" >
<el-radio
v-for="dict in dict.type.emis_calc_fee_type"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</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
class="cargoList"
:cell-style="{
'padding': '0px!important',
'padding-left': '0px!important',
'padding-right': '0px!important',
'font-size':'11px'
}"
:header-cell-style="{
'font-size':'11px'
}"
border
stripe
:data="form.feeItems"
size="mini"
max-height="300px"
style="width: 100%"
>
<el-table-column prop="feeName" label="收费项" align="center" width="70">
<template slot-scope="scope">
<span style="font-weight:600;color:red">{{ scope.row.feeName }}</span>
</template>
</el-table-column>
<el-table-column prop="fee" label="应收" align="center" width="50">
<template slot-scope="scope">
<span>{{ scope.row.fee }}</span>
</template>
</el-table-column>
<el-table-column prop="initialWeightFee" label="首重费" align="center" width="60">
<template slot-scope="scope">
<el-input v-if="form.blSpecialQuote==1" v-model="scope.row.initialWeightFee" @input="(val)=>handleCalcFeeItem(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-if="form.blSpecialQuote==1" v-model="scope.row.addWeightPrice" @input="(val)=>handleCalcFeeItem(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-if="form.blSpecialQuote==1" v-model="scope.row.realFee" @input="(val)=>handleCalcFeeItem(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">
<template slot-scope="scope">
<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">
<template slot-scope="scope">
<span class="icon iconfont"
style="cursor: pointer;font-size: 21px;color: #6e6e6e;"
v-if="scope.row.blAutoGen==0"
@click="()=>deleteFeeItem(scope.row)">&#xe7ae;</span>
</template>
</el-table-column>
</el-table>
<div>
<el-popover
trigger="click"
ref="popoverFeeRef"
placement="top"
:width="400"
effect="light"
:show-arrow="false"
>
<feeItemForm :triggerCount="triggerCount" :feeList="this.form.feeItems" @on-changed="onFeeItemChange" @on-cancel="onFeeItemChange"></feeItemForm>
<el-button
slot="reference"
style="padding: 0px;font-size: 12px;"
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAddFee"
>增加自定义费用</el-button>
</el-popover>
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="总运费" prop="freight" label-width="70px">
<el-input v-if="form.calcFeeType == 3" v-model="form.freight" placeholder="" > </el-input>
<el-input v-else v-model="form.freight" disabled placeholder="" > </el-input>
</el-form-item>
<el-form-item label="费用备注" prop="feeRemark" label-width="70px">
<el-input v-model="form.feeRemark" type="textarea" placeholder="" >
</el-input>
</el-form-item>
</el-col>
<el-col :span="24" v-if="action=='add'">
<el-form-item label="打印选项" prop="printTypeCheckList">
<el-checkbox-group v-model="form.printTypeCheckList">
<el-checkbox :key="0" :label="0" >
<span >客户联</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>
</el-col>
<el-col :span="24" v-if="action=='add'">
<el-form-item label="打印组件" prop="printTypeCheckList">
<TanexPrinterPanel ref="tanexPrinter" :isShowPinters="true" v-model="printerStatus" @onPrint="handleBatchPrint" :isInitA4="false" @onPrintComplete="onComplete"></TanexPrinterPanel>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
<div style="text-align: center;margin-top: 10px;margin-bottom: 10px;">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="initData">重置</el-button>
</div>
</el-form>
<el-dialog :title="titleSelectAddress" :visible.sync="openSelectAddress" width="60%" :destroy-on-close="true" v-dialogDrag append-to-body>
<AddressSelectPicker0 :addressType="addressType" :useSiteCode="form.sendSiteCode" @onSelected="onAddressChangeSelect"></AddressSelectPicker0>
</el-dialog>
</div>
</template>
<script>
import { realMatchWaybill,getTotalAvailablePag } from "@/api/emis/emisCommon";
import { checkWaybillIsExists,getWaybillDetail,realSubmitOrder,calcWaybillFee,calcSetteldWeight,calcVolumeWeight} from "@/api/emis/emisWaybill";
import { parseTime } from "@/utils/custom";
import { debounce } from 'throttle-debounce'
import { getDestSite } from "@/api/emis/emisDestination";
import DestinationPicker from '@/views/emis/EmisBaseTools/DestinationPicker.vue';
import EmisUserSimplePicker0 from '@/views/emis/EmisBaseTools/EmisUserSimplePicker.vue';
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';
import CountryPicker0 from '@/views/emis/EmisBaseTools/CountryPicker.vue';
import CountryPicker1 from '@/views/emis/EmisBaseTools/CountryPicker.vue';
import ProvincePicker1 from '@/views/emis/EmisBaseTools/ProvincePicker.vue';
import CityPicker1 from '@/views/emis/EmisBaseTools/CityPicker.vue';
import DistrictPicker1 from '@/views/emis/EmisBaseTools/DistrictPicker.vue';
import CountryPicker2 from '@/views/emis/EmisBaseTools/CountryPicker.vue';
import ProvincePicker2 from '@/views/emis/EmisBaseTools/ProvincePicker.vue';
import CityPicker2 from '@/views/emis/EmisBaseTools/CityPicker.vue';
import DistrictPicker2 from '@/views/emis/EmisBaseTools/DistrictPicker.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';
import AddressSelectPicker1 from '@/views/emis/EmisBaseTools/AddressSelectPicker.vue';
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 TanexPrinterPanel from '@/views/emis/EmisBaseTools/TanexPrinterPanel.vue';
import { doScan } from "@/api/emis/emisTmsScanRecord";
import { deepClone } from '@/utils/index'
export default {
// name: "WaybillRecord",
name: "WaybillModify",
components: {
SalemanPicker,
PayeePicker,
TanexPrinterPanel,
feeItemForm,
TransProductCasPicker,
WarehouseInNoPicker,
EmisMonthpayAccountPicker,
AddressSelectPicker0,
AddressSelectPicker1,
CustomerAddressSimplePicker0,
CustomerAddressSimplePicker1,
GoodsSimplePicker,
GoodsMultiplePicker,
EmisUserSimplePicker0,
EmisUserSimplePicker1,
EmisUserSimplePicker2,
EmisUserSimplePicker3,
EmisSiteSimplePicker,
DestinationPicker,
TransLinePicker,
TransProductPicker,
CountryPicker0,
CountryPicker1,
ProvincePicker1,
CityPicker1,
DistrictPicker1,
CountryPicker2,
ProvincePicker2,
CityPicker2,
DistrictPicker2,
},
dicts: ['emis_qujian_fangshi','emis_declare_mode','emis_customs_clear',
'emis_tab_packing_type','emis_tab_dispatch_mode','emis_payment_type',
'emis_calc_fee_type','emis_print_type'],
data() {
return {
activeNames:['1','2','3','4'],
billCode:null,
emisWaybillOptions: [],
addressType:null,
// 遮罩层
loading: true,
isNeedSave:false,
triggerCount:0,
action:null,
sendDate:null,
// 表单参数
form: {},
timer:null,
isNeedCalc:false,
titleSelectAddress:'',
openSelectAddress:false,
printerStatus:0,
// 可用面单数
totalAvailablePag:{
mainHasCnt:0,
subHasCnt:0
},
// 表单校验
rules: {
billCode: [
{ required: true, message: "运单号不能为空", trigger: ["blur",'change'] }
],
destinationCountry: [
{ required: true, message: "目的国不能为空", trigger: ["blur",'change'] }
],
reciever:{
name: [
{ required: true, message: "收货人名不能为空", trigger: ["blur",'change'] }
],
phone: [
{ required: true, message: "收货人手机号不能为空", trigger: "blur" }
],
country: [
{ required: true, message: "收货人国家不能为空", trigger: ["blur",'change'] }
],
province: [
{ required: true, message: "省不能为空", trigger: ["blur",'change'] }
],
company: [
{ required: true, message: "发件公司不能为空", trigger: ["blur",'change'] }
],
// city: [
// { required: true, message: "市不能为空", trigger: "blur" }
// ],
// county: [
// { required: true, message: "区不能为空", trigger: "blur" }
// ],
address: [
{ required: true, message: "收货地址不能为空", trigger: "blur" }
],
},
sender:{
name: [
{ required: true, message: "寄件人名不能为空", trigger: ["blur",'change'] }
],
phone: [
{ required: true, message: "寄件人手机号不能为空", trigger: "blur" }
],
country: [
{ required: true, message: "寄件人国家不能为空", trigger: ["blur",'change'] }
],
province: [
{ required: true, message: "寄件省不能为空", trigger: ["blur",'change'] }
],
company: [
{ required: true, message: "发件公司不能为空", trigger: ["blur",'change'] }
],
// city: [
// { required: true, message: "寄件市不能为空", trigger: "blur" }
// ],
// county: [
// { required: true, message: "寄件区不能为空", trigger: "blur" }
// ],
address: [
{ required: true, message: "寄件地址不能为空", trigger: "blur" }
],
},
paymentType: [
{ required: true, message: "支付方式不能为空", trigger: ["blur",'change'] }
],
calcFeeType: [
{ required: true, message: "计费方式不能为空", trigger: ["blur",'change'] }
],
transLine: [
{ required: true, message: "快递线路不能为空", trigger: ["blur",'change'] }
],
productType: [
{ required: true, message: "快递产品类型不能为空", trigger: ["blur",'change'] }
],
customsClear: [
{ required: true, message: "清关方式不能为空", trigger: ["blur",'change'] }
],
customsEclaration: [
{ required: true, message: "报关方式不能为空", trigger: ["blur",'change'] }
],
packType: [
{ required: true, message: "包装类型不能为空",trigger: ["blur",'change'] }
],
dispatchMethod: [
{ required: true, message: "派件方式不能为空", trigger: ["blur",'change'] }
],
pickupMethod: [
{ required: true, message: "取件方式为空", trigger: ["blur",'change'] }
],
goodsInfo: [
{ required: true, message: "货物名称不能为空", trigger: ["blur",'change'] }
],
totalVolume: [
{ required: true, message: "总体积不能为空", trigger: "blur" }
],
parcelQty: [
{ required: true, message: "件数不能为空", trigger: "blur" }
],
billWeight: [
{ required: true, message: "实际重量不能为空", trigger: "blur" }
],
// volumeWeight: [
// { required: true, message: "体积重量不能为空", trigger: "blur" }
// ],
// settlementWeight: [
// { required: true, message: "结算重量不能为空", trigger: "blur" }
// ],
freight: [
{ required: true, message: "运费不能为空", trigger: "blur" }
],
sendSiteCode: [
{ required: true, message: "发件网点代码不能为空", trigger: ["blur",'change'] }
],
// sendDate: [
// { required: true, message: "发货时间不能为空", trigger: "blur" }
// ],
dispatchUnderlingSiteCode: [
{ required: true, message: "目的地网点代码不能为空", trigger: "blur" }
],
custNo: [
{ required: true, message: "月结卡号不能为空", trigger: ["blur",'change'] }
],
payee: [
{ required: true, message: "销售回款人不能为空", trigger: ["blur",'change'] }
],
salesmen: [
{ required: true, message: "销售联系人不能为空", trigger: ["blur",'change'] }
],
takePieceEmployeeCode: [
{ required: true, message: "取件员代码不能为空", trigger: ["blur",'change'] }
],
operateEmployeeCode: [
{ required: true, message: "操作员代码不能为空", trigger: ["blur",'change'] }
],
}
};
},
computed: {
},
watch: {
// "form.parcelQty":{
// handler (newValue, oldValue) {
// this.handleGenSubbill();
// },
// 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
// },
},
created() {
this.action=this.$route.query.action;
this.initData();
},
mounted() {
},
methods: {
handleScanInput(){
if(this.form.billCode==null || this.form.billCode==''){
this.$message.error("输入单号后回车");
return;
}
this.billCode=this.form.billCode+"";
this.initData();
},
onBillCodeChange(){
if(this.form.billCode){
checkWaybillIsExists(this.form.billCode).then(response => {
const result = response.data;
if(result){
this.$message.error('运单号已存在!')
this.form.billCode=null;
}
});
}
},
// 初始化可用面单数量
initGetTotalAvailablePag(useSiteCode){
getTotalAvailablePag(useSiteCode,"T7080").then(response => {
let dataMap=response.data;
this.totalAvailablePag.mainHasCnt=dataMap["1001"];
this.totalAvailablePag.subHasCnt=dataMap["1002"];
if( (this.totalAvailablePag.mainHasCnt <=0 || this.totalAvailablePag.subHasCnt<=0 ) && this.action=="add"){
this.$confirm("电子面单数量不足,是否立即购买?", "提示", {
cancelButtonText: "返回",
confirmButtonText: "立即购买",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false
}).then(() => {
this.handleApplyPag();
});
}
});
},
handleApplyPag(){
this.$router.push("/d24/electronicFormManagement/ApplyList");
},
handleBatchPrint(){
if(this.printerStatus == 1){
if(this.form.billCode){
// 重要,设置为true才会把右上角X和取消区分开来
this.$confirm("确定打印?", "提示", {
cancelButtonText: "不打印",
confirmButtonText: "确定打印",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false
}).then(() => {
let printDataList=[]
// 打印主单,子单
let orderList=[];
orderList.push(this.form.billCode);
// 客户联
let customerItem ={
"tplCode":"TAN-CM-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":orderList.toString()
}
printDataList.push(customerItem);
// 主单
let mainBillItem ={
"tplCode":"TAN-GM-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":orderList.toString()
}
printDataList.push(mainBillItem);
// 打印子单
// tplCode="探路速运-子单联(通用)";
// tplCode="TAN-GC-130";
let childOrderList=[]
let subBillArr=this.form.billCodeSub.split(',');
for(let i=0;i<subBillArr.length&&i<50;i++){
let item=subBillArr[i];
if(item!=null && item!=''){
childOrderList.push(item);
}
}
let subBillItem ={
"tplCode":"TAN-GC-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":childOrderList.toString()
}
printDataList.push(subBillItem);
// 直接打印主子单
this.$refs.tanexPrinter.batchPrintAdv(printDataList)
}).catch(() => {});
}
}
else{
this.$confirm("打印组件未连接,可【返回操作】稍后打印,或【操作下一单】", "提示", {
confirmButtonText: "操作下一单",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false,
showCancelButton: false,
showClose: false
}).then(() => {
this.billCode=null;
this.form.billCode=null;
this.initData();
});
}
},
async handlePrintPreview(){
if(this.printerStatus == 1){
if(this.form.billCode){
let billCount=1;
let printDataList=[]
// 打印主单,子单
let orderList=[];
orderList.push(this.form.billCode);
// 客户联
let customerItem ={
"tplCode":"TAN-CM-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":orderList.toString()
}
printDataList.push(customerItem);
// 主单
let mainBillItem ={
"tplCode":"TAN-GM-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":orderList.toString()
}
printDataList.push(mainBillItem);
// 打印子单
// tplCode="探路速运-子单联(通用)";
// tplCode="TAN-GC-130";
this.handleGenSubbill();
let childOrderList=[]
let subBillArr=this.form.billCodeSub.split(',');
for(let i=0;i<subBillArr.length;i++){
let item=subBillArr[i];
if(item!=null && item!=''){
childOrderList.push(item);
billCount=billCount+1;
}
}
if(childOrderList&&childOrderList.length>0){
let subBillItem ={
"tplCode":"TAN-GC-130",
"printerName":this.$refs.tanexPrinter.getDefaultPrinter(),
"orderList":childOrderList.toString()
}
printDataList.push(subBillItem);
}
// 预览主子单
this.$refs.tanexPrinter.printPreviewAdv(printDataList,billCount)
}
}
else{
this.$confirm("打印组件未连接,可【返回操作】稍后打印,或【操作下一单】", "提示", {
confirmButtonText: "操作下一单",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false,
showCancelButton: false,
showClose: false
}).then(() => {
this.billCode=null;
this.form.billCode=null;
this.initData();
});
}
},
onComplete(){
this.$confirm("操作已完成是否【操作下一单】", "提示", {
confirmButtonText: "操作下一单",
type: "warning",
distinguishCancelAndClose: true,
closeOnClickModal: false,
showCancelButton: false,
showClose: false
}).then(() => {
this.billCode=null;
this.form.billCode=null;
this.initData();
});
},
onDestCountryChange(item){
if(item){
this.form.reciever.country=item.code;
}
},
onPaymentTypeChange(){
// 非月结清空月结客户选择
if(this.form.paymentType == '1' ||
this.form.paymentType == '3' ||
this.form.paymentType == '6'
){
this.form.custNo=null;
this.form.customerCode=null;
this.calcBillFee();
}
},
onSelectMonthUser(item){
if(item!=null){
this.form.payee=item.payee;
this.form.salesmen=item.salesmen;
this.form.paymentType= '2';
}else{
this.form.paymentType= '1';
this.form.payee=null;
this.form.salesmen=null;
this.onPaymentTypeChange();
}
this.calcBillFee();
},
handleAddFee(){
this.triggerCount++;
},
onFeeItemChange(item){
this.$refs.popoverFeeRef.doClose();
if(item!=null){
let newItem=Object.assign({},item)
this.form.feeItems.push(newItem);
this.handleCalcFeeItem();
}
},
deleteFeeItem(row){
if(row.blAutoGen==1){
this.$message('不允许删除!')
return;
}
this.$confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let newList = this.form.feeItems.filter(item => item.feeCode !== row.feeCode);
this.form.feeItems=newList;
}).catch(() => {
})
},
lpadZero(val,len) {
return (new Array(len + 1).join('0') + val).slice(-len);
},
handleGenSubbill(){
let billSubCodeStr="";
if(this.form.blGenSubbill==1 && this.form.parcelQty > 0 && this.form.billCode){
for(let i=1;i<=this.form.parcelQty&&i<50;i++){
let subBillCode = this.form.billCode+""+this.lpadZero(i,4);
billSubCodeStr=billSubCodeStr+subBillCode+","
}
this.form.billCodeSub=billSubCodeStr;
}else{
this.form.billCodeSub=billSubCodeStr;
}
return billSubCodeStr;
},
openCollapse(index){
},
initData() {
this.reset();
this.form.productTypeSelArr=null;
if(this.billCode && this.billCode!=undefined) {
this.loading = true;
getWaybillDetail(this.billCode).then(response => {
this.form = response.data;
this.form.productTypeSelArr=[this.form.transLine,this.form.productType];
this.loading = false;
this.isNeedSave=true;
this.form.printTypeCheckList=[0,1,5]
this.form.destinationCountry=this.form.reciever.country;
if(this.form.packType){
this.form.packType=this.form.packType.split(",");
}
if(this.form.lockFlag=="T"){
this.$confirm(this.form.lockReason, '提示', {
confirmButtonText: '确认',
cancelButtonText: '返回',
type: 'warning'
}).then(() => {
}).catch(() => {
})
}
});
}else{
// this.startTimer();
// this.form.sendDate = parseTime(new Date());
this.form.sendSiteCode=this.$store.getters.ownerSiteCode;
this.form.sendSiteName=this.$store.getters.ownerSiteName;
this.form.customsEclaration='1';
this.form.customsClear='1';
// 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='1';
this.form.paymentType='1';
this.form.calcFeeType='1';
this.form.blMessage='1'
this.form.blAcceptMessage='1'
this.isNeedSave=true;
this.form.printTypeCheckList=[0,1,5],
// 获取可用运单数
this.initGetTotalAvailablePag(this.form.sendSiteCode);
this.handleInitGenGoods();
this.startTimer();
}
},
beforeDestroy() {
clearInterval(this.timer);
},
// 取消按钮
cancel() {
this.reset();
this.$emit("on-cancel");
},
// 表单重置
reset() {
this.form = {
id:null,
reciever: {
country: null,
name: null,
phone:null,
province: null,
city: null,
district: null,
town: null,
address: null,
postCode: null,
email: null,
company: null,
},
sender: {
country: null,
name: null,
phone:null,
province: null,
city: null,
district: null,
town: null,
address: null,
postCode: null,
email: null,
company: null,
},
feeItems: [],
cargoList: [],
attachmentList: [],
printTypeCheckList:[],
billCode: null,
orderDate: null,
openId: null,
customerCode: null,
paymentType: null,
calcFeeType: '1',
custNo: null,
productTypeSelArr: null,
transLine: null,
productType: null,
customsClear: null,
customsEclaration: null,
packType: null,
dispatchMethod: "1",
pickupMethod: null,
pickStartDate: null,
pickFinishDate: null,
intoWarehouseCode: null,
intoWarehouseName: null,
intoWarehouseAddress: null,
intoWarehouseContact: null,
intoWarehousePhone: null,
intoWarehouseBillCode: null,
customerDeliveryBeginTime: null,
goodsType:null,
goodsInfo: null,
length:null,
width:null,
height:null,
totalWeight: null,
totalVolume: null,
parcelQty: null,
billWeight: null,
volumeWeight: null,
settlementWeight: null,
feeWeight: null,
freight: null,
blOverLong: null,
blOverWeight: null,
overWeightNumber: null,
feeRemark: null,
realValue: null,
takePieceEmployeeCode: null,
sendSiteCode: null,
sendSiteName: null,
destinationCountry: null,
destinationCode: null,
dispatchUnderlingSiteCode: null,
destinationCenterCode: null,
marketManCode: null,
payee: null,
salesmen: null,
operateEmployeeCode: null,
blMessage: null,
blAcceptMessage: null,
meterType:null,
blGenSubbill:null,
billCodeSub:null,
blSpecialQuote:null,
blSensitive:null,
lockFlag:null,
lockReason:null,
};
this.resetForm("form");
},
onProductChange(item){
if(item!=null && item.length==2){
this.form.transLine=item[0];
this.form.productType=item[1];
this.calcBillFee();
}
},
onSendSiteSelect(item){
if(!item){
this.form.sendSiteCode = null;
this.form.sendSiteName = null;
return;
}
this.form.sendSiteCode=item.siteCode;
this.form.sendSiteName=item.siteName;
this.initGetTotalAvailablePag(this.form.sendSiteCode);
this.calcBillFee();
},
/** 提交按钮 */
submitForm() {
this.form.sendDate =this.sendDate;
this.$refs["form"].validate(valid => {
if (valid) {
if(this.form.destinationCountry!=this.form.reciever.country){
this.$modal.msgError("收件国和目的国不一致");
return ;
}
if(this.action=="modify" && this.billCode !=this.form.billCode){
this.$confirm("当前单号"+this.form.billCode+"与修改单号"+this.billCode+"不一致,不允许提交!", '提示', {
confirmButtonText: '确认',
cancelButtonText: '返回',
type: 'warning'
}).then(() => {
this.calcDestSite();
}).catch(() => {
})
}else{
this.realSaveOrderInfo();
}
}
});
},
startTimer(){
if(this.action=='add'){
this.sendDate=parseTime(new Date());
this.timer = setTimeout(this.startTimer, 1000);
}
},
stopTimer(){
clearTimeout(this.timer);
this.timer=null;
},
realSaveOrderInfo(){
// 不影响原表单提交,clone 一份数据
let postForm=deepClone(this.form)
// 调整包装类型为多选
if(this.form.packType&&this.form.packType.length>0){
postForm.packType=this.form.packType.join(",");
}
realSubmitOrder(postForm).then(response => {
this.$modal.msgSuccess("下单成功");
// 新开单才需要打印
if(this.action == "add"){
// 做揽收扫描记录
// this.handDoGotScan();
// 弹出打印预览界面
this.handlePrintPreview();
}
else if(this.action == "modify"){
// 弹出是否继续的窗口
this.onComplete();
}
});
},
handDoGotScan(){
let opManCode=null;
if(this.form.pickupMethod==1){
opManCode=this.form.operateEmployeeCode;
}
else if(this.form.pickupMethod==2){
opManCode=this.form.takePieceEmployeeCode;
}
// 揽收扫描
let scanData=[{
billCode:this.form.billCode,
scanWeight:null,
scanDate:new Date(),
dispatchOrSendManCode:opManCode
}];
let scanInfo = {scanType:"10",opType:2,scanData:scanData}
console.log(scanInfo)
doScan(scanInfo);
},
// 弹出地址簿选择
handleSelectCustomerAddress(addressType){
this.addressType = addressType;
this.titleSelectAddress = this.addressType==1? this.$t('选择寄件人'):this.$t('选择收件人');
this.openSelectAddress = true;
},
// 地址薄选择后返回
onAddressChangeSelect(item){
if(this.addressType == 1){
this.onChangeSelectSender(item);
}else{
this.onChangeSelectReceiver(item);
}
this.openSelectAddress = false;
},
onChangeSelectSender(value){
this.form.sender.name=value.name;
this.form.sender.phone=value.phone;
this.form.sender.country=value.country;
this.form.sender.province=value.province;
this.form.sender.city=value.city;
this.form.sender.county=value.county;
// this.form.receiveTown=value.town;
this.form.sender.address=value.address;
this.form.sender.company=value.company;
},
onChangeSelectReceiver(value){
this.form.reciever.name=value.name;
this.form.reciever.phone=value.phone;
this.form.reciever.country=value.country;
this.form.reciever.province=value.province;
this.form.reciever.city=value.city;
this.form.reciever.county=value.county;
// this.form.receiveTown=value.town;
this.form.reciever.address=value.address;
this.form.reciever.company=value.company;
this.handleCalcDestSite();
},
// 计算目的站点
handleCalcDestSite(){
if(this.form.reciever.country != this.form.destinationCountry){
this.$confirm('收件国和目的国不一致,请调整!', '提示', {
confirmButtonText: '确认',
cancelButtonText: '返回',
type: 'warning'
}).then(() => {
this.calcDestSite();
}).catch(() => {
})
}else{
this.calcDestSite();
}
},
calcDestSite(){
let queryParams = {
province:this.form.reciever.province
};
if(this.form.reciever.province){
getDestSite(queryParams).then(response => {
this.form.destinationCode = response.data.destCode+'';
this.form.dispatchSiteCode= response.data.siteCode;
this.form.dispatchSite = response.data.siteName;
this.form.dispatchUnderlingSiteCode= response.data.siteCode;
this.form.dispatchUnderlingSite= response.data.siteName;
});
}
},
handleCalcVolumeDebounce(row){
// 控制触发频率
debounce(250, this.handleCalcVolume(row))
},
handleCalcVolume(row){
// 初始化不计算
if(!this.isNeedSave){
return;
}
if(row!=null){
let singleVolume=parseFloat(row.length)*parseFloat(row.width)*parseFloat(row.height);
let singleTotalVolume=singleVolume*parseFloat(row.cargoQty);
row.volume=parseFloat( (singleTotalVolume/1000000).toFixed(5) );
}
let totalVolume=0.0;
this.form.cargoList.forEach(item=>{
totalVolume=totalVolume+item.volume;
});
this.form.totalVolume = parseFloat(totalVolume.toFixed(5));
this.handleCalcVolumeWeight();
},
handleCalcFeeItem(row){
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);
row.realFee=parseFloat(eval(expr)).toFixed(2);
}
}
let totalFee=0;
if(this.form.feeItems&&this.form.feeItems.length>0){
this.form.feeItems.forEach(item=>{
totalFee=totalFee+parseInt(item.realFee);
});
}
this.form.freight = totalFee;
},
// 计算体积重量
handleCalcVolumeWeight(){
// 初始化不计算
if(!this.isNeedSave){
return;
}
if( this.form.totalVolume
&& this.form.productType
){
let postData={
productType: this.form.productType,
totalVolume: this.form.totalVolume,
}
calcVolumeWeight(postData).then(response => {
this.form.volumeWeight = response.data.volumeWeight;
// 计算结算重量
this.handleCalcSettlementWeight();
});
}
},
// 计算结算重量
handleCalcSettlementWeight(){
// 初始化不计算
if(!this.isNeedSave){
return;
}
if(this.form.billWeight
&& this.form.volumeWeight
&& this.form.productType
){
let postData={
productType: this.form.productType,
volumeWeight: this.form.volumeWeight,
billWeight: this.form.billWeight,
}
calcSetteldWeight(postData).then(response => {
// 结算重量发生改变才计算费用
if(this.form.settlementWeight != response.data.settlementWeight ){
this.form.settlementWeight = response.data.settlementWeight;
this.form.feeWeight = this.form.settlementWeight ;
// 计算费用
this.calcBillFee();
}
});
}
},
calcBillFee(){
// 初始化不计算
if(!this.isNeedSave){
return;
}
if(this.form.settlementWeight
&& this.form.productType
&& this.form.sendSiteCode
&& this.form.dispatchUnderlingSiteCode
&& this.form.calcFeeType
&& this.form.customsClear
&& this.form.customsEclaration
){
let calcFeeType=this.form.calcFeeType;
if(calcFeeType==3){
calcFeeType=1;
}
let postData={
productType: this.form.productType,
customerCode: this.form.customerCode,
custNo: this.form.custNo,
calcFeeType:calcFeeType,
settlementWeight: this.form.settlementWeight,
sendSiteCode: this.form.sendSiteCode,
dispatchUnderlingSiteCode: this.form.dispatchUnderlingSiteCode,
customsClear:this.form.customsClear,
customsEclaration:this.form.customsEclaration
}
// 提前重算费用
let custFeeList = [];
this.form.feeItems.forEach(item=>{
if(item.blAutoGen!='1'){
custFeeList.push(item);
}
});
this.form.feeItems = custFeeList;
this.handleCalcFeeItem();
// 通过服务器其计算,保留自定义费用
calcWaybillFee(postData).then(response => {
let newFeeList=[];
let newFeeMap = new Map();
if(response.data.feeList){
newFeeList=response.data.feeList;
newFeeList.forEach(item=>{
newFeeMap[item.feeCode]=item;
});
}
let custFeeList = [];
this.form.feeItems.forEach(item=>{
if(item.blAutoGen!='1' && !(item.feeCode in newFeeMap)){
custFeeList.push(item);
}
});
this.form.feeItems = newFeeList.concat(custFeeList);
this.handleCalcFeeItem();
// if(newFeeList && newFeeList.lenght>0){
// }else{
// this.form.feeItems=[]
// this.handleCalcFeeItem();
// // this.$confirm('该产品未配置报价,请联系管理员!', '提示', {
// // confirmButtonText: '确认',
// // cancelButtonText: '返回',
// // type: 'warning'
// // });
// }
});
}
},
onDestinationChange(item){
// this.form.destinationCode = item.destCode;
this.form.dispatchUnderlingSiteCode= item.siteCode;
this.form.dispatchSiteCode= item.siteCode;
this.form.dispatchUnderlingSite= item.siteName;
this.form.dispatchSite= item.siteName;
},
onGoodsChange(goodsList,selNameStr){
this.form.goodsInfo = selNameStr;
},
handleInitGenGoods(){
if(this.form.parcelQty>0){
let currentParcelQty = 0;
if(!this.form.cargoList){
this.form.cargoList=[];
}
this.form.cargoList.forEach(item=>{
currentParcelQty = currentParcelQty+parseInt(item.cargoQty);
});
// 新件数大于
if(this.form.parcelQty>currentParcelQty){
let len=this.form.parcelQty-currentParcelQty;
if(this.form.parcelQty>10){
let cargo={
"goodsCode": "",
"goodsName": "",
"cargoQty": len,
"length": 0,
"width": 0,
"height": 0,
"volume": 0,
}
this.form.cargoList.push(cargo);
}
else{
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=[];
let incQty=0;
let zeroItem={
"goodsCode": "",
"goodsName": "",
"cargoQty": 1,
"length": 0,
"width": 0,
"height": 0,
"volume": 0,
};
for(let i=0;i<this.form.cargoList.length;i++){
let item=this.form.cargoList[i];
// 忽略未填写体积的数据
if(item.length==0&&item.width==0&&item.height==0){
continue;
}
if((incQty+parseInt(item.cargoQty))<this.form.parcelQty){
incQty = incQty+parseInt(item.cargoQty);
newList.push(item)
}else{
item.cargoQty=this.form.parcelQty-incQty;
newList.push(item)
incQty = incQty+parseInt(item.cargoQty);
break;
}
}
// 补足数量
let bzLen=this.form.parcelQty-incQty;
if(bzLen>0){
if(newList.length>=10 || this.form.parcelQty>=10){
let newItem=Object.assign({},zeroItem);
newItem.cargoQty=bzLen;
newList.push(newItem);
}else{
for(let i=0;i<bzLen;i++){
let newItem=Object.assign({},zeroItem);
newList.push(newItem);
}
}
}
this.form.cargoList=newList;
}
}else{
this.form.cargoList=[];
}
},
handleCargoQtyChangeDebounce(row){
// 控制触发频率
debounce(250, this.handleCargoQtyChange(row))
},
handleCargoQtyChange(row){
this.handleGenSubbill();
this.handleInitGenGoods();
this.handleCalcVolume(row);
},
deleteGoodsItem(row,index){
this.$confirm('确定删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.form.cargoList.splice(index,1)
this.handleCalcVolume(row);
}).catch(() => {
})
},
copyGoodsItem(row,index){
let newItem = Object.assign({},row);
newItem.cargoQty=1;
this.form.cargoList.splice(index+1, 0, newItem);
// this.form.cargoList.push(newItem);
handleCargoQtyChange();
},
showLocalTime(){
},
/** 鼠标移入cell */
handleGoodsCellEnter (row, column, cell, event) {
row.isEdit = true
},
/** 鼠标移出cell */
handleGoodsCellLeave (row, column, cell, event) {
row.isEdit = false
},
// 实时获取运单号
handleBillCodeChange(checked,item){
if(checked){
let useSiteCode=this.form.sendSiteCode;
realMatchWaybill(useSiteCode).then(response => {
this.form.billCode=response.data;
this.initGetTotalAvailablePag(this.form.sendSiteCode);
this.handleGenSubbill();
});
}else{
this.form.billCode=""
}
},
}
};
</script>
<style lang="scss">
.el-form-item__label {
color: #000;
}
.el-input-group__append {
padding: 0 4px;
}
.el-row{
display:flex;
flex-wrap: wrap;
// padding-right: 10px;
}
.el-form-item__label {
font-size: 12px!important;
}
.platform-auto-complete {
.el-autocomplete-suggestion__wrap {
padding: 5px 0;
ul li {
pointer-events: none; // 阻止可点击事件
.default {
text-align: center;
color: #999;
}
&:hover {
background-color: #fff;
}
}
}
}
.el-collapse {
border-top: none!important;
border-bottom: none!important;
}
.el-table .el-table__cell:first-child .cell {
padding: 0px;
}
.el-table .cell {
padding: 0px;
}
.cargoList{
.el-input__inner {
height: 28px;
line-height: 28px;
border: none;
background: #ffffcd;
font-size: 10px;
padding: 0px;
text-align: center;
}
}
.el-collapse-item__content {
padding-bottom: 0px;
}
.el-collapse-item__header{
pointer-events: none;
}
.el-collapse-item__arrow {
pointer-events: auto;
}
</style>