Commit cfcfa44c authored by dragondean@qq.com's avatar dragondean@qq.com

订单报价单等优化和修复bug

parent 9e08d3dc
<template>
<el-dialog title="选择联系人" visible :before-close="closeDialog" :close-on-click-modal="false">
<div class="header mb-10">
<div class="header mb-10 flex-center">
<div class="flex-center">关键字:</div>
<el-input v-model="form.searchKey" placeholder="" class="w-200"></el-input>
<el-button type="primary" class="ml-10" @click="handleQuery">搜索</el-button>
......
......@@ -16,7 +16,7 @@
:value="index">
</el-option>
</el-select>
<el-button v-if="quickable" type="text" @click="showQuickCreate=true" class="ml-10">{{$t('快速新建')}}</el-button>
<!-- <el-button v-if="quickable" type="text" @click="showQuickCreate=true" class="ml-10">{{$t('快速新建')}}</el-button> -->
<!-- <quick-create v-if="showQuickCreate" @success="onQuickCreateSuccess" @close="showQuickCreate=false" :default="{type}"></quick-create> -->
</div>
......@@ -33,7 +33,7 @@ export default {
type: Boolean,
default: true
},
type: [String, Number], // 客户类别,新建时指定默认类别,也可以根据需要筛选联系人所属的客户类别
type: String, // 客户类别,新建时指定默认类别,也可以根据需要筛选联系人所属的客户类别
},
data(){
return {
......@@ -78,19 +78,10 @@ export default {
const QuickCreateComp = Vue.extend(QuickCreateCustomer)
const dialog = new QuickCreateComp({
propsData:{
default: {type: this.type}
type: this.type
},
})
/* dialog.$on = () => {
return {
success: this.onQuickCreateSuccess,
close: () => {
console.log('关闭拉')
this.showQuickCreate = false
}
}
} */
dialog.$on('close', () => {
console.log('关闭拉')
this.showQuickCreate = false
......@@ -104,17 +95,8 @@ export default {
dialog.$mount()
console.log({
dialog,
parent: this
})
window.dialogComp = dialog
document.body.append(dialog.$el)
/* dialog.remove = () => {
console.log('关闭拉11')
document.body.removeChild(dialog.$el)
} */
}
},
created(){
......@@ -145,9 +127,11 @@ export default {
.then(res => this.list = res.data)
.finally(() => this.loading = false)
},
onQuickCreateSuccess(id){
onQuickCreateSuccess(data){
this.showQuickCreate = false
getCustomerContactsListByCustomer({customerId: id}).then(res => {
this.list.unshift(data)
this.index = 0
/* getCustomerContactsListByCustomer({customerId: id}).then(res => {
if(!res.data || !res.data.length){
return this.$message.error(this.$t('联系人信息获取失败'))
}
......@@ -155,7 +139,7 @@ export default {
data.contactsName = data.name // 字段名跟getCustomerContactsSelect对齐
this.list.unshift(data)
this.index = 0
})
}) */
}
}
}
......
<template>
<div class="dict-selector">
<el-select v-if="formType == 'select'" v-model="valueSync" :placeholder="placeholder" clearable :multiple="multiple" :disabled="disabled" @change="val => $emit('change', val)">
<el-select v-if="formType == 'select'" v-model="valueSync" :placeholder="placeholder" :clearable="clearable" :multiple="multiple" :disabled="disabled" @change="val => $emit('change', val)">
<el-option v-for="dict in formattedList"
:key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/>
</el-select>
......@@ -52,7 +52,8 @@ export default {
filter: {
type: Function,
default: () => true
}
},
clearable: Boolean
},
data(){
return {
......
......@@ -41,7 +41,6 @@ export default {
},
watch:{
index(val){
let productId = val !== '' && val !== null ? this.list[val].id : null
console.log('index val', val, productId)
this.$emit('input', productId)
......@@ -50,15 +49,7 @@ export default {
},
value(val){
console.log('初始化内容', val)
/* let index = this.list.findIndex(item => item.id == val)
if(index < 0){
getProduct(val).then(res => {
this.list.unshift(res.data)
this.index = 0
})
} */
this.init()
}
},
created(){
......@@ -67,14 +58,17 @@ export default {
},
methods:{
init(){
if(!this.value) return null
if(!this.value){
this.index = null
return
}
let index = this.list.findIndex(item => item.id == this.value)
if(index < 0){
getProduct(this.value).then(res => {
this.list.unshift(res.data)
this.index = 0
})
}
}else this.index = index
},
remoteMethod(keyword){
let params = {
......
......@@ -73,14 +73,15 @@ export default {
},
// 表单校验
rules: {
name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
'customerContacts.0.phoneNew': [{ required: true, message: "手机号不能为空", trigger: "blur" }],
type: [{ required: true, message: "客户类别不能为空", trigger: "blur" }],
createTime: [{ required: true, message: "创建时间不能为空", trigger: "blur" }],
source: [{ required: true, message: "客户来源不能为空", trigger: "blur" }],
customerService: [{ required: true, message: "客户经理不能为空", trigger: "blur" }],
status: [{ required: true, message: "客户状态不能为空", trigger: "blur" }],
founder: [{ required: true, message: "创建人不能为空", trigger: "blur" }],
name : [{ required: true, message: this.$t("客户名称不能为空"), trigger: "blur" }],
'customerContacts.0.phoneNew' : [{ required: true, message: this.$t("手机号不能为空"), trigger: "blur" }],
'customerContacts.0.name' : [{ required: true, message: this.$t("联系人不能为空"), trigger: "blur" }],
type : [{ required: true, message: this.$t("客户类别不能为空"), trigger: "blur" }],
createTime : [{ required: true, message: this.$t("创建时间不能为空"), trigger: "blur" }],
source : [{ required: true, message: this.$t("客户来源不能为空"), trigger: "blur" }],
customerService : [{ required: true, message: this.$t("客户经理不能为空"), trigger: "blur" }],
status : [{ required: true, message: this.$t("客户状态不能为空"), trigger: "blur" }],
founder : [{ required: true, message: this.$t("创建人不能为空"), trigger: "blur" }],
},
serviceUserList: [],
countryList: [],
......@@ -121,7 +122,7 @@ export default {
// 添加的提交
createCustomer(this.form).then(res => {
this.$modal.msgSuccess("新增成功");
return getCustomerContactsSelect({ids: res.data})
return getCustomerContactsSelect({customerId: res.data})
}).then(res => {
this.$emit('success', res.data[0])
})
......
......@@ -11,17 +11,17 @@
<el-option
v-for="(item, index) in list"
:key="item.id"
:label="`${item.name}(${item.number})`"
:label="$l(item, 'company') + '('+item.companyCode+')'"
:value="index">
</el-option>
</el-select>
</template>
<script>
import {getSupplier, getSupplierPage} from '@/api/ecw/supplier'
// TODO 接口暂不支持关键词搜索,待接口支持后完善
export default {
props:{
productType: [String, Number],
companyType: [String, Number],
value: [String, Number]
},
data(){
......@@ -41,6 +41,7 @@ export default {
}
},
created(){
this.remoteMethod('')
this.init()
},
methods:{
......@@ -52,14 +53,16 @@ export default {
this.list.unshift(res.data)
this.index = 0
})
}
}else this.index = index
},
remoteMethod(keyword){
let params = {}
params.searchKey = keyword
let params = {
pageSize: 100
}
params.keyword = keyword
this.loading = true
getSupplierPage(params)
.then(res => this.list = res.data)
.then(res => this.list = res.data.list)
.finally(() => this.loading = false)
}
}
......
......@@ -60,8 +60,8 @@
<!-- <el-select v-model="item.fullCurrencyId" style="width:100px" >
<el-option v-for="item in currencyList" :key="item.id" :label="item.titleZh" :value="item.id" />
</el-select> -->
<selector v-if="[2,4,5].indexOf(form.type) > -1" v-model="item.fullCurrencyId" :options="currencyList" label-field="titleZh" value-field="id" defaultable style="width:100px" />
<selector v-if="form.type == 3" v-model="item.prodUnit" :options="unitList" label-field="titleZh" value-field="id" defaultable style="width:100px" />
<selector v-if="[4,5].indexOf(form.type) > -1" v-model="item.fullCurrencyId" :options="currencyList" label-field="titleZh" value-field="id" defaultable style="width:100px" />
<selector v-if="form.type == 2" v-model="item.combUnit" :options="combUnitList" label-field="label" value-field="value" defaultable style="width:100px" />
<span v-if="[2].indexOf(form.type) > -1"></span>
<span v-if="[4].indexOf(form.type) > -1">折扣率</span>
......@@ -267,7 +267,12 @@ export default {
status: 1,
},
// 表单校验
rules: {},
rules: {
isCargoControl: [{required: true, message: '请选择是否控货'}],
brand: [{required: true, message: '请选择品牌'}],
orderAttr: [{required: true, message: '请选择订单属性'}],
documentDeclaration: [{required: true, message: '请选择单证报关'}]
},
currencyList:[],
/* clearanceFeeList:[{},{}],
freightFeeList:[{},{}],
......@@ -317,12 +322,29 @@ export default {
})
}
return costType
},
// 满减组合单位列表
combUnitList(){
let arr = []
this.currencyList.forEach(item => {
arr.push({
label: this.$l(item, 'title'),
value: 'fullCurrencyId_' + item.id
})
})
this.unitList.forEach(item => {
arr.push({
label: this.$l(item, 'title'),
value: 'prodUnit_' + item.id
})
})
return arr
}
},
watch:{
'form.type'(val){
// 方数满减3和特价6需要单位
if((val == 3 || val == 6) && !this.unitList.length){
if((val == 3 || val == 6 || val == 2) && !this.unitList.length){
this.getUnitList()
}
......@@ -429,7 +451,13 @@ export default {
return this.$message('暂无费用设置')
}
// 非有优惠券需要把运费和清关费一起提交
let discountDetailedVOs = this.costType == 3 ? this.fee[3] : this.fee[1].concat(this.fee[2])
let discountDetailedVOs = this.costType == 3 ? this.fee[3] : this.fee[1].concat(this.fee[2]).filter(item => item.netReceiptsAmount || item.fullAmount)
discountDetailedVOs.map(item => {
if(item.combUnit){
let tmp = item.combUnit.split('_')
item[tmp[0]] = tmp[1]
}
})
let data = Object.assign({}, this.form, {discountDetailedVOs})
// 开始时间必填
if(!data.startTime)data.startTime = '2022-01-01 00:00:00'
......
<template>
<div class="app-container">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" inline>
<el-card>
<div slot="header" class="card-title">{{$t('新建报价单')}}</div>
<el-form-item :label="$t('所属人')">
......@@ -10,22 +10,59 @@
<el-radio label="2">{{$t('收件人')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('订单类型')" style="margin-bottom: 0">
<br/>
<el-form-item :label="$t('订单类型')">
<el-checkbox-group v-model="form.type">
<el-checkbox label="1">{{$t('集运服务')}}</el-checkbox>
<!-- <el-checkbox label="2">海外仓</el-checkbox> -->
<el-checkbox label="2">{{$t('海外仓')}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-descriptions :column="3" border>
<div class="form-section">
<el-form-item :label="$t('发货人')" prop="consignorId" >
<div class="contact">
<el-input v-model="form.consignorName" placeholder="选择或新建" disabled/>
<img src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignor'" />
<img src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='1'" />
</div>
</el-form-item>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone">
<!-- <area-code-selector v-model="form.consignorCountryCode" class="w-200 mr-10" disabled /> -->
<el-input :value="form.consignorCountryCode + ' ' + form.consignorPhone" class="w-200" disabled />
</el-form-item>
<el-form-item :label="$t('发货人公司')" prop="consignorCompany">
<el-input v-model="form.consignorCompany" disabled />
</el-form-item>
<el-form-item label="Email" prop="consignorEmail">
<el-input v-model="form.consignorEmail" disabled />
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('收货人')" prop="consigneeId">
<div class="contact">
<el-input v-model="form.consigneeName" placeholder="请选择或新建" :disabled="true"/>
<img src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignee'" />
<img src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='2'" />
</div>
</el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consigneePhone">
<!-- <area-code-selector v-model="form.consigneeCountryCode" class="w-200 mr-10" disabled/> -->
<el-input :value="form.consigneeCountryCode + ' ' + form.consigneePhone" class="w-200" disabled/>
</el-form-item>
<el-form-item :label="$t('收货人公司')" prop="consigneeCompany">
<el-input v-model="form.consigneeCompany" :disabled="true" />
</el-form-item>
<el-form-item label="Email" prop="consigneeEmail">
<el-input v-model="form.consigneeEmail" :disabled="true"/>
</el-form-item>
</div>
<!-- <el-descriptions :column="3" border>
<el-descriptions-item :label="$t('*发货人')" :labelStyle="labelStyle" >
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consignorId" required :error="$t('发货人不能为空')">
<customer-contact-selector v-model="form.consignorId" @change="consignor = $event" />
<customer-contact-selector v-model="form.consignorId" @change="consignor = $event" type="1" />
</el-form-item>
</el-descriptions-item>
<!-- <el-descriptions-item label="发货人" :labelStyle="labelStyle">
{{consignor.contactsName || ''}}
</el-descriptions-item> -->
<el-descriptions-item :label="$t('手机号')" :labelStyle="labelStyle">
{{consignor.areaCode}} {{consignor.phoneNew || this.$t('')}}
</el-descriptions-item>
......@@ -34,24 +71,15 @@
</el-descriptions-item>
<el-descriptions-item label="Email" :labelStyle="labelStyle">
{{consignor.email || this.$t('')}}
</el-descriptions-item><!--
<el-descriptions-item label="社交软件">
{{consignor.social}} {{consignor.socialNumber}}
</el-descriptions-item>
<el-descriptions-item label="联系地址">
{{consignor.address || ''}}
</el-descriptions-item> -->
</el-descriptions>
<el-descriptions :column="3" border>
<el-descriptions-item :label="$t('收货人')" :labelStyle="labelStyle">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeId" required :error="$t('收货人不能为空')">
<customer-contact-selector v-model="form.consigneeId" @change="consignee = $event" />
<customer-contact-selector v-model="form.consigneeId" @change="consignee = $event" type="2" />
</el-form-item>
</el-descriptions-item>
<!-- <el-descriptions-item label="收货人" :labelStyle="labelStyle">
{{consignee.contactsName || ''}}
</el-descriptions-item> -->
<el-descriptions-item :label="$t('手机号')" :labelStyle="labelStyle">
{{consignee.areaCode}} {{consignee.phoneNew}}
</el-descriptions-item>
......@@ -60,64 +88,48 @@
</el-descriptions-item>
<el-descriptions-item label="Email" :labelStyle="labelStyle">
{{consignee.email || this.$t('')}}
</el-descriptions-item><!--
<el-descriptions-item label="社交软件">
{{consignee.social}} {{consignee.socialNumber}}
</el-descriptions-item>
<el-descriptions-item label="联系地址">
{{consignee.address || ''}} // TODO
</el-descriptions-item> -->
</el-descriptions>
</el-descriptions> -->
<el-descriptions :column="2" border>
<el-descriptions-item :label="$t('运输方式')" :labelStyle="labelStyle">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="transportId" required :error="$t('请选择运输方式')">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" @input="calculationPrice" />
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('出货渠道')" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" :labelStyle="labelStyle">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="channelId" :required="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" :error="$t('请选择出货渠道')">
<selector
:disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'"
v-model="form.channelId"
:options="channelList"
value-field="channelId"
label-field="nameZh"
@input="calculationPrice"
></selector>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="2" border>
<el-descriptions-item :label="$t('始发城市')" :labelStyle="labelStyle">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="departureId" required :error="$t('始发地必选')">
<el-select v-model="form.departureId" :placeholder="$t('请选择始发地')">
<el-option v-for="item in expoerCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('目的城市')" :labelStyle="labelStyle">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="objectiveId" required :error="$t('目的城市必选')">
<el-select v-model="form.objectiveId" :placeholder="$t('请选择始发地')">
<el-option v-for="item in importCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('请选择线路')" :span="2" :labelStyle="labelStyle">
<el-row :gutter="10">
<el-col :span="12">
<el-input :value="getRouterNameById(form.lineId)" readonly :placeholder="$t('请在右侧选择线路')"></el-input>
</el-col>
<el-col :span="12">
<select size="5" v-model="form.lineId" style="min-width: 300px" @change="calculationPrice">
<template v-for="item in routerList">
<option :value="item.id" :key="item.id">{{item.startTitleZh}} >> {{item.destTitleZh}}</option>
</template>
</select>
</el-col>
</el-row>
</el-descriptions-item>
</el-descriptions>
<div class="form-section">
<el-form-item :label="$t('运输方式')" prop="transportId">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" @input="calculationPrice" />
</el-form-item>
<el-form-item :label="$t('出货渠道')" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" prop="channelId">
<selector
:disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'"
v-model="form.channelId"
:options="channelList"
value-field="channelId"
label-field="nameZh"
@input="calculationPrice"
></selector>
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('始发城市')" prop="departureId">
<el-select v-model="form.departureId" :placeholder="$t('请选择始发地')">
<el-option v-for="item in exportCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="objectiveId">
<el-select v-model="form.objectiveId" :placeholder="$t('请选择目的地')">
<el-option v-for="item in importCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('选择线路')" prop="lineId">
<!-- <el-input :value="getRouterNameById(form.lineId)" readonly :placeholder="$t('请在右侧选择线路')"></el-input> -->
<el-input :value="selectedRouter ? $l(selectedRouter, 'startTitle') + ' > ' + $l(selectedRouter, 'destTitle') : ''" disabled :placeholder="$t('请在右侧选择线路')"></el-input>
</el-form-item>
<select size="5" v-model="form.lineId" style="min-width: 300px; border:1px solid #DCDFE6; border-radius:4px">
<template v-for="item in routerList">
<option :value="item.id" :key="item.id">{{$l(item, 'startTitle')}} >> {{$l(item, 'destTitle')}}</option>
</template>
</select>
</div>
</el-card>
<el-card class="mt-10">
<div slot="header" class="card-title">
......@@ -145,13 +157,6 @@
<dict-selector v-model="row.brand" :type="DICT_TYPE.ECW_IS_BRAND" defaultable @input="calculationPrice" />
</template>
</el-table-column>
<!-- <el-table-column :label="$t('商品类型')" width="160px">
<template slot-scope="{row}">
<selector disabled v-model="row.goodsType" :options="productAttrList" label-field="attrName" value-field="id" @input="calculationPrice"></selector>
</template>
</el-table-column> -->
<el-table-column :label="$t('件数')" width="90px">
<template slot-scope="{row}">
......@@ -168,11 +173,6 @@
<el-input v-model.number="row.quantity" @input="calculationPrice" />
</template>
</el-table-column>
<!-- <el-table-column :label="$t('箱规') + '(m)'" width="120px">
<template slot-scope="{row}">
<el-input v-model="row.boxGauge" @input="calcVolume(row);calculationPrice()" />
</template>
</el-table-column> -->
<el-table-column :label="$t('总体积') + '(m³)'" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.volume" @input="calculationPrice"/>
......@@ -229,51 +229,36 @@
</el-table-column>
<el-table-column :label="$t('快递单号')" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.expressNo" placeholder="缺少字段" />
<el-input v-model="row.expressNo" placeholder="" />
</template>
</el-table-column>
<el-table-column :label="$t('操作')" width="180px" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="delProduct(scope.$index)">{{$t('删除')}}</el-button>
<!-- <el-button size="mini" type="primary" @click="showMorePrice($index)">{{$t('更多报价')}}</el-button> -->
</template>
</el-table-column>
</el-table>
<!--
</el-card>
<el-card class="mt-10"> -->
<div class="card-title" style="padding:20px 0;">{{$t('费用小计')}}</div>
<div class="card-title" style="padding:20px 0;">{{$t('计')}}</div>
<el-descriptions :column="4" border>
<el-descriptions-item :label="$t('总件数')">
{{sum.totalNum || 0}}
</el-descriptions-item>
<!-- <el-descriptions-item label="总体积">
<el-descriptions-item label="总体积">
{{sum.totalVolume || 0}}m³
</el-descriptions-item>
<el-descriptions-item label="总重量">
{{sum.totalWeight || 0}}kg
</el-descriptions-item> -->
<el-descriptions-item :label="$t('总货值')">
{{sum.totalWorth || 0}}{{$t('人民币')}}
</el-descriptions-item>
<el-descriptions-item :label="$t('保价费')">
{{fee.insuranceFee || 0}}{{$t('人民币')}}
</el-descriptions-item>
<!-- <el-descriptions-item label="总运费">
<div>{{fee.seaNGN || 0}}泰拉</div>
<div>{{fee.seaRMB || 0}}人民币</div>
<div>{{fee.seaUSD || 0}}美元</div>
<el-descriptions-item label="总数量">
{{sum.totalQuatity || 0}}
</el-descriptions-item>
<el-descriptions-item label="总清关费">
<div>{{fee.clearanceNGN || 0}}泰拉</div>
<div>{{fee.clearanceRMB || 0}}人民币</div>
<div>{{fee.clearanceUSD || 0}}美元</div>
<el-descriptions-item :label="$t('总货值') + '(RMB)'">
{{sum.totalWorth || 0}}{{$t('元')}}
</el-descriptions-item>
<el-descriptions-item label="预计费用">
<div>{{fee.seaNGN + fee.clearanceNGN}}泰拉</div>
<div>{{fee.seaRMB + fee.clearanceRMB + fee.insuranceFee }}人民币</div>
<div>{{fee.seaUSD + fee.clearanceUSD}}美元</div>
</el-descriptions-item> -->
</el-descriptions>
</el-card>
......@@ -282,139 +267,151 @@
<el-descriptions :column="5" border>
<el-descriptions-item :label="$t('保价费')">
{{fee.insuranceFee || 0}} {{$t('人民币')}}
{{fee.insuranceFee || 0}} {{$t('美元')}}
</el-descriptions-item>
<el-descriptions-item :label="$t('总运费')">
<div>{{fee.seaNGN || 0}}{{$t('奈拉')}}</div>
<div>{{fee.seaRMB || 0}}{{$t('人民币')}}</div>
<div>{{fee.seaUSD || 0}}{{$t('美元')}}</div>
<template v-for="item in clearanceFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currentcyMap[item.currencyId]}}</div>
</template>
</el-descriptions-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-descriptions-item :label="$t('总清关费')">
<div>{{fee.clearanceNGN || 0}}{{$t('奈拉')}}</div>
<div>{{fee.clearanceRMB || 0}}{{$t('人民币')}}</div>
<div>{{fee.clearanceUSD || 0}}{{$t('美元')}}</div>
<template v-for="item in freightFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currentcyMap[item.currencyId]}}</div>
</template>
</el-descriptions-item>
<el-descriptions-item :label="$t('其他费用')">
<el-input v-model="form.otherFee" placeholder="" class="w-100 mr-10"></el-input>
<selector v-model="form.otherFeeCurrencyId" :options="currencyList" label-field="titleZh" value-field="id" defaultable class="w-100" />
</el-descriptions-item>
<el-descriptions-item :label="$t('原价')" :span="2">
<!--TODO 缺少字段-->
<div>{{fee.clearanceNGN || 0}}{{$t('奈拉')}}</div>
<div>{{fee.clearanceRMB || 0}}{{$t('人民币')}}</div>
<div>{{fee.clearanceUSD || 0}}{{$t('美元')}}</div>
<template v-for="item in originalFeeList">
<div :key="item.currencyId">{{item.amount || 0}}{{currentcyMap[item.currencyId]}}</div>
</template>
</el-descriptions-item>
</el-descriptions>
<div class="card-title" style="padding:20px 0;">{{$t('优惠信息')}}</div>
<div v-for="(item, index) in couponList" :key="index" style="display:flex;align-items:center">
<div class="w-150">
{{index+1}}.
{{productNames[item.prodId] || $t('未知')}}
</div>
<div class="w-100">
<dict-tag :type="DICT_TYPE.ECW_COUPON_TYPE" :value="item.type" />
</div>
<div style="display:flex; align-items:center">
<el-select :placeholder="$t('请选择优惠')" v-model="item.selectedIndex" :data-type="item.value" clearable class="w-300">
<template v-for="(coupon, couponIndex) in item.options">
<el-option :key="coupon.couponId" :label="coupon.titleZh" :value="couponIndex"></el-option>
<el-table :data="couponList" :show-header="false">
<el-table-column label="">
<template slot-scope="scope">
{{scope.$index+1}}.
{{$l(productNames[scope.row.prodId], 'title') || $t('未知')}}
</template>
</el-select>
<template v-if="item.selectedIndex !== null">
<div class="w-100 ml-20">
-{{item.options[item.selectedIndex].reduceAmount}}
{{currentcyMap[item.options[item.selectedIndex].reduceCurrencyId]}}
</div>
<div class="ml-20">{{$t('有效期')}}{{item.options[item.selectedIndex].endTime || $t('永久有效')}}</div>
</template>
</div>
</div>
</el-table-column>
<el-table-column label="">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_COUPON_TYPE" :value="row.type" />
</template>
</el-table-column>
<el-table-column label="">
<template slot-scope="{row}">
{{$l(row, 'title')}}
</template>
</el-table-column>
<el-table-column label="">
<template slot-scope="{row}">
-{{row.reduceAmount}}
{{currentcyMap[row.reduceCurrencyId]}}
</template>
</el-table-column>
<el-table-column label="">
<template slot-scope="{row}">
{{$t('有效期至')}}{{row.endTime ? row.endTime : $t('永久有效')}}
</template>
</el-table-column>
</el-table>
<el-descriptions :column="1" class="mt-20">
<el-descriptions-item :label="$t('优惠合计')">
<div v-for="(discount, discountIndex) in discountArr" :key="discountIndex">
{{discount.reduceAmount}} {{currentcyMap[discount.reduceCurrencyId]}}
<el-descriptions-item :label="$t('优惠费用')">
<div v-for="(item, discountIndex) in couponTotalAmountList" :key="discountIndex">
{{item.totalAmount}} {{currentcyMap[item.currencyId]}}
</div>
</el-descriptions-item>
<el-descriptions-item :label="$t('预计费用')">
// TODO
<template v-for="item in estimatedCosts">
<div :key="item.currencyId">{{item.amount || 0}}{{currentcyMap[item.currencyId]}}</div>
</template>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt-10">
<div class="card-title" slot="header">{{$t('通用')}}</div>
<el-descriptions :column="2" border>
<el-descriptions-item :label="$t('唛头')">
<div class="form-section">
<el-form-item :label="$t('唛头')" prop="marks">
<el-input v-model="form.marks" placeholder=""></el-input>
</el-descriptions-item>
<el-descriptions-item :label="$t('报关方式')">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('报关方式')" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('预计结束时间')">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('预计结束时间')" prop="stopTime">
<el-date-picker v-model="form.stopTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-descriptions-item>
<el-descriptions-item :label="$t('是否控货')">
</el-form-item>
<el-form-item :label="$t('是否控货')" prop="control">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.control" form-type="radio" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('竞争对手')">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('竞争对手')" prop="competitor">
<el-input v-model="form.competitor" placeholder=""></el-input>
</el-descriptions-item>
<el-descriptions-item :label="$t('重要程度')">
</el-form-item>
<el-form-item :label="$t('重要程度')" prop="importance">
<el-rate v-model="form.importance"></el-rate>
</el-descriptions-item>
<el-descriptions-item :label="$t('价格有效时间')">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('价格有效时间')" prop="startTime">
<el-date-picker v-model="form.startTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
-
</el-form-item>
<el-form-item label="" prop="endTime">
<el-date-picker v-model="form.endTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-descriptions-item>
<el-descriptions-item :label="$t('交货方式')">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('交货方式')">
<!--
接口要求数据为整数,所以增加trade_type类型的字典,用1234代码以下不同类型
FOB(离岸价),CIF(到岸价),CNF(成本加运费),EXW(出厂价)
-->
<dict-selector :type="DICT_TYPE.ECW_TRADE_TYPE" fomtter="number" v-model="form.tradeType" />
<el-input v-model="form.tradeAdress" placeholder=""></el-input>
</el-descriptions-item>
<!-- <el-descriptions-item label="总运费" :span="2">
</el-descriptions-item>
<el-descriptions-item label="总清关费" :span="2">
</el-descriptions-item>
<el-descriptions-item label="总价格" :span="2">
</el-descriptions-item> -->
<!-- <el-descriptions-item label="佣金类型" :span="2">
<dict-selector :type="DICT_TYPE.COMMISSION_TYPE" form-type="radio" fomtter="number" v-model="form.commissionType" defaultable />
</el-descriptions-item> -->
<el-descriptions-item :label="$t('备注')" :span="2">
<el-input v-model="form.remarks" type="textarea" placeholder=""></el-input>
</el-descriptions-item>
</el-descriptions>
</el-form-item>
<el-form-item :label="$t('交货地址')">
<el-input v-model="form.tradeAdress" placeholder="港口或地点"></el-input>
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('备注')" :span="2">
<el-input v-model="form.remarks" type="textarea" placeholder="" style="width:500px; height: 100px"></el-input>
</el-form-item>
</div>
</el-card>
<el-card class="mt-10" v-if="transport">
<div class="card-title" slot="header">{{transport.label}}</div>
<el-form-item :label="$t('快递单号')">
<!-- <el-form-item :label="$t('快递单号')">
<el-input v-model="form.number" :placeholder="$t('请输入购买商品的快递单号')"></el-input>
</el-form-item>
</el-form-item> -->
<el-form-item :label="$t('是否双清')" v-if="[2,3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" />
</el-form-item>
<el-form-item :label="$t('航空公司')" v-if="[3,4].indexOf(+form.transportId) > -1">
<!--待查询备选数据-->
<el-select placeholder="" v-model="form.airlineCompany">
</el-select>
<!-- <el-select placeholder="" v-model="form.airlineCompany">
</el-select> -->
<supplier-selector v-model="form.airlineCompany" companyType="10" />
</el-form-item>
<el-form-item :label="$t('船公司')" v-if="[2].indexOf(+form.transportId) > -1">
<el-select placeholder="" v-model="form.shippingCompany">
</el-select>
<!-- <el-select placeholder="" v-model="form.shippingCompany">
</el-select> -->
<supplier-selector v-model="form.shippingCompany" companyType="9" />
</el-form-item>
<el-form-item :label="$t('清关证书')" v-if="[2,3,4].indexOf(+form.transportId) > -1">
......@@ -430,53 +427,55 @@
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span>
</el-form-item>
<br/>
<el-form-item :label="$t('特殊要求')" >
<dict-selector v-model="form.packageType" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple />
</el-form-item>
<br/>
<el-form-item :label="$t('特殊要求备注')">
<el-input v-model="form.packageRemarks" ></el-input>
</el-form-item>
</el-card>
<el-form-item label="">
<el-form-item label="" class="mt-20">
<el-button type="primary" @click="submitForm">{{$t('确定')}}</el-button>
<el-button @click="$store.dispatch('tagsView/delCurrentView')">{{$t('取消')}}</el-button>
</el-form-item>
</el-form>
<choose-contact-dialog v-if="!!contactChooseType" @choose="onContactChoose" @close="contactChooseType=null" />
<quick-create-customer v-if="quickCreateType" :type="quickCreateType" @success="onContactChoose" @close="quickCreateType=null" />
</div>
</template>
<script>
import { createOffer, updateOffer, getOffer, getProductFeeList, getProductFee } from "@/api/ecw/offer";
import { createOffer, updateOffer, getOffer} from "@/api/ecw/offer";
import ProductSelector from '@/components/ProductSelector'
import {getProductAttrList} from '@/api/ecw/productAttr'
import {getChannelList} from '@/api/ecw/channel'
import Selector from '@/components/Selector'
import CustomerContactSelector from '@/components/CustomerContactSelector'
import {openedRouterList as getOpenedRouterList} from '@/api/ecw/warehouse'
import {getTradeCityList} from '@/api/ecw/region'
import {getDictData} from '@/utils/dict'
import {getCurrencyList} from '@/api/ecw/currency'
import {getUnitList} from '@/api/ecw/unit'
import {calculationPrice} from '@/api/ecw/product'
import {getCustomerAvailableCouponList} from '@/api/ecw/coupon'
import SupplierSelector from '@/components/SupplierSelector'
import ChooseContactDialog from '@/components/ChooseContactDialog'
import QuickCreateCustomer from '@/components/QuickCreateCustomer'
import {getCustomerContactsSelect} from '@/api/ecw/customerContacts'
export default {
name: "OfferEdit",
components: {
ProductSelector, Selector, CustomerContactSelector
ProductSelector, Selector, SupplierSelector,ChooseContactDialog, QuickCreateCustomer
},
data() {
return {
// 遮罩层
loading: true,
// 是否显示弹出层
/* dateRangeStopTime: [],
dateRangeStartTime: [],
dateRangeEndTime: [],
dateRangeCreateTime: [], */
productList:[], // 商品信息
productAttrList:[], // 商品属性
channelList: [], // 出货取到
......@@ -487,7 +486,7 @@ export default {
transportList: [],
currencyList:[],
unitList:[],
couponList: [{"selectedIndex":null,"options":[{"couponId":74,"titleZh":"2-1,5-2","titleEn":"2-1,5-2","type":2,"cashCondition":0,"reduceAmount":3,"reduceCurrencyId":1,"startTime":"2022-01-01 00:00:00","afterReceiveDays":0,"costType":2,"discountDetailed":"[{\"type\": 1, \"fullAmount\": 2, \"reduceAmount\": 1, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 1, \"fullAmount\": 5, \"reduceAmount\": 2, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 2, \"fullAmount\": 2, \"reduceAmount\": 1, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 2, \"fullAmount\": 6, \"reduceAmount\": 3, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}]","discountDetailedVOList":[{"type":1,"fullAmount":2,"fullCurrencyId":1,"reduceAmount":1,"reduceCurrencyId":1},{"type":1,"fullAmount":5,"fullCurrencyId":1,"reduceAmount":2,"reduceCurrencyId":1},{"type":2,"fullAmount":2,"fullCurrencyId":1,"reduceAmount":1,"reduceCurrencyId":1},{"type":2,"fullAmount":6,"fullCurrencyId":1,"reduceAmount":3,"reduceCurrencyId":1}],"isSimilarSuperposition":false,"couponIds":"","suitableUserType":0,"suitableLineType":0,"suitableProdType":0,"limitNum":1,"overdueStatus":true,"putonStatus":1,"getWay":1,"orderAttr":"1,2,3","isSiteContent":false,"brand":"0,1","isCargoControl":"1,0","documentDeclaration":"1,2,3","status":1,"prodList":[],"isDefault":false},{"couponId":73,"titleZh":"3-2,2-1","titleEn":"3-2,2-1","type":2,"cashCondition":0,"reduceAmount":2,"reduceCurrencyId":1,"startTime":"2022-01-01 00:00:00","afterReceiveDays":0,"costType":1,"discountDetailed":"[{\"type\": 1, \"fullAmount\": 2, \"reduceAmount\": 1, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 1, \"fullAmount\": 3, \"reduceAmount\": 2, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 2, \"fullAmount\": 2, \"reduceAmount\": 1, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 2, \"fullAmount\": 3, \"reduceAmount\": 2, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}]","discountDetailedVOList":[{"type":1,"fullAmount":2,"fullCurrencyId":1,"reduceAmount":1,"reduceCurrencyId":1},{"type":1,"fullAmount":3,"fullCurrencyId":1,"reduceAmount":2,"reduceCurrencyId":1},{"type":2,"fullAmount":2,"fullCurrencyId":1,"reduceAmount":1,"reduceCurrencyId":1},{"type":2,"fullAmount":3,"fullCurrencyId":1,"reduceAmount":2,"reduceCurrencyId":1}],"isSimilarSuperposition":false,"couponIds":"","suitableUserType":0,"suitableLineType":0,"suitableProdType":0,"limitNum":1,"overdueStatus":true,"putonStatus":1,"getWay":1,"orderAttr":"1,2,3","isSiteContent":false,"brand":"0,1","isCargoControl":"0,1","documentDeclaration":"1,2,3","status":1,"prodList":[],"isDefault":false},{"couponId":71,"titleZh":"金额满2减1","titleEn":"金额满2减1","type":2,"cashCondition":0,"reduceAmount":5,"reduceCurrencyId":1,"startTime":"2022-01-01 00:00:00","afterReceiveDays":0,"costType":1,"discountDetailed":"[{\"type\": 1, \"fullAmount\": 2, \"reduceAmount\": 1, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}, {\"type\": 1, \"fullAmount\": 10, \"reduceAmount\": 5, \"fullCurrencyId\": 1, \"reduceCurrencyId\": 1}]","discountDetailedVOList":[{"type":1,"fullAmount":2,"fullCurrencyId":1,"reduceAmount":1,"reduceCurrencyId":1},{"type":1,"fullAmount":10,"fullCurrencyId":1,"reduceAmount":5,"reduceCurrencyId":1}],"isSimilarSuperposition":true,"couponIds":"","suitableUserType":0,"suitableLineType":0,"suitableProdType":0,"limitNum":1,"overdueStatus":true,"putonStatus":1,"getWay":1,"orderAttr":"1,2,3","isSiteContent":false,"brand":"0,1","isCargoControl":"1,0","documentDeclaration":"1,2,3","status":1,"prodList":[],"isDefault":false}],"prodId":22,"type":2}],
// couponList: [],
fee: {}, // 费用
// 表单参数
form: {
......@@ -497,17 +496,26 @@ export default {
},
// 表单校验
rules: {
/* number: [{ required: true, message: "报价单号不能为空", trigger: "blur" }],
consignorId: [{ required: true, message: "客户id,发货人不能为空", trigger: "blur" }],
consigneeId: [{ required: true, message: "收货人id不能为空", trigger: "blur" }],
sendstatus: [{ required: true, message: "站内信状态,0未发送,1已发送不能为空", trigger: "blur" }], */
lineId: [{ required: true, message: "请选择线路"}],
consignorId: [{ required: true, message: "发货人不能为空",}],
consigneeId: [{ required: true, message: "收货人不能为空"}],
startTime: [{ required: true, message: "有效期开始时间不能为空"}],
endTime: [{ required: true, message: "有效期结束时间不能为空"}],
transportId: [{ required: true, message: "选择运输方式"}],
channelId: [{ required: true, message: "选择出货渠道"}],
/*sendstatus: [{ required: true, message: "站内信状态,0未发送,1已发送不能为空", trigger: "blur" }], */
},
labelStyle: 'width:120px',
productNames: {} // 品名id和名称对应关系
productNames: {}, // 品名id和名称对应关系
couponAvailableGroupDtoList: [], // 可用优惠
couponTotalAmountList: [], // 优惠总额
contactChooseType: null, // 联系人选择对象consignor(发货人) 或者 consignee(收货人)
quickCreateType: null, // 快速新建客户类型,1发货人,2收货人
getOpenedRouterListHandler: undefined
};
},
computed:{
expoerCityList(){
exportCityList(){
return this.tradeCityList.filter(item => item.type == 2)
},
importCityList(){
......@@ -573,28 +581,67 @@ export default {
return sum
},
// 总有优惠金额
discount(){
let discount = {
// curreny: amount
}
this.couponList.forEach(item => {
if(item.selectedIndex !== null){
let selected = item.options[item.selectedIndex]
if(!discount[selected.reduceCurrencyId]) discount[selected.reduceCurrencyId] = 0
discount[selected.reduceCurrencyId] += selected.reduceAmount
couponList(){
let arr = []
this.couponAvailableGroupDtoList.forEach(item => {
if(item.couponAvailableDtoList && item.couponAvailableDtoList.length){
// 只取第一个
let item = item.couponAvailableDtoList[0]
arr.push({
prodId: item.prodId,
type: it.type,
titleZh: it.titleZh,
titleEn: it.titleEn,
endTime: it.endTime,
reduceAmount: it.reduceAmount,
reduceCurrencyId: it.reduceCurrencyId
})
}
})
return discount
},
discountArr(){
let discount = []
for(let currency in this.discount){
discount.push({
reduceAmount: this.discount[currency],
reduceCurrencyId: currency
})
}
return discount
return arr
},
// 计算返回的费用清单
feeDtoList(){
return this.fee.feeDtoList || []
},
// 清关费
clearanceFeeList(){
return this.feeDtoList.filter(item => item.feeType == 2)
},
// 运费
freightFeeList(){
return this.feeDtoList.filter(item => item.feeType == 1)
},
// 原价(清关费 + 运费)
originalFeeList(){
let arr = []
this.clearanceFeeList.forEach(item => {
let it = {...item}
let freight = this.freightFeeList.find(fee => fee.currencyId == item.currencyId)
if(freight){
it.amount += freight.amount
}
arr.push(it)
})
return arr
},
// 预计费用(原价 - 优惠金额)
estimatedCosts(){
let arr = []
this.originalFeeList.forEach(item => {
let it = {...item}
let coupon = this.couponList.find(coupon => coupon.reduceCurrencyId == item.currencyId)
if(coupon){
it.amount -= coupon.reduceAmount
}
arr.push(it)
})
return arr
},
// 路线开通的服务
routeOtherServices(){
if(!this.selectedRouter || !this.selectedRouter.otherService) return []
return this.selectedRouter.otherService.split(',')
}
/* productKeyd(){
return arrryToKeyedObjectBy(this.productList, 'prodId')
......@@ -617,12 +664,18 @@ export default {
},
'form.lineId'(lineId){
let router = this.routerList.find(item => item.id == lineId)
if(!router) return
this.$set(this.form, 'departureId', router.startCityId)
this.$set(this.form, 'objectiveId', router.destCityId)
// TODO 还需要回填渠道信息,暂时缺少渠道ID
},
fee(){
this.getCoupons()
// 选择的路线变化后,需要判断是否开通了对应的服务,如果没开通需要取消对应的服务选择
selectedRouter(val){
if(!val) return
['1', '4'].forEach(service => {
if(this.routeOtherServices.indexOf(service) < 0 && this.form.type.indexOf(service) > -1){
this.form.type.splice(this.form.type.findIndex(item => item == service), 1)
}
})
}
},
created() {
......@@ -635,7 +688,10 @@ export default {
if(this.$route.query.id){
getOffer(this.$route.query.id).then(res => {
this.$set(this, 'form', res.data)
let formData = res.data
formData.type = formData.type ? formData.type.split(',').filter(item => item != '') : []
this.$set(this, 'form', formData)
if(res.data.offerProdRespVOList){
res.data.offerProdRespVOList.forEach(item => {
this.addProduct({
......@@ -655,12 +711,19 @@ export default {
})
})
}
console.log('res.data.transportRespVOList', res.data.transportRespVOList)
res.data.transportRespVOList.forEach(item => {
// 接口只返回了发货人和收货人ID,还需要调用接口获取详细信息回显
getCustomerContactsSelect({ids: [res.data.consigneeId, res.data.consignorId].join(',')}).then(({data}) => {
this.contactChooseType = 'consignee'
this.onContactChoose(data.find(item => item.customerContactsId == res.data.consigneeId))
this.contactChooseType = 'consignor'
this.onContactChoose(data.find(item => item.customerContactsId == res.data.consignorId))
})
/* res.data.transportRespVOList.forEach(item => {
let transport = this.transportList.find(t => t.transportId == item.transportId)
console.log(item.transportId, transport)
Object.assign(transport, item, {_enabled: true})
})
}) */
/* this.$nextTick(() => {
this.updateEnabledTransports()
}) */
......@@ -668,11 +731,22 @@ export default {
}//else this.addProduct()
},
methods: {
/* onTransportChange(row, val){
this.getProductFee(row)
if(this.getDictData(this.DICT_TYPE.ECW_TRANSPORT_TYPE, val).cssClass != 'channel') row.channelId = null
this.updateEnabledTransports()
}, */
onContactChoose(contact){
console.log('选择联系人', contact)
if(!this.contactChooseType && !this.quickCreateType) return
if(!this.contactChooseType && this.quickCreateType){
this.contactChooseType = this.quickCreateType == 1 ? 'consignor' : 'consignee'
}
this.$set(this.form, this.contactChooseType + 'Company', contact.company)
this.$set(this.form, this.contactChooseType + 'Id', contact.customerContactsId)
this.$set(this.form, this.contactChooseType + 'CountryCode', contact.areaCode)
this.$set(this.form, this.contactChooseType + 'Email', contact.email)
// this.$set(this.form, this.contactChooseType + 'Id', contact.customerId)
this.$set(this.form, this.contactChooseType + 'Name', contact.contactsName)
this.$set(this.form, this.contactChooseType + 'Phone', contact.phoneNew)
this.contactChooseType = null
this.quickCreateType = null
},
/* onProductChange(row, product){
row.goodsType = product.typeId;
// 保存商品id和品名,用于优惠信息显示
......@@ -683,6 +757,10 @@ export default {
console.log(product)
row.goodsType = product ? product.typeId : null
row.prodAttrArr = !product ? [] : product.attrId.split(',').filter(item => item !== '').map(item => +item)
this.$set(this.productNames, product.id, {
titleZh: product.titleZh,
titleEn: product.titleEn
})
},
onLineChange(row){
this.calculationPrice()
......@@ -694,51 +772,15 @@ export default {
onProductAttrChange(row, attr){
this.calculationPrice()
},
// 更新运输方式
/* updateEnabledTransports(){
let enabled = {}
this.productList.forEach(prod => {
if(prod.transportId){
if(!enabled[prod.transportId]){
enabled[prod.transportId] = {
// transportId: prod.transportId,
lineIdSet: new Set(),
channelIdSet: new Set(),
routers:[]
}
}
if(prod.lineId){
enabled[prod.transportId].lineIdSet.add(prod.lineId)
}
if(prod.channelId){
enabled[prod.transportId].channelIdSet.add(prod.channelId)
}
if(prod.lineId && enabled[prod.transportId].routers.findIndex(item => { item.lineId == prod.lineId && item.channelId == prod.channelId }) < 0){
enabled[prod.transportId].routers.push({
lineId: prod.lineId,
channelId: prod.channelId
})
}
}
})
console.log(JSON.stringify(enabled))
let enabledTransportIds = Object.keys(enabled).map(item => +item)
this.transportList.forEach(transport => {
this.$set(transport, '_enabled', enabledTransportIds.indexOf(transport.transportId) > -1 && enabled[transport.transportId].routers.length)
if(transport._enabled){
Object.assign(transport, enabled[transport.transportId])
}
})
}, */
addProduct(data){
if(!data && !this.form.lineId){
return this.$message.error(this.$t('请先选择路线'))
}
console.log('addProduct', JSON.stringify(data))
this.productList.push(data || {prodAttrArr:[]})
},
// 计算商品运费
getProductFee(row){
/* getProductFee(row){
if(!row.prodId || !row.transportId || !row.lineId || !row.num || !row.weight)return false
if(row.prodAttrArr){
row.prodAttrIds = row.prodAttrArr.join(',')
......@@ -746,7 +788,7 @@ export default {
getProductFeeList(row).then(res => {
this.$set(row, 'fee', res.data[0] || {})
})
},
}, */
// 获取路线
getOpenedRouterList(){
let params = {}
......@@ -780,39 +822,6 @@ export default {
this.productList.splice(index, 1)
})
},
getCoupons(){
console.log('getCoupons')
// if(!this.form.consigneeContactsId || !this.form.consignorContactsId) return false
let data = Object.assign({}, this.form, {
prodConditionParamList: this.productList,
consigneeCustomerContactsId: this.form.consigneeId,
consignorCustomerContactsId: this.form.consignorId
})
getCustomerAvailableCouponList(data)
.then(res => {
// 对优惠信息按照商品 + 类型 分组展示
let list = {}
res.data.couponAvailableGroupDtoList.forEach(item => {
item.couponAvailableDtoList.forEach(coupon => {
let key = item.prodId + '_' + coupon.type
if(!list[key]){
list[key] = {
selectedIndex: null,
options: [],
prodId: item.prodId,
type: coupon.type
}
}
list[key].options.push(coupon)
})
})
this.couponList = Object.values(list)
})
},
// 显示更多报价
showMorePrice(index){
console.log('显示更多报价', index)
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
......@@ -887,12 +896,14 @@ export default {
customsType: this.form.customsType,
isCargoControl: this.form.control,
orderType: this.form.orderType,
}).then(res => {
this.$set(this, 'fee', res.data.costDto)
/* this.$set(this, 'fee', res.data.costDto)
this.$set(this, 'couponTotalAmountList', res.data.availableDto.couponTotalAmountList)
this.$set(this, 'couponAvailableGroupDtoList', res.data.availableDto.couponAvailableGroupDtoList)
this.productList.map((item, index) => {
this.$set(item, 'fee', res.data.prodCostDtoList[index])
})
}) */
}).finally(() => {
this.calculating = false
})
......@@ -908,7 +919,17 @@ export default {
flex: 1;
}
}
.mt-10{
margin-top: 10px;
.form-section{
.contact{
display: flex;
align-items: center;
img.phonebook{
width: 30px;
height: 30px;
margin-left: 10px;
cursor: pointer;
}
}
}
</style>
\ No newline at end of file
......@@ -87,7 +87,7 @@
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" :disabled="form.status !== 0"/>
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="channelId" required v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" :error="$t('请选择出货渠道')">
<el-form-item :label="$t('出货渠道')" prop="channelId" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'">
<selector
:disabled="form.status !== 0 || getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'"
v-model="form.channelId"
......@@ -119,25 +119,6 @@
</template>
</select>
</div>
<!-- <el-descriptions :column="3" border>
<el-descriptions-item :label="$t('运输方式')" :labelStyle="labelStyle">
</el-descriptions-item>
<el-descriptions-item :label="$t('出货渠道')" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" :labelStyle="labelStyle">
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="2" border>
<el-descriptions-item :label="$t('始发城市')" :labelStyle="labelStyle">
</el-descriptions-item>
<el-descriptions-item :label="$t('目的城市')" :labelStyle="labelStyle">
</el-descriptions-item>
<el-descriptions-item :label="$t('请选择线路')" :span="2" :labelStyle="labelStyle">
</el-descriptions-item>
</el-descriptions> -->
</el-card>
<el-card class="mt-10">
<div slot="header" class="card-title">
......@@ -255,7 +236,7 @@
</el-table-column>
<el-table-column :label="$t('快递单号')" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.expressNo" placeholder="缺少字段" />
<el-input v-model="row.expressNo" placeholder="" />
</template>
</el-table-column>
</el-table>
......@@ -344,46 +325,47 @@
<el-card class="mt-10">
<div class="card-title" slot="header">{{$t('通用')}}</div>
<el-descriptions :column="2" border>
<el-descriptions-item :label="$t('唛头')">
<el-form-item label="" prop="marks" label-width="0" style="margin-bottom: 0" >
<el-input v-model="form.marks" placeholder=""></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('是否控货')">
<div class="form-section">
<el-form-item label="唛头" prop="marks" >
<el-input v-model="form.marks" placeholder=""></el-input>
</el-form-item>
<el-form-item label="是否控货" prop="marks" class="ml-20">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCargoControl" form-type="radio" />
</el-descriptions-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-descriptions-item :label="$t('是否代收货款')" v-if="collectionProxy">
</el-form-item>
</div>
<div class="form-section" v-if="collectionProxy">
<el-form-item :label="$t('是否代收货款')" prop="isCollection">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCollection" form-type="radio" />
</el-descriptions-item>
<el-descriptions-item :label="$t('代收货款金额')" v-if="collectionProxy">
</el-form-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-form-item :label="$t('代收货款金额')" v-if="collectionProxy && form.isCollection" prop="collectionProxy" class="ml-20">
<el-input v-model="form.collectionProxy" placeholder="" class="w-200 mr-10"></el-input>
<selector v-model="form.collectionProxyCurrency" :options="currencyList" label-field="titleZh" value-field="id" defaultable class="w-100" />
</el-descriptions-item>
<el-descriptions-item :label="$t('单证报关')" :span="2">
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('单证报关')" :span="2" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('出单方式')">
</el-form-item>
</div>
<div>
<el-form-item :label="$t('出单方式')" prop="issuingMethod">
<dict-selector :type="DICT_TYPE.ECW_SUING_METHOD" v-model="form.issuingMethod" form-type="radio" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('送货日期')">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="deliveryDate">
<el-date-picker v-model="form.deliveryDate" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('入仓类型')">
</el-form-item>
<el-form-item :label="$t('送货日期')" prop="deliveryDate" class="ml-20">
<el-date-picker v-model="form.deliveryDate" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</div>
<div>
<el-form-item :label="$t('入仓类型')" prop="warehouseType">
<dict-selector :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" v-model="form.warehouseType" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('收货方式')">
</el-form-item>
<el-form-item :label="$t('收货方式')" prop="harvestMethod" class="ml-20">
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.harvestMethod" :filter="item => item.value == 1 || homeDeliveryService" defaultable />
</el-descriptions-item>
<el-descriptions-item :label="$t('收货地区')" :span="2" v-if="homeDeliveryService">
</el-form-item>
</div>
<div v-if="homeDeliveryService && form.harvestMethod == 2">
<el-form-item :label="$t('收货地区')">
<area-selector
:country="form.consigneeVO ? form.consigneeVO.country : undefined"
:province="form.consigneeVO ? form.consigneeVO.province : undefined"
......@@ -392,24 +374,24 @@
@provinceChange="onAreaChange('province', $event)"
@cityChange="onAreaChange('city', $event)"
></area-selector>
</el-descriptions-item>
<el-descriptions-item :label="$t('收货详细地址')" :span="2" v-if="homeDeliveryService">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeAddress">
<el-input v-model="form.consigneeAddress" placeholder=""></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('付款人')" :span="2">
</el-form-item>
<el-form-item :label="$t('收货详细地址')" prop="consigneeAddress">
<el-input v-model="form.consigneeAddress" placeholder=""></el-input>
</el-form-item>
</div>
<div>
<el-form-item :label="$t('付款人')" prop="drawee">
<dict-selector :type="DICT_TYPE.DRAWEE" v-model="form.drawee" defaultable form-type="radio" />
</el-descriptions-item>
<el-descriptions-item v-if="form.drawee==3" :label="$t('费用类型')" :span="2">
<template v-for="(item,index) in customDraweeList" v-key="index">
<el-form-item :label="item.label" :key="index" >
<dict-selector :type="DICT_TYPE.DRAWEE" :filter="(e) => e.value == '1' || e.value == '2'" v-model="item.value" form-type="radio" />
</el-form-item>
</template>
</el-descriptions-item>
</el-descriptions>
<el-table :data="customDraweeList" v-if="form.drawee==3" >
<el-table-column label="费用类型" prop="label" width="200px"></el-table-column>
<el-table-column label="付款人" width="300px">
<template slot-scope="{row}">
<dict-selector :type="DICT_TYPE.DRAWEE" :filter="(e) => e.value == '1' || e.value == '2'" v-model="row.value" form-type="radio" />
</template>
</el-table-column>
</el-table>
</el-form-item>
</div>
</el-card>
<el-card class="mt-10" v-if="transport">
......@@ -419,6 +401,7 @@
<el-button type="primary" slot="append" @click="getOrderCourierNumber">{{$t('生成单号')}}</el-button>
</el-input>
</el-form-item>
<br/>
<el-form-item :label="$t('是否双清')" v-if="[2,3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" />
</el-form-item>
......@@ -442,14 +425,17 @@
<el-form-item label="是否拆包" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
</el-form-item>
<el-form-item :label="$t('单票立刻转运')" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span>
</el-form-item>
<el-form-item :label="$t('特殊要求')" >
<dict-selector v-model="form.packageType" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple />
</el-form-item>
<div class="form-section">
<el-form-item :label="$t('单票立刻转运')" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span>
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('特殊要求')" >
<dict-selector v-model="form.packageType" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple />
</el-form-item>
</div>
<el-form-item :label="$t('特殊要求备注')">
<el-input v-model="form.packageRemarks" ></el-input>
</el-form-item>
......@@ -459,7 +445,7 @@
<el-form-item label="" style="margin: 30px 0">
<el-button type="primary" @click="submitForm(0)">{{$t('保存')}}</el-button> <!--草稿-->
<el-button type="primary" @click="submitForm(2)">{{$t('新建')}}</el-button> <!--待入仓-->
<el-button @click="$router.back()">{{$t('返回')}}</el-button>
<el-button @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button>
</el-form-item>
</el-form>
......@@ -514,7 +500,7 @@ import {getTradeCityList} from '@/api/ecw/region'
import {getDictData, getDictDatas} from '@/utils/dict'
import {getCurrencyList} from '@/api/ecw/currency'
import {getUnitList} from '@/api/ecw/unit'
import { getCustomer } from '@/api/ecw/customer';
import { getCustomerContactsListByCustomer } from '@/api/ecw/customerContacts';
import AreaSelector from '@/components/AreaSelector'
import {calculationPrice} from '@/api/ecw/product'
import {getCustomerAvailableCouponList} from '@/api/ecw/coupon'
......@@ -745,12 +731,27 @@ export default {
this.form = res.data
/* this.form.consignorContactsId = res.data.consignorVO.customerContactsId
this.form.consigneeContactsId = res.data.consigneeVO.customerContactsId */
this.form.deliveryDate = res.data.consigneeVO.deliveryDate
this.form.orderItemVOList.forEach(item => {
item.prodAttrArr = item.prodAttrIds.split(',').filter(item => item != '')
this.addProduct(Object.assign({}, item))
})
this.form.type = this.form.type ? this.form.type.split(',').filter(item => item != '') : []
this.$set(this.form, 'consignorCompany', res.data.consignorVO.company)
this.$set(this.form, 'consignorContactsId', res.data.consignorVO.customerContactsId)
this.$set(this.form, 'consignorCountryCode', res.data.consignorVO.countryCode)
this.$set(this.form, 'consignorEmail', res.data.consignorVO.email)
this.$set(this.form, 'consignorId', res.data.consignorVO.customerId)
this.$set(this.form, 'consignorName', res.data.consignorVO.name)
this.$set(this.form, 'consignorPhone', res.data.consignorVO.phone)
this.$set(this.form, 'consigneeCompany', res.data.consigneeVO.company)
this.$set(this.form, 'consigneeContactsId', res.data.consigneeVO.customerContactsId)
this.$set(this.form, 'consigneeCountryCode', res.data.consigneeVO.countryCode)
this.$set(this.form, 'consigneeEmail', res.data.consigneeVO.email)
this.$set(this.form, 'consigneeId', res.data.consigneeVO.customerId)
this.$set(this.form, 'consigneeName', res.data.consigneeVO.name)
this.$set(this.form, 'consigneePhone', res.data.consigneeVO.phone)
})
}else this.addProduct()
......@@ -769,6 +770,11 @@ export default {
})
},
methods: {
/* onCustomerCreate(customer){
getCustomerContactsListByCustomer({customerId: customer.customerId}).then(res => {
this.onContactChoose(res.data[0])
})
}, */
onContactChoose(contact){
console.log('选择联系人', contact)
if(!this.contactChooseType && !this.quickCreateType) return
......
......@@ -3,16 +3,22 @@
<el-form ref="elForm" :model="formData" :rules="rules" size="small" label-width="100px"
label-position="left">
<el-form-item :label="$t('公司全称')" prop="companyZh">
<el-input v-model="formData.companyZh" :placeholder="$t('请输入公司全称')" show-word-limit clearable
:style="{width: '100%'}"></el-input>
<el-input v-model="formData.companyZh" :placeholder="$t('请输入公司全称')" show-word-limit clearable></el-input>
</el-form-item>
<el-form-item :label="$t('英文名称')" prop="companyEn">
<el-input v-model="formData.companyZh" :placeholder="$t('请输入公司英文名')" show-word-limit clearable></el-input>
</el-form-item>
<el-form-item :label="$t('代理名称')" prop="agentName">
<!-- <el-form-item :label="$t('代理名称')" prop="agentName">
<el-input v-model="formData.agentName" :placeholder="$t('请输入代理名称')" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
</el-form-item> -->
<el-form-item :label="$t('公司电话')" prop="tell">
<el-input v-model="formData.tell" :placeholder="$t('请输入公司电话')" clearable :style="{width: '100%'}"></el-input>
<el-input v-model="formData.tell" :placeholder="$t('请输入公司电话')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('邮件地址')" prop="email">
<el-input v-model="formData.email" :placeholder="$t('请输入邮箱地址')" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('公司地址')" prop="address">
<!-- <el-select v-model="formData.country">
<el-option v-for="(item, index) in treeList" :value="item.id" :label="item.titleZh" :key="item.id" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment