<template> <view> <dHeader :title="$lang.lang.index.price"></dHeader> <view class="start-bar"></view> <view class="corder bgf"> <view class="corder-tab1"> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/corder-1-3.png" mode=""></image> <text><span class="redcolor">*</span>{{$lang.lang.price.startCity}}</text> <picker :class="config.tradeCity1.index == 0 ? 'v-picker v-picker-2' : 'v-picker'" :value="config.tradeCity1.index" :range="config.tradeCity1.label" data-config="tradeCity1" data-key="departureId" @change="configChange" v-if="config.tradeCity1.value.length > 0"> <view class="uni-input">{{config.tradeCity1.label[config.tradeCity1.index]}}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/corder-1-4.png" mode=""></image> <text><span class="redcolor">*</span>{{$lang.lang.price.endCity}}</text> <picker :class="config.tradeCity2.index == 0 ? 'v-picker v-picker-2' : 'v-picker'" :value="config.tradeCity2.index" :range="config.tradeCity2.label" data-config="tradeCity2" data-key="objectiveId" @change="configChange" v-if="config.tradeCity2.value.length > 0"> <view class="uni-input">{{config.tradeCity2.label[config.tradeCity2.index]}}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/shop_icon.png" mode=""></image> <text><span class="redcolor">*</span>{{$lang.lang.price.name}}</text> <cuihai-combox style="width: 57%;" :label="$lang.lang.notices.please" :emptyTips="$lang.lang.create.noSelect" :placeholder="$lang.lang.notices.please" :candidates="config.productZh.label" @getValue="getValue"></cuihai-combox> <!-- <picker :class="config.productZh.index == 0 ? 'v-picker v-picker-2' : 'v-picker'" :value="config.productZh.index" :range="config.productZh.label" data-config="productZh" data-key="prodId" @change="configChange" v-if="config.productZh.value.length > 0"> <view class="uni-input">{{config.productZh.label[config.productZh.index]}}</view> </picker> --> <!-- <image class="rgt" src="../../static/img/rgt.png" mode=""></image> --> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/corder-1-1.png" mode=""></image> <text>{{$lang.lang.price.transport}}</text> <picker :class="config.transport.index == 0 ? 'v-picker v-picker-2' : 'v-picker'" :value="config.transport.index" :range="config.transport.label" data-config="transport" data-key="transportId" @change="configChange" v-if="config.transport.value.length > 0"> <view class="uni-input">{{config.transport.label[config.transport.index]}}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> <view class="corder-tab1-item corder-picker" v-if="!channeled"> <image src="../../static/img/corder-1-2.png" mode=""></image> <text>{{$lang.lang.price.channel}}</text> <picker :class="config.channel.index == 0 ? 'v-picker v-picker-2' : 'v-picker'" :disabled="channeled" :value="config.channel.index" :range="config.channel.label" data-config="channel" data-key="channelId" @change="configChange" v-if="config.channel.value.length > 0"> <view class="uni-input">{{config.channel.label[config.channel.index]}}</view> </picker> <image class="rgt" src="../../static/img/rgt.png" mode=""></image> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/weight_icon.png" mode=""></image> <text><span class="redcolor">*</span>{{$lang.lang.price.weight}}</text> <input v-model="params.weight" type="number"/> <text class="weight_unit">kg</text> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/weight_icon.png" mode=""></image> <text>{{$lang.lang.price.num}}<span class="redcolor">*</span></text> <input v-model="params.num" type="number"/> </view> <view class="corder-tab1-item corder-picker"> <image src="../../static/img/weight_icon.png" mode=""></image> <text><span class="redcolor">*</span>{{$lang.lang.price.sum}}</text> <input v-model="params.quantity" type="number"/> </view> <view class="shop_info"> <view class="shop_l"> <text><span class="redcolor">*</span>{{$lang.lang.price.long}}</text> <input v-model="params.long" type="number" /> <text class="shop_unit">cm</text> </view> <view class="shop_l"> <text><span class="redcolor">*</span>{{$lang.lang.price.width}}</text> <input v-model="params.wide" type="number" /> <text class="shop_unit">cm</text> </view> <view class="shop_l"> <text><span class="redcolor">*</span>{{$lang.lang.price.high}}</text> <input v-model="params.high" type="number" /> <text class="shop_unit">cm</text> </view> </view> </view> </view> <view class="pirce_btn" @click="toSearch"> {{$lang.lang.price.price}} </view> <view class="corder bgf result"> <view class="result_list" v-for="(item,index) in result" :key="index"> <view class="result_title">{{index+1}}</view> <view class="result_info"> <view> <text>{{$lang.lang.price.transport}} : </text> <text>{{getConfigLabel('transport',item.transportId)}}</text> </view> <view v-if="!channeled"> <text>{{$lang.lang.price.channel}} : </text> <text>{{getConfigLabel('channel',item.channelId)}}</text> </view> <view> <text>{{$lang.lang.price.startLetive}} : </text> <text>{{($lang.locale=='zh'?item.startTitleZh:item.startTitleEn)||$lang.lang.orderInfo.no}}</text> </view> <view> <text>{{$lang.lang.price.endLetive}} : </text> <text>{{($lang.locale=='zh'?item.destTitleZh:item.destTitleEn)||$lang.lang.orderInfo.no}}</text> </view> <view> <text>{{item.charging==0?$lang.lang.price.fee:$lang.lang.price.allPrice}} : </text> <text v-if="item.seaFreight>0">{{item.seaFreight}}{{getCurrencyName(item.seaFreightCurrency)}}/{{getVolume(item.seaFreightVolume)}}</text> <text v-else>{{$lang.lang.price.noPrice}}</text> </view> <view v-if="item.charging==0"> <text>{{$lang.lang.create.clearFee}} : </text> <text v-if="item.seaFreight>0">{{item.clearanceFreight}}{{getCurrencyName(item.clearanceFreightCurrency)}}/{{getVolume(item.clearanceFreightVolume)}}</text> <text v-else>{{$lang.lang.price.noPrice}}</text> </view> <view v-if="item.charging==0" class="price_view"> <text>{{$lang.lang.price.forecastFee}} : </text> <view class="price_list" v-if="item.seaFreightCurrency!=item.clearanceFreightCurrency"> <text>{{parseInt(item.estSeaFreight)}}{{getCurrencyName(item.seaFreightCurrency)}}</text> <text>{{parseInt(item.estClearanceFreight)}}{{getCurrencyName(item.clearanceFreightCurrency)}}</text> </view> <text v-else>{{parseInt(item.estSeaFreight)+parseInt(item.estClearanceFreight)}}{{getCurrencyName(item.seaFreightCurrency)}}</text> </view> <view v-if="item.charging==1"> <text>{{$lang.lang.price.forecastFee}} : </text> <text>{{parseInt(item.estSeaFreight)}}{{getCurrencyName(item.seaFreightCurrency)}}</text> </view> </view> </view> </view> <view class="footer"> <view class="notice_text">{{$lang.lang.price.warmPrompt}}</view> <image class="price_notice" src="../../static/img/price_notice.png" mode="widthFix"></image> <image class="price_icon" src="../../static/img/price_icon.png" mode="widthFix"></image> <view class="notice_content"> <view class="text" v-html="leviteInfo"></view> <!-- <text>1.以上报价仅供参考,实际计费以装箱打包后的实重或轻泡体积重 来计算。</text> <text>2.请注意渠道的选择,不同的东西选择不同的渠道价格就不同。</text> <text>3.报价不含目的地关税,不含偏远或超重超长费。</text> <text>4.包裹赔偿方法:包裹在运输途中发生丢失,我司将会按照包裹购 买价值原价赔偿,但最高赔偿为包裹USD100/票,若包裹价值比 较昂贵的请自行购买保险。若出现外包装完好,但内件损坏, 我司不予赔偿。若出现外包装破损,请在签收前立即开箱检查包裹, 并向快递员取证,以便后期进行索赔。</text> <text>5.本公司拒绝接收国家明令禁止的物品,如:易燃易爆品、毒品、 刀具、枪支弹药及配件、淫秽、反动刊物等,若出现夹带被海关 查获,由此产生的责任由客户自行承担!</text> --> </view> </view> </view> </template> <script> import dHeader from '../../components/dHeader/index.vue' import cuihaiCombox from '../../components/cuihai-combox/cuihai-combox.vue' export default { components: { dHeader,cuihaiCombox }, data() { return { config: { transport:{ index: 0, label: [this.$lang.lang.notices.please], value: [''], cssClass:[''] }, channel:{ index: 0, label: [this.$lang.lang.notices.please], value: [''], }, tradeCity1: { index: 0, label: [this.$lang.lang.notices.please], value: [''], }, tradeCity2: { index: 0, label: [this.$lang.lang.notices.please], value: [''], }, productZh:{ index: 0, label: [this.$lang.lang.notices.please], value: [''], labelZh:[''], labelEn:[''] }, }, params:{ departureId:'', objectiveId:'', prodId:'', transportId:'', channelId:'', weight:null, num:null, quantity:null, long:null, wide:null, high:null, }, result:[], noticeData:'', channeled:true, currency:[], leviteInfo:'', volumeList:[] } }, onLoad() { this.orderConfig('transport_type', 'transport') this.getTradeCity('tradeCity1') this.getTradeCity('tradeCity2') this.getproductData() this.getChanel() this.getCurrency() this.getvolumeData() this.getLeviteData() }, methods: { getLeviteData () { this.$request.get('/app-api/system/need-know/getByKey',{key:'pricequery'}).then(res => { if(res.code == 0 && res.data){ if(this.$lang.locale=='zh'){ this.leviteInfo = res.data.contentZh }else{ this.leviteInfo = res.data.contentEn } } }) }, getValue(e) { if(e){ var sindex = 0 this.config.productZh.label.forEach((item,index)=>{ if(item == e){ sindex = index } }) console.log(sindex) this.params.prodId = this.config['productZh'].value[sindex] console.log(this.params.prodId) this.params.prodTitleZh =this.config['productZh'].labelZh[sindex] this.params.prodTitleEn =this.config['productZh'].labelEn[sindex] this.config['productZh'].index = sindex } }, //获取始发、目的城市 getTradeCity(key){ let that = this let type = key == 'tradeCity1' ? 2 : 1 that.$request.get('/app-api/ecw/region/getTradeCityList', {type: type}).then(res => { if(res.code==0&&res.data.length > 0){ let d = res.data for(let i in d){ if(that.$lang.locale=='zh'){ that.config[key].label.push(d[i].titleZh) }else{ that.config[key].label.push(d[i].titleEn) } that.config[key].value.push(d[i].id) } } }) }, getCurrencyName(id){ let that = this var val = that.currency.find(item=>item.id == id) if(val) { if(that.$lang.locale=='zh'){ return val.titleZh }else{ return val.titleEn } } }, getVolume(id){ let that = this var val = that.volumeList.find(item=>item.id == id) if(val) { if(that.$lang.locale=='zh'){ return val.titleZh }else{ return val.titleEn } } }, getvolumeData(){ this.$request.get('/app-api/app/unit/list').then(res => { if(res.code==0&&res.data&&res.data.length>0){ this.volumeList = res.data } }) }, getCurrency(){ this.$request.get('/app-api/ecw/currency/list').then(res => { if(res.code==0&&res.data&&res.data.length>0){ this.currency = res.data } }) }, getConfigLabel(key,data){ var indexs = 0 this.config[key].value.forEach(function(item,index){ if(item == data){ indexs = index } }) return this.config[key].label[indexs] }, orderConfig (field, key) { let that = this that.$request.getConfig(field).then(res => { if(res.data.list.length > 0){ let d = res.data.list for(let i in d){ if(that.$lang.locale=='zh'){ that.config[key].label.push(d[i].label) }else{ that.config[key].label.push(d[i].labelEn) } that.config[key].value.push(d[i].value) if(key == 'transport'){ that.config[key].cssClass.push(d[i].cssClass) } } } }) }, configChange (e){ this.params[e.target.dataset.key] = this.config[e.target.dataset.config].value[e.detail.value] this.config[e.target.dataset.config].index = e.detail.value if(e.target.dataset.key == 'transportId'){ if(this.config[e.target.dataset.config].cssClass[e.detail.value] == 'channel'){ this.channeled = false }else{ this.config.channel.index = 0 this.channeled = true } } }, //获取出货渠道 getChanel(){ let that = this that.$request.get('/app-api/ecw/channel/select').then(res => { if(res.code==0&&res.data.length > 0){ let d = res.data for(let i in d){ if(that.$lang.locale=='zh'){ that.config['channel'].label.push(d[i].nameZh) }else{ that.config['channel'].label.push(d[i].nameEn) } that.config['channel'].value.push(d[i].channelId) } } }) }, //获取商品名 getproductData(){ let that = this that.$request.get('/app-api/ecw/product/list').then(res => { if(res.code==0&&res.data.length > 0){ let d = res.data that.productData = res.data for(let i in d){ that.config['productZh'].label.push(d[i].titleZh+'('+d[i].titleEn+')') that.config['productZh'].labelZh.push(d[i].titleZh) that.config['productZh'].labelEn.push(d[i].titleEn) that.config['productZh'].value.push(d[i].id) } } }) }, toSearch(){ if(this.params.departureId==''||this.params.departureId==null){ return uni.showToast({ title: this.$lang.lang.notices.startCity, icon: 'error', }) } if(this.params.objectiveId==''||this.params.objectiveId==null){ return uni.showToast({ title: this.$lang.lang.notices.endCity, icon: 'error', }) } if(!this.params.prodId){ return uni.showToast({ title: this.$lang.lang.notices.shopname, icon: 'error', }) } if(!this.params.weight&&this.params.weight<=0){ return uni.showToast({ title: this.$lang.lang.notices.weight, icon: 'error', }) } if(!this.params.num&&this.params.num<=0){ return uni.showToast({ title: this.$lang.lang.notices.num, icon: 'error', }) } if(!this.params.quantity&&this.params.quantity<=0){ return uni.showToast({ title: this.$lang.lang.notices.goodsSum, icon: 'error', }) } if(!this.params.long&&this.params.long<=0){ return uni.showToast({ title: this.$lang.lang.notices.long, icon: 'error', }) } if(!this.params.wide&&this.params.wide<=0){ return uni.showToast({ title: this.$lang.lang.notices.wide, icon: 'error', }) } if(!this.params.high&&this.params.high<=0){ return uni.showToast({ title: this.$lang.lang.notices.height, icon: 'error', }) } if(this.params.long&&this.params.wide&&this.params.high){ this.params.boxGauge = this.params.long+'*'+this.params.wide+'*'+this.params.high } this.$request.post('/app-api/product/line/price/calculation/prod-fee-List',this.params).then(res => { if(res.code==0&&res.data){ var transId = this.config['transport'].value[this.config['transport'].index] var chanId = this.config['channel'].value[this.config['channel'].index] // this.reset() this.result = res.data if(res.data.length==0){ uni.showToast({ title:this.$lang.lang.notices.noLined, icon:'none' }) }else{ this.result.forEach((item,index)=>{ if(item.lineId){ this.getLineData(item.lineId,index) } if(!item.transportId){ item.transportId = transId } if(!item.chanId){ item.channelId = chanId } }) } }else{ uni.showToast({ title:res.msg, icon:'none' }) } }) }, reset(){ this.result = [] this.params = { departureId:'', objectiveId:'', prodId:'', transportId:'', channelId:'', weight:null, num:null, quantity:null, long:null, wide:null, high:null, } this.config.transport.index = 0 this.config.channel.index = 0 this.config.tradeCity1.index = 0 this.config.tradeCity2.index = 0 this.config.productZh.index = 0 }, getLineData(lineId,index){ let that = this that.$request.post('/app-api/ecw/warehouse/openedRouterList',{lineId:lineId}).then(res => { if(res.code==0&&res.data&&res.data.length>0){ if(that.$lang.locale=='zh'){ that.result[index].startTitleZh = res.data[0].startTitleZh that.result[index].destTitleZh = res.data[0].destTitleZh }else{ that.result[index].startTitleZh = res.data[0].startTitleEn that.result[index].destTitleZh = res.data[0].destTitleEn } } }) } } } </script> <style> @import url(../../static/css/price.css); </style>