<template> <div class="app-container"> <el-card> <div slot="header" class="header"> <div class="card-title">{{$t('查看')}}</div> <el-button type="primary" icon="el-icon-arrow-left" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button> </div> <el-form v-if="orderData" :model="orderData" ref="queryForm" size="small" :inline="true" label-width="120px" class="card"> <el-row> <el-form-item :label="$t('订单号')+':'"> <router-link :to="{path: '/order/detail',query: {orderId: orderData.orderId}}" class="link-type"> <span>{{orderData.orderNo || ''}}</span> </router-link> </el-form-item> </el-row> <div v-if="shopData&&['goods_add_exception','line_loop_exception','overweight_exception','stock_up_exception','in_warehousing_diff_exception','channel_exception','not_shipping_channel_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1"> <el-row> <el-form-item :label="$t('产品名称')+':'" > {{shopData.prodTitleZh || ''}} </el-form-item> </el-row> <el-row> <el-form-item :label="$t('产品英文名称')+':'"> {{shopData.prodTitleEn || ''}} </el-form-item> </el-row> </div> <el-row> <el-form-item :label="$t('运输路线')+':'" > <span v-if="orderData">{{ $t('【') }}<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="orderData.transportId" />{{ $t('】') }}</span> <span v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, orderData.transportId).cssClass == 'channel'">{{ $t('【') }}{{orderData.channelName}}{{ $t('】') }}</span> {{orderData?getRouterNameById():''}} </el-form-item> </el-row> <el-row> <el-form-item :label="$t('异常类型')+':'" v-if="orderExceptionData.orderExceptionType=='overweight_exception'||orderExceptionData.orderExceptionType=='channel_packaging_overweight_exception'"> <dict-tag :type="DICT_TYPE.ORDER_ERROR_TYPE" :value="orderExceptionData.orderExceptionType" /> </el-form-item> </el-row> <el-row :span="12" v-if="orderExceptionData.orderExceptionType=='overweight_exception'||orderExceptionData.orderExceptionType=='channel_packaging_overweight_exception'"> <el-form-item :label="$t('异常描述')+':'"> <!-- <dict-tag :type="DICT_TYPE.ORDER_ERROR_TYPE" :value="orderExceptionData.orderExceptionType" /> --> <!-- {{orderExceptionData.orderExceptionDescVO?orderExceptionData.orderExceptionDescVO.descZh:'无'}} --> {{$l(orderExceptionData.orderExceptionDescVO, 'desc')}} </el-form-item> </el-row> <!-- 单证异常,发货人异常,其他异常 不显示这部分内容 --> <div v-if="['order_doc_exception','order_consignor_exception', 'order_other_exception','overweight_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1"> <!-- 预付异常,提货异常,代收货款是针对整个订单的 --> <template v-if="['order_pay_exception','order_pick_up_exception', 'order_cod_exception','not_customer_service_exception'].indexOf(orderExceptionData.orderExceptionType) > -1"> <el-row> <el-form-item :label="$t('填单参数')+':'"> <template v-if="orderData && orderData.costVO"> {{(orderData.costVO.totalNum||0)+$t('箱 ')+(orderData.costVO.totalVolume||0)+'m³ '+(orderData.costVO.totalWeight||0)+'kg '+(orderData.costVO.totalQuantity||0)+$t('个')}} </template> </el-form-item> <el-form-item :label="$t('代收金额')+':'" v-if="orderExceptionData.orderExceptionType == 'order_cod_exception'"> <template v-if="orderData && orderData.costVO"> {{orderExceptionData.orderExceptionAmount}} {{currencyMap[orderExceptionData.orderExceptionAmountCurrencyId]}} </template> </el-form-item> </el-row> <el-row> <el-form-item :label="$t('入仓参数')+':'"> <template v-if="orderData && orderData.costVO"> <span>{{(orderData.sumNum||0)+$t('箱')+(orderData.sumVolume||0)+'m³ '+(orderData.sumWeight||0)+'kg '+(orderData.sumQuantity||0) +$t('个')}}</span> </template> </el-form-item> </el-row> </template> <template v-else> <el-row v-if="shopData"> <el-form-item :label="$t('填单参数')+':'"> <template > {{$t('{num}箱 {volume}m³ {weight}kg {quantity}个', { num: shopData.num || 0, volume: shopData.volume || 0, weight: shopData.weight || 0, quantity: shopData.quantity || 0 })}} </template> </el-form-item> </el-row> <el-row v-if="shopData"> <el-form-item :label="$t('入仓参数')+':'" ><template v-if="shopData.warehouseInInfoVO"> {{$t('{num}箱 {volume}m³ {weight}kg {quantity}个', { num: shopData.warehouseInInfoVO.cartonsNum || 0, volume: shopData.warehouseInInfoVO.volume || 0, weight: shopData.warehouseInInfoVO.weight || 0, quantity: shopData.warehouseInInfoVO.quantityAll || 0 })}}</template> <!-- <span>{{(orderData.sumNum||0)+$t('箱')+(orderData.sumVolume||0)+'m³ '+(orderData.sumWeight||0)+'kg '+(orderData.sumQuantity||0) +$t('个')}}</span> --> <template v-else>{{$t('无入仓数据')}}</template> </el-form-item> </el-row> </template> <el-row :span="12"> <el-form-item :label="$t('异常描述')+':'"> <!-- <dict-tag :type="DICT_TYPE.ORDER_ERROR_TYPE" :value="orderExceptionData.orderExceptionType" /> --> <!-- {{orderExceptionData.orderExceptionDescVO?orderExceptionData.orderExceptionDescVO.descZh:'无'}} --> {{$l(orderExceptionData.orderExceptionDescVO, 'desc')}} </el-form-item> <el-button v-if="orderExceptionData.orderExceptionType=='order_pay_exception'&&orderExceptionData.orderExceptionStatus!=2" type="primary" plain icon="el-icon-plus" style="margin-left: 200px;" @click="handleAdd">{{ $t('新增收款单') }}</el-button> </el-row> <el-row v-if="orderExceptionData.orderExceptionDetails"> <el-form-item :label="$t('详细内容')+':'"> <span>{{orderExceptionData.orderExceptionDetails}}</span> </el-form-item> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'||orderExceptionData.orderExceptionType!='goods_add_exception'"> <el-form-item :label="$t('收费参数')+':'"> <div v-if="shopData"> {{$t('{num}箱 {volume}m³ {weight}kg {quantity}个', { num: shopData.num || 0, volume: shopData.wvolume || 0, weight: shopData.vweight || 0, quantity: shopData.quantity || 0 })}} </div> <span v-else>{{orderData.sumNum||0}}{{$t('箱')}} {{orderData.wvolume||0}}m³ {{orderData.vweight||0}}Kg {{orderData.warehouseInInfoVO ? orderData.warehouseInInfoVO.quantityAll : orderData.sumQuantity}}{{$t('个')}}</span> </el-form-item> </el-row> <el-row> <el-form-item :label="$t('创建时间')+':'"> <span>{{parseTime(orderExceptionData.createTime)}}</span> </el-form-item> </el-row> <el-row> <el-form-item :label="$t('处理时间')+':'"> <span>{{parseTime(orderExceptionData.handlerTime)||'/'}}</span> </el-form-item> </el-row> </div> </el-form> <!-- 预付异常的表格--> <el-table v-if="orderExceptionData.orderExceptionType=='order_pay_exception'" v-loading="loading" border :data="preException"> <el-table-column :label="$t('品名')" align="center"> <template slot-scope="scope"> {{scope.row.titleZh+'('+scope.row.titleEn+')'}} </template> </el-table-column> <el-table-column :label="$t('箱数')" prop="num" /> <el-table-column :label="$t('体积/重量')"> <template slot-scope="scope"> {{scope.row.volume+'/'+scope.row.weight}} </template> </el-table-column> <el-table-column :label="$t('收款类型')"> <template > {{$t('预付')}} </template> </el-table-column> <el-table-column :label="$t('收入类型')"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType"></dict-tag> </template> </el-table-column> <el-table-column :label="$t('应收金额')" prop="totalAmount" > <template slot-scope="{row}"> {{row.totalAmount}} {{ currencyMap[row.currencyId] }} </template> </el-table-column> <el-table-column :label="$t('付款人')"> <template slot-scope="{row}"> <span> <dict-tag :type="DICT_TYPE.DRAWEE" :value="row.paymentUser"></dict-tag> </span> </template> </el-table-column> <el-table-column :label="$t('付款状态')" prop="worth"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.ECW_RECEIVABLE_STATE" :value="scope.row.state"></dict-tag> </template> </el-table-column> <el-table-column :label="$t('付款状态')" prop="worth"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.ECW_RECEIVABLE_STATE" :value="scope.row.state"></dict-tag> </template> </el-table-column> </el-table> <!-- 单证异常,发货人异常,其他异常的表格 --> <el-table v-if="['order_doc_exception', 'order_consignor_exception', 'order_other_exception','fee_exception','overweight_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) > -1" v-loading="loading" border :data="orderData.orderItemVOList"> <el-table-column :label="$t('序号')" align="center" prop="id" type="index"> <template slot-scope="scope"> <span>{{scope.$index + 1}}</span> </template> </el-table-column> <el-table-column :label="$t('中文名')" align="center" prop="prodTitleZh" /> <el-table-column :label="$t('英文名')" align="center" prop="prodTitleEn" /> <el-table-column :label="$t('品牌')" align="center" prop="brandType"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="scope.row.brandType"></dict-tag> </template> </el-table-column> <el-table-column :label="$t('填单箱数')" prop="num" /> <!-- v2.0 入仓特性异常 --> <el-table-column :label="$t('填单特性')" prop="prodAttrIds"> <template slot-scope="scope"> {{getProdAtrr(scope.row.prodAttrIds)}} </template> </el-table-column> <el-table-column :label="$t('入仓箱数')"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.cartonsNum:0}} </template> </el-table-column> <!-- v2.0 入仓特性异常 --> <el-table-column :label="$t('入仓特性')" prop="num"> <template slot-scope="scope"> {{getProdAtrr(scope.row.warehouseInProdAttrIds)}} </template> </el-table-column> <el-table-column :label="$t('方数')" prop="volume"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.volume:0}} </template> </el-table-column> <el-table-column :label="$t('重量')" prop="weight"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.weight:0}} </template> </el-table-column> <el-table-column :label="$t('数量')" prop="quantity"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.quantityAll:0}} </template> </el-table-column> <el-table-column :label="$t('货值')" prop="worth" /> </el-table> <!-- 未分配客户经理 --> <div v-if="orderExceptionData.orderExceptionType=='not_customer_service_exception'"> <el-row :gutter="20"> <el-col :span="8" v-if="orderData.consignorVO"> <el-descriptions class="margin-top" border :title="$t('发货人')" :column="1" :labelStyle="{width:'150px'}"> <el-descriptions-item :label="$t('发货人')">{{orderData.consignorVO.name}}</el-descriptions-item> <el-descriptions-item :label="$t('发货人电话')"> +{{orderData.consignorVO.countryCode}} {{orderData.consignorVO.phone}} </el-descriptions-item> <el-descriptions-item :label="$t('发货人邮箱')">{{orderData.consignorVO.email}}</el-descriptions-item> <el-descriptions-item :label="$t('发货人公司名称')"> {{orderData.consignorVO.company}} </el-descriptions-item> </el-descriptions> </el-col> <el-col :span="16" v-if="orderData.consigneeVO"> <el-descriptions class="margin-top" border :title="$t('收货人')" :column="2" :labelStyle="{width:'150px'}"> <el-descriptions-item :label="$t('收货人')">{{orderData.consigneeVO.name}}</el-descriptions-item> <el-descriptions-item :label="$t('收货人电话')"> +{{orderData.consigneeVO.countryCode}} {{orderData.consigneeVO.phone}} </el-descriptions-item> <el-descriptions-item :label="$t('收货人邮箱')">{{orderData.consigneeVO.email}}</el-descriptions-item> <el-descriptions-item :label="$t('收货人公司名称')"> {{orderData.consigneeVO.company}} </el-descriptions-item> <el-descriptions-item :label="$t('收货方式')"> <dict-tag :type="DICT_TYPE.ECW_HARVEST_METHOD" :value="orderData.consigneeVO.harvestMethod" /> </el-descriptions-item> <el-descriptions-item :label="$t('收货地区')"> {{region}} </el-descriptions-item> <el-descriptions-item :label="$t('收货地址')"> {{orderData.consigneeVO.address}} </el-descriptions-item> </el-descriptions> </el-col> </el-row> <div class="link-text"> <router-link :to="{path: '/customer/query/'+orderData.customerId}" class="link-type"> <span>{{$t('归属客户')}}:{{ customerData.name||'' }} </span><span>{{$t('客户编号')}}:{{ customerData.number||'' }}</span> </router-link> </div> </div> <el-form :model="handlerParams" ref="queryForms" size="small" :inline="true" label-width="120px" class="card"> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-form-item :label="$t('订单总金额')+':'"> <span style="margin-left: 8px;" v-for="(item, key) of orderFee.totalAmountList" :key="key"> {{item}} {{currencyMap[key]}} </span> </el-form-item> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-form-item :label="$t('应付预付金额')+':'"> <span style="margin-left: 8px;" v-for="(item, key) of orderFee.totalPaymentAmount" :key="key">{{item}}{{currencyMap[key]}}</span> </el-form-item> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-col :span="6"> <el-form-item :label="$t('已核销预付金额')+':'"> <span v-if="JSON.stringify(orderFee.writeOffAmount) != '{}'" style="margin-left: 8px;" v-for="(item, key) of orderFee.writeOffAmount" :key="key">{{item}}{{currencyMap[key]}}</span> <span v-if="JSON.stringify(orderFee.writeOffAmount) == '{}'">0</span> </el-form-item> </el-col> <el-col :span="12"> <el-form-item :label="$t('已核销预付金额占总金额比例')+':'" label-width="320px"> {{orderFee.writeOffAmountScale}}% </el-form-item> </el-col> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'" > <el-col :span="6"> <el-form-item :label="$t('预付商品货值')+':'"> {{orderFee.paymentGoodsWorth}} {{$t('人民币')}} </el-form-item> </el-col> <el-col :span="12"> <el-form-item :label="$t('预付商品货值占总货值比例')+':'" label-width="320px"> {{orderFee.paymentGoodsWorthScale}}% </el-form-item> </el-col> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-col :span="6"> <el-form-item :label="$t('预付商品方数')+':'"> {{orderFee.paymentGoodsVolume}} {{$t('立方米')}} </el-form-item> </el-col> <el-col :span="12"> <el-form-item :label="$t('货值三分之一占运费和清关费总和比例')+':'" label-width="320px"> {{orderFee.needWorthScale}}% </el-form-item> </el-col> </el-row> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-col :span="6"> <el-form-item :label="$t('订单总方数')+':'"> {{orderFee.totalVolume}} {{$t('立方米')}} </el-form-item> </el-col> <el-col :span="12"> <el-form-item :label="$t('预付商品方数占总方数比例')+':'" label-width="320px"> {{orderFee.paymentGoodsVolumeScale}}% </el-form-item> </el-col> </el-row> <el-row :span="12" v-if="orderExceptionData.orderExceptionType=='order_doc_exception'"> <el-form-item v-if="orderExceptionData.orderExceptionStatus!=2" :label="$t('报关资料')+':'" size="medium" :require="true"> <file-upload v-model="handlerParams.fileList" :value="orderExceptionData.orderExceptionAttr" ></file-upload> </el-form-item> </el-row> <el-form-item :label="$t('附件')" align="center" v-if="orderExceptionData.orderExceptionType=='order_other_exception'"> <template slot-scope="scope"> <div class="filelist"> <span v-for="(item,index) in handlerParams.fileList" :key="index" @click="onClickOpenPreview(item,index)">{{'附件'+(index+1)}}</span> </div> </template> </el-form-item> <!--货物重量异常--> <el-row :span="8" v-if="['goods_weight_exception','channel_exception','not_shipping_channel_exception'].indexOf(orderExceptionData.orderExceptionType) >-1"> <el-form-item :label="$t('备注')+':'" size="medium"> <el-input style="width: 500px;" type="textarea" v-model="handlerParams.orderExceptionHandlerRemark" :disabled="orderExceptionData.orderExceptionStatus==2" /> </el-form-item> </el-row> <!-- 线路单证异常 --> <div v-if="orderExceptionData.orderExceptionType=='line_loop_exception'"> <div v-for="row in loopOrderItem" :key="row.orderItemId"> <div v-if="row.charging ==1"> <div v-if="orderExceptionData.orderExceptionStatus==0" class="price_list"> <div class="price_label">{{$t('全包价')}}:</div> <inputor default2="0" style="width:100px" v-model.number="row.oneSeaFreight" type="number" :placeholder="$t('整数或者两位小数')" /> <selector v-model="row.seaFreightCurrency" style="width:100px" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 /> / <selector v-model="row.seaFreightVolume" style="width:100px" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 /> </div> <div v-else class="price_list"> <div v-if="!row.oneSeaFreight"> <span class="price_label">{{$t('全包价')}}:</span> <span>{{$t('未报价')}}</span> </div> <div v-else> <span class="price_label">{{$t('全包价')}}:</span> <span>{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</span> </div> </div> </div> <div v-else> <!-- <span v-if="!scope.row.oneSeaFreight">{{$t('运费')}}:{{$t('未报价')}}</span> --> <div v-if="orderExceptionData.orderExceptionStatus==0"> <div class="price_list"> <div class="price_label">{{$t('运费')}}:</div> <div class="price_list"> <inputor style="width:100px" default2="0" v-model.number="row.oneSeaFreight" type="number" :placeholder="$t('整数或者两位小数')" /> <selector style="width:100px" v-model="row.seaFreightCurrency" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 /> / <selector style="width:100px" v-model="row.seaFreightVolume" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 /> </div> </div> <div class="price_list"> <div class="price_label">{{$t('清关费')}}:</div> <div class="price_list"> <inputor style="width:100px" default2="0" v-model.number="row.oneClearanceFreight" type="number" :placeholder="$t('整数或者两位小数')" /> <selector style="width:100px" v-model="row.clearanceFreightCurrency" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 /> / <selector style="width:100px" v-model="row.clearanceFreightVolume" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 /> </div> </div> </div> <div v-else> <div class="price_list"> <div v-if="!row.oneSeaFreight"> <span class="price_label">{{$t('运费')}}:</span> <span>{{$t('未报价')}}</span> </div> <div v-else> <span class="price_label">{{$t('运费')}}:</span> <span>{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</span> </div> </div> <div class="price_list"> <div v-if="!row.oneSeaFreight"> <span class="price_label">{{$t('清关费')}}:</span> <span>{{$t('未报价')}}</span> </div> <div v-else> <span class="price_label">{{$t('清关费')}}:</span> <span>{{row.oneClearanceFreight}} {{currencyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}</span> </div> </div> </div> </div> </div> </div> <!--预付异常的备选需要根据接口数据过滤--> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'"> <el-form-item :label="$t('处理结果')+':'" required> <el-select v-model="handlerParams.orderExceptionHandlerResult" :placeholder="$t('请选择')" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <template v-for="dict in getDictDatas(orderExceptionData.orderExceptionType+'_result')"> <el-option :disabled="orderFee && orderFee.result && orderFee.result.indexOf(dict.value) ==-1" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/> </template> </el-select> </el-form-item> </el-row> <el-row v-else-if="['order_miss_exception','order_superfluous_goods_exception', 'order_in_water_exception','order_damage_exception','goods_weight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1"> <el-form-item :label="$t('处理结果')+':'" required> <el-select v-model="handlerParams.orderExceptionHandlerResult" :placeholder="$t('请选择')" clearable @change="handlerResultChange" :disabled="orderExceptionData.orderExceptionStatus==2"> <template v-for="dict in getDictDatas(orderExceptionData.orderExceptionType+'_result')"> <el-option :disabled="dict.value=='pending'" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/> </template> </el-select> </el-form-item> </el-row> <!-- v1.7新增商品异常 --> <div v-if="shopData&&orderExceptionData.orderExceptionType=='goods_add_exception'&&handlerParams.orderExceptionHandlerResult=='goods_exists'"> <el-row :gutter="24"> <el-col :span="6"> <el-form-item :label="$t('新增品名中文')+':'" > {{shopData.prodTitleZh || ''}} </el-form-item> </el-col> <el-form-item label="中文品名" :rules="{ required: true, message: $t('请选择产品'), trigger: 'blur' }" class="mb-0 mr-0" > <product-selector :status="0" :disabled="orderExceptionData.orderExceptionStatus==2" @hook:mounted="onTableMounted" v-model="productId2" @change = "onProductChange($event)" /> </el-form-item> </el-row> <el-row :gutter="24"> <el-col :span="6"> <el-form-item :label="$t('新增品名英文')+':'"> {{shopData.prodTitleEn || ''}} </el-form-item> </el-col> <el-form-item label="英文品名" :rules="{ required: true, message: $t('请选择产品'), trigger: 'blur' }" class="mb-0 mr-0" > <product-selector lang="En" :status="0" v-model="productId1" :disabled="orderExceptionData.orderExceptionStatus==2" @change = "onProductChange($event)" /> </el-form-item> </el-row> </div> <el-row v-if="orderExceptionData.orderExceptionType=='not_customer_service_exception'&&handlerParams.orderExceptionHandlerResult=='allocate'"> <el-form-item :label="$t('移交客户经理')+':'" required> <el-select v-model="handlerParams.customerService" :placeholder="$t('请选择客户经理')" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in customerServiceList" :key="dict.id" :label="dict.nickname" :value="dict.id"/> </el-select> </el-form-item> </el-row> <!-- 代收货款 时需要填写代收金额 --> <el-row v-if="handlerParams.orderExceptionHandlerResult == 'cod'" > <el-form-item :label="$t('代收金额')+':'" size="medium" required> <el-input class="w-100" type="text" v-model="handlerParams.amount" :disabled="orderExceptionData.orderExceptionStatus==2" /> <!-- <el-select v-model="handlerParams.currency" clearable> <el-option v-for="dict in getDictDatas('shipping_price_unit') " :key="dict.value" :label="dict.label" :value="dict.value"/> </el-select> -->{{getCurrencyLabel(handlerParams.currency)}} <!-- <dict-tag type="shipping_price_unit" v-model="handlerParams.currency" class="w-100 ml-10" /> --> </el-form-item> </el-row> <el-row :span="8" v-if="orderExceptionData.orderExceptionType=='order_pick_up_exception'&&handlerParams.orderExceptionHandlerResult=='cost_required'"> <el-form-item :label="$t('送货费用')+':'" size="medium"> <el-input style="width: 100px;" type="text" v-model="handlerParams.amount" :disabled="orderExceptionData.orderExceptionStatus==2"/> <el-select v-model="handlerParams.currency" style="width: 100px;margin-left: 10px;" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in currencyList " :key="dict.id" :label="dict.titleZh" :value="dict.id"/> </el-select> </el-form-item> </el-row> <el-row :span="8" v-if="['not_customer_service_exception','goods_add_exception','goods_weight_exception','channel_exception','not_shipping_channel_exception'].indexOf(orderExceptionData.orderExceptionType) == -1" > <el-form-item :label="$t('备注')+':'" size="medium"> <el-input style="width: 500px;" type="textarea" v-model="handlerParams.orderExceptionHandlerRemark" :disabled="orderExceptionData.orderExceptionStatus==2" /> </el-form-item> </el-row> <div v-if="['order_miss_exception','order_superfluous_goods_exception', 'order_in_water_exception','order_damage_exception','goods_weight_exception'].indexOf(orderExceptionData.orderExceptionType) > -1"> <el-row > <el-form-item :label="$t('状态')+':'"> <el-radio-group v-model="handlerParams.orderExceptionStatus" @change="changeExceptionStatus" :disabled="orderExceptionData.orderExceptionStatus==2"> <el-radio label="1">{{$t('处理中')}}</el-radio> <el-radio label="2">{{$t('已处理')}}</el-radio> </el-radio-group> </el-form-item> </el-row> <el-row> <el-form-item :label="$t('处理结果')+':'" required v-if="handlerParams.orderExceptionStatus==2"> <el-select v-model="handlerParams.orderExceptionHandlerResult" :placeholder="$t('请选择')" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in getDictDatas(orderExceptionData.orderExceptionType+'_don_result')" :key="dict.value" :label="dict.label" :value="dict.value"/> </el-select> </el-form-item> </el-row> <el-row > <el-form-item :label="$t('赔付金额')+':'" size="medium" required v-if="orderExceptionData.orderExceptionType=='goods_weight_exception'&&handlerParams.orderExceptionStatus==2&&handlerParams.orderExceptionHandlerResult!='customer_not_pay'"> <el-input style="width: 100px;" type="text" v-model="handlerParams.amount" :disabled="orderExceptionData.orderExceptionStatus==2" /> <el-select v-model="handlerParams.currency" style="width: 100px;margin-left: 10px;" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in currencyList " :key="dict.id" :label="dict.titleZh" :value="dict.id"/> </el-select> </el-form-item> <el-form-item :label="$t('赔付金额')+':'" size="medium" required v-else-if="handlerParams.orderExceptionStatus==2&&orderExceptionData.orderExceptionType!='goods_weight_exception'"> <el-input style="width: 100px;" type="text" v-model="handlerParams.amount" :disabled="orderExceptionData.orderExceptionStatus==2" /> <el-select v-model="handlerParams.currency" style="width: 100px;margin-left: 10px;" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in currencyList " :key="dict.id" :label="dict.titleZh" :value="dict.id"/> </el-select> </el-form-item> </el-row> <div v-if="handlerParams.orderExceptionStatus==1"> <el-form-item :label="$t('查明原因')+':'" required> <el-select v-model="handlerParams.orderExceptionHandlerResult" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in getDictDatas(orderExceptionData.orderExceptionType+'_result')" :key="dict.value" :label="dict.label" :value="dict.value"/> </el-select> </el-form-item> </div> </div> <!-- <el-form-item :label="$t('查明原因')+':'" required v-if="orderExceptionData.orderExceptionType=='not_shipping_channel_exception'"> <el-select v-model="handlerParams.orderExceptionHandlerResult" clearable :disabled="orderExceptionData.orderExceptionStatus==2"> <el-option v-for="dict in getDictDatas(orderExceptionData.orderExceptionType+'_result')" :key="dict.value" :label="dict.label" :value="dict.value"/> </el-select> </el-form-item> --> <!-- 不可出渠道异常,渠道异常 --> <div v-if="(orderExceptionData.orderExceptionType=='not_shipping_channel_exception'&&handlerParams.orderExceptionHandlerResult=='change_channel')||(orderExceptionData.orderExceptionType=='channel_exception'&&handlerParams.orderExceptionHandlerResult=='set_shipment_channel')"> <el-form-item :label="$t('出货渠道')" prop="channelId" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, orderData.transportId).cssClass == 'channel'"> <!--嵌套一个form来脱离disabled控制--> <el-form> <el-select v-model="handlerParams.channelId" :placeholder="$t('请选择出货渠道')" @change="calculationPrice" > <el-option v-for="item in channelList" :key="item.channelId" :label="$i18n.locale=='zh_CN'?item.nameZh:item.nameEn" :value="item.channelId" /> </el-select> <!-- <selector v-model="handlerParams.channelId" :options="channelList" value-field="channelId" :label-field="$l(null, 'name')" ></selector> --> </el-form> </el-form-item> <el-form-item :label="$t('选择线路')" prop="lineId"> <el-input :value="selectLine ? $l(selectLine, 'startTitle') + ' > ' + $l(selectLine, 'destTitle') : ''" disabled :placeholder="$t('请在右侧选择线路')"></el-input> </el-form-item> <!--select是原生组件,不受el-form的disabled控制--> <select size="5" v-model="handlerParams.lineId" style="min-width: 300px; border:1px solid #DCDFE6; border-radius:4px" @change="changeLined"> <option v-for="item in routerList" :value="item.id" :key="item.id" :disabled="orderExceptionData.orderExceptionStatus>0"> {{$l(item, 'startTitle')}} >> {{$l(item, 'destTitle')}} (<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="item.transportType"></dict-tag>) </option> </select> </div> <!-- 不可出渠道异常 --> <div v-if="orderExceptionData.orderExceptionType=='not_shipping_channel_exception'&&(handlerParams.orderExceptionHandlerResult=='change_channel'||handlerParams.orderExceptionHandlerResult=='continue_channel')" class="card"> <el-table v-loading="loading" border :data="orderData.orderItemVOList"> <el-table-column :label="$t('序号')" align="center" prop="id" type="index" min-width="30"> <template slot-scope="scope"> <span>{{scope.$index + 1}}</span> </template> </el-table-column> <el-table-column :label="$t('中文名')" align="center" prop="prodTitleZh" min-width="50" /> <el-table-column :label="$t('英文名')" align="center" prop="prodTitleEn" min-width="50" /> <el-table-column :label="$t('品牌')" align="center" min-width="50" prop="brandType"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="scope.row.brandType"></dict-tag> </template> </el-table-column> <el-table-column :label="$t('填单箱数')" align="center" prop="num" min-width="60" /> <!-- v2.0 入仓特性异常 --> <el-table-column :label="$t('填单特性')" align="center" prop="prodAttrIds" min-width="60"> <template slot-scope="scope"> {{getProdAtrr(scope.row.prodAttrIds)}} </template> </el-table-column> <el-table-column :label="$t('入仓箱数')" align="center" min-width="60"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.cartonsNum:0}} </template> </el-table-column> <!-- v2.0 入仓特性异常 --> <el-table-column :label="$t('入仓特性')" align="center" prop="num" min-width="60"> <template slot-scope="scope"> {{getProdAtrr(scope.row.warehouseInProdAttrIds)}} </template> </el-table-column> <el-table-column :label="$t('方数')" align="center" prop="volume" min-width="30"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.volume:0}} </template> </el-table-column> <el-table-column :label="$t('重量')" prop="weight" align="center" min-width="30"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.weight:0}} </template> </el-table-column> <el-table-column :label="$t('数量')" prop="quantity" align="center" min-width="30"> <template slot-scope="scope"> {{scope.row.warehouseInInfoVO?scope.row.warehouseInInfoVO.quantityAll:0}} </template> </el-table-column> <el-table-column :label="$t('货值')" prop="worth" align="center" min-width="30" /> <el-table-column :label="$t('运费/全包价')" prop="quantity" align="center" min-width="260" v-if="handlerParams.orderExceptionHandlerResult=='continue_channel'"> <template slot-scope="scope" > <div v-if="scope.row.charging ==1" class="channel"> <!-- <span v-if="!scope.row.oneSeaFreight">{{$t('全包价')}}:{{$t('未报价')}}</span> --> <div class="channel"> <div style="width:80px">{{$t('全包价')}}:</div> <div style="width:88%" class="channel" v-if="orderExceptionData.orderExceptionStatus==0"> <inputor default2="0" v-model.number="scope.row.oneSeaFreight" type="number" :placeholder="$t('整数或者两位小数')" class="w100" /> <selector v-model="scope.row.seaFreightCurrency" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> / <selector v-model="scope.row.seaFreightVolume" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> </div> </div> </div> <div v-else> <!-- <span v-if="!scope.row.oneSeaFreight">{{$t('运费')}}:{{$t('未报价')}}</span> --> <div class="channel" v-if="orderExceptionData.orderExceptionStatus==0"> <div style="width:80px">{{$t('运费')}}:</div> <div style="width:88%" class="channel" > <inputor default2="0" v-model.number="scope.row.oneSeaFreight" type="number" :placeholder="$t('整数或者两位小数')" class="w100" /> <selector v-model="scope.row.seaFreightCurrency" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> / <selector v-model="scope.row.seaFreightVolume" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> </div> </div> <div v-else class="channel"> <span v-if="!scope.row.oneSeaFreight">{{$t('运费')}}:{{$t('未报价')}}</span> <span v-else>{{$t('全包价')}}:{{scope.row.oneSeaFreight}} {{currencyMap[scope.row.seaFreightCurrency]}} / {{unitMap[scope.row.seaFreightVolume]}}</span> </div> </div> </template> </el-table-column> <el-table-column :label="$t('清关费')" prop="quantity" align="center" min-width="180" v-if="handlerParams.orderExceptionHandlerResult=='continue_channel'"> <template slot-scope="scope"> <div class="channel"> <!-- <span v-if="!scope.row.oneClearanceFreight">{{$t('未报价')}}</span> --> <div class="channel" v-if="orderExceptionData.orderExceptionStatus==0"> <inputor default2="0" v-model.number="scope.row.oneClearanceFreight" type="number" :placeholder="$t('整数或者两位小数')" class="w100" /> <selector v-model="scope.row.clearanceFreightCurrency" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> / <selector v-model="scope.row.clearanceFreightVolume" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w100" /> </div> <div v-else> <span v-if="!scope.row.oneClearanceFreight">{{$t('未报价')}}</span> <span v-else>{{scope.row.oneClearanceFreight}} {{currencyMap[scope.row.clearanceFreightCurrency]}} / {{unitMap[scope.row.clearanceFreightVolume]}}</span> </div> </div> </template> </el-table-column> <el-table-column :label="$t('运费/全包价')" prop="quantity" align="center" min-width="220" v-if="handlerParams.orderExceptionHandlerResult=='change_channel'"> <template slot-scope="scope" > <div v-if="scope.row.charging ==1" class="channel"> <span v-if="!scope.row.oneSeaFreight">{{$t('全包价')}}:{{$t('未报价')}}</span> <span v-else>{{$t('全包价')}}:{{scope.row.oneSeaFreight}} {{currencyMap[scope.row.seaFreightCurrency]}} / {{unitMap[scope.row.seaFreightVolume]}}</span> <!-- <el-button v-if="orderExceptionData.orderExceptionStatus==0" type="primary" plain @click="routeToPrice(scope.row,1)">{{!scope.row.oneSeaFreight?$t('报价'):$t('修改报价')}}</el-button> --> </div> <div v-else class="channel"> <span v-if="!scope.row.oneSeaFreight">{{$t('运费')}}:{{$t('未报价')}}</span> <span v-else>{{$t('运费')}}:{{scope.row.oneSeaFreight}} {{currencyMap[scope.row.seaFreightCurrency]}} / {{unitMap[scope.row.seaFreightVolume]}}</span> <!-- <el-button v-if="orderExceptionData.orderExceptionStatus==0" type="primary" plain @click="routeToPrice(scope.row,1)">{{!scope.row.oneSeaFreight?$t('报价'):$t('修改报价')}}</el-button> --> </div> </template> </el-table-column> <el-table-column :label="$t('清关费')" prop="quantity" align="center" min-width="260" v-if="handlerParams.orderExceptionHandlerResult=='change_channel'"> <template slot-scope="scope"> <div class="channel"> <span v-if="!scope.row.oneClearanceFreight">{{$t('未报价')}}</span> <span v-else>{{scope.row.oneClearanceFreight}} {{currencyMap[scope.row.clearanceFreightCurrency]}} / {{unitMap[scope.row.clearanceFreightVolume]}}</span> <!-- <el-button v-if="orderExceptionData.orderExceptionStatus==0" type="primary" plain @click="routeToPrice(scope.row,2)">{{!scope.row.oneClearanceFreight?$t('报价'):$t('修改报价')}}</el-button> --> </div> </template> </el-table-column> </el-table> </div> <!-- 渠道异常 --> <div v-if="orderExceptionData.orderExceptionType=='channel_exception'&&handlerParams.orderExceptionHandlerResult=='set_shipment_channel'"> <div v-for="row in orderData.orderItemVOList" :key="row.orderItemId"> <div v-if="row.charging ==1"> <el-form-item style="margin-left:40px" :label="$t('全包价成交单价')+':'" size="medium"> <span v-if="!row.oneSeaFreight">{{$t('未报价')}}</span> <span v-else>{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</span> </el-form-item> </div> <div v-else class="feeList"> <el-form-item :label="$t('运费成交单价')+':'" size="medium"> <span v-if="!row.oneSeaFreight">{{$t('未报价')}}</span> <span v-else>{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</span> </el-form-item> <el-form-item :label="$t('清关费成交单价')+':'" size="medium"> <span v-if="!row.oneClearanceFreight">{{$t('未报价')}}</span> <span v-else>{{row.oneClearanceFreight}} {{currencyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}</span> </el-form-item> </div> </div> </div> <el-form-item v-if="orderExceptionData.orderExceptionType=='not_shipping_channel_exception'&&handlerParams.orderExceptionHandlerResult=='change_channel'&&orderExceptionData.reason" :label="$t('审核驳回原因')+':'" size="medium"> <span>{{orderExceptionData.orderExceptionNotes}}</span> </el-form-item> </el-form> </el-card> <!-- 只有不需要预付才需要审核 --> <template v-if="showWorkFlow&&orderExceptionData.orderExceptionStatus!=2"> <div class="page-title">{{$t('审批流程')}}</div> <work-flow xmlkey="commission_config" v-model="handlerParams.ccIds" /> </template> <div slot="footer" class="dialog-footer"> <!-- bpmStatus 异常流程状态,1处理中2通过3不通过4已取消 待审核可能没有bpmStatus字段 --> <template v-if="orderExceptionData.bpmStatus == 1 || (orderExceptionData.bpmId && !orderExceptionData.bpmStatus)"> <el-button type="primary" @click="$router.push(`/bpm/process-instance/detail?id=`+orderExceptionData.bpmId)">{{$t('审核中')}}</el-button> <el-button plain type="primary" @click="cancelAudit">{{$t('取消审核')}}</el-button> <el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button> </template> <template v-else-if="orderExceptionData.orderExceptionStatus==2"> <el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button> </template> <template v-else> <el-button type="primary" @click="submitForm">{{$t('提交')}}</el-button> <el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('取消')}}</el-button> </template> </div> <div class="preview" v-if="IsPreview"> <file-preview :key="timers" :TragetPic="TragetPic" :FilePreAll="FilePreAll" @Close="onClickClosePreview"></file-preview> </div> </div> </template> <script> import FileUpload from '@/components/FileUpload' import {getDictData, getDictDatas} from '@/utils/dict' import {getOrder} from '@/api/ecw/order' import FilePreview from '@/components/FilePreview' import { getCurrencyList } from '@/api/ecw/currency' import {getExceptionById,handlerExceptionByExceptionId,getOrderItemById,getOrderFeeById,getOrderExcptionResult,getOrderExceptionChannelPriceList} from "@/api/ecw/orderException" import {getFirstReceivableListByOrderId} from '@/api/ecw/financial' import WorkFlow from '@/components/WorkFlow' import {listByIds} from '@/api/ecw/region' import {listServiceUser} from "@/api/system/user"; import {cancelProcessInstance} from '@/api/bpm/processInstance' import {getCustomer} from '@/api/ecw/customer' import ProductSelector from '@/components/ProductSelector' import {getProductAttrList} from '@/api/ecw/productAttr' import {getChannelList} from '@/api/ecw/channel' import Selector from '@/components/Selector' import {openedRouterList as getOpenedRouterList} from '@/api/ecw/warehouse' import {getTradeCityList} from '@/api/ecw/region' import { getUnitList } from '@/api/ecw/unit'; import {getProduct,calculationPrice} from '@/api/ecw/product' import {getProductPriceGetPrice} from '@/api/ecw/productPrice' import Inputor from '@/components/Inputor' export default { name: "EcwOrderPrepaydeal", components: { FileUpload, WorkFlow,FilePreview,ProductSelector,Selector,Inputor }, data() { return { // 遮罩层 loading: false, orderExceptionData: {}, types:'package,bag', importance:1, orderData:{ }, orderId:0, orderExceptionId:0, handlerParams:{ orderExceptionId:0, orderExceptionStatus:"1", orderExceptionHandlerResult:'' }, //发货/收货人信息 consigneeData:[], routerList:[], multipleSelection:[], preException:[], orderFee:[], currencyList:[], showWorkFlow: false, // 是否显示工作流 IsPreview:false, // 控制预览弹窗字段 timers:"", //时间戳 FilePreAll:[], // 预览数组 TragetPic:{}, region:'', customerData:{},//归属客户 customerServiceList:[],//客户经理 productId1:null, productId2:null, productAttrList:[], // 商品属性 channelName:'/', channelList: [], // 出货取到 tradeCityList:[], unitList: [], selectLine:null, calculating: false, // 是否正在计算费用,防止频繁重新请求, loopOrderItem:[], //线路单询异常清关费 }; }, activated(){ this.handlerParams = { orderExceptionId:0, orderExceptionStatus:"1", orderExceptionHandlerResult:'' } if(this.$route.query.id){ console.log(this.$route.query.id) this.orderExceptionId = this.$route.query.id this.handlerParams.orderExceptionId = this.$route.query.id this.getList() } }, async created() { getUnitList().then(res => this.unitList = res.data) this.channelList=(await getChannelList()).data this.productAttrList = (await getProductAttrList()).data listServiceUser().then(r=>{ this.customerServiceList = r.data; }) await getCurrencyList().then(res => this.currencyList = res.data) this.tradeCityList = (await getTradeCityList()).data if(this.$route.query.id){ this.orderExceptionId = this.$route.query.id this.handlerParams.orderExceptionId = this.$route.query.id this.getList() } }, watch:{ 'handlerParams.orderExceptionHandlerResult'(val){ if(val == 'no_pay'){ this.showWorkFlow = true }else if(val=="continue_channel"){ this.showWorkFlow = true } else this.showWorkFlow = false // 如果是代收货款,则给默认单位 if(val == 'cod' && this.orderExceptionData.orderExceptionAmountCurrencyId){ this.$set(this.handlerParams, 'currency', this.orderExceptionData.orderExceptionAmountCurrencyId) } }, 'orderData.consigneeVO'(val){ if(!val) return '-' listByIds({ids: [val.country, val.province, val.city].join(',')}).then(res => { console.log('listById', res) let region = '' res.data.forEach(item => { region += " " + (this.$i18n.locale=='zh_CN'?item.titleZh:item.titleEn) }) this.region = region }) }, 'orderData.channelId'(){ this.getChannel() } }, computed: { currencyMap(){ let map = {} this.currencyList.forEach(item => { map[item.id] = this.$l(item, 'title') }) return map }, unitMap(){ let map = {} this.unitList.forEach(item => { map[item.id] = this.$l(item, 'title') }) return map }, // 是否已完成入仓 inWarehouse(){ return (!!this.orderData.inWarehouseState && this.orderData.inWarehouseState > 201) || this.orderData.shipmentState > 0 }, selectedRouter(){ console.log(this.handlerParams.lineId) // otherService 1 集运服务 2 送货上门 3 非控货订单代收货款 4 海外仓 5 提货异常 if(!this.handlerParams.lineId)return null return this.routerList.find(item => item.id == this.handlerParams.lineId) }, shopData(){ if(this.orderExceptionData.orderItemId && this.orderData && this.orderData.orderItemVOList){ if(this.orderExceptionData.orderExceptionType=='goods_add_exception'&&!this.handlerParams.productId){ this.handlerParams.productId = this.orderData.orderItemVOList.find(item => item.orderItemId == this.orderExceptionData.orderItemId).prodId // this.productId1 = this.handlerParams.productId // this.productId2 = this.handlerParams.productId } return this.orderData.orderItemVOList.find(item => item.orderItemId == this.orderExceptionData.orderItemId) } }, getDictData(){ return (type, value) => getDictData(type, value) || {} }, exportCityList(){ return this.tradeCityList.filter(item => item.type == 2 || item.type == 3) }, importCityList(){ return this.tradeCityList.filter(item => item.type == 1 || item.type == 3) }, exportCityIds(){ let ids = [] this.exportCityList.forEach(item => { ids.push(item.id) }) return ids }, importCityIds(){ let ids = [] this.importCityList.forEach(item => { ids.push(item.id) }) return ids }, }, methods: { changeLined(e){ this.selectLine = this.routerList.find(item => item.id == this.handlerParams.lineId) this.calculationPrice() }, getDictData, onTableMounted(e){ // console.warn('onTableMounted', e) }, getProdAtrr(ids){ if(!ids) return '' let attr = [] let attrIds = ids.split(',') this.productAttrList.forEach(item=>{ if(attrIds.indexOf(item.id) > -1||attrIds.indexOf(item.id+'')>-1){ attr.push(this.$l(item, 'attrName')) } }) return attr.join(',') }, /** 查询列表 */ getCurrencyLabel(id){ var label = this.currencyList.filter(item=>item.id == id) if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn return '' }, getChannel(){ if(!this.order || !this.order.channelId || this.order.transportId == 1 || this.order.transportId == 2) return getChannel(this.order.channelId).then(res => { this.channelName = this.$i18n.locale=='zh_CN'?res.data.nameZh:res.data.nameEn }) }, getList() { let that = this that.loading = true; getExceptionById(that.orderExceptionId).then(response => { that.orderExceptionData = response.data; // that.orderExceptionData.orderExceptionType = 'order_other_exception' // that.orderExceptionData.orderExceptionType = 'order_miss_exception' // that.orderExceptionData.orderExceptionType = 'not_customer_service_exception' // that.orderExceptionData.orderExceptionType = 'not_shipping_channel_exception' // that.orderExceptionData.orderExceptionType = 'channel_exception' // that.orderExceptionData.orderExceptionType = 'fee_exception' that.loading = false; that.orderId = response.data.orderId that.getOrderData() if(that.orderExceptionData.orderExceptionAttr){ that.handlerParams.fileList = that.orderExceptionData.orderExceptionAttr.split(',') } // if(response.data.hasOwnProperty('orderItemId')){ // that.getShopData(response.data.orderItemId) // } if(that.orderExceptionData.orderExceptionType == 'order_pay_exception'){ that.getOrderFeeByIdData() that.getPreExceptionData() } if(that.orderExceptionData.orderExceptionStatus>0){ that.getOrderExcptionResult() } }); }, // 获取路线 getOpenedRouterList(){ let params = {} if(this.orderData.departureVO&&this.orderData.departureVO.departureId){ params.startCityId = this.orderData.departureVO.departureId } if(this.orderData.objectiveVO&&this.orderData.objectiveVO.objectiveId){ params.destCityId = this.orderData.objectiveVO.objectiveId } if(this.orderData.transportId){ params.transportType = this.orderData.transportId } // 始发,目的和运输方式都没有的时候不获取 if(!params.startCityId && !params.destCityId && !params.transportType) return false getOpenedRouterList(params).then(res => { this.routerList = res.data.filter(item => { return this.exportCityIds.indexOf(item.startCityId) > -1 && this.importCityIds.indexOf(item.destCityId) > -1 }) if(this.orderExceptionData.orderExceptionType == 'channel_exception'||this.orderExceptionData.orderExceptionType == 'not_shipping_channel_exception'){ this.selectLine = this.routerList.find(item => item.id == this.handlerParams.lineId) } } ) }, changeExceptionStatus(){ this.$set(this.handlerParams,'orderExceptionHandlerResult','') }, //订单详情 getOrderData(){ getOrder(this.orderId).then(response => { this.orderData = response.data if(this.orderData.channelId!=0){ this.handlerParams.channelId = this.orderData.channelId } this.handlerParams.lineId = this.orderData.lineId if(response.data.customerId){ this.getCustomerData(response.data.customerId) } if(this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception'){ // this.handlerParams.channelPriceList = [] this.getOpenedRouterList() if(this.orderExceptionData.orderExceptionStatus==0){ this.orderData.orderItemVOList.map(v=>{ if(!v.oneSeaFreight){ v.seaFreightCurrency = this.currencyList[0]['id'] v.seaFreightVolume = this.unitList[1]['id'] } if(!v.oneClearanceFreight){ v.clearanceFreightCurrency = this.currencyList[0]['id'] v.clearanceFreightVolume = this.unitList[1]['id'] } }) }else if(handlerParams.orderExceptionHandlerResult=='continue_channel'){ this.getExceptionPriceList('continue_channel') } } if(this.orderExceptionData.orderExceptionType=='line_loop_exception'){ this.getExceptionPriceList('line_loop_exception') } }); }, getCustomerData(id){ getCustomer(id).then(res=>{ this.customerData = res.data }) }, //获取异常结果 getOrderExcptionResult(){ getOrderExcptionResult({orderExceptionId:this.orderExceptionId}).then(res=>{ this.handlerParams = Object.assign(this.handlerParams,res.data.list[0]) if(!this.orderExceptionData.handlerTime){ this.orderExceptionData.handlerTime = this.handlerParams.handlerTime } if(this.handlerParams.handlerRemark){ this.$set(this.handlerParams,'orderExceptionHandlerRemark', this.handlerParams.handlerRemark) } if(this.handlerParams.handlerResult){ this.$set(this.handlerParams,'orderExceptionHandlerResult', this.handlerParams.handlerResult) } if(this.handlerParams.productId){ this.productId2 = this.productId1 = this.handlerParams.productId } }) }, getOrderFeeByIdData(){ getOrderFeeById({id:this.orderId}).then(response => { this.orderFee = response.data this.handlerParams.orderExceptionHandlerResult = this.orderFee.result[0] // if(this.orderExceptionData.orderExceptionStatus==2){ // this.getOrderExcptionResult() // } }) }, getPreExceptionData(){ getFirstReceivableListByOrderId({id:this.orderId}).then(response => { this.preException = response.data // this.preException.forEach(item=>{ // var curr = getDictData('shipping_price_unit', item.currencyId) // if(curr.label == this.$t('美元')){ // item.doller = item.totalAmount // } // }) }); }, /* getShopData(id){ getOrderItemById(id).then(res=>{ this.shopData = res.data }) }, */ handleSelectionChange(val) { this.multipleSelection = val; }, // 根据线路id显示线路名称 getRouterNameById(){ if(this.orderData.logisticsInfoDto) { return this.$t('从')+this.$t('【')+this.orderData.logisticsInfoDto.startTitleZh + this.$t('】')+this.$t('发往')+this.$t('【') + this.orderData.logisticsInfoDto.destTitleZh+this.$t('】') } return this.$t('无') }, //新增异常处理结果切换 handlerResultChange(){ // if(this.orderExceptionData.orderExceptionType=='goods_add_exception'){ // this.productId1 = this.handlerParams.productId // this.productId2 = this.handlerParams.productId // } if(this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception'||this.orderExceptionData.orderExceptionType=='channel_exception'){ this.getOpenedRouterList() } }, submitForm(){ if(!this.handlerParams.orderExceptionHandlerResult){ this.$modal.msgError(this.$t('请选择处理结果')); return } if(this.orderExceptionData.orderExceptionType=='order_doc_exception'&&this.handlerParams.fileList&&this.handlerParams.fileList.length>0){ // if(!this.handlerParams.fileList||this.handlerParams.fileList.length==0){ // this.$modal.msgError(this.$t('请上传报关资料')); // return // } this.handlerParams.files = Array.isArray(this.handlerParams.fileList) ? this.handlerParams.fileList.join(',') : this.handlerParams.fileList } if(this.orderExceptionData.orderExceptionType=='goods_add_exception'&&this.handlerParams.orderExceptionHandlerResult=='goods_absent'){ this.$redirect('/product/product-list?prodId=' + this.handlerParams.productId) return } if(this.orderExceptionData.orderExceptionType=='goods_add_exception'&&this.handlerParams.orderExceptionHandlerResult=='goods_exists'){ if(this.productId1){ this.handlerParams.productId = this.productId1 }else{ this.$modal.msgError(this.$t('请选择产品')); return } } if((this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception'&&this.handlerParams.orderExceptionHandlerResult=='change_channel')||(this.orderExceptionData.orderExceptionType=='channel_exception'&&this.handlerParams.orderExceptionHandlerResult=='set_shipment_channel')){ if(this.handlerParams.channelId==0){ this.$modal.msgError(this.$t('请选择出货渠道')); return } } if((this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception')||this.orderExceptionData.orderExceptionType=='line_loop_exception'){ if(this.orderExceptionData.orderExceptionType=='line_loop_exception'){ this.handlerParams.orderItemVOList = this.loopOrderItem }else{ this.handlerParams.orderItemVOList = this.orderData.orderItemVOList } this.handlerParams.channelPriceList = [] this.handlerParams.orderItemVOList.map(v=>{ var listItem = { orderId:v.orderId, orderItemId:v.orderItemId, charging:v.charging, freightFee:v.oneSeaFreight, isPayAdvance:v.isPayAdvance||0, freightCurrencyId:v.seaFreightCurrency, freightUnitId:v.seaFreightVolume, clearanceFee:v.oneClearanceFreight, clearanceCurrencyId:v.clearanceFreightCurrency, clearanceUnitId:v.clearanceFreightVolume } this.handlerParams.channelPriceList.push(listItem) }) } handlerExceptionByExceptionId(this.handlerParams).then(res=>{ this.$modal.msgSuccess(this.$t('提交成功')); this.$redirect('/order/pending?id=' + this.orderData.orderId) }) }, /** 跟进按钮操作 */ handleAdd() { this.$router.push({ path: "/financial/creatCollection?receiptId=0", query:{ orderId:this.orderId, } }); }, // 取消审核 cancelAudit(){ this.$prompt("请输入取消原因", { inputPattern: /[\S]+/, inputErrorMessage: this.$t('不能为空') }).then(({value}) => { return cancelProcessInstance(this.orderExceptionData.bpmId, value) }) .then(res => { this.getList() }) }, getFileName(fileName){ var fileArr = fileName.split('/') return fileArr[fileArr.length-1] }, getFileFormat(fileName){ var fileArr = this.getFileName(fileName).split('.') return fileArr[fileArr.length-1] }, // 打开预览 onClickOpenPreview(val,index){ this.TragetPic = { // 当前点击的文件 FileName: this.getFileName(val), // 文件名称 name: this.getFileName(val), // 文件名称(可以不传) format:this.getFileFormat(val), // 文件格式 url: val, // 预览地址 downUrl:"", // 下载地址 } // 目标对象 var fileArr = this.handlerParams.fileList fileArr.forEach(item =>{ // 需要预览的文件数组(可以传空数组就是单张预览) let obj = { FileName: this.getFileName(item), name: this.getFileName(item), format:this.getFileFormat(item), url: item, downUrl:"", } this.FilePreAll.push(obj) }) console.log(this.FilePreAll) this.IsPreview = true // 打开预览弹窗 this.timers = new Date().getTime() // 刷新预览地址 }, // 关闭预览 onClickClosePreview(val){ this.IsPreview = val // 由组件内部传入的关闭数据赋值关闭 }, onProductChange(product){ if(!product){ this.productId1 = null this.productId2 = null return false } this.productId1 = product.id this.productId2 = product.id }, //不可出渠道异常 ,未报价跳转 routeToPrice(row,index){ if(index==2){ this.$router.push('/product/product-list?prodId=' + row.prodId) return } // 未报价异常lk , if(row.orderItemId){ var productData = this.orderData.orderItemVOList.find(item=>item.orderItemId==row.orderItemId) if(productData){ getProduct(productData.prodId).then(res=>{ let params = { product_id: productData.prodId, product_type: res.data.typeId, transportId: this.orderData.transportId, exportCity: this.orderData.logisticsInfoDto.startCityId, importCity: this.orderData.logisticsInfoDto.destCityId, startWarehouseId: this.orderData.logisticsInfoDto.startWarehouseId, destWarehouseId: this.orderData.logisticsInfoDto.destWarehouseId, lineId: this.orderData.logisticsInfoDto.lineId, channelId: this.orderData.logisticsInfoDto.channelId } let queryParams = { productId: productData.prodId, lineId: this.orderData.logisticsInfoDto.lineId, channelId: this.orderData.logisticsInfoDto.channelId } let url = '' if([3,4].indexOf(this.orderData.transportId) > -1){ url = '../../lineProject/product-price/edit-air?' + (new URLSearchParams(params)).toString() }else{ url = '../../lineProject/product-price/edit-sea?' + (new URLSearchParams(params)).toString() } getProductPriceGetPrice(queryParams).then(res=>{ console.log(res) if(res.data){ if([3,4].indexOf(+this.orderData.transportId) > -1){ url = '../../lineProject/product-price/edit-air?action=update&id='+res.data.id }else{ url = '../../lineProject/product-price/edit-sea?action=update&id='+res.data.id } } return this.$router.push(url) }) /* +productData.prodId +'&product_type='+res.data.typeId +'&transportId='+this.orderData.transportId +'&exportCity='+this.orderData.logisticsInfoDto.startCityId+'&importCity='+this.orderData.logisticsInfoDto.destCityId */ }) } }else{ return this.$confirm(this.$t('数据缺少orderItemId参数,确定要跳转设置路线价格么?')).then(res => { let url = '' if([3,4].indexOf(this.orderData.transportId) > -1){ url = '../../lineProject/product-price/edit-air?' }else{ url = '../../lineProject/product-price/edit-sea?' } this.$router.push(url) }) } }, // 计算商品运费(根据货值计算保费) calculationPrice(){ this.$forceUpdate() let calcable = true if(!this.orderData.orderItemVOList.length) return false this.orderData.orderItemVOList.forEach(item => { if(!item.prodId){ calcable = false } }) console.log('calculationPrice', this.handlerParams.channelId) if(this.calculating || !calcable) return false this.calculating = true console.log('calculating ---> ') const params = { lineId: this.handlerParams.lineId, transportId: this.orderData.transportId, channelId: [3,4].indexOf(this.orderData.transportId) > -1 ? this.handlerParams.channelId : undefined, prodConditionParamList: this.getProductListWithDefaultValue(), orderType: this.orderData.orderType } // if(this.handlerParams.channelId){ // params.channelId = this.handlerParams.channelId // } this.$set(this.handlerParams,'channelId', this.handlerParams.channelId) calculationPrice(params).then(res => { this.orderData.orderItemVOList.map((item, index) => { item.oneClearanceFreight = res.data.prodCostDtoList[index].oneClearanceFee item.clearanceFreightCurrency = res.data.prodCostDtoList[index].clearanceFeeCurrency item.clearanceFreightVolume = res.data.prodCostDtoList[index].clearanceFeeVolume item.oneSeaFreight = res.data.prodCostDtoList[index].oneFreight item.seaFreightCurrency = res.data.prodCostDtoList[index].freightCurrency item.seaFreightVolume = res.data.prodCostDtoList[index].freightVolume }) }).finally(() => { this.calculating = false }) }, // 体积。件数,数量,重量为选填,但是接口确实必填,所以生成一个副本并赋予默认值 getProductListWithDefaultValue(){ let arr = [] this.orderData.orderItemVOList.forEach(item => { let tmp = {...item} if(!tmp.volume)tmp.volume = 1 if(!tmp.weight)tmp.weight = 1 if(!tmp.quantity)tmp.quantity = 1 if(!tmp.num)tmp.num = 1 tmp.orderType = item.orderItemType arr.push(tmp) }) return arr }, //获取提交的不可出渠道异常商品清关费 getExceptionPriceList(type){ let that = this if(type=='line_loop_exception'){ this.loopOrderItem =[] that.orderData.orderItemVOList.map((v,i)=>{ if(v.orderItemId==this.orderExceptionData.orderItemId){ this.loopOrderItem.push(v) } }) }else{ getOrderExceptionChannelPriceList({orderId:that.orderId,exceptionId:parseInt(that.orderExceptionId),exceptionResultId:that.handlerParams.id}).then(res=>{ if(res.code==0){ if(res.data.length>0){ that.orderData.orderItemVOList.map(v=>{ var item = res.data.find(vs=>vs.orderItemId==v.orderItemId) if(item){ v.oneSeaFreight = item.freightFee v.seaFreightCurrency = item.freightCurrencyId v.seaFreightVolume = item.freightUnitId v.oneClearanceFreight = item.clearanceFee v.clearanceFreightCurrency = item.clearanceCurrencyId v.clearanceFreightVolume = item.clearanceUnitId } }) } } }) } } } }; </script> <style scoped> .link-text{ margin-top:20px; } .link-text span{ font-size:16px; font-weight:600; margin-right:20px; } .card-title{ font-size: 18px; font-weight: bold; margin-top: 10px; } .header{ width: 100%; display: flex; align-items: center; justify-content: space-between; } .card{ margin-top: 20px; } .price_list{ display: flex; align-items: center; margin-bottom:10px; } .price_label{ width: 112px; font-weight: 700; text-align: right; margin-right: 6px; font-size: 14px; color:#606266; } .channel{ width: 100%; display: flex; align-items: center; justify-content:space-evenly; } .dialog-footer{ padding: 40px; width: 60%; align-items: center; display: flex; /* justify-content: space-between; */ } .filelist{ display: flex; flex-wrap: wrap; align-items: center; flex-direction: column } .filelist span{ color: #1E98D7; } .red{ color: red; } .button{ margin-left:40px; } .feeList{ display: flex; flex-direction: column } ::v-deep .el-input--medium .el-input__inner { padding: 0 4px; } ::v-deep .el-table th.el-table__cell > .cell{ padding:0 2px !important; } ::v-deep .el-table td.el-table__cell div{ padding:0 2px !important; } </style>