Commit a5cfea48 authored by 332784038@qq.com's avatar 332784038@qq.com

Merge branch 'test' into pre-release

parents 0968ee73 a5cd5154
......@@ -15,7 +15,7 @@ import './permission' // permission control
import './tongji' // 百度统计
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/infra/config";
import { parseTime, resetForm, addDateRange, addBeginAndEndTime, handleTree} from "@/utils/ruoyi";
import { parseTime, resetForm, addDateRange, addBeginAndEndTime, addBeginAndEndTimeNew, handleTree} from "@/utils/ruoyi";
import Pagination from "@/components/Pagination";
// 自定义表格工具扩展
import RightToolbar from "@/components/RightToolbar"
......@@ -33,6 +33,7 @@ Vue.prototype.parseTime = parseTime
Vue.prototype.resetForm = resetForm
Vue.prototype.addDateRange = addDateRange
Vue.prototype.addBeginAndEndTime = addBeginAndEndTime
Vue.prototype.addBeginAndEndTimeNew = addBeginAndEndTimeNew
Vue.prototype.getDictDatas = getDictDatas
Vue.prototype.getDictDatas2 = getDictDatas2
Vue.prototype.getDictDataLabel = getDictDataLabel
......
......@@ -105,6 +105,31 @@ export function addBeginAndEndTime(params, dateRange, propName,isTime = true) {
return params;
}
export function addBeginAndEndTimeNew(params, dateRange, prefixName, propName, isTime = true) {
// 必须传入参数
if (!dateRange) {
return params;
}
// 如果未传递 propName 属性,默认为 time
if (!propName) {
propName = 'Time';
} else {
propName = propName.charAt(0).toUpperCase() + propName.slice(1);
}
if (!prefixName) {
prefixName = ''
}
console.log('dateRange', dateRange)
// 设置参数
if (dateRange[0]) {
params[prefixName + 'Begin' + propName] = dateRange[0] + (isTime ? ' 00:00:00':'');
}
if (dateRange[1]) {
params[prefixName + 'End' + propName] = dateRange[1] + (isTime ? ' 23:59:59' : '');
}
return params;
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
......
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="88px">
<el-form-item :label="$t('自编号')" prop="selfNo">
<el-input v-model="queryParams.selfNo" :placeholder="$t('请输入自编号')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
......@@ -11,15 +11,25 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startWarehouseId">
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')">
<el-option v-for="item in exportWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
<el-form-item :label="$t('始发仓')" prop="startWarehouseIdList">
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable collapse-tags>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destWarehouseId">
<el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')">
<el-option v-for="item in importWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
<el-form-item :label="$t('目的国')" prop="countryIdList">
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable collapse-tags>
<el-option v-for="item in AddressProvince" :key="item.guojia" :label="item.guojiaName" :value="item.guojia"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="destCityIdList">
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable collapse-tags>
<el-option v-for="item in AddressCity" :key="item.shi" :label="item.shiName" :value="item.shi"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdList">
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable collapse-tags>
<el-option v-for="item in AddressTown" :key="item.id" :label="item.titleZh" :value="item.id"></el-option>
</el-select>
</el-form-item>
......@@ -35,7 +45,7 @@
</el-select>
</el-form-item>
<el-form-item label="">
<el-date-picker v-model="queryParams.dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="-" start-:placeholder="$t('开始日期')" end-:placeholder="$t('结束日期')" />
<el-date-picker v-model="queryParams.dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
</el-form-item>
<el-form-item :label="$t('提单制作')" prop="ladingBillStatus">
<el-select v-model="queryParams.ladingBillStatus" :placeholder="$t('请选择提单制作状态')" clearable size="small">
......@@ -43,18 +53,59 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的港清关')" prop="destinationClearance">
<el-form-item :label="$t('起运港')" v-show="showSearch">
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('目的港')" v-show="showSearch">
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('目的港清关')" prop="destinationClearance" v-show="showSearch">
<el-select v-model="queryParams.destinationClearance" :placeholder="$t('请选择目的港清关')" clearable size="small">
<el-option v-for="item in destinationClearanceData" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('发货方式')" prop="deliveryType">
<el-form-item :label="$t('发货方式')" prop="deliveryType" v-show="showSearch">
<el-select v-model="queryParams.deliveryType" :placeholder="$t('请选择发货方式')" clearable size="small">
<el-option v-for="item in deliveryTypeData" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('航程')" prop="voyage" v-show="showSearch">
<el-select v-model="queryParams.voyage">
<el-option
v-for="item in voyageData"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('订舱代理')" v-show="showSearch">
<supplierSelect v-model="queryParams.shipperId" :companyType="'5'" :placeholder="$t('请选择订舱代理')" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('航空公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.airlineCompanyId" :placeholder="$t('请选择航空公司')" company-type="10" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('代理公司Agent')" v-show="showSearch">
<supplierSelect v-model="queryParams.agentIdList" :placeholder="$t('请选择代理公司')" company-type="1" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('预计起飞时间')" prop="flyTime" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计起飞开始日期')" :end-placeholder="$t('预计起飞结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.flyBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="dcCustomsType" v-show="showSearch">
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple collapse-tags>
<el-option v-for="type in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CUSTOMS_TYPE)" :key="type.value" :label="$l(type, 'label')" :value="type.value"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('报关公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('放行时间')" v-show="showSearch">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="queryParams.dcPassTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-row>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
......@@ -240,11 +291,17 @@ import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue'
import regError from './regError.vue'
import editAirForm from './editAirForm.vue'
import dockSelect from "./shippingSea/nodePage/common/dockSelect.vue"
import supplierSelect from "./shippingSea/nodePage/common/supplierSelect.vue"
import {
downloadFile,
downloadFileByUrl,
formatDate,
constantDict,
} from "./shippingAir/utils";
import { getRegionList } from "@/api/ecw/order";
import { getDockPage } from "@/api/ecw/dock";
import { getSupplierPage } from "@/api/ecw/supplier";
import {getCabinetPage} from "@/api/ecw/cabinet";
import LadingBill from "@/views/ecw/box/ladingBill/index.vue";
import {listUser} from "@/api/system/user";
......@@ -255,10 +312,26 @@ export default {
LadingBill,
costForm,
regError,
editAirForm
editAirForm,
dockSelect,
supplierSelect,
},
data() {
return {
AddressCity: [],
AddressProvince: [],
AddressTown: [],
countryIdList: null,
destCityIdList: null,
destWarehouseIdList: null,
// 选中数组
ids: [],
//目的国
countryList: [],
//目的城市
cityList: [],
//目的仓
destWarehouseList: [],
cabinetList:[],
dateTypes: [
{ value: '1', label: this.$t('分拣时间') },
......@@ -274,7 +347,7 @@ export default {
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
showSearch: false,
// 总条数
total: 0,
// 出货列表
......@@ -303,11 +376,16 @@ export default {
cabinetId: null,
shipmentStatusAir: null,
startWarehouseId: null,
destWarehouseId: null,
destWarehouseIdList: null,
transportType: null
},
channelList: [],
warehouseList: [],
// 码头
allDocks: [],
// 供应商
allSupplier: [],
voyageData: constantDict.voyageData,
// 表单参数
form: {},
// 表单校验
......@@ -326,7 +404,7 @@ export default {
trigger: 'blur'
}
],
destWarehouseId: [
destWarehouseIdList: [
{
required: true,
message: this.$t('目的地不能为空'),
......@@ -383,6 +461,149 @@ export default {
]
}
},
watch: {
countryIdList: {
//监听当前地区值的变化,于与上方地区值进行了双向绑定
deep: true, //深度监听
handler() {
//每当值省份值改变时其下地区值进行清空
this.AddressCity = []
this.AddressTown = []
this.destCityIdList = ""
this.destWarehouseIdList = ""
this.findByprovinceCode()
if (this.countryIdList == "") {
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
//重新加载目的城市
//目的城市
// getRegionList(4, 4).then(({data}) => {
// this.AddressCity = data;
// })
// .catch(error => {
// console.log(error);
// });
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// })
// .catch(error => {
// console.log(error);
// });
}
},
destCityIdList: {
deep: true, //深度监听
handler() {
this.AddressTown = []
this.destWarehouseIdList = ""
this.findBycityCode()
if (this.destCityIdList != "" && this.countryIdList != "" && this.destWarehouseIdList == "") {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList == "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
// else if(this.destCityIdList!="" && this.destCityIdList=="" ){
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// }).catch(error => {
// console.log(error);
// });
// }
}
},
destWarehouseIdList: {
deep: true, //深度监听
handler() {
if (this.destCityIdList != "" && this.countryIdList != "" && this.destWarehouseIdList == "") {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
// else if(this.destCityIdList=="" && this.destWarehouseIdList==""){
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// })
// .catch(error => {
// console.log(error);
// });
// }
}
}
},
computed: {
getCabinetName() {
return (cabinetId) => {
......@@ -414,6 +635,7 @@ export default {
}
},
created() {
this.init()
getCabinetPage({status:0}).then((response) => {
this.cabinetList = response.data.list;
});
......@@ -434,6 +656,80 @@ export default {
},
methods: {
init() {
//加载时发起请求获取所有省份值
getRegionList(1, 1)
.then(({ data }) => {
this.AddressProvince = data
console.log(this.AddressProvince)
})
.catch((error) => {
console.log(error)
})
//目的城市
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
//目的仓
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
// 码头
getDockPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allDocks = data.list;
});
// 供应商
getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allSupplier = data.list.map((item) => {
if (item.companyType) {
item.companyTypes = item.companyType.split(",");
}
return item;
});
});
},
findByprovinceCode() {
//获取当前省份值id,获取该省份下城市 countryIdList provinceCode
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
},
findBycityCode() {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
// 去重
// let uniqueDataList = data.filter((item, index, self) => {
// // 返回第一个匹配项的索引,用于判断当前项是否为第一个匹配项
// const firstIndex = self.findIndex((obj) => obj.guojia === item.guojia);
// // 如果当前项是第一个匹配项,则保留,否则过滤掉
// return index === firstIndex;
// });
// this.AddressProvince = uniqueDataList
})
.catch((error) => {
console.log(error)
})
},
formatDate,
getChannelList() {
getChannelList().then((res) => (this.channelList = res.data))
......@@ -459,15 +755,16 @@ export default {
let params = { ...this.queryParams }
params.transportType = 3
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime')
this.addBeginAndEndTimeNew(params, params.flyBeginTime, 'fly');// 预计起飞时间
// 执行查询
getboxPage(params).then((response) => {
this.list = response.data.list
this.total = response.data.total
// var lineParams = []
// this.list.forEach(item=>{
// let line = lineParams.findIndex(li=>li.startWarehouseId==item.startWarehouseId&&li.destWarehouseId==item.destWarehouseId&&li.transportType==item.transportType)
// let line = lineParams.findIndex(li=>li.startWarehouseId==item.startWarehouseId&&li.destWarehouseIdList==item.destWarehouseIdList&&li.transportType==item.transportType)
// if(line == -1){
// lineParams.push({startWarehouseId:item.startWarehouseId,destWarehouseId:item.destWarehouseId,transportType:item.transportType})
// lineParams.push({startWarehouseId:item.startWarehouseId,destWarehouseIdList:item.destWarehouseIdList,transportType:item.transportType})
// }
// })
// getLineInfoList(lineParams)
......@@ -492,7 +789,7 @@ export default {
id: undefined,
cabinetId: undefined,
startWarehouseId: undefined,
destWarehouseId: undefined,
destWarehouseIdList: undefined,
transportType: undefined
}
this.resetForm('form')
......@@ -556,6 +853,7 @@ export default {
params.pageNo = undefined
params.pageSize = undefined
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime')
this.addBeginAndEndTimeNew(params, params.flyBeginTime, 'fly');// 预计起飞时间
// 执行导出
this.$modal
.confirm(this.$t('是否确认导出所有出货数据项?'))
......@@ -588,7 +886,7 @@ export default {
this.handleDelete(row);
break;
case "editLadingBill":
let line = await getLineInfo({startWarehouseId: row.startWarehouseId,destWarehouseId: row.destWarehouseId,transportType:row.transportType})
let line = await getLineInfo({startWarehouseId: row.startWarehouseId,destWarehouseIdList: row.destWarehouseIdList,transportType:row.transportType})
let makeBillNode = line.data.makeBillNode
console.log(row,this.makeBillNodeStatus[makeBillNode])
if(row.shipmentStatusAir<this.makeBillNodeStatus[makeBillNode]){
......
......@@ -6,7 +6,6 @@
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item :label="$t('运输方式')" prop="transportType">
......@@ -56,33 +55,25 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startWarehouseId">
<el-select
v-model="queryParams.startWarehouseId"
:placeholder="$t('请选择始发地')"
clearable
>
<el-option
v-for="item in exportWarehouseList"
:label="$l(item, 'title')"
:value="item.id"
:key="item.id"
></el-option>
<el-form-item :label="$t('始发仓')" prop="startWarehouseIdList">
<el-select v-model="queryParams.startWarehouseIdList" multiple :placeholder="$t('请选择始发仓')" clearable collapse-tags>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destWarehouseId">
<el-select
v-model="queryParams.destWarehouseId"
:placeholder="$t('请选择目的地')"
clearable
>
<el-option
v-for="item in importWarehouseList"
:label="$l(item, 'title')"
:value="item.id"
:key="item.id"
></el-option>
<el-form-item :label="$t('目的国')" prop="countryIdList">
<el-select v-model="countryIdList" multiple :label="countryIdList" :placeholder="$t('请选择目的国')" clearable collapse-tags>
<el-option v-for="item in AddressProvince" :key="item.guojia" :label="item.guojiaName" :value="item.guojia"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="destCityIdList">
<el-select v-model="destCityIdList" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable collapse-tags>
<el-option v-for="item in AddressCity" :key="item.shi" :label="item.shiName" :value="item.shi"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdList">
<el-select v-model="destWarehouseIdList" multiple :placeholder="$t('请选择目的仓')" style="width: 200px" clearable collapse-tags>
<el-option v-for="item in AddressTown" :key="item.id" :label="item.titleZh" :value="item.id"></el-option>
</el-select>
</el-form-item>
......@@ -115,11 +106,12 @@
/>
</el-form-item>
<el-form-item :label="$t('状态')" prop="boxStatus">
<el-form-item :label="$t('状态')" prop="boxStatusList">
<el-select
v-model="queryParams.boxStatus"
v-model="queryParams.boxStatusList"
:placeholder="$t('请选择状态')"
clearable
multiple
size="small"
>
<el-option
......@@ -167,6 +159,79 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('起运港')" v-show="showSearch">
<dockSelect v-model="queryParams.bigPortIdList" :placeholder="$t('请选择起运港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('目的港')" v-show="showSearch">
<dockSelect v-model="queryParams.destPortIdList" :placeholder="$t('请选择目的港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('驳船港')" v-show="showSearch">
<dockSelect v-model="queryParams.bargePortIdList" :placeholder="$t('请选择驳船港')" portType="2" :allDocks="allDocks" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('订舱公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.spaceCompanyIdList" :companyType="'1'" :placeholder="$t('请选择订舱公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('预计驳船时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计驳船开始日期')" :end-placeholder="$t('预计驳船结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.bargeBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('预计开船时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计开船开始日期')" :end-placeholder="$t('预计开船结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.sailBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('截补料时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('截补料开始日期')" :end-placeholder="$t('截补料结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.ladingBillBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('VGM提交时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('VGM提交开始日期')" :end-placeholder="$t('VGM提交结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.customsBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('截关时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('截关开始日期')" :end-placeholder="$t('截关结束日期')" value-format="yyyy-MM-dd HH:mm:ss" v-model="queryParams.cutOffBeginTime"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="dcCustomsType" v-show="showSearch">
<el-select v-model="queryParams.dcCustomsType" :placeholder="$t('请选择报关方式')" clearable multiple collapse-tags>
<el-option v-for="type in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CUSTOMS_TYPE)" :key="type.value" :label="$l(type, 'label')" :value="type.value"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('报关公司')" v-show="showSearch">
<supplierSelect v-model="queryParams.dcCompanyId" :companyType="'2'" :placeholder="$t('请选择报关公司')" :allSupplier="allSupplier" clearable multiple collapse-tags />
</el-form-item>
<el-form-item :label="$t('放行时间')" v-show="showSearch">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="queryParams.dcPassTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('实际开船时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('实际开船开始日期')" :end-placeholder="$t('实际开船结束日期')" v-model="queryParams.bgRealShipBeginTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('预计到港时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计到港开始日期')" :end-placeholder="$t('预计到港结束日期')" v-model="queryParams.estBeginTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('出单方式')" v-show="showSearch">
<el-select v-model="queryParams.cdOutBillType" :placeholder="$t('请选择出单方式')" clearable multiple collapse-tags>
<el-option v-for="item in method" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Agent list状态" v-show="showSearch">
<el-select v-model="queryParams.cdAgentlistType">
<el-option
v-for="item in status"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Soncap状态" v-show="showSearch">
<el-select v-model="queryParams.cdSoncapType">
<el-option
v-for="item in status"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('预计清关时间')" v-show="showSearch">
<el-date-picker type="datetimerange" :start-placeholder="$t('预计清关开始日期')" :end-placeholder="$t('预计清关结束日期')" v-model="queryParams.clEstBeginTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
$t("搜索")
......@@ -516,16 +581,23 @@ import {
downloadFile,
downloadFileByUrl,
formatDate,
constantDict,
} from "./shippingSea/utils";
import { getRegionList } from "@/api/ecw/order";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getWarehouseList } from "@/api/ecw/warehouse";
import { getListTree } from "@/api/ecw/region";
import { getDockPage } from "@/api/ecw/dock";
import { getSupplierPage } from "@/api/ecw/supplier";
import costForm from "./costForm.vue";
import dockSelect from "./shippingSea/nodePage/common/dockSelect.vue";
import supplierSelect from "./shippingSea/nodePage/common/supplierSelect.vue";
//异常登记对话框
import regError from "./regError.vue";
import editForm from "./editForm.vue";
import ladingBill from "./ladingBill/index.vue";
import { listUser } from "@/api/system/user";
import { set } from "nprogress";
export default {
name: "EcwBoxIndexsea",
......@@ -534,9 +606,25 @@ export default {
regError,
editForm,
ladingBill,
dockSelect,
supplierSelect,
},
data() {
return {
AddressCity: [],
AddressProvince: [],
AddressTown: [],
countryIdList: null,
destCityIdList: null,
destWarehouseIdList: null,
// 选中数组
ids: [],
//目的国
countryList: [],
//目的城市
cityList: [],
//目的仓
destWarehouseList: [],
dateTypes: [
{ value: "1", label: this.$t("预装时间") },
{ value: "2", label: this.$t("装柜时间") },
......@@ -555,7 +643,7 @@ export default {
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
showSearch: false,
// 总条数
total: 0,
// 出货列表
......@@ -586,8 +674,159 @@ export default {
// 通知列表
noticeList: [],
allUsers: [],
// 码头
allDocks: [],
// 供应商
allSupplier: [],
// 出单方式
method: constantDict.billingMethod,
// 选项
status: constantDict.isFile,
};
},
watch: {
countryIdList: {
//监听当前地区值的变化,于与上方地区值进行了双向绑定
deep: true, //深度监听
handler() {
//每当值省份值改变时其下地区值进行清空
this.AddressCity = []
this.AddressTown = []
this.destCityIdList = ""
this.destWarehouseIdList = ""
this.findByprovinceCode()
if (this.countryIdList == "") {
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
//重新加载目的城市
//目的城市
// getRegionList(4, 4).then(({data}) => {
// this.AddressCity = data;
// })
// .catch(error => {
// console.log(error);
// });
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// })
// .catch(error => {
// console.log(error);
// });
}
},
destCityIdList: {
deep: true, //深度监听
handler() {
this.AddressTown = []
this.destWarehouseIdList = ""
this.findBycityCode()
if (this.destCityIdList != "" && this.countryIdList != "" && this.destWarehouseIdList == "") {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList == "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
// else if(this.destCityIdList!="" && this.destCityIdList=="" ){
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// }).catch(error => {
// console.log(error);
// });
// }
}
},
destWarehouseIdList: {
deep: true, //深度监听
handler() {
if (this.destCityIdList != "" && this.countryIdList != "" && this.destWarehouseIdList == "") {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
} else if (this.countryIdList != "" && this.destCityIdList == "" && this.destWarehouseIdList == "") {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
}
// else if(this.destCityIdList=="" && this.destWarehouseIdList==""){
// getRegionList(5, 5).then(({data}) => {
// this.AddressTown = data;
// })
// .catch(error => {
// console.log(error);
// });
// }
}
}
},
computed: {
exportWarehouseList() {
return this.warehouseList.filter(
......@@ -611,6 +850,7 @@ export default {
},
},
created() {
this.init()
this.transportTypes = this.getDictDatas(
this.DICT_TYPE.ECW_TRANSPORT_TYPE
).filter((item) => item.value == "1" || item.value == "2");
......@@ -628,6 +868,80 @@ export default {
});
},
methods: {
init() {
//加载时发起请求获取所有省份值
getRegionList(1, 1)
.then(({ data }) => {
this.AddressProvince = data
console.log(this.AddressProvince)
})
.catch((error) => {
console.log(error)
})
//目的城市
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
//目的仓
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data
})
.catch((error) => {
console.log(error)
})
// 码头
getDockPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allDocks = data.list;
});
// 供应商
getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
const { data } = res;
this.allSupplier = data.list.map((item) => {
if (item.companyType) {
item.companyTypes = item.companyType.split(",");
}
return item;
});
});
},
findByprovinceCode() {
//获取当前省份值id,获取该省份下城市 countryIdList provinceCode
getRegionList(2, this.countryIdList)
.then(({ data }) => {
this.AddressCity = data
})
.catch((error) => {
console.log(error)
})
},
findBycityCode() {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityIdList)
.then(({ data }) => {
this.AddressTown = data
// 去重
// let uniqueDataList = data.filter((item, index, self) => {
// // 返回第一个匹配项的索引,用于判断当前项是否为第一个匹配项
// const firstIndex = self.findIndex((obj) => obj.guojia === item.guojia);
// // 如果当前项是第一个匹配项,则保留,否则过滤掉
// return index === firstIndex;
// });
// this.AddressProvince = uniqueDataList
})
.catch((error) => {
console.log(error)
})
},
formatDate,
queryNotice() {
getNoticeList({
......@@ -656,6 +970,14 @@ export default {
let params = { ...this.queryParams };
params.transportTypeList = ["1", "2"];
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
this.addBeginAndEndTimeNew(params, params.bargeBeginTime, 'barge');// 预计驳船时间
this.addBeginAndEndTimeNew(params, params.sailBeginTime, 'sail');// 预计开船时间
this.addBeginAndEndTimeNew(params, params.ladingBillBeginTime, 'ladingBill');// 截补料时间
this.addBeginAndEndTimeNew(params, params.customsBeginTime, 'customs');// VGM提交时间
this.addBeginAndEndTimeNew(params, params.cutOffBeginTime, 'cutOff');// 截关时间
this.addBeginAndEndTimeNew(params, params.clEstBeginTime, 'clEst');// 预计清关时间
this.addBeginAndEndTimeNew(params, params.bgRealShipBeginTime, 'bgRealShip');// 实际开船时间
this.addBeginAndEndTimeNew(params, params.estBeginTime, 'est');// 预计到港时间
// 执行查询
getboxPage(params).then((response) => {
this.list = response.data.list;
......@@ -723,6 +1045,14 @@ export default {
params.pageSize = undefined;
params.transportTypeList = ["1", "2"];
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
this.addBeginAndEndTimeNew(params, params.bargeBeginTime, 'barge');// 预计驳船时间
this.addBeginAndEndTimeNew(params, params.sailBeginTime, 'sail');// 预计开船时间
this.addBeginAndEndTimeNew(params, params.ladingBillBeginTime, 'ladingBill');// 截补料时间
this.addBeginAndEndTimeNew(params, params.customsBeginTime, 'customs');// VGM提交时间
this.addBeginAndEndTimeNew(params, params.cutOffBeginTime, 'cutOff');// 截关时间
this.addBeginAndEndTimeNew(params, params.clEstBeginTime, 'clEst');// 预计清关时间
this.addBeginAndEndTimeNew(params, params.bgRealShipBeginTime, 'bgRealShip');// 实际开船时间
this.addBeginAndEndTimeNew(params, params.estBeginTime, 'est');// 预计到港时间
// 执行导出
this.$modal
.confirm(this.$t("是否确认导出所有出货数据项?"))
......
......@@ -252,15 +252,20 @@
align="center"
width="120px"
>
<template slot-scope="scope">
<el-button
type="primary"
size="small"
:disabled="scope.row.abnormalDealStatus === 1"
@click="() => updateStatus('single', scope.row)"
<el-button
type="primary"
size="small"
:disabled="scope.row.abnormalDealStatus === 1"
@click="() => updateStatus('single', scope.row)"
style="margin-top: 5px"
>{{ $t("更新状态") }}</el-button
>
>
<el-button type="danger" style="margin-top: 5px;" size="small" @click="openError(scope.row)">{{$t('异常')}}</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
......@@ -590,6 +595,7 @@ import { listUser } from "@/api/system/user";
//lanbm 2024-05-16 add
import { getCurrencyList } from "@/api/ecw/currency";
import unloadingError from "@/views/ecw/box/shippingSea/nodePage/unloading/unloadingError.vue";
import Template from "@/views/cms/template/index.vue";
export default {
name: "EcwBoxQuery",
......@@ -597,6 +603,7 @@ export default {
shipmentId: String,
},
components: {
Template,
costForm,
regError,
editForm,
......@@ -746,6 +753,11 @@ export default {
this.currRow = row;
this.dialogVisible = true;
},
/* 打开异常 */
openError(row) {
this.currRow = row;
this.dialogVisible = true;
},
/* 更新状态 */
updateStatus(type, row) {
let orders = [];
......
......@@ -323,7 +323,7 @@
>{{ $t("撤销清关申请") }}</el-button
>
<!-- <el-button type="danger" style="margin-top: 5px;" size="small" @click="openError(scope.row)">{{$t('异常')}}</el-button> -->
<el-button type="danger" style="margin-top: 5px;" size="small" @click="openError(scope.row)">{{$t('异常')}}</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -3,7 +3,7 @@
<el-form ref="agentForm" :model="agentObj" :rules="rules" label-width="120px">
<el-form-item :label="$t('代理商Agent')" prop="agentId">
<supplierOutSelect v-model="agentObj.agentId" :companyType="'1'" :areaType="1" :placeholder="$t('请选择代理商')" :allSupplier="this.$attrs.allSupplier" />
<el-button v-hasPermi="['ecw:supplier:query']" type="text" style="font-size: 13px; margin-left: 240px;" @click="SupplierDetail">{{$t('查看代理商详情')}}</el-button>
<el-button v-if="agentObj.agentId" v-hasPermi="['ecw:supplier:query']" type="text" style="font-size: 13px; margin-left: 240px;" @click="SupplierDetail">{{$t('查看代理商详情')}}</el-button>
</el-form-item>
</el-form>
<el-row class="operate-button">
......
......@@ -3,7 +3,7 @@
<el-form ref="agentForm" :model="agentObj" :rules="rules" label-width="120px">
<el-form-item :label="$t('代理商Agent')" prop="agentId">
<supplierOutSelect v-model="agentObj.agentId" :companyType="'1'" :areaType="1" :placeholder="$t('请选择代理商')" :allSupplier="this.$attrs.allSupplier" />
<el-button v-hasPermi="['ecw:supplier:query']" type="text" style="font-size: 13px; margin-left: 240px;" @click="SupplierDetail">{{$t('查看代理商详情')}}</el-button>
<el-button v-hasPermi="['ecw:supplier:query']" v-if="agentObj.agentId" type="text" style="font-size: 13px; margin-left: 240px;" @click="SupplierDetail">{{$t('查看代理商详情')}}</el-button>
</el-form-item>
</el-form>
<el-row class="operate-button">
......
......@@ -43,8 +43,8 @@ export default {
(item) => item.areaType == this.areaType
);
if(this.areaType == 1 || !this.companyType) return allSupplier;
return allSupplier.filter((item) =>
item.companyTypes.includes(this.companyType)
return allSupplier?.filter((item) =>
item.companyTypes?.includes(this.companyType)
);
},
},
......
......@@ -39,6 +39,12 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('联系方式')">
<el-input v-model="form.contactPhone" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('客户经理')" required>
<el-select v-model="form.followUserId" clearable :placeholder="$t('请选择')" :disabled="isView">
......@@ -135,6 +141,7 @@
<script>
import { createCustomerFollow, getCustomerFollowPage, getCustomerFollowPage2, addCustomerFollow, getCustomerFollowList, editCustomerFollow, getFollowupNewNumber } from "@/api/ecw/customerFollow"
import { getCustomerContactsSelect } from "@/api/ecw/customerContacts"
import { getOfferPage } from "@/api/ecw/offer"
import { DICT_TYPE, getDictDataLabel } from "@/utils/dict"
import { getCustomerContactsListByCustomer } from "@/api/ecw/customerContacts"
......@@ -212,12 +219,26 @@ export default {
},
methods: {
init() {
if (!!this.form.customerId)
if (this.form.customerId) {
getCustomerContactsListByCustomer({
customerId: this.form.customerId
}).then((r) => {
this.customerContactsList = r.data
})
} else {
getCustomerContactsSelect().then((res) => {
this.customerContactsList = res.data.list.map((item) => {
return {
name: item.contactsName,
id: item.customerContactsId,
customerId: item.customerId,
phoneNew: item.phoneNew,
areaCode: item.areaCode,
customerNumber: item.customerNumber
}
})
})
}
},
getOfferList() {
getOfferPage(this.queryParams).then((response) => {
......@@ -276,7 +297,9 @@ export default {
for (const item of this.customerContactsList) {
if (item.id == val) {
this.form.contactName = item.name
// this.form.contactPhone = `+${item.areaCode}${item.phoneNew}`
this.form.customerId = item.customerId
this.form.contactPhone = "+" + item.areaCode + item.phoneNew
if (item.customerNumber) this.form.customerNumber = item.customerNumber
break
}
}
......@@ -362,7 +385,10 @@ export default {
let r = await getFollowupNewNumber()
console.log(r)
this.form.customerId = this.customerId
this.form.number = r.data
this.form.number = r.data.number
this.form.nubmerId = r.data.nubmerId
this.form.numberVersion = r.data.numberVersion
this.form.status = 0
this.init()
},
async handleUpdate(row, flag) {
......@@ -380,8 +406,11 @@ export default {
parentNumber: row.number,
followTime: row.nextTime,
nextTime: "",
number: r.data,
nextPlan: ""
number: r.data.number,
nubmerId: r.data.nubmerId,
numberVersion: r.data.numberVersion,
nextPlan: "",
status: 0
}
}
this.init()
......
......@@ -370,7 +370,7 @@
<span class="title-text">{{ $t("设置") }}</span>
<el-button style="float: right" size="small" type="primary" @click="showSettingFlag = !showSettingFlag">{{ showSettingFlag ? $t("隐藏") : $t("更多") }}</el-button>
</div>
<el-form ref="setForm" label-width="150px" v-if="showSettingFlag">
<el-form ref="setForm" label-width="150px" v-show="showSettingFlag">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('是否显示提单价格')" prop="isShowTidanPrice">
......@@ -437,7 +437,7 @@
<span class="title-text">{{ $t("财务") }}</span>
<el-button style="float: right" size="small" type="primary" @click="showFinanceFlag = !showFinanceFlag">{{ showFinanceFlag ? $t("隐藏") : $t("更多") }}</el-button>
</div>
<el-form ref="financeForm" label-width="150px" v-if="showFinanceFlag">
<el-form ref="financeForm" label-width="150px" v-show="showFinanceFlag">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('公司名称')" prop="company">
......@@ -518,7 +518,7 @@
</el-row>
</el-form>
<el-form ref="bankForm" :model="form" v-if="showFinanceFlag">
<el-form ref="bankForm" :model="form" v-show="showFinanceFlag">
<el-row type="flex" class="row-bg" justify="space-between">
<span style="font-size: 15px; line-height: 30px">{{ $t("银行信息") }}</span>
<el-button size="small" type="primary" @click="addBankData">+</el-button>
......@@ -1001,10 +1001,17 @@ export default {
}
this.$refs["contactForm"].validate((valid1, err1) => {
this.$refs["form"].validate((valid2, err2) => {
console.log(valid2, "valid2", err2)
this.$refs.bankForm.validate((valid3, err3) => {
console.log(valid3, "valid3")
console.log(valid3, "valid3", err3)
if (!valid1 || !valid2 || !valid3) {
console.log(333)
this.$showFormValidateErrors({ ...err1, ...err2, ...err3 })
this.showBaseFlag = true
this.showShippingFlag = true
this.showSettingFlag = true
this.showFinanceFlag = true
return
}
if (this.form.customerContacts.length === 0) {
......
......@@ -15,25 +15,59 @@
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
<el-select multiple v-model="queryParams.destWarehouseIdList" multiple
:placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="shippingChannel">
<el-select v-model="queryParams.channelId" :placeholder="$t('请选择出货渠道')" clearable>
<el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId"
:key="item.channelId"></el-option>
</el-select>
</el-form-item>
<el-form-item label-width="200" label="目的仓国家">
<el-select style="width: 100%" filterable clearable v-model="queryParams.destCountryId" :placeholder="$t('请选择国家')">
<el-option v-for="dict in countryList"
:key="dict.id" :label="$l(dict,'title')" :value="parseInt(dict.id)"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的国')" prop="destCountryId">
<el-select
v-model="destCountryId"
multiple
:label="destCountryId"
clearable
@change="handleQuery"
>
<el-option
v-for="item in countryList"
:key="item.id"
:label="$l(item, 'title')"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="destCityId"
multiple
clearable
@change="handleQuery">
<el-option
v-for="item in AddressCity"
:key="item.shi"
:label="item.shiName"
:value="item.shi"
></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseId">
<el-select v-model="destWarehouseId"
clearable
multiple
@change="handleQuery">
<el-option
v-for="item in AddressTown"
:key="item.id"
:label="item.titleZh"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
</el-form-item>
</el-form>
......@@ -97,8 +131,11 @@ import {
getPersonTargetPage,
myAchievementByPage
} from "@/api/ecw/deptTarget";
import { getRegionList } from "@/api/ecw/order";
import {listSimpleDepts} from "@/api/system/dept";
import {getChannelList} from '@/api/ecw/channel';
import { getTradeCityList, getListTree } from "@/api/ecw/region";
import { getCityList } from "@/api/ecw/region";
import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
......@@ -111,7 +148,19 @@ export default {
components: {},
data() {
return {
countryList:[],
AddressCity: [], //目的城市
AddressProvince: [], //省份
AddressTown: [], //目的仓
countryList: [], //目的国
warehouseList: [], //目前仓
destCountryId: [],
destCityId: null,
destWarehouseId: "",
objectiveId: [],
// 遮罩层
loading: true,
// 总条数
......@@ -125,6 +174,10 @@ export default {
queryParams: {
page: 1,
rows: 10,
destCityId: null, //目的城市
destCountryId: null, //目的国
destWarehouseId: null, //目的仓
objectiveId: null,
},
// 表单校验
......@@ -132,6 +185,168 @@ export default {
warehouseList: []
};
},
watch: {
destCountryId: {
//监听当前地区值的变化,于与上方地区值进行了双向绑定
deep: true, //深度监听
handler() {
//每当值省份值改变时其下地区值进行清空
this.AddressCity = [];
this.AddressTown = [];
this.destWarehouseId = "";
this.destCityId = "";
this.findByprovinceCode();
if (this.destCountryId == "") {
//1 是所有区域,2 国家,3是市,
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.objectiveId == "" &&
this.destWarehouseId == ""
) {
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
destCityId: {
deep: true, //深度监听 目的仓
handler() {
this.AddressTown = [];
this.destWarehouseId = "";
this.findBycityCode();
if (
this.destCityId != "" &&
this.destCountryId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
destWarehouseId: {
deep: true, //深度监听
handler() {
if (
this.destCountryId != "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
},
computed: {
DICT_TYPE() {
return DICT_TYPE
......@@ -154,6 +369,11 @@ export default {
})
this.getChannelList();
this.getList();
this.getData();
//获取国家列表
this.getCountryList();
listServiceUser().then(r => {
this.customerServiceList = r.data;
})
......@@ -162,6 +382,62 @@ export default {
})
},
methods: {
findByprovinceCode() {
//获取当前省份值id,获取该省份下城市 destCountryId provinceCode
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
},
findBycityCode() {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.objectiveId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
},
getData() {
//加载时发起请求获取所有省份值
getRegionList(1, 1)
.then(({ data }) => {
this.AddressProvince = data;
})
.catch((error) => {
console.log(error);
});
//目的城市
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
//目的仓
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
},
/* 国家 */
getCountryList() {
getListTree({ treeType: 1 }).then((response) => {
this.countryList = response.data;
});
},
getChannelList() {
getChannelList().then(res => this.channelList = res.data)
},
......@@ -187,6 +463,13 @@ export default {
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.page = 1;
//目的城市
this.queryParams.destCityId = this.destCityId;
//目的国
this.queryParams.destCountryId = this.destCountryId;
//目的仓
this.queryParams.destWarehouseId = this.destWarehouseId;
this.getList();
},
}
......
......@@ -195,8 +195,8 @@ export default {
exportCustomerFollow({
...this.followForm,
...this.formatQuery(),
pageNo: 1,
pageSize: 10000000
pageNo: null,
pageSize: null
}).then((r) => {
this.$message.success(this.$t("已加入导出队列,请稍后在下载日志中下载"))
})
......
......@@ -14,7 +14,7 @@
<el-form-item :label="$t('商品名称')" prop="titleZh">
<el-input v-model="queryParams.titleZh" :placeholder="$t('请输入商品名称')" clearable @keyup.enter.native="handleQuery" onkeyup="this.value=this.value.replace(/\s+/g, '')" />
</el-form-item>
<el-form-item :label="$t('商品类型')" prop="typeId">
<el-select v-model="queryParams.typeId" :placeholder="$t('选择商品类型')" clearable>
<el-option v-for="type in typeList" :key="type.id" :label="type.titleZh" :value="type.id"/>
......@@ -26,31 +26,78 @@
<el-option v-for="attr in attrList" :key="attr.id" :label="attr.attrName" :value="attr.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startCityId">
<el-select v-model="queryParams.startCityId" clearable>
<el-option v-for="city in startCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
<el-option v-for="city in startCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
</el-select>
</el-form-item>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destCityId">
<!-- <el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="queryParams.destCityId" clearable>
<el-option v-for="city in destCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
<el-option v-for="city in destCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
</el-select>
</el-form-item> -->
<el-form-item :label="$t('目的国')" prop="destCountryId">
<el-select
v-model="destCountryId"
multiple
:label="destCountryId"
clearable
@change="handleQuery"
>
<el-option
v-for="item in countryList"
:key="item.id"
:label="$l(item, 'title')"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="destCityId"
multiple
clearable
@change="handleQuery">
<el-option
v-for="item in AddressCity"
:key="item.shi"
:label="item.shiName"
:value="item.shi"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseId">
<el-select v-model="destWarehouseId"
clearable
multiple
@change="handleQuery">
<el-option
v-for="item in AddressTown"
:key="item.id"
:label="item.titleZh"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('空运渠道')" prop="shippingChannelId">
<el-select v-model="queryParams.shippingChannelId" clearable>
<el-option v-for="item in channelList" :key="item.id" :label="item.nameZh" :value="item.channelId" />
<el-option v-for="item in channelList" :key="item.id" :label="item.nameZh" :value="item.channelId" />
</el-select>
</el-form-item>
</el-form-item>
<el-form-item label="" prop="blacklist" v-if="false">
<el-checkbox v-model="queryParams.blacklist"
<el-checkbox v-model="queryParams.blacklist"
:true-label="1" :false-label="0">{{$t('黑名单')}}</el-checkbox>
</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="resetQuery">{{$t('重置')}}</el-button>
......@@ -132,10 +179,10 @@
<el-table-column prop="price" :label="$t('价格')" align="center">
<template slot-scope="scope">
<div>
{{$t('海运费')}}:{{ getCurrencySymbol(scope.row.transportPriceUnit) + scope.row.transportPrice}}&nbsp;
{{$t('海运费')}}:{{ getCurrencySymbol(scope.row.transportPriceUnit) + scope.row.transportPrice}}&nbsp;
{{ getCurrencyTitle(scope.row.transportPriceUnit) + '/' + getUnitTitle(scope.row.transportVolumeUnit)}}
<br />
{{$t('清关费')}}:{{ getCurrencySymbol(scope.row.clearancePriceUnit) + scope.row.clearancePrice}}&nbsp;
{{$t('清关费')}}:{{ getCurrencySymbol(scope.row.clearancePriceUnit) + scope.row.clearancePrice}}&nbsp;
{{ getCurrencyTitle(scope.row.clearancePriceUnit) + '/' + getUnitTitle(scope.row.clearanceVolumeUnit)}}
</div>
</template>
......@@ -184,7 +231,7 @@
<el-option v-for="type in typeList" :key="type.id" :label="type.titleZh" :value="type.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('商品名称')" prop="titleZh">
<el-input v-model="form.titleZh" disabled />
......@@ -198,26 +245,26 @@
<el-col :span="6">
<el-form-item :label="$t('运输方式')" prop="transportType">
<el-select v-model="form.transportType" clearable @change="transportTypeChange">
<el-option v-for="dict in transportDatas" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
<el-option v-for="dict in transportDatas" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
</el-select>
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('始发地')" prop="startCityId">
<el-select v-model="form.startCityId" clearable @change="startCityChange">
<el-option v-for="city in startCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
<el-option v-for="city in startCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
</el-select>
</el-form-item>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="form.destCityId" clearable @change="destCityChange">
<el-option v-for="city in destCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
<el-option v-for="city in destCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-row>
<el-table
......@@ -243,7 +290,7 @@
})}}
</template>
</el-table-column>
</el-table>
<br />
......@@ -252,7 +299,7 @@
<el-row :gutter="20">
<el-col :span="4">
<el-select v-model="form.transportPriceUnit">
<el-option v-for="currency in currecyList" :key="currency.id" :label="$l(currency, 'title')" :value="currency.id" />
<el-option v-for="currency in currecyList" :key="currency.id" :label="$l(currency, 'title')" :value="currency.id" />
</el-select>
</el-col>
......@@ -262,7 +309,7 @@
<el-col :span="4">
<el-select v-model="form.transportVolumeUnit">
<el-option v-for="unit in unitList" :key="unit.id" :label="$l(unit, 'title')" :value="unit.id" />
<el-option v-for="unit in unitList" :key="unit.id" :label="$l(unit, 'title')" :value="unit.id" />
</el-select>
</el-col>
</el-row>
......@@ -272,7 +319,7 @@
<el-row :gutter="20">
<el-col :span="4">
<el-select v-model="form.clearancePriceUnit">
<el-option v-for="currency in currecyList" :key="currency.id" :label="$l(currency, 'title')" :value="currency.id" />
<el-option v-for="currency in currecyList" :key="currency.id" :label="$l(currency, 'title')" :value="currency.id" />
</el-select>
</el-col>
......@@ -282,7 +329,7 @@
<el-col :span="4">
<el-select v-model="form.clearanceVolumeUnit">
<el-option v-for="unit in unitList" :key="unit.id" :label="$l(unit, 'title')" :value="unit.id" />
<el-option v-for="unit in unitList" :key="unit.id" :label="$l(unit, 'title')" :value="unit.id" />
</el-select>
</el-col>
</el-row>
......@@ -334,6 +381,8 @@
</template>
<script>
import { getRegionList } from "@/api/ecw/order";
import { getTradeCityList, getListTree } from "@/api/ecw/region";
import { createProductPrice, updateProductPrice, deleteProductPrice, getProductPrice, getProductPricePage, exportProductPriceExcel } from "@/api/ecw/productPrice";
import { openedRouterList } from "@/api/ecw/warehouse";
import { getCityList } from "@/api/ecw/region";
......@@ -344,6 +393,7 @@ import { getCurrencyList } from '@/api/ecw/currency';
import { getUnitList } from '@/api/ecw/unit';
import { AuditStatusEnum} from '@/utils/constants'
import { getChannelList } from '@/api/ecw/channel';
import { getProduct } from "@/api/ecw/product";
import DictTag from '@/components/DictTag'
import {arrryToKeyedObjectBy} from '@/utils/index'
export default {
......@@ -353,6 +403,18 @@ export default {
},
data() {
return {
AddressCity: [], //目的城市
AddressProvince: [], //省份
AddressTown: [], //目的仓
countryList: [], //目的国
warehouseList: [], //目前仓
destCountryId: [],
destCityId: null,
destWarehouseId: "",
objectiveId: [],
//特性列表
attrList:[],
typeList: [],
......@@ -399,6 +461,10 @@ export default {
clearanceVolumeUnit: null,
shippingChannelId: null,
status: null,
destCityId: null, //目的城市
destCountryId: null, //目的国
destWarehouseId: null, //目的仓
objectiveId: null,
},
// 表单参数
form: {
......@@ -423,10 +489,195 @@ export default {
advanceStatusDictDatas: getDictDatas(DICT_TYPE.ADVANCE_STATUS),
AuditStatusEnum: AuditStatusEnum,
locationList: getDictDatas(DICT_TYPE.ECW_CONTAINER_LOCATION),
};
},
watch: {
destCountryId: {
//监听当前地区值的变化,于与上方地区值进行了双向绑定
deep: true, //深度监听
handler() {
//每当值省份值改变时其下地区值进行清空
this.AddressCity = [];
this.AddressTown = [];
this.destWarehouseId = "";
this.destCityId = "";
this.findByprovinceCode();
if (this.destCountryId == "") {
//1 是所有区域,2 国家,3是市,
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.objectiveId == "" &&
this.destWarehouseId == ""
) {
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
destCityId: {
deep: true, //深度监听 目的仓
handler() {
this.AddressTown = [];
this.destWarehouseId = "";
this.findBycityCode();
if (
this.destCityId != "" &&
this.destCountryId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
destWarehouseId: {
deep: true, //深度监听
handler() {
if (
this.destCountryId != "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId != "" &&
this.destCityId == "" &&
this.destWarehouseId == ""
) {
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
} else if (
this.destCountryId == "" &&
this.destCityId != "" &&
this.destWarehouseId == ""
) {
getRegionList(3, this.destCityId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
}
},
},
"$route.query.product_id"() {
// if(!this.$route.query.product_id){
// return this.product = null
// }
// 价格列表 跟 商品的价格列表,有时候商品价格列表的路由变动会导致价格列表也执行此处代码,所以做一个判断排除
// https://zentao.test.jdshangmen.com/bug-view-4928.html
if (this.$route.path != this.entryPath) return;
let productId = this.product?.id;
if (this.$route.name === "ProductPrice") {
if (this.$route.query.product_id != productId) {
this.queryParams = {
pageNo: 1,
pageSize: 10,
productId: this.$route.query.product_id,
typeId: this.$route.query.product_type,
transportType: this.$route.query.transportType,
};
}
getProduct(this.$route.query.product_id).then((res) => {
this.product = res.data;
});
this.getList();
}
},
},
computed: {
keyedChannel(){
return arrryToKeyedObjectBy(this.channelList, 'channelId')
......@@ -514,8 +765,8 @@ export default {
created() {
this.queryParams.blacklist = 1;
// this.transportDatas = getDictDatas(DICT_TYPE.ECW_TRANSPORT_TYPE);
// console.log(this.transportDatas);
let productJson = localStorage.getItem('product');
......@@ -524,11 +775,15 @@ export default {
this.getTypeList();
this.getChannelList()
this.getAttrList();
this.getList();
this.getData();
//获取国家列表
this.getCountryList();
//获取城市列表
this.getAllCityList();
//this.getAllCityList();
//获取货币列表
this.requestCurrencyList();
//获取单位列表
......@@ -538,6 +793,28 @@ export default {
methods: {
findByprovinceCode() {
//获取当前省份值id,获取该省份下城市 destCountryId provinceCode
getRegionList(2, this.destCountryId)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
},
findBycityCode() {
//获取当前城市值id,获取该城市下区域
getRegionList(3, this.objectiveId)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
},
getChannelList(){
getChannelList().then(res => this.channelList = res.data)
},
......@@ -555,6 +832,40 @@ export default {
})
},
getData() {
//加载时发起请求获取所有省份值
getRegionList(1, 1)
.then(({ data }) => {
this.AddressProvince = data;
})
.catch((error) => {
console.log(error);
});
//目的城市
getRegionList(4, 4)
.then(({ data }) => {
this.AddressCity = data;
})
.catch((error) => {
console.log(error);
});
//目的仓
getRegionList(5, 5)
.then(({ data }) => {
this.AddressTown = data;
})
.catch((error) => {
console.log(error);
});
},
/* 国家 */
getCountryList() {
getListTree({ treeType: 1 }).then((response) => {
this.countryList = response.data;
});
},
/**获取所有城市列表 */
getAllCityList() {
getCityList({}).then(response => {
......@@ -585,7 +896,7 @@ export default {
requestCurrencyList() {
getCurrencyList().then(response => {
this.currecyList = response.data;
})
})
},
/**获取所有单位列表 */
......@@ -662,6 +973,13 @@ export default {
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
//目的城市
this.queryParams.destCityId = this.destCityId;
//目的国
this.queryParams.destCountryId = this.destCountryId;
//目的仓
this.queryParams.destWarehouseId = this.destWarehouseId;
this.getList();
},
/** 重置按钮操作 */
......@@ -693,11 +1011,11 @@ export default {
} else {
row.auditStatus = row.auditStatus === AuditStatusEnum.PASS ? AuditStatusEnum.NOT_PASS : AuditStatusEnum.PASS;
}
});
},
checkSelectable() {
return !this.isUpdate;
},
......@@ -778,4 +1096,4 @@ export default {
}
}
};
</script>
\ No newline at end of file
</script>
......@@ -63,7 +63,7 @@
>
<el-select
v-model="queryParams.attrId"
:placeholder="$t('选择商品类型')"
:placeholder="$t('选择商品属性')"
clearable
@change="handleQuery"
>
......@@ -133,6 +133,7 @@
<el-form-item :label="$t('目的国')" prop="destCountryId">
<el-select
v-model="destCountryId"
multiple
:label="destCountryId"
clearable
@change="handleQuery"
......@@ -147,7 +148,10 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="destCityId" clearable @change="handleQuery">
<el-select v-model="destCityId"
multiple
clearable
@change="handleQuery">
<el-option
v-for="item in AddressCity"
:key="item.shi"
......@@ -157,7 +161,10 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destWarehouseId">
<el-select v-model="destWarehouseId" clearable @change="handleQuery">
<el-select v-model="destWarehouseId"
clearable
multiple
@change="handleQuery">
<el-option
v-for="item in AddressTown"
:key="item.id"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment