Commit 8a2f75f4 authored by 邓春圆's avatar 邓春圆

Merge remote-tracking branch 'origin/release2.2' into release2.2

parents 073198c7 7b610d00
......@@ -59,7 +59,7 @@ export default {
padding-right: 30px;
padding-left: 5px;
}
$sizes: 0, 10,20,30,50,75,100,150,200,300,500,800,1000;
$sizes: 0, 5, 10,20,30,50,75,100,150,200,300,500,800,1000;
@for $i from 1 through length($sizes){
$item: nth($sizes, $i);
.ml-#{$item}{
......
......@@ -350,3 +350,22 @@ export function dealCustomsSplitNotify(notifyId){
method: "get",
})
}
// 自编号报表分页
export function boxSettlementPage(params) {
return request({
url: "/shipment/box/pageSettlement",
method: "get",
params,
});
}
// 导出自编号汇总excel
export function exportSettlementExcel(params) {
return request({
url: "/shipment/box/export-shipment-summary",
method: "get",
responseType: "blob",
params,
});
}
......@@ -413,6 +413,33 @@ export function getOrderSpecialByApproveId(approveId) {
})
}
// 特价申请-批量
export function createOrderSpecialBatch(data) {
return request({
url: '/ecw/order/special/apply/batch',
method: 'put',
data: data
})
}
// 获得订单特价申请详情-批量
export function getOrderSpecialBatch(orderId, type) {
console.log(orderId, type)
return request({
url: '/ecw/order/special/info/batch/' + orderId + '/' + type,
method: 'get'
})
}
// 根据订单项商品ID与审批类型获得订单商品的特价申请详情-批量
export function getOrderSpecialByApproveIdBatch(approveId) {
return request({
url: '/ecw/order/special/batch/info?approveId=' + approveId,
method: 'get'
})
}
// 订单号检索功能
export function getOrderNoSearch(params) {
return request({
......@@ -771,6 +798,14 @@ export function uploadFile(data) {
data: data
})
}
//上传
export function uploadOrgname(data) {
return request({
url: '/infra/file/org-name/up',
method: 'post',
data: data
})
}
/*根据订单ID查询目的国*/
export function getDestCountryByOrderId(params){
return request({
......
......@@ -114,7 +114,7 @@ export function exportExcel(params) {
return request({
url: '/ecw/order-exception/export-excel',
method: 'get',
timeout: 3*60*1000,
timeout: 30*60*1000,
params,
// timeout: 3*60*1000,
responseType: 'arraybuffer'
......
......@@ -145,3 +145,12 @@ export function deleteAllSplit(orderId) {
params: {orderId}
})
}
// 获取拆单订单的总货值与箱数拆分记录
export function splitItemWorthCheck(orderId, orderSplitItemId) {
return request({
url: '/order/split-item/worth/check',
method: 'get',
params: {orderId, orderSplitItemId}
})
}
......@@ -5,7 +5,7 @@
:clearable="clearable"
remote
reserve-keyword
placeholder="请选择"
:placeholder="placeholder ? placeholder : $t('请选择')"
:loading="loading">
<el-option
v-for="(item, index) in list"
......@@ -22,6 +22,7 @@ export default {
props:{
value: [String, Number],
clearable: Boolean,
placeholder: String,
manage:{
type:Boolean,
default:false
......
......@@ -4041,5 +4041,11 @@
"保费币种": "Premium Currency",
"是否支持控货": "Does it support controlling goods",
"默认送货上门": "Default door-to-door delivery",
"广州市捷道国际货运代理有限公司": "E&C LOGISTICS LIMITED"
"广州市捷道国际货运代理有限公司": "E&C LOGISTICS LIMITED",
"报关退税,请备齐资料。":"Customs refund, prepare necessary documents.",
"订单号、唛头、提单号": "order number、marks、B/L NO",
"发货人名称、手机号": "sender name or mobile",
"收货人名称、手机号": "Receiver Name or Mobile",
"订单费用报表": "Order cost report",
"请先选择目的国": "select the destination country first"
}
......@@ -2,7 +2,11 @@ import router from '@/router'
const state = {
visitedViews: [],
cachedViews: []
cachedViews: [],
}
// 获取页面的缓存名称
const getViewName = (view) => {
return view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
}
const mutations = {
......@@ -16,7 +20,7 @@ const mutations = {
},
ADD_CACHED_VIEW: (state, view) => {
if (view.meta && view.meta.componentPath) {
let cacheName = view.meta.componentPath.split('/').map(item => item.substring(0, 1).toUpperCase() + item.substring(1).toLowerCase()).join('')
let cacheName = getViewName(view)
if (state.cachedViews.includes(cacheName)) return
state.cachedViews.push(cacheName)
}
......@@ -31,7 +35,9 @@ const mutations = {
}
},
DEL_CACHED_VIEW: (state, view) => {
const index = state.cachedViews.indexOf(view.name)
console.log('DEL_CACHED_VIEW', view)
const viewName = getViewName(view)
const index = state.cachedViews.indexOf(viewName)
index > -1 && state.cachedViews.splice(index, 1)
},
......
......@@ -218,6 +218,7 @@ export const DICT_TYPE = {
BOX_CUSTOMS_ERROR_TYPE: "customs_error_type",// 报关异常状态
BOX_SHIPPING_ERROR_TYPE: "shipping_error_type",// 起运异常状态
BOX_ARRIVAL_ERROR_TYPE: "arrival_error_type",// 到港异常状态
SETTLEMENT_STATUS: 'settlement_status', // 结算状态
APP_TYPE:"app_type", //系统类型
AIR_SHIPMENT_PROCESS:'air_shipment_process'
......
......@@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode'
import Cookies from "js-cookie";
import {getTenantEnable} from "@/utils/ruoyi";
import { getLocale } from '@/utils/db';
import i18n from "@/i18n";
// 是否显示重新登录
export let isRelogin = { show: false };
......@@ -114,9 +115,15 @@ service.interceptors.response.use(res => {
// 额外情况
return Promise.reject(res.data)
} else if (code !== 200) {
Notification.error({
title: msg
})
// 如果内容很长则用alert提示,不然可能显示不全,自动隐藏也会导致看不完整就消失了
if(msg.length > 300){
MessageBox.alert(msg, i18n.t('错误提示'), i18n.t('确定'))
}else{
Notification.error({
title: msg
})
}
return Promise.reject(msg || 'error')
} else {
return res.data
......
......@@ -141,30 +141,34 @@
</el-table-column>
<el-table-column :label="$t('入仓体积')" align="center" >
<template slot-scope="scope">
<el-input v-model="scope.row.volume" @change="updateField(scope.row, 'volume')" size="mini" disabled>
{{scope.row.volume}}
<!--<el-input v-model="scope.row.volume" @change="updateField(scope.row, 'volume')" size="mini" disabled>
<span slot="append"></span>
</el-input>
</el-input>-->
</template>
</el-table-column>
<el-table-column :label="$t('收费体积')" align="center" >
<template slot-scope="scope">
<el-input v-model="scope.row.chargeVolume" @change="updateField(scope.row, 'chargeVolume')" size="mini" disabled>
{{scope.row.chargeVolume}}
<!--<el-input v-model="scope.row.chargeVolume" @change="updateField(scope.row, 'chargeVolume')" size="mini" disabled>
<span slot="append"></span>
</el-input>
</el-input>-->
</template>
</el-table-column>
<el-table-column :label="$t('入仓重量')" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.weight" @change="updateField(scope.row, 'weight')" size="mini" disabled>
{{scope.row.weight}}kg
<!--<el-input v-model="scope.row.weight" @change="updateField(scope.row, 'weight')" size="mini" disabled>
<span slot="append">kg</span>
</el-input>
</el-input>-->
</template>
</el-table-column>
<el-table-column :label="$t('收费重量')" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.chargeWeight" @change="updateField(scope.row, 'chargeWeight')" size="mini" disabled>
{{scope.row.chargeWeight}}kg
<!--<el-input v-model="scope.row.chargeWeight" @change="updateField(scope.row, 'chargeWeight')" size="mini" disabled>
<span slot="append">kg</span>
</el-input>
</el-input>-->
</template>
</el-table-column>
<el-table-column :label="$t('货值')" align="center">
......@@ -231,7 +235,7 @@
<span class="mr-10">{{ $t('入仓重量') }}:{{ mainOrderItem.weight || 0 }}kg</span>
<span class="mr-10">{{ $t('收费重量') }}:{{ mainOrderItem.chargeWeight || 0 }}kg</span>
<span class="mr-10">{{ $t('数量(个)') }}:{{ mainOrderItem.quantity || 0 }}</span>
<span class="mr-10">{{ $t('剩余货值') }}:{{ mainOrderItem.worth || 0 }}{{ $t('元') }}</span>
<span class="mr-10">{{ $t('剩余可拆货值') }}:{{ leftWorth}}{{ $t('元') }}</span>
</div>
<div class="page-title">{{$t('可拆入仓记录')}}</div>
<el-table
......@@ -291,7 +295,7 @@
<el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}">
<el-tag v-if="getWarehouseInSplitData(row.id,'num') >= row.cartonsNum" disabled size="mini" type="primary" >{{$t('已拆完')}}</el-tag>
<el-button v-else size="mini" type="primary" @click="putInRecord(row)" :disabled="leftSplitNum <= 0">放入</el-button>
<el-button v-else size="mini" type="primary" @click="putInRecord(row)" :disabled="leftSplitNum <= 0">{{$t('放入')}}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -299,7 +303,7 @@
<div class="page-title" style="margin: 0">
{{$t('已放入入仓记录')}}
</div>
<el-button type="danger" size="mini" @click="clearAll">清空放入数据</el-button>
<el-button type="danger" size="mini" @click="clearAll">{{$t('清空放入数据')}}</el-button>
</div>
<el-table
......@@ -348,12 +352,12 @@
</el-table-column>
<el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}">
<el-button size="mini" type="primary" @click="deleteRow($index)">删除</el-button>
<el-button size="mini" type="primary" @click="deleteRow($index)">{{$t('删除')}}</el-button>
</template>
</el-table-column>
</el-table>
<div class="page-title">放入数据</div>
<div class="page-title">{{$t('放入数据')}}</div>
<div class="pl-20 mb-10">
<span class="mr-10">{{$t('箱数')}}:{{ putin.num || 0 }},</span>
<span class="mr-10">{{ $t('数量(个)') }}:{{ putin.quantity || 0 }},</span>
......@@ -368,7 +372,7 @@
</el-form-item>
<el-form-item :label="$t('放入货值')">
<el-input-number v-model="shopForm.worth" controls-position="right" :min="0" :max="mainOrderItem.worth">
<el-input-number v-model="shopForm.worth" controls-position="right" :min="0" :max="leftWorth">
<template slot="append">{{ $t('') }}</template>
</el-input-number>
</el-form-item>
......@@ -400,7 +404,7 @@ import {
getSplitList,
// quantitycheck,
createSplitItem,
deleteSplitItem,
deleteSplitItem, splitItemWorthCheck,
} from "@/api/ecw/orderHandle";
import {quantityRequired} from "@/api/ecw/warehouse";
import { getTradeCityList } from "@/api/ecw/region";
......@@ -472,7 +476,9 @@ export default {
// 当前选择的入仓记录ID
selectedWarehouseInId: null,
// 当前正在放入的入仓记录
currentPutIn: null
currentPutIn: null,
/*// 订单剩余数据
orderLeftData: null*/
};
},
created() {
......@@ -515,11 +521,17 @@ export default {
'shopForm.orderItemId'(){
// 默认取以前放入的品名
this.shopForm.specsRecordVOList = []
let specsRecordVOList = this.splitData.orderSplitItemBackVOList.find(item => item.orderItemId == this.shopForm.orderItemId)?.specsRecordVOList || []
const splitItem = this.splitData.orderSplitItemBackVOList.find(item => item.orderItemId == this.shopForm.orderItemId)
let specsRecordVOList = splitItem?.specsRecordVOList || []
specsRecordVOList.forEach(item => {
const [boxGauge1, boxGauge2, boxGauge3] = item.boxGauge.split('*')
this.shopForm.specsRecordVOList.push({...item, boxGauge1, boxGauge2, boxGauge3})
})
// 显示原来默认的收费数据
this.$set(this.shopForm, 'chargeVolume', splitItem.chargeVolume)
this.$set(this.shopForm, 'chargeWeight', splitItem.chargeWeight)
this.$set(this.shopForm, 'worth', splitItem.worth)
}
},
computed: {
......@@ -641,7 +653,23 @@ export default {
num -= item.num
})*/
return num
}
},
// 订单剩余可拆货值
leftWorth(){
if(!this.orderData?.costVO?.totalWorth)return 0;
let worth = new Decimal(this.orderData.costVO.totalWorth)
this.splitData.orderSplitItemBackVOList.forEach(item =>{
worth = worth.minus(item.worth || 0)
})
// 包当前选择的品名之前填写的货值包含进去
if(this.shopForm.orderItemId){
let splitItem = this.splitData.orderSplitItemBackVOList.find(item => item.orderItemId == this.shopForm.orderItemId)
if(splitItem){
worth = worth.plus(splitItem.worth || 0)
}
}
return worth.toNumber()
},
},
methods: {
/*检查并提交字段(体积,重量)修改*/
......@@ -817,6 +845,10 @@ export default {
if(this.isQuantity){
params.quantity = this.putin.quantity
}
// 货值不能超过剩余货值
if(params.worth > this.leftWorth){
return this.$message.error(this.$t("货值不能超过剩余货值"));
}
createSplitItem(params).then((res) => {
this.$message.success(this.$t("放入成功"));
this.querySplitGoods();
......@@ -952,9 +984,18 @@ export default {
const chargeWeight = orderItem.itemType === 3 ? (orderItem.chargeWeight*rate).toFixed(2) : this.putin.weight
this.$set(this.shopForm, 'chargeVolume', chargeVolume)
this.$set(this.shopForm, 'chargeWeight', chargeWeight)
this.$set(this.shopForm, 'worth', (orderItem.worth*rate).toFixed(2))
}
},
// 货值按照主单的总货值*订单的箱数比例
let worth = (this.orderData.costVO.totalWorth * this.putin.num / this.orderData.sumNum).toFixed(2)
this.$set(this.shopForm, 'worth', worth)
},
// 查询订单剩余数据
/*getOrderLeftData(){
splitItemWorthCheck(this.orderData.orderId).then(res => {
this.orderLeftData = res.data
})
}*/
}
};
</script>
......
......@@ -29,7 +29,7 @@ export default {
},
computed:{
getCustomerList(){
let index = this.customerList.findIndex(item => item.id !== this.recommended[0])
let index = this.customerList.findIndex(item => item.id === this.recommended[0]?.id)
if(index > -1) return this.customerList
else return [...this.customerList,...this.recommended]
}
......@@ -50,7 +50,6 @@ export default {
},
watch:{
value(val){
console.log(val,'val')
this.customer = val;
if(!(this.customerList.some(i => i.id === val)) && val !== undefined){
getCustomerList({ids:val}).then(r => {
......
......@@ -60,7 +60,7 @@
<!-- </el-form-item>-->
<el-form-item :label="$t('常用提货网点')" prop="remarks">
<el-select v-model="form.pickupPoint">
<el-option v-for="item in serviceNetworkList " :value="item.id" :label="isChinese ? item.titleZh : item.titleEn "></el-option>
<el-option v-for="item in getNodeLists " :value="item.id" :label="isChinese ? item.titleZh : item.titleEn "></el-option>
</el-select>
</el-form-item>
</el-col>
......@@ -98,13 +98,13 @@
<el-form-item :label="$t('主营类别')" prop="productType">
<el-row :gutter="10">
<el-col :span="11">
<el-select v-model="form.productType" :placeholder="$t('请选择产品类别')" @change="form.productId = ''">
<el-select @change="change" v-model="form.productType" :placeholder="$t('请选择产品类别')">
<el-option :label="item.titleZh" :value="item.id" v-for="(item) in productTypeList" :key="item.id"/>
</el-select>
</el-col>
<el-col :span="11">
<el-select v-model="form.productId" :placeholder="$t('请选择')">
<el-option :label="item.titleZh" :value="parseInt(item.id)" v-for="(item) in productListFilter" :key="item.id"/>
<el-option :label="item.titleZh" :value="parseInt(item.id)" v-for="(item) in productList" :key="item.id"/>
</el-select>
</el-col>
</el-row>
......@@ -592,19 +592,12 @@ export default {
this.getCustomer(this.customerId).then(() => {
getCustomerContactsListByCustomer({customerId: customerId}).then(r => {
this.form.customerContacts = r.data
let list = this.form.customerContacts.map(item => item.userid);
if(list.length >0){
memberUserList({ids:list.join(',')}).then(r=>{
this.selectMemberList = r.data
})
}
if(this.form.promoter){
getCustomerList({ids:this.form.promoter}).then(r => {
this.recommended = r.data;
})
}
})
if(this.form.promoter){
getCustomerList({ids:this.form.promoter}).then(r => {
this.recommended = r.data;
})
}
// 打开重泡货开关
if(this.form.weightUnit){
this.showZhong = true
......@@ -634,14 +627,12 @@ export default {
}
getNodeList().then(r => {
this.nodeList = r.data
this.getNodeLists = r.data
})
getProductTypeList().then(r => {
this.productTypeList = r.data
})
getProductList().then(r => {
this.productList = r.data
})
getTradeCityList({type: 1}).then(r => {
this.importCityList = r.data.filter(item => item.type === '1')
})
......@@ -657,13 +648,10 @@ export default {
getCountryListAll().then(r => {
this.countryList = r.data
})
// 获取服务网点
getServiceNetwork().then(r =>{
this.serviceNetworkList = r.data
})
},
data(){
return {
getNodeLists:[],
isCustomerServiceConfirmed:false,
getDictDatas,
DICT_TYPE,
......@@ -718,6 +706,15 @@ export default {
},
methods: {
change(val){
this.form.productId = '';
this.getProductListFn(val);
},
getProductListFn(val){
getProductList({typeId:val}).then(r => {
this.productList = r.data
})
},
deleteBankData(index){
this.form.customerBanks.splice(index, 1);
},
......@@ -949,6 +946,11 @@ export default {
return getCustomer(id).then(response => {
console.log(response,'response')
this.form = { ...this.form, ...response.data, id: this.customerId,transportType: response.data.transportType && response.data.transportType !== '' ? response.data.transportType.split(',') : [],customerBanks:response.data.customerBankBackVOList };
if(this.form.productType){
console.log('1231',this.form.productType)
this.getProductListFn(this.form.productType)
}
this.open = true;
this.title = this.$t('修改客户');
this.getZhongPao()
......
......@@ -7,8 +7,8 @@
<div>
<el-button type="primary" size="small" v-has-permi="['ecw:customer:query-edit']" @click="$router.push('/customer/edit/' + id)">{{$t('编辑')}}</el-button>
<el-button v-has-permi="['ecw:customer:query-quoted-price']" @click="$router.push('/offer/create')" type="primary" size="small">{{$t('报价')}}</el-button>
<el-button v-has-permi="['ecw:customer:query-follow-up']" type="primary" size="small" @click="$refs['customerFollow'].customerFollow.dialogVisible = true">{{$t('跟进')}}</el-button>
<el-button v-has-permi="['ecw:customer:query-customer-complaint']" type="primary" size="small" @click="$refs['customerComplaint'].handleAdd()">{{$t('客诉')}}</el-button>
<el-button v-has-permi="['ecw:customer:query-follow-up']" type="primary" size="small" @click="customerFollowFn('follow')">{{$t('跟进')}}</el-button>
<el-button v-has-permi="['ecw:customer:query-customer-complaint']" type="primary" size="small" @click="customerFollowFn('complain')">{{$t('客诉')}}</el-button>
<el-button v-hasPermi="['ecw:customer:query-delete']" type="danger" size="small" @click="deleteCustomerFn()">{{$t('删除')}}</el-button>
</div>
</div>
......@@ -29,7 +29,7 @@
<el-descriptions-item :label="$t('客户等级')">{{ getDictDataLabel(DICT_TYPE.CUSTOMER_LEVEL, customer.level) }}</el-descriptions-item>
<el-descriptions-item :label="$t('信用等级')">{{isChinese ? customer.creditLevelNameZh :customer.creditLevelNameEn }}</el-descriptions-item>
<el-descriptions-item :label="$t('国家')">{{ isChinese ? country.nameZh : country.nameEn }}</el-descriptions-item>
<el-descriptions-item :label="$t('国家')">{{$l(customer,'countryName')}}{{customer.countryName}}</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('业务员')">{{ customer }}</el-descriptions-item>-->
<el-descriptions-item :label="$t('客户来源')">{{ getDictDataLabel(DICT_TYPE.CUSTOMER_SOURCE, customer.source) }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户类别')">
......@@ -37,17 +37,19 @@
</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('联系方式')">{{ customer }}</el-descriptions-item>-->
<el-descriptions-item :label="$t('推介人')">{{ customer.promoterName }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户经理')">{{customerService }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户经理')">{{customer.customerServiceName }}</el-descriptions-item>
<el-descriptions-item :label="$t('公司名称')">{{ customer.company }}</el-descriptions-item>
<el-descriptions-item :label="$t('公司英文名称')">{{ customer.companyEn }}</el-descriptions-item>
<el-descriptions-item :label="$t('联系地址')">{{ customer.address }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">{{ parseTime(customer.createTime) }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建人')">{{ customer.founderName }}</el-descriptions-item>
<el-descriptions-item :label="$t('状态')">{{ getDictDataLabel(DICT_TYPE.CUSTOMER_STATUS, customer.status) }}</el-descriptions-item>
<el-descriptions-item :label="$t('主营类别')">{{ productType }}</el-descriptions-item>
<el-descriptions-item :label="$t('常提货网点')">{{ pickupPoint }}</el-descriptions-item>
<el-descriptions-item :label="$t('状态')">{{ getDictDataLabel(DICT_TYPE.CUSTOMER_STATUS, customer.status)}}</el-descriptions-item>
<el-descriptions-item :label="$t('主营类别')">{{ $l(customer,'productTypeName') }}</el-descriptions-item>
<el-descriptions-item :label="$t('常提货网点')">{{ $l(customer,'pickupPointName') }}</el-descriptions-item>
<el-descriptions-item :label="$t('图片')">
<el-image v-show="!!customer.picture" :src="customer.picture" style="width: 100px;height: 100px"></el-image>
<el-image v-if="customer.picture" :src="customer.picture" style="width: 100px;height: 100px">
<span slot="error">加载失败</span>
</el-image>
</el-descriptions-item>
<el-descriptions-item :label="$t('备注')">{{ customer.remarks }}</el-descriptions-item>
<el-descriptions-item :label="$t('业绩类型')">{{ customer.isNew ?$t('新客户') : $t('老客户') }}</el-descriptions-item>
......@@ -92,7 +94,7 @@
:label="$t('联系方式')"
>
<template v-slot="{row}">
{{ row.areaCode + row.phoneNew }}
+{{ row.areaCode}} {{row.phoneNew}}
</template>
</el-table-column>
<el-table-column
......@@ -303,10 +305,10 @@
<pagination @pagination="getInfoListOfferPage" :page.sync="infoListOfferFrom.pageNo" :limit.sync="infoListOfferFrom.pageSize" :total="infoListOfferTotal" ></pagination>
</el-tab-pane>
<el-tab-pane name="follow" :label="$t('跟进')">
<customer-follow customerQuery ref="customerFollow" :id="id" :customer-id="id"></customer-follow>
<customer-follow v-if="activeName === 'follow'" customerQuery ref="customerFollow" :id="id" :customer-id="id"></customer-follow>
</el-tab-pane>
<el-tab-pane name="complain" :label="$t('客户投诉')">
<customer-complaint ref="customerComplaint" :customer-id="id" hidden-search></customer-complaint>
<customer-complaint v-if="activeName === 'complain'" ref="customerComplaint" :customer-id="id" hidden-search></customer-complaint>
</el-tab-pane>
<el-tab-pane name="bill" :label="$t('账单')">
<el-table style="width: 100%" :data="infoListReceiptList">
......@@ -529,38 +531,31 @@ export default {
getCreditRulePage({page:1,rows:999,type:2}).then(r => {
this.creditTypeList = r.data.list
})
getNodeList().then(r => {
this.nodeList = r.data
})
// getNodeList().then(r => {
// this.nodeList = r.data
// })
getCustomer(this.id).then(response => {
this.customer = { ...this.customer, ...response.data }
console.log( this.customer,'this.customer')
getCustomerContactsListByCustomer({customerId: this.id}).then(r => {
this.customerContacts = r.data
let list = this.customerContacts.map(r => r.userid)
memberUserList({ids:list.join(',')}).then(r => {
this.memberList = r.data
})
let list = this.customerContacts.filter(r => r.userid)
if(list.length > 0){
memberUserList({ids:list.map(i=>i.userid).join(',')}).then(r => {
this.memberList = r.data
})
}
})
getCountry(this.customer.country ? this.customer.country : 0 ).then(r => {
this.country = r.data
})
})
getProductTypeList().then(r => {
this.productTypeList = r.data
})
getCustomerSelect({pageSize:1000,pageNo:1}).then(r => {
this.customerSelect = r.data.list
})
// getCustomerSelect({pageSize:1000,pageNo:1}).then(r => {
// this.customerSelect = r.data.list
// })
listServiceUser().then(r => {
this.serviceUserList = r.data
})
// this.getBrankByCustomerList()//品牌授权
this.getCustomerGrade()
// this.getCustomerGrade()
// this.creditLogPage()//等级日志
this.getorderList()//订单
// this.getInfoListOfferPage()//报价
......@@ -716,22 +711,16 @@ export default {
isChinese(){
return this.$i18n.locale === 'zh_CN'
},
productType(){
const productType = this.productTypeList.find(p => p.id === parseInt(this.customer.productType))
return productType ? productType.titleZh : ''
},
pickupPoint(){
const pickupPoint = this.nodeList.find(p => p.id === parseInt(this.customer.pickupPoint))
return pickupPoint ? pickupPoint.titleZh : ''
},
promoter() {
return this.customerSelect.find(e => e.id === this.customer.promoter)?.name || ''
},
customerService() {
return this.serviceUserList.find(e => e.id === this.customer.customerService)?.nickname || ''
},
// promoter() {
// return this.customerSelect.find(e => e.id === this.customer.promoter)?.name || ''
// },
id() {
return this.customerId ? parseInt(this.customerId) : undefined
return parseInt(this.$route.params.customerId)
},
creditScoreCalculation(){
return (val)=>{
......@@ -745,6 +734,16 @@ export default {
}
},
methods:{
customerFollowFn(val){
this.activeName = val
this.$nextTick(()=>{
if(val === 'follow'){
this.$refs['customerFollow'].customerFollow.dialogVisible = true;
}else {
this.$refs['customerComplaint'].handleAdd()
}
})
},
checkPermi,
userIdFormatter(row, column, cellValue){
const member = this.memberList.find(e => e.id === cellValue)
......
......@@ -416,9 +416,13 @@ export default {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
getCustomerList({ids:this.list.map(i => i.customerId).join(',')}).then(r => {
this.customerSelect = r.data
})
let list = []
list = this.list.filter(i => i.customerId)
if(list.length > 0){
getCustomerList({ids:list.map(i => i.customerId).join(',')}).then(r => {
this.customerSelect = r.data
})
}
});
},
/** 取消按钮 */
......
This diff is collapsed.
......@@ -2,6 +2,9 @@
<div class="app-container">
<!-- 搜索 -->
<el-card>
<div slot="header">
<div class="card-title">{{$route.query.containerNumber}} - {{ $t('订单费用报表') }}</div>
</div>
<el-form
:model="queryParams"
ref="queryForm"
......@@ -10,13 +13,13 @@
class="card"
>
<el-form-item :label="$t('编号')">
<el-input v-model="queryParams.numberKey" clearable placeholder="订单号、唛头、提单号"></el-input>
<el-input v-model="queryParams.numberKey" clearable :placeholder="$t('订单号、唛头、提单号')"></el-input>
</el-form-item>
<el-form-item :label="$t('发货人')">
<el-input v-model="queryParams.consignorKey" placeholder="发货人名称、手机号"></el-input>
<el-input v-model="queryParams.consignorKey" :placeholder="$t('发货人名称、手机号')"></el-input>
</el-form-item>
<el-form-item :label="$t('收货人')">
<el-input v-model="queryParams.consigneeKey" placeholder="收货人名称、手机号"></el-input>
<el-input v-model="queryParams.consigneeKey" :placeholder="$t('收货人名称、手机号')"></el-input>
</el-form-item>
<el-form-item>
......@@ -33,7 +36,7 @@
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable @change="handleQuery"/>
</el-form-item>-->
<el-form-item :label="$t('始发仓')">
<el-select v-model="queryParams.startWarehouseId" placeholder="请选择" clearable>
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择')" clearable>
<el-option
v-for="item in exportWarehouseList"
:key="item.id"
......@@ -43,7 +46,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')">
<el-select v-model="queryParams.dstWarehouseId" placeholder="请选择" clearable>
<el-select v-model="queryParams.dstWarehouseId" :placeholder="$t('请选择')" clearable>
<el-option
v-for="item in importWarehouseList"
:key="item.id"
......@@ -53,7 +56,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('客户经理')" >
<user-selector manage v-model="queryParams.salesmanId" clearable @change="handleQuery"/>
<user-selector manage v-model="queryParams.salesmanId" clearable @change="handleQuery" :placeholder="$t('请选择')"/>
</el-form-item>
<el-form-item :label="$t('订单状态')" prop="status">
<dict-selector :type="DICT_TYPE.ORDER_STATUS" v-model="queryParams.status"
......@@ -92,13 +95,18 @@
</el-table-column>
<el-table-column :label="$t('是否重泡货')">
<template slot-scope="{row}">
<!--1 普货 2 重货 3 泡货-->
<dict-tag :type="DICT_TYPE.ECW_YESNO" :value="row.itemType != 1 ? '1' : '0'"></dict-tag>
<el-tooltip v-if="row.orderType !== 1" effect="dark" :content="row.orderType == 3 ? `${row.vweight}kg` : `${row.wvolume}m³`" placement="top-start">
<dict-tag :type="DICT_TYPE.ECW_YESNO" :value="row.orderType !== 1 ? '1' : '0'"></dict-tag>
</el-tooltip>
<template v-else>{{$t('')}}</template>
</template>
</el-table-column>
<el-table-column :label="$t('收费数据')">
<template slot-scope="{row}">
{{row.realityChargeNum}}{{$t('')}},{{row.realityChargeVolume}}m³,{{row.realityChargeWeight}}kg
<el-tooltip v-if="row.orderType !== 1" effect="dark" :content="row.orderType == 3 ? `${row.vweight}kg` : `${row.wvolume}m³`" placement="top-start">
<span>{{row.realityChargeNum}}{{$t('')}},{{row.realityChargeVolume}}m³,{{row.realityChargeWeight}}kg</span>
</el-tooltip>
<template v-else>{{row.realityChargeNum}}{{$t('')}},{{row.realityChargeVolume}}m³,{{row.realityChargeWeight}}kg</template>
</template>
</el-table-column>
<el-table-column :label="$t('订单状态')" prop="statusMsg"></el-table-column>
......
......@@ -53,11 +53,16 @@
<el-table-column :label="$t('提单号')" prop="tidanNo"></el-table-column>
<el-table-column :label="$t('备注')" prop="remarks"></el-table-column>
<el-table-column :label="$t('操作人')" prop="operator"></el-table-column>
<el-table-column :label="$t('日期')" prop="createTime">
<el-table-column :label="$t('放货日期')" prop="createTime">
<template slot-scope="{row}">
{{row.createTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('复核日期')" prop="createTime">
<template slot-scope="{row}">
{{row.checkTime|parseTime}}
</template>
</el-table-column>
<el-table-column :label="$t('状态')" prop="status">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_RELEASE_STATUS" :value="row.status" />
......@@ -70,7 +75,7 @@
<el-button v-if="scope.row.status == 1" type="success" size="mini" @click="review(scope.row.id)">{{$t('放货复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="danger" size="mini" @click="fallbackIndex=scope.$index">{{$t('反复核')}}</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="cargoControlPickId=scope.row.id">{{$t('调货')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="primary" size="mini" @click="showApprovalDetail(scope.row.formId)">{{$t('审核详情')}}</el-button>
<el-button v-if="[2,4, 5, 6].indexOf(scope.row.status) > -1" type="danger" size="mini" @click="cancelApproval(scope.row.id)">{{$t('取消审核')}}</el-button>
</template>
......
......@@ -33,7 +33,20 @@
</div>
</div>
</el-descriptions-item>
<!-- 优惠申请 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 31 || type == 32" :span="4">
<div class="bold" v-for="(item,index) in detail.batchApplyOrderItemDetailVOList" :key="index">
<div>{{index+1}}.【{{$l(item, 'prodTitle')}}</div>
<div>
{{item.charging ? $t('原全包价') : $t('原运费')}}{{item.orgFreight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
{{item.charging ? $t('新全包价') : $t('新运费')}}{{item.freight}} {{ currencyMap[item.freightCurrency] }} / {{ unitMap[item.freightVolume] }}
</div>
<div v-if="!item.charging">
{{$t('原清关费')}}{{item.orgClearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
{{$t('新清关费')}}{{item.clearanceFreight}} {{ currencyMap[item.clearanceFreightCurrency] }} / {{ unitMap[item.clearanceFreightVolume] }}
</div>
</div>
</el-descriptions-item>
<!-- 重泡货 -->
<el-descriptions-item :label="$t('申请理由')" v-if="type == 4 || type ==5" :span="4">
<div class="bold" v-if="type == 4">
......@@ -142,7 +155,7 @@ export default {
}
},
type(){
if([1,2,3,4,5].indexOf(this.type) > -1){
if([1,2,3,4,5,31,32].indexOf(this.type) > -1){
// 加载费用体积单位
getUnitList().then(res => this.unitList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
......@@ -176,6 +189,7 @@ export default {
getApproval(this.id).then(res => {
this.type = res.data.type
this.detail = JSON.parse(res.data.details)
console.log(this.detail)
})
},
getOrder(){
......
......@@ -33,7 +33,7 @@
</el-tab-pane>
</el-tabs>
<el-form-item label="">
<el-button type="primary" @click="submit">{{$t('提交')}}</el-button>
<el-button type="primary" @click="submit" :loading="loading">{{$t('提交')}}</el-button>
</el-form-item>
</el-form>
</el-dialog>
......@@ -47,6 +47,8 @@ export default {
},
data(){
return {
// 提交中状态
loading: false,
current: 'createBatch',
show: false,
form:{
......@@ -94,10 +96,12 @@ export default {
})
}
}
this.loading = true;
({createBatch, createSplitBatch}[this.current])(data).then(res => {
this.$message.success(this.$t("操作成功"));
this.$emit('success')
}).finally(() => {
this.loading = false
})
})
},
......
......@@ -25,18 +25,27 @@
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 8">
<dict-tag :type="DICT_TYPE.ECW_PICK_RECURRENT_NUCLEAR_TYPE" :value="detail.recurrentNuclearType" />
</el-descriptions-item>
<!-- 调货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 9">
{{$l(detail, 'reason')}}
</el-descriptions-item>
<!-- 取消放货 -->
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10">
<el-descriptions-item :label="$t('申请原因')" v-if="applyType == 10" :span="2">
<dict-tag :type="DICT_TYPE.ECW_CANCEL_PICK_TYPE" :value="detail.cancelPickType" />
</el-descriptions-item>
<el-descriptions-item v-if="voucherList.length" :label="$t('凭证')" :span="3">
<div v-for="(item, index) in voucherList" :key="index" style="padding:5px">
<video v-if="isVideo(item)" :src="item" @click="playVideo(item)" style="width: 100px; height: 100px;"></video>
<el-image v-else :src="item" style="width: 100px; height: 100px;" :preview-src-list="voucherImages"></el-image>
</div>
</el-descriptions-item>
</el-descriptions>
<el-dialog :visible="!!videoUrl" :before-close="closeVideoPlayer">
<video v-if="!!videoUrl" :src="videoUrl" style="width: 500px; height: 500px" controls></video>
</el-dialog>
</div>
</template>
<script>
......@@ -44,7 +53,9 @@ import {getPickUpdateApproveInfo} from '@/api/ecw/orderCargoControl'
import {getOrder} from '@/api/ecw/order'
import {getChannelListByIds} from '@/api/ecw/channel'
import {parseTime} from '@/utils/ruoyi'
import Template from "@/views/cms/template/index.vue";
export default {
components: {Template},
filters: {parseTime},
props:{
id: [String, Number],
......@@ -55,7 +66,8 @@ export default {
detail: null,
order: null,
channels: [],
channelName: '/'
channelName: '/',
videoUrl: null
}
},
watch:{
......@@ -74,7 +86,24 @@ export default {
let channel = this.channels.find(item => item.channelId == id)
return channel ? channel.nameZh : '/'
}
}
},
// 凭证
voucherList(){
if(!this.detail || !this.detail.voucher) return []
return this.detail.voucher.split(',')
},
// 图片类型的凭证
voucherImages(){
return this.voucherList.filter(item => {
return !this.isVideo(item)
})
},
// 判断是否是视频链接
isVideo(){
return (url) => {
return ['mp4'].indexOf(url.split('.').pop().toLowerCase()) > -1
}
}
},
created(){
if(this.id){
......@@ -92,11 +121,20 @@ export default {
})
},
getChannel(){
if(!this.order || !this.order.channelId) return
if(!this.order || !this.order.channelId) return
getChannel(this.order.channelId).then(res => {
this.channelName = this.$l(res.data, 'name')
})
},
// 播放视频
playVideo(url){
console.log('play video', url)
this.videoUrl = url
},
// 关闭视频播放器
closeVideoPlayer(){
this.videoUrl = null
}
}
}
</script>
......@@ -108,4 +146,4 @@ export default {
font-weight: bold;
}
}
</style>
\ No newline at end of file
</style>
......@@ -23,7 +23,7 @@
</el-dialog>
</template>
<script>
import { warehousePictureList, warehousePictureCreate, warehousePictureDelete,uploadFile } from '@/api/ecw/order'
import { warehousePictureList, warehousePictureCreate, warehousePictureDelete,uploadOrgname } from '@/api/ecw/order'
export default {
props: {
......@@ -73,6 +73,7 @@ export default {
beforeUploadimg1(file) {
if (this.fileList.length >= 10) {
this.$message.error(this.$t('您最多上传10个附件'))
return
}
console.log(file)
var type = file.name.split('.')
......@@ -83,8 +84,8 @@ export default {
// 上传
const formData = new FormData()
formData.append('file', file)
formData.append('path', this.uuid())
uploadFile(formData).then(response => {
// formData.append('path', this.uuid())
uploadOrgname(formData).then(response => {
if (response.data) {
this.createImage(response.data)
}
......
......@@ -3,7 +3,7 @@
</template>
<script>
import {sendSmsCode} from '@/api/ecw/orderCargoControl'
const timeout = null
let timeout = null
export default {
props:{
orderId: [String, Number],
......@@ -46,10 +46,10 @@ export default {
countDown(){
this.leftTime --
if(this.leftTime <= 0){
return false
return false
}
timeout = setTimeout(this.countDown, 1000)
}
}
}
</script>
\ No newline at end of file
</script>
......@@ -253,7 +253,7 @@
<el-button v-hasPermi="['ecw:order:show_customs']" type="text" @click="showDeclaration=true">{{$t('查看报关资料')}}</el-button>
</el-tab-pane>
<el-tab-pane :label="$t('费用明细')" name="four">
<el-button type="primary" @click="showFeeSummary=true">{{$t('费用汇总')}}</el-button>
<el-button v-has-permi="['order:detail:fee-detail']" type="primary" @click="showFeeSummary=true">{{$t('费用汇总')}}</el-button>
<el-table :data="feeList">
<el-table-column :label="$t('订单号')" prop="orderNo">
<template slot-scope="{row}">
......@@ -271,7 +271,6 @@
</el-table-column>
<el-table-column :label="$t('目的地')">
{{$l(objective, 'title') || '-'}}
{{$l(objective, 'title') || '-'}}
</el-table-column>
<el-table-column :label="$t('品名')" prop="titleZh">
<template slot-scope="{row}">
......
......@@ -199,7 +199,7 @@
<dict-selector v-model="row.unit" :type="DICT_TYPE.ECW_PACKAGING_TYPE" defaultable :disabled="!canAddProduct || !productEditable" />
</template>
</el-table-column>
<el-table-column :label="$t('数量') + '(个)'" width="120px">
<el-table-column :label="`${$t('数量')}(${$t('个')})`" width="120px">
<template slot-scope="{row}">
<el-input v-model="row.quantity" @keyup.native="checkPositiveInterge(row, 'quantity')" :disabled="!canAddProduct || !productEditable" />
</template>
......@@ -328,6 +328,7 @@
<el-form-item :label="$t('是否代收货款')" prop="isCollection">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCollection" form-type="radio" :disabled="false" />
</el-form-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-form-item :label="$t('代收货款金额')" v-if="collectionProxy && form.isCollection" prop="collectionProxy" class="ml-20">
<el-input type="number" v-model="form.collectionProxy" class="w-200 mr-10" :disabled="false"></el-input>
......@@ -337,6 +338,8 @@
<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 :disabled="false" />
<!--自单代报显示提示-->
<div v-if="+form.customsType === 2" style="color:red;font-size:14px">{{$t('报关退税,请备齐资料。')}}</div>
</el-form-item>
</div>
<div>
......@@ -390,7 +393,7 @@
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.harvestMethod" :filter="item => item.value == 1 || homeDeliveryService" defaultable :disabled="false" />
</el-form-item>
</div>
<div v-if="homeDeliveryService && form.harvestMethod == 2">
<div v-if="homeDeliveryService && +form.harvestMethod === 2">
<el-form-item :label="$t('收货地区')" prop="country">
<area-selector
:country="form.consigneeVO ? form.consigneeVO.country : undefined"
......@@ -570,7 +573,8 @@ let makeDefaultFormData = () => {
isExternalWarehouse: false,
externalWarehouseDtoList:[],
orderItemVOList:[],
drawee: 2
drawee: 2,
harvestMethod: "1"
}
}
window.Decimal = Decimal
......
......@@ -41,11 +41,12 @@
<dict-selector :type="DICT_TYPE.ORDER_STATUS" v-model="queryParams.orderStatus"
@keyup.enter.native="handleQuery" clearable />
</el-form-item>
<!-- <el-form-item :label="$t('跟进客服')" prop="destinationId">
<el-select v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in followUserList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
<el-form-item :label="$t('跟进客服')" prop="salesmanId">
<el-select v-model="queryParams.salesmanId" :placeholder="$t('请选择')">
<el-option v-for="dict in followUpList" :key="parseInt(dict.id)" :label="dict.nickname" :value="parseInt(dict.id)"/>
</el-select>
</el-form-item> -->
</el-form-item>
</el-row>
<el-row>
<el-form-item :label="$t('控货')+':'">
......@@ -86,7 +87,7 @@
<dict-selector :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" :clearable="true" v-model="queryParams.productRecord" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item :label="$t('客户经理')+':'">
<el-select v-model="queryParams.salesmanId" multiple :placeholder="$t('请选择跟进业务')" clearable>
<el-select v-model="queryParams.customerIds" multiple :placeholder="$t('请选择客户经理')" clearable>
<el-option v-for="item in creatorData" :key="item.id" :label="item.nickname" :value="item.id"/>
</el-select>
</el-form-item>
......@@ -103,7 +104,7 @@
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<!-- <el-button icon="el-icon-refresh" @click="reset">{{ $t('重置') }}</el-button> -->
<el-button icon="el-icon-refresh" @click="reset">{{ $t('重置') }}</el-button>
</el-form-item>
</el-row>
</el-form>
......@@ -117,16 +118,20 @@
<el-col :span="16">
<el-descriptions :column="4">
<el-descriptions-item :label="$t('箱数')">
{{totalData.totalNum||'/'}}
<span v-if="totalData.totalNum">{{totalData.totalNum+$t('')}}</span>
<span v-else></span>
</el-descriptions-item>
<el-descriptions-item :label="$t('测量方数汇总')">
{{totalData.totalVolume||'/'}}
<span v-if="totalData.totalVolume">{{totalData.totalVolume}}</span>
<span v-else></span>
</el-descriptions-item>
<el-descriptions-item :label="$t('收费方数汇总')">
{{totalData.totalChargeVolume||'/'}}
<span v-if="totalData.totalChargeVolume">{{totalData.totalChargeVolume}}</span>
<span v-else></span>
</el-descriptions-item>
<el-descriptions-item :label="$t('重量汇总')">
{{totalData.totalWeight||'/'}}
<span v-if="totalData.totalWeight">{{totalData.totalWeight}}KG</span>
<span v-else></span>
</el-descriptions-item>
</el-descriptions>
</el-col>
......@@ -224,7 +229,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception '" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -239,7 +244,7 @@ import {getOrderExceptionPage, exportExcel,getStatistics} from "@/api/ecw/orderE
import {getTradeCityList} from '@/api/ecw/region'
import {DICT_TYPE} from '@/utils/dict'
// import { userList } from "@/api/system/user"
import {listServiceUser} from "@/api/system/user"
import {listServiceUser,userList} from "@/api/system/user"
import CustomerSelector from '@/components/CustomerSelector'
import ProductSelector from '@/components/ProductSelector'
import {getWarehouseList} from '@/api/ecw/warehouse'
......@@ -268,7 +273,8 @@ export default {
},
tradeCityList:[],
warehouseList:[],
totalData:{}
totalData:{},
followUpList:[],
};
},
activated(){
......@@ -280,6 +286,9 @@ export default {
getTradeCityList().then(res => this.tradeCityList = res.data)
listServiceUser().then(r => {
this.creatorData = r.data
})
userList('documentary customer service').then(r => {
this.followUpList = r.data;
})
getWarehouseList().then(res => this.warehouseList = res.data)
// userList('salesman').then(res =>this.creatorData = res.data)
......@@ -320,7 +329,8 @@ export default {
this.queryParams = {
page: 1,
rows: 10,
};
}
this.getList()
},
importCityName(id){
return this.tradeCityList.filter(item => item.id == id)
......
......@@ -127,7 +127,7 @@
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='fee_exception '" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionStatus==2&&scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('查看')}}</el-button>
<el-tag style="margin-left:10px" v-if="scope.row.orderExceptionStatus==2">{{$t('已完成')}}</el-tag>
<el-button v-else-if="scope.row.orderExceptionType=='order_superfluous_box_exception'" v-hasPermi="['ecw:exception:superfluousBox']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
......@@ -147,7 +147,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='order_pick_up_exception'" v-hasPermi="['ecw:exception:pickUp']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='not_customer_service_exception'" v-hasPermi="['ecw:exception:notCustomer']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='goods_add_exception'" v-hasPermi="['ecw:exception:goodsAddException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception '" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='fee_exception'" v-hasPermi="['ecw:exception:feeException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
</template>
</el-table-column>
</el-table>
......
This diff is collapsed.
......@@ -5,9 +5,12 @@
<!-- 列表 -->
<div class="order-header">
<span style="font-size: 15px;">{{$t('订单号')}}{{ order.orderNo }}</span>
<el-button v-hasPermi="['ecw:order:reduce']" type="primary" @click="moreApply(1)" >{{$t('批量特价申请')}}</el-button>
<el-button v-hasPermi="['ecw:order:commission']" type="primary" @click="moreApply(2)" >{{$t('批量管理折扣')}}</el-button>
</div>
<el-table v-loading="loading" :data="order.orderItemVOList">
<el-table v-loading="loading" :data="order.orderItemVOList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column :label="$t('序号')" align="center" prop="id" type="index"></el-table-column>
<el-table-column
prop="prodTitleZh"
......@@ -48,7 +51,7 @@
:formatter="(_, __, v) => parseTime(v)"
:label="$t('最后操作时间')">
</el-table-column>
<el-table-column
:label="$t('原价')">
<template v-slot="{row}">
......@@ -124,6 +127,11 @@
<commission v-if="!!showCommissionItem" :order="order" :orderItem="showCommissionItem" @close="showCommissionItem=null" @success="onCommissionSuccess" />
<!-- 重泡货优惠 -->
<preferential v-if="!!showPreferentialType" :applyType="showPreferentialType" :order="order" @close="showPreferentialType=null" @success="onPreferentialSuccess" />
<!-- 批量优惠申请 -->
<discounts v-if="!!showDiscountsIds" :order="order" :ids="ids" @close="showDiscountsIds=null" @success="onDiscountsSuccess" />
<!-- 批量管理折扣 -->
<discounts v-if="!!showAllowanceIds" :order="order" :ids="ids" @close="showAllowanceIds=null" :applyType="32" @success="onDiscountsSuccess" />
<!-- 佣金规则 -->
</div>
</template>
......@@ -138,10 +146,11 @@ import {getOrder} from "@/api/ecw/order"
import Discount from './Discount'
import Commission from './Commission'
import Preferential from './Preferential'
import Discounts from './Discounts'
export default {
name: "OrderSpecial",
components: {
Discount, Commission, Preferential
Discount, Commission, Preferential,Discounts
},
props: {
orderId: [String, Number]
......@@ -175,6 +184,10 @@ export default {
showCommissionItem: null, // 佣金规则
showAllowanceItem: null, // 管理折扣
showPreferentialType: null, // 重泡货类型
showDiscountsIds: null, // 批量优惠申请
showAllowanceIds: null, // 批量管理折扣
multipleSelection:null,
ids:null
};
},
created() {
......@@ -211,6 +224,12 @@ export default {
this.showAllowanceItem = null
this.getOrder()
},
onDiscountsSuccess(){
this.showDiscountsIds = null
this.showAllowanceIds = null
this.multipleSelection = null
this.getOrder()
},
onCommissionSuccess(){
this.showCommissionItem = null
this.getOrder()
......@@ -218,6 +237,22 @@ export default {
onPreferentialSuccess(){
this.showPreferentialType = null
this.getOrder()
},
// 表格多选
handleSelectionChange(selection) {
this.multipleSelection = selection
this.ids = selection.map(item => item.orderItemId)
},
moreApply(type){
if(!this.ids||this.ids.length==0){
this.$message.error(this.$t('请选择商品'))
return
}
if(type==1){
this.showDiscountsIds = true
}else{
this.showAllowanceIds = true
}
}
},
computed: {
......@@ -248,6 +283,9 @@ export default {
padding-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
/* justify-content: space-between; */
}
.order-header button{
margin-left:20px;
}
</style>
......@@ -397,6 +397,9 @@ export default {
if(this.splitTotal('weight') > this.leftData('weight')){
return this.$message.error("拆出重量不能大于剩余重量")
}
if(this.splitTotal('quantity') > this.leftData('quantity')){
return this.$message.error("拆出数量不能大于剩余数量")
}
// 如果全拆(拆出箱数 == 原入仓箱数),则体积重量也需要全拆
if(this.splitTotal('num') === this.warehouseRecord.cartonsNum){
if(this.splitTotal('volume') !== this.warehouseRecord.volume){
......
This diff is collapsed.
......@@ -732,14 +732,20 @@ export default {
}else{
// 全包价 的阶段 设置和运费(全包价)不能为空
let stepPriceEmpty = false
this.form.priceStepList.forEach(item => {
this.form.priceStepList.forEach((item, index) => {
let notEmptyFields = ['startNum', 'endNum', 'weightUnit']
notEmptyFields.forEach(field => {
// 第一个阶梯的起始值不判断0
if(index === 0 && field == 'startNum' && item[field] == 0) return
if(!item[field] || item[field].toString().trim() == ''){
console.warn('notEmptyFields', field, item[field])
stepPriceEmpty = true
}
})
if((this.form.priceType == 0 && !item.transportPrice) || (this.form.priceType == 1 && !item.allPrice)){
console.warn('运费或者全包价未设置', index, item.transportPrice, item.allPrice)
stepPriceEmpty = true
}
})
......
......@@ -78,7 +78,7 @@
<!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('上级区域')" prop="parentId">
......@@ -108,6 +108,46 @@
<el-form-item :label="$t('显示顺序')" prop="sort">
<el-input v-model="form.sort" :placeholder="$t('请输入显示顺序')" />
</el-form-item>
<div v-if="(form.type==2||form.type==3)&&isSecond">
<el-form-item :label="$t('出口运费/全包价币种')" prop="exportCurrency1">
<el-select v-model="form.exportCurrency1" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('出口清关费币种')" prop="exportCurrency2">
<el-select v-model="form.exportCurrency2" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('出口额外费用币种')" prop="出口额外费用币种">
<el-select v-model="form.exportCurrency3" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
</div>
<div v-if="(form.type==1||form.type==3)&&isSecond">
<el-form-item :label="$t('进口运费/全包价币种')" prop="importCurrency1">
<el-select v-model="form.importCurrency1" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('进口清关费币种')" prop="importCurrency2">
<el-select v-model="form.importCurrency2" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('进口额外费用币种')" prop="importCurrency3">
<el-select v-model="form.importCurrency3" :placeholder="$t('请选择')">
<el-option v-for="dict in currencyList "
:key="dict.id" :label="dict.titleZh" :value="dict.id.toString()"/>
</el-select>
</el-form-item>
</div>
<!-- <el-col :span="12">-->
<!-- <el-form-item :label="$t('部门状态')" prop="status">-->
<!-- <el-radio-group v-model="form.status">-->
......@@ -145,6 +185,7 @@ import {
} from "@/api/ecw/region";
import {changeUserStatus} from "@/api/system/user";
import {updateBankAccount} from "@/api/ecw/bankAccount";
import { getCurrencyList } from '@/api/ecw/currency'
export default {
name: "Region",
......@@ -198,11 +239,14 @@ export default {
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
regionTypeDatas: getDictDatas(DICT_TYPE.ECW_REGION_TYPE)
regionTypeDatas: getDictDatas(DICT_TYPE.ECW_REGION_TYPE),
currencyList:[],//币种
isSecond:false,
};
},
created() {
this.getList();
getCurrencyList().then(res => this.currencyList = res.data)
// 获得用户列表
listSimpleUsers().then(response => {
this.users = response.data;
......@@ -289,6 +333,12 @@ export default {
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
var region = this.regionList.find(v=>v.id==row.parentId)
if(region){
this.isSecond = true
}else{
this.isSecond = false
}
if (row !== undefined) {
this.form.parentId = row.id;
}
......@@ -311,6 +361,12 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
var region = this.regionList.find(v=>v.id==row.parentId)
if(region){
this.isSecond = true
}else{
this.isSecond = false
}
getRegion(row.id).then(response => {
this.form = response.data;
// console.log("getRegion("+row.id+"):"+JSON.stringify(this.form));
......
......@@ -71,7 +71,7 @@
</el-form-item>
</div>
<div v-if="formData.areaType==1">
<el-form-item :label="$t('国家')" prop="cooperationType">
<el-form-item :label="$t('国家')" prop="country">
<el-select v-model="formData.country" :placeholder="$t('请选择国家')">
<el-option
v-for="item in treeList"
......@@ -742,6 +742,9 @@ export default {
},
'formData.companyTypeArr'(val){
this.$set(this.formData, 'companyType', val.join(","))
},
'formData.areaType'(){
this.$refs["elForm"].clearValidate()
}
},
created() {
......@@ -804,6 +807,7 @@ export default {
this.$set(this.formData.externalVO,'clearanceRequire',response.data.externalBackVO.clearanceRequire)
this.$set(this.formData.externalVO,'provide',response.data.externalBackVO.provide)
this.$set(this.formData.externalVO,'badCooperationRecord',response.data.externalBackVO.badCooperationRecord)
this.$set(this.formData.externalVO,'tinNoRcNo',response.data.externalBackVO.tinNoRcNo)
}
});
}
......@@ -946,9 +950,9 @@ export default {
}
let data = JSON.parse(JSON.stringify(this.formData))
data.dockIds = data.dockIds?.toString()
if(this.formData.areaType == 0) {
data.resourceVO.shipCompany = data.resourceVO.shipCompany?.toString()
data.dockIds = data.dockIds?.toString()
data.resourceVO.ports = data.resourceVO.ports?.toString()
data.resourceVO.bookCompany = data.resourceVO.bookCompany?.toString()
data.resourceVO.trailerCompany = data.resourceVO.trailerCompany?.toString()
......
This diff is collapsed.
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