Commit 1dab8cab authored by 邓春圆's avatar 邓春圆

Merge remote-tracking branch 'origin/release' into release

parents a4580857 0dd3dc37
......@@ -328,6 +328,18 @@ export function downloadLoadGoodsList(params) {
});
}
/**
* 下载空运已装单
*/
export function downloadLoadGoods(params) {
return request({
url: "/ecw/box-preload-goods/downloadAirLoadGoodsList",
method: "get",
timeout: 120000,
params,
})
}
// 下载预装单
export function downloadPreloadGoodsList(params) {
return request({
......
......@@ -391,3 +391,15 @@ export function getLineInfo(params) {
params
});
}
/**
* 下载空运已装单
*/
export function downloadLoadGoods(params) {
return request({
url: "/ecw/box-preload-goods/downloadAirLoadGoodsList",
method: "get",
timeout: 120000,
params,
})
}
\ No newline at end of file
......@@ -1023,3 +1023,11 @@ export function getParentOrder(orderId){
method: 'get'
})
}
// 获取订单入仓商品明细通用属性集合,用于备货选择订单商品到明细
export function getOrderItemCommonAttr(orderId){
return request({
url: '/order/order-warehouse-in/get-order-warehouse-in-common-attr-list?orderId=' + orderId,
method: 'get'
})
}
......@@ -207,9 +207,9 @@ export default {
},
// 预览
handlePictureCardPreview(file) {
// this.dialogImageUrl = file.url;
// this.dialogVisible = true;
window.open(file.url)
this.dialogImageUrl = file.url;
this.dialogVisible = true;
// window.open(file.url)
},
// 对象转成指定字符串分隔
listToString(list, separator) {
......
......@@ -101,7 +101,7 @@
<el-form-item :label="$t('英文内容')" prop="contentEn">
<editor v-model="form.contentEn" :min-height="150"/>
</el-form-item>
<el-form-item :label="$t('WEB端广告图片(建议尺寸长*宽')+'902*310)'" prop="bannerUrlWeb">
<el-form-item :label="$t('WEB端广告图片(建议尺寸长*宽')+'1120*450)'" prop="bannerUrlWeb">
<el-col :span="8">
<el-input v-model="form.bannerUrlWeb" :placeholder="$t('请上传WEB端广告图片')" />
</el-col>
......@@ -113,7 +113,7 @@
</el-button>
</el-upload>
</el-form-item>
<el-form-item :label="$t('APP端广告图片(建议尺寸长*宽')+'688*294)'" prop="bannerUrlApp">
<el-form-item :label="$t('APP端广告图片(建议尺寸长*宽')+'675*304)'" prop="bannerUrlApp">
<el-col :span="8">
<el-input v-model="form.bannerUrlApp" :placeholder="$t('请上传APP端广告图片')" />
</el-col>
......
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" 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>
......@@ -43,6 +43,18 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的港清关')" prop="destinationClearance">
<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-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-row>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
......@@ -134,12 +146,12 @@
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="downloadPreloadGoodsList" v-hasPermi="['shipment:air:download:downloadPreloadGoodsList']">{{$t('预装单')}}</el-dropdown-item>
<!--el-dropdown-item command="downloadLoadGoodsList" v-hasPermi="['shipment:air:download:downloadLoadGoodsList']">{{$t('已装单')}}</el-dropdown-item-->
<el-dropdown-item command="downloadReceivableList" v-hasPermi="['shipment:air:download:downloadReceivableList']">{{$t('应收汇总表')}}</el-dropdown-item>
<el-dropdown-item command="downloadAgentListFiles" v-hasPermi="['shipment:air:download:downloadAgentListFiles']">agent list</el-dropdown-item>
<el-dropdown-item command="downloadSoncapFiles" v-hasPermi="['shipment:air:download:downloadSoncapFiles']">soncap</el-dropdown-item>
<el-dropdown-item command="zipDownload" v-hasPermi="['shipment:air:download:zipDownload']">{{$t('提货单')}}</el-dropdown-item>
<el-dropdown-item command="downloadLadingCopy" v-hasPermi="['shipment:air:download:downloadLadingCopy']">{{$t('提单Copy')}}</el-dropdown-item>
<el-dropdown-item command="downloadLoadGoods" v-hasPermi="['shipment:air:download:downloadLoadGoods']">{{$t('已装单')}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
......@@ -211,6 +223,7 @@ import {
} from '@/api/ecw/box'
import { getLineInfo } from '@/api/ecw/boxAir'
import { getChannelList } from '@/api/ecw/channel'
import { downloadLoadGoods } from '@/api/ecw/boxAir'
import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue'
import regError from './regError.vue'
......@@ -331,7 +344,31 @@ export default {
'13':430,
'14':435,
'15':438,
},
destinationClearanceData: [
{
label: '我司清关',
value: 1
},
{
label: '合作方清关',
value: 2
},
{
label: '客户',
value: 3
},
],
deliveryTypeData: [
{
label: '多票',
value: 1
},
{
label: '单票',
value: 2
}
]
}
},
computed: {
......@@ -597,6 +634,13 @@ export default {
case "downloadLadingCopy":
downloadFileByUrl(command, {shipmentId: row.id});
break;
case "downloadLoadGoods":
if(row.tyStatus < 2112){
this.$message.error('请先完成理货后,再下载已装单')
return
}
this.exportExcel(downloadLoadGoods, { shipmentId: row.id }, this.$t("已装单") + `(${row.selfNo}).xls`)
break;
case "handle":
const { noticeType } = row;
if ([1, 2, 3, 4, 8, 14].includes(noticeType)) {
......
......@@ -573,6 +573,7 @@ export default {
fileFormat ?? "xlsx"
);
}
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
},
handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
......
......@@ -166,7 +166,7 @@
</el-table-column>
<el-table-column prop="billAbnId" :label="$t('异常')" align="center">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BOX_AIR_SHIPMENT_PROCESS" :value="scope.row.billAbnId" />
<dict-tag :type="DICT_TYPE[getregprocess(scope.row.opStep)]" :value="scope.row.billAbnId" />
</template>
</el-table-column>
<el-table-column prop="abnDetail" :label="$t('异常描述')" align="center" width="300"></el-table-column>
......@@ -321,27 +321,33 @@ export default {
costDetail: {},
// 下载
downloadList: [
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:box:download:downloadPreloadGoodsList" },
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:air:download:downloadPreloadGoodsList" },
// { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:box:download:downloadReceivableList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:air:download:downloadReceivableList" },
{
title: this.$t("提货单"),
serviceName: "zipDownload",
fileFormat: "zip",
hasPermi: "shipment:box:download:zipDownload"
hasPermi: "shipment:air:download:zipDownload"
},
{
title: "agent list",
serviceName: "downloadAgentListFiles",
type: "url",
hasPermi: "shipment:box:download:downloadAgentListFiles"
hasPermi: "shipment:air:download:downloadAgentListFiles"
},
{ title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:box:download:downloadSoncapFiles" },
{ title: "soncap", serviceName: "downloadSoncapFiles", type: "url", hasPermi: "shipment:air:download:downloadSoncapFiles" },
{
title: this.$t("提单Copy"),
serviceName: "downloadLadingCopy",
type: "url",
hasPermi: "shipment:box:download:downloadLadingCopy"
hasPermi: "shipment:air:download:downloadLadingCopy"
},
{
title: this.$t("已装单"),
serviceName: "downloadLoadGoods",
type: "url",
hasPermi: "shipment:air:download:downloadLoadGoods"
},
],
// 选中行
......@@ -362,6 +368,24 @@ export default {
};
},
methods: {
getregprocess(val) {
var data = ''
switch(val){
case 10:
data = 'FLYING_TICKET_EXCEPTION'
break;
case 12:
data = 'ARRIVAL_TICKET_EXCEPTION'
break
case 13:
data = 'CLEARANCE_TICKET_EXCEPTION'
break
default:
data = 'BOX_SHIPPING_TICKET_EXCEPTION'
break
}
return data
},
selectable(row, index) {
if (row.abnormalDealStatus === 1) return false;
return true;
......@@ -641,6 +665,12 @@ export default {
},
formatDate,
downloadDetailFile(row) {
if(row.serviceName == 'downloadLoadGoods'){
if(this.shipmentObj.tyStatus < 2112){
this.$message.error('请先完成理货后,再下载已装单')
return
}
}
const { fileFormat, type } = row;
if (type === "url") {
downloadFileByUrl(row.serviceName, { shipmentId: this.shipmentId });
......@@ -655,6 +685,7 @@ export default {
fileFormat ?? "xlsx"
);
}
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
},
handleApproval(id) {
this.$router.push({path: '/bpm/process-instance/detail', query: {id: id}})
......
......@@ -27,12 +27,12 @@
<userSelect v-model="errorObj.notifyUsers" :placeholder="$t('请选择通知人')" :allUsers="this.$attrs.allUsers" multiple />
</el-form-item>
<!-- <el-form-item :label="$t('是否更新订单状态')">
<el-radio-group v-model="errorObj.orderStatus">
<el-form-item :label="$t('是否更新订单动态')">
<el-radio-group v-model="errorObj.updateStatus">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('中文内容')">
<!-- <el-form-item :label="$t('中文内容')">
<el-input v-model="errorObj.contentZh" type="textarea" rows="2" :placeholder="$t('请输入中文内容')"></el-input>
</el-form-item>
<el-form-item :label="$t('英文内容')">
......
......@@ -60,6 +60,14 @@
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="airCheckoutObj.checkoutTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('计划箱数')" prop="planNum">
<el-input-number v-model="airCheckoutObj.planNum" :controls="false" :precision="0" disabled />
</el-form-item>
<el-form-item :label="$t('出仓箱数')" prop="realNum">
<el-input-number v-model="airCheckoutObj.realNum" :controls="false" :precision="0" />
</el-form-item>
<el-form-item :label="$t('出仓影像')">
<ImageUpload :limit="1" :isShowTip=false v-model="airCheckoutObj.checkoutFiles" />
</el-form-item>
......@@ -113,6 +121,8 @@ export default {
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["checkoutTime"]);
this.airCheckoutObj = oldData;
this.$set(this.airCheckoutObj, 'planNum', this.$attrs.shipmentObj.planNum)
this.$set(this.airCheckoutObj, 'realNum', this.$attrs.shipmentObj.realNum)
let shipmentdData = { ...this.$attrs.shipmentObj["boxAirShipmentBackVO"] };
shipmentdData = formatDateStr(shipmentdData, ["deliverTime"]);
......@@ -124,6 +134,10 @@ export default {
onSubmit(operateType) {
this.$refs["airCheckoutForm"].validate((valid) => {
if (valid) {
if(this.airCheckoutObj.planNum != this.airCheckoutObj.realNum){
this.$message.error(this.$t("出仓件数与计划出仓件数不一致,请检查"));
return;
}
airCheckoutCreate({
...this.airCheckoutObj,
shipmentId: this.$attrs.shipmentObj.id,
......
......@@ -118,7 +118,7 @@
<pkg-page v-if="pkgPageType == 2" :pkgData="pkgData" :shipmentObj="shipmentObj" @closeDialog="closeDialog" @reload="getList" />
</el-dialog>
<!-- 打印标签 -->
<el-dialog :title="$t('集运封箱标签')" :visible.sync="printdialogVisible" width="350px" :modal-append-to-body="false" append-to-body>
<el-dialog :title="$t('封箱标签')" :visible.sync="printdialogVisible" width="350px" :modal-append-to-body="false" append-to-body>
<print-tag v-if="printdialogVisible" :tagData="tagData" />
</el-dialog>
......@@ -129,7 +129,7 @@
<el-radio-button :label="2">{{ $t('已装箱列表') }}</el-radio-button>
</el-radio-group>
</div>
<pkg-page :pkgData="showPkgData" :shipmentObj="shipmentObj" flag="show" @closeDialog="closeDialog" @reload="getList" />
<pkg-page v-if="showPagedialogVisible" :pkgData="showPkgData" :shipmentObj="shipmentObj" flag="show" @closeDialog="closeDialog" @reload="getList" />
</el-dialog>
<el-row style="margin-top: 15px" class="operate-button">
......
......@@ -63,25 +63,43 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" />
</el-row>
<!-- 封箱 -->
<el-dialog :title="$t('封箱确认')" :visible.sync="sealBoxdialogVisible" width="700px" :modal-append-to-body="false" append-to-body>
<el-dialog :title="$t('封箱确认')" :visible.sync="sealBoxdialogVisible" width="800px" :modal-append-to-body="false" append-to-body>
<el-form ref="sealBoxForm" :model="sealBoxForm" label-width="100px">
<el-form-item :label="$t('箱号')" prop="pkgNum">
{{ pkgData.pkgNum }}
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item :label="$t('长')" prop="pkgLength">
<el-input-number v-model="sealBoxForm.pkgLength" :controls="false" :precision="2" style="width: 100px" />
<el-form-item :label="$t('长')" prop="pkgLength" :rules="[
{ pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$/, message: $t('长度保留两位小数')}
]">
<el-input v-model="sealBoxForm.pkgLength" style="width: 150px" @change="culSumVolume">
<template slot="append">
{{ $t('cm') }}
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('宽')" prop="pkgWidth">
<el-input-number v-model="sealBoxForm.pkgWidth" :controls="false" :precision="2" style="width: 100px" />
<el-form-item :label="$t('宽')" prop="pkgWidth" :rules="[
{ pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$/, message: $t('宽度保留两位小数')}
]">
<el-input v-model="sealBoxForm.pkgWidth" style="width: 150px" @change="culSumVolume">
<template slot="append">
{{ $t('cm') }}
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="$t('高')" prop="pkgHight">
<el-input-number v-model="sealBoxForm.pkgHight" :controls="false" :precision="2" style="width: 100px" />
<el-form-item :label="$t('高')" prop="pkgHight" :rules="[
{ pattern: /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$/, message: $t('高度保留两位小数')}
]">
<el-input v-model="sealBoxForm.pkgHight" style="width: 150px" @change="culSumVolume">
<template slot="append">
{{ $t('cm') }}
</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
......@@ -122,7 +140,7 @@
</div>
</el-dialog>
<!-- 打印标签 -->
<el-dialog :title="$t('集运封箱标签')" :visible.sync="printdialogVisible" width="350px" :modal-append-to-body="false" append-to-body>
<el-dialog :title="$t('封箱标签')" :visible.sync="printdialogVisible" width="350px" :modal-append-to-body="false" append-to-body>
<print-tag v-if="printdialogVisible" :tagData="tagData" />
</el-dialog>
</el-row>
......@@ -188,6 +206,23 @@ export default {
})
return arr.toString()
},
//计算封箱体积
culSumVolume() {
let temp = this.sealBoxForm.pkgLength*this.sealBoxForm.pkgWidth*0.01*0.01
let sumVolume = this.accMul(temp, this.sealBoxForm.pkgHight*0.01)
if(sumVolume <= 0){
sumVolume = 0.01
}
this.$set(this.sealBoxForm, 'sumVolume', sumVolume)
},
accMul(arg1,arg2)
{
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
let num = Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
return num.toFixed(2)
},
getpositionNo(arr){
if(!arr) return arr
let data = []
......
<template>
<div>
<div>
<div class="tag">
<div style="display: flex;height: 180px;">
<div style="display: flex;height: 160px;">
<div style="border-right: 1px solid #999; width: 140px">
<div>
<div style="text-align: center">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">{{ $t('扫码查看产品数量') }}</span>
</p>
<img :src="tagData.qrCodeUrl" :alt="tagData.qrCodeUrl" style="width: 26mm" />
<img :src="tagData.qrCodeUrl" :alt="tagData.qrCodeUrl" style="width: 26mm"/>
<p style="margin-top: -1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.mergePkgNo }}</span>
</p>
......@@ -17,15 +17,17 @@
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.mergePkgNo }}</span>
</p>
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;"/>
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.company }}</span>
</p>
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;"/>
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.startWarehouse }} -> {{ tagData.endWarehouse }}</span>
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{
tagData.startWarehouse
}} -> {{ tagData.endWarehouse }}</span>
</p>
<div style="border-top: 1px solid #999;margin-left: 10px;" />
<div style="border-top: 1px solid #999;margin-left: 10px;"/>
<div style="display: flex;margin-top: 10px;">
<div style="border-right: 1px solid #999;width: 45px;">
<p style="margin-top: 1mm; text-align: center">
......@@ -40,18 +42,13 @@
</div>
</div>
</div>
<div style="border-top: 1px solid #999;margin: 10px;" />
<!--<div>
<img :src="tagData.barcodeUrl" style="width:250px;height: 50px;" />
</div>-->
<div style="height: 50px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">E&C Logistics: www.groupage.com</span>
</p>
<div style="border-top: 1px solid #999;margin: 10px;"/>
<div style="padding: 10px; width: 250px; height: 20px; text-align: center; font-size: 12px; color:#000;">
E&C Logistics: www.groupage.com
</div>
</div>
<div style="text-align:center;margin-top: 20px;">
<el-button type="primary" @click="print">{{$t('确定打印')}}</el-button>
<el-button type="primary" @click="print">{{ $t('确定打印') }}</el-button>
</div>
</div>
</template>
......@@ -79,7 +76,7 @@ export default {
LODOP.SET_PRINT_PAGESIZE(0, 800, 600, "TAG");
for(let i in items){
LODOP.ADD_PRINT_HTM("2mm",0,800,600, items[i].innerHTML);
LODOP.ADD_PRINT_HTM(0,0,800,600, items[i].outerHTML);
if(i < items.length){
LODOP.NewPage()
}
......
......@@ -140,7 +140,7 @@ export default {
this.$set(this.subMaterialObj,'soNo',this.shipmentObj.bookAirInfo?.sono||undefined)
this.$set(this.subMaterialObj,'blMblNo',this.shipmentObj.bookAirInfo?.blNo||undefined)
this.$set(this.subMaterialObj,'markNo',"N/M")
this.$set(this.subMaterialObj,'startPortId',this.shipmentObj.bookAirInfo?.bigPortId||undefined)
this.$set(this.subMaterialObj,'startPortId',this.shipmentObj.bookAirInfo?.departurePortId||undefined)
this.$set(this.subMaterialObj,'shipCompanyId',Number(this.shipmentObj.bookAirInfo?.shipCompanyType)||undefined)
this.$set(this.subMaterialObj,'destPortId',this.shipmentObj.bookAirInfo?.destPortId||undefined)
this.$set(this.subMaterialObj,'kgs',this.shipmentObj.customsInfo?.dcGoodsWgt||undefined)
......
......@@ -20,9 +20,21 @@
</el-card>
<el-row style="margin-top: 15px">
<el-row>
<el-row class="table-title">
<div>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>tallyClick('batch')">{{$t('批量理货')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="()=>removeClick('batch')">{{$t('批量移出')}}</el-button>
</div>
<div v-if="false">
<template>
<el-input v-model="qrCode" :placeholder="$t('请输入二维码/条码编号')" clearable></el-input>
<el-button type="primary" @click="handlerBatchCreate('single')">{{$t('确定')}}</el-button>
<el-button type="primary" @click="handlerClick('batchInput',$t('批量输入'))">{{$t('批量输入')}}</el-button>
<el-button type="primary" @click="handlerClick('correction',$t('理货纠错'))">{{$t('理货纠错')}}</el-button>
<el-button type="primary" @click="handlerClick('correctionOrder',$t('批量理货纠错'))">{{$t('批量理货纠错')}}</el-button>
</template>
</div>
</el-row>
<el-row style="margin-top: 5px">
<el-table border :data="tallyList" @select="checkboxSelect" @select-all="checkboxSelect" max-height="600px">
......@@ -123,13 +135,83 @@
append-to-body
@cancel="currentTurnExceptionOrder=null"
@success="currentTurnExceptionOrder=null" />
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body>
<!-- 装柜纠错 -->
<template v-if="dialogConfig.type === 'correction' && dialogConfig.dialogVisible">
<el-form ref="correctionForm" :rules="rules" :model="correctionObj" label-position="top">
<el-form-item :label="$t('装柜纠错(二维码/条形码编号)')" prop="qrCode">
<el-input v-model="correctionObj.qrCode" :placeholder="$t('请输入二维码/条形码编号')" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('correctionForm')">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
<!-- 批量装柜纠错(订单号) -->
<template v-if="dialogConfig.type === 'correctionOrder' && dialogConfig.dialogVisible">
<el-form ref="orderForm" :rules="rules" :model="orderObj" label-position="top">
<el-form-item :label="$t('装柜纠错') +'(' + $t('订单号') + ')'" prop="orderNo">
<el-input type="textarea" :rows="3" v-model="orderObj.orderNo" :placeholder="$t('请输入,多个以逗号分隔')" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('orderForm')">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
<!-- 装柜批量输入 -->
<template v-if="dialogConfig.type === 'batchInput' && dialogConfig.dialogVisible">
<el-form ref="batchForm" :rules="rules" :model="batchObj">
<el-form-item label="" prop="qrCode" class="two-element">
<el-input v-model="batchObj.qrCode" :placeholder="$t('请输入订单号')" clearable />
<el-button style="marginLeft:10px;" type="primary" @click="queryOrderInfo">{{$t('确定')}}</el-button>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item :label="$t('订单号')">
{{boxOrderInfo.orderNo}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('箱数')">
<el-input-number v-if="boxOrderInfo.isExternalWarehouse === 1" v-model="batchObj.boxNum" :min="0" :max="boxOrderInfo.num" />
<template v-else>
{{boxOrderInfo.num}}
</template>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item :label="$t('方数')">
{{getTotlContent(boxOrderInfo, ['volume'])}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('重量')">
{{getTotlContent(boxOrderInfo, ['weight'])}}
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row class="operate-button">
<el-button type="primary" :disabled="boxOrderInfo.orderId ? false : true" @click="batchLoad">{{$t('提交')}}</el-button>
<el-button @click="closeDialog2">{{$t('取消')}}</el-button>
</el-row>
</template>
</el-dialog>
</div>
</template>
<script>
import batchTally from "./batchTally.vue";
import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea";
import { formatDate, serviceMsg } from "../../utils";
import { formatDate, serviceMsg, getTotlContent } from "../../utils";
import WarehouseDetail from "./warehouseDetail";
import {getOrder, orderSpecialNeed} from "@/api/ecw/order";
import Exception from "@/views/ecw/box/components/Exception.vue";
......@@ -163,7 +245,27 @@ export default {
fullscreen: false,
},
// 当前转异订单
currentTurnExceptionOrder: null
currentTurnExceptionOrder: null,
// 二维码/条码编号
qrCode: "",
// 批量输入
batchObj: {
boxNum: 0,
},
// 批量纠错(订单号)
orderObj: {},
// 纠错
correctionObj: {},
// 弹窗配置
dialogConfig: {
title: "",
dialogVisible: false,
width: "30%",
type: "",
fullscreen: false,
},
// 订单信息
boxOrderInfo: {},
};
},
created() {
......@@ -172,6 +274,7 @@ export default {
methods: {
// 格式化日期
formatDate,
getTotlContent,
//去重
notset(string){
if(!string) return string
......@@ -357,6 +460,31 @@ export default {
this.showWarehouseInItemId = row.orderItemId;
});
},
/** 点击事件统一入口 */
handlerClick(type, title) {
this.shwoDialog({ type, title });
},
/** 弹窗事件 */
shwoDialog(config) {
this.$set(this.dialogConfig, "title", config.title);
this.$set(this.dialogConfig, "type", config.type);
switch (config.type) {
case "batchInput":
this.$set(this.dialogConfig, "fullscreen", false);
this.batchObj = { boxNum: 0 };
this.boxOrderInfo = {};
break;
case "correction":
this.$set(this.dialogConfig, "fullscreen", false);
this.correctionObj = {};
break;
case "correctionOrder":
this.$set(this.dialogConfig, "fullscreen", false);
this.orderObj = {};
break;
}
this.$set(this.dialogConfig, "dialogVisible", true);
},
},
computed: {
/* 获取仓库 */
......@@ -371,4 +499,19 @@ export default {
</script>
<style lang="scss" scoped>
.table-title {
display: flex;
align-items: center;
margin-bottom: 10px;
> div:first-child {
flex: 1;
font-size: 16px;
}
> div:last-child {
display: flex;
> .el-input {
margin-right: 10px;
}
}
}
</style>
......@@ -186,6 +186,10 @@ export default {
break;
// 清关
case "cusClearance":
if(!this.shipmentObj.sapStatus || this.shipmentObj.sapStatus <= 151){
this.$message.error(this.$t("请先完成到港操作"));
return;
}
this.$set(this.dialogConfig, "width", "700px");
break;
// AGENT
......@@ -220,6 +224,10 @@ export default {
break;
// 卸柜
case "unloading":
if(!this.shipmentObj.sapStatus || this.shipmentObj.sapStatus <= 151){
this.$message.error(this.$t("请先完成到港操作"));
return;
}
// 卸柜反审
const unStatus = this.shipmentObj[node.keyName];
if ([186].includes(unStatus)) {
......
......@@ -66,7 +66,7 @@
</el-form>
<!-- 操作工具栏 -->
<div style="color: red;margin-bottom: 5px;">
<div v-if="path === '/customer/customer'" style="color: red;margin-bottom: 5px;">
注意:创建的客户需接收
</div>
<el-row :gutter="10" class="mb8">
......
......@@ -48,19 +48,19 @@
<el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-form-item :label="$t('客户经理')" prop="userId">
<el-select clearable v-model="queryParams.userId" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable>
<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-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
<el-select :multiple="true" v-model="queryParams.destWarehouseIdArr" 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>
......@@ -256,6 +256,9 @@
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
getWarehouseList().then(res => {
this.warehouseList = res.data
})
},
methods: {
getChannelList() {
......@@ -295,8 +298,12 @@
/** 查询列表 */
getList() {
this.loading = true;
const params = {...this.queryParams}
if(params.destWarehouseIdArr?.length){
params.destWarehouseIds = params.destWarehouseIdArr.join(',')
}
// 执行查询
myAchievementByPage(this.queryParams).then(response => {
myAchievementByPage(params).then(response => {
this.list = response.data.myAchievementDtos.list;
this.total = response.data.myAchievementDtos.total;
this.myAchievementData = response.data
......
......@@ -48,19 +48,19 @@
<el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-form-item :label="$t('客户经理')" prop="userId">
<el-select clearable v-model="queryParams.userId" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable>
<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-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
<el-select :multiple="true" v-model="queryParams.destWarehouseIdArr" 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>
......@@ -196,6 +196,7 @@
transportType: null,
shippingChannel: null,
endStartTime: null,
destWarehouseIdArr:[]
},
tableQueryParams: {
pageNo: 1,
......@@ -252,6 +253,9 @@
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
getWarehouseList().then(res => {
this.warehouseList = res.data
})
},
methods: {
getChannelList() {
......@@ -291,8 +295,12 @@
/** 查询列表 */
getList() {
this.loading = true;
const params = {...this.queryParams}
if(params.destWarehouseIdArr?.length){
params.destWarehouseIds = params.destWarehouseIdArr.join(',')
}
// 执行查询
myDeptAchievementByPage(this.queryParams).then(response => {
myDeptAchievementByPage(params).then(response => {
this.list = response.data.myAchievementDtos.list;
this.total = response.data.myAchievementDtos.total;
this.myAchievementData = response.data
......
......@@ -161,6 +161,9 @@
<el-descriptions-item :label="$t('客户经理')">
{{order.salesmanName}}
</el-descriptions-item>
<el-descriptions-item :label="$t('提单是否显示价格')">
{{order.displayBillLadingPrice ? $t('是') : $t('否')}}
</el-descriptions-item>
</el-descriptions>
</el-card>
......
......@@ -514,11 +514,11 @@
</el-form-item>
</div>
<div v-if="[3,4].indexOf(+form.transportId) > -1">
<!--<div v-if="[3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('航空公司')">
<supplier-selector v-model="form.airlineCompany" company-type="10" :disabled="false"/>
</el-form-item>
</div>
</div>-->
<div v-if="[2].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('船公司')">
<supplier-selector v-model="form.shippingCompany" company-type="9" :disabled="false" />
......
......@@ -435,7 +435,7 @@ export default {
},
// 批量可出
batchCanShipment(){
let orderNo = this.multipleSelection.map(item => item.orderNo).join(',')
let orderNo = this.multipleSelection.map(item => item.orderNo).join(', ')
this.$confirm(this.$t(`您确定要将订单{orderNo}设置为可出吗?`, {orderNo})).then(() =>{
return batchCanShipment(this.ids)
}).then(res =>{
......
This diff is collapsed.
......@@ -621,11 +621,8 @@ export default {
this.reset()
}
// 空运需要获取货币和体积单位
if([3, 4].indexOf(this.orderData.transportId) > -1){
getCurrencyList().then(res => this.currencyList = res.data)
getUnitList().then(res => this.unitList = res.data)
}
})
// 获取入仓记录
getOrderWarehouseIn(this.queryParams.orderId).then(res => {
......@@ -946,22 +943,6 @@ export default {
if(!this.orderData || !this.orderData.orderItemVOList ||this.orderData.length==0){
return sums
}
/*var orderSum = 0
var orderV = 0
var orderW = 0
var leviteSum = 0
var leviteV = 0
var leviteW = 0
this.orderData.orderItemVOList.forEach((column, index) => {
orderSum += column.num
orderV += column.volume
orderW += column.weight
leviteSum += column.warehouseInInfoVO?column.warehouseInInfoVO.cartonsNum:0
leviteV += column.warehouseInInfoVO?column.warehouseInInfoVO.volume:0
leviteW += column.warehouseInInfoVO?column.warehouseInInfoVO.weight:0
});
sums[1] = this.$t('下单统计')+' '+ orderSum+' '+this.$t('箱')+' '+ orderV.toFixed(2) +' m³ ' + orderW + ' kg ' + ' '+this.$t('入仓统计:')+ leviteSum+' '+this.$t('箱')+' '+ leviteV.toFixed(2) +' m³ ' + leviteW + ' kg'
*/
sums[1] = [
this.$t('下单统计'),
this.orderData.costVO?.totalNum + ' '+this.$t(''),
......
<template>
<el-dialog
:title="$t('选择订单商品')"
:visible.sync="visible"
append-to-body
width="90vw"
>
<el-table ref="multipleTable" :data="orderItemDetails" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column :label="$t('品名')" prop="name">
<template #default="{row}">{{$l(row, "prodName")}}</template>
</el-table-column>
<el-table-column :label="$t('品牌')" prop="brand">
<template #default="{row}">{{$l(row, "brandName")}}</template>
</el-table-column>
<el-table-column :label="$t('材质')" prop="material">
<template #default="{row}">{{$l(row, "materialLabel")}}</template>
</el-table-column>
<el-table-column :label="$t('商品特性')" prop="attr">
<template #default="{row}">{{$l(row, "prodAttrNames")}}</template>
</el-table-column>
<el-table-column :label="$t('用途')" prop="unit">
<template #default="{row}">{{$l(row, "usageNames")}}</template>
</el-table-column>
<el-table-column :label="$t('数量')" prop="quantityAll"></el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit">{{$t('确定')}}</el-button>
<el-button @click="handleClose">{{$t('取消')}}</el-button>
</div>
</el-dialog>
</template>
<script>
import ProductSelector from "@/components/ProductSelector"
import WarehouseAreaSelect from "@/components/WarehouseAreaSelect"
import {getFeeTypeByOrderProduct, getProductBrankPage} from "@/api/ecw/productBrank"
import {cancelProcessInstance} from "@/api/bpm/processInstance"
import WorkFlow from "@/components/WorkFlow"
import {DICT_TYPE, getDictDataLabel, getDictDatas} from "@/utils/dict"
import {finishPacked, getOrderItemCommonAttr, orderWarehouseIn, orderWarehouseInUpdateApply} from "@/api/ecw/order"
import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue";
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue";
import Template from "@/views/cms/template/index.vue";
export default {
props: {
orderId: {
type: Number,
default: undefined
}
},
data(){
return {
visible: true,
// 备选的商品明细
orderItemDetails: [],
multipleSelection:[]
}
},
watch:{
visible(val){
if (!val) {
this.$emit('close')
}
},
},
async created() {
getOrderItemCommonAttr(this.orderId).then(res => {
this.orderItemDetails = res.data
})
},
methods: {
handleSelectionChange(e){
console.log("handleSelectionChange", e)
this.multipleSelection = e
},
handleSubmit(){
this.$emit("success", this.multipleSelection)
},
handleClose() {
this.visible = false
}
}
}
</script>
<style scoped>
</style>
<template>
<el-dialog
<el-dialog
:title="$t('添加新品名')"
:visible.sync="visible"
width="90vw"
......
......@@ -196,7 +196,7 @@
</el-table-column>
<el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" />
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" show-choose-order-item :order-id="order.orderId" />
<el-popconfirm
v-if="$index >= protectRowCount"
title="确定要删除该行记录吗?"
......
......@@ -65,9 +65,9 @@
<el-button type="text" @click="showMedia(props.row)">{{$t('查看')}}</el-button>
</template>
</el-table-column>
<el-table-column prop="areaName" :label="$t(' ')" width="220px">
<el-table-column prop="areaName" width="220px">
<template v-slot="{row}">
<WarehouseRecordDetail v-model="row.orderWarehouseInDetailsVOList" @input="saveDetail(props.row)" />
<WarehouseRecordDetail v-model="row.orderWarehouseInDetailsVOList" @input="saveDetail(props.row)" show-choose-order-item :order-id="orderId" />
<el-button class="pl-5 pr-5" size="mini" type="primary" @click="package(props.row, $t('修改打包'))">{{$t('修改')}}</el-button>
<el-button class="pl-5 pr-5" size="mini" type="danger" @click="package(props.row, $t('修改打包'))">{{$t('删除')}}</el-button>
</template>
......
......@@ -12,6 +12,13 @@
:visible.sync="dialogVisible"
width="1024px"
:before-close="handleClose">
<template v-slot:title>
<div class="flex flex-items-center">
<div class="title flex-1 flex flex-items-center">{{$t('选择订单商品')}}</div>
<el-button v-if="showChooseOrderItem" type="primary" size="mini" @click="handleShowChooseDialog">选择订单商品</el-button>
<div style="width: 100px"><!--占位,防止被关闭按钮挡住--></div>
</div>
</template>
<el-form v-if="dialogVisible">
<WarehouseRecordDetailItem
......@@ -30,6 +37,7 @@
<el-button type="primary" @click="handleSave">确 定</el-button>
</span>
</el-dialog>
<choose-order-products v-if="showChooseDialog" :order-id="orderId" @close="showChooseDialog=false" @success="handleChooseOrderProducts"></choose-order-products>
</div>
</template>
......@@ -37,13 +45,15 @@
import ProductSelector from "@/components/ProductSelector/index.vue";
import WarehouseRecordDetailItem from "@/views/ecw/order/warehousing/components/WarehouseRecordDetailItem.vue";
import {getProductAttrList} from "@/api/ecw/productAttr";
import {getOrderItemCommonAttr} from "@/api/ecw/order";
import ChooseOrderProducts from "@/views/ecw/order/stocking/components/ChooseOrderProducts.vue";
/**
* 入仓明细弹窗
*/
export default {
name: 'WarehouseRecordDetail',
components: {WarehouseRecordDetailItem, ProductSelector},
components: {ChooseOrderProducts, WarehouseRecordDetailItem, ProductSelector},
props: {
value: {
......@@ -61,7 +71,10 @@ export default {
num:{
type:Number,
default:0
}
},
// 是否显示添加订单商品按钮
showChooseOrderItem:Boolean,
orderId: Number
},
data() {
......@@ -69,7 +82,8 @@ export default {
dialogVisible: false,
dataList: [],
// 特性列表
attrList: []
attrList: [],
showChooseDialog: false
};
},
......@@ -158,6 +172,36 @@ export default {
}
this.$emit('input', this.dataList)
this.dialogVisible = false
},
handleShowChooseDialog(){
this.showChooseDialog = true
},
handleChooseOrderProducts(data){
this.showChooseDialog = false
if(!data?.length) return
// 如果第一条是空的,则删除先
let firstItem = this.dataList[0]
if(!firstItem.prodId && !firstItem.brand && !firstItem.prodAttrIds && !firstItem.material && !firstItem.quantityAll){
this.dataList.splice(0, 1)
}
data.forEach(item => {
this.dataList.push({
"boxGauge": "",
"brand": item.brand,
"cartonsNum": undefined,
"createTime": "",
"expressNo": "",
"prodAttrIds": item.prodAttrIds,
"prodId": item.prodId,
"quantityAll": item.quantityAll,
"specificationType": undefined,
"unit": "",
"usageIds": item.usageIds || "",
"volume": undefined,
"weight": undefined,
"material": item.material
})
})
}
},
......@@ -173,5 +217,7 @@ export default {
</script>
<style scoped lang="scss">
.title{
font-size: 16px;
}
</style>
......@@ -886,8 +886,14 @@ export default {
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
if(this.type == 'sea'){
params.transportType = 1
}
if(this.type == 'air'){
params.transportType = 3
}
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// c
this.$modal.confirm(this.$t('是否确认导出所有数据项?')).then(() => {
this.exportLoading = true;
return exportProductPriceExcel(params);
......
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