Commit 4e8f4b8c authored by 我在何方's avatar 我在何方
parents f43fc7e9 9a722ed7
...@@ -834,6 +834,21 @@ export function batchUnload(data) { ...@@ -834,6 +834,21 @@ export function batchUnload(data) {
}); });
} }
/**
* 批量到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airBatchUnload(data) {
return request({
url: "/ecw/box-load-info/airBatchUnload",
method: "post",
data,
});
}
/** /**
* 单个卸柜 * 单个卸柜
* *
...@@ -849,6 +864,21 @@ export function singleUnload(data) { ...@@ -849,6 +864,21 @@ export function singleUnload(data) {
}); });
} }
/**
* 单个到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airSingleUnload(data) {
return request({
url: "/ecw/box-load-info/airSingleUnload",
method: "post",
data,
});
}
/** /**
* 一键卸柜 * 一键卸柜
* *
...@@ -864,6 +894,22 @@ export function allUnload(data) { ...@@ -864,6 +894,22 @@ export function allUnload(data) {
}); });
} }
/**
* 一键到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airAllUnload(data) {
return request({
url: "/ecw/box-load-info/airAllUnload",
method: "post",
data,
});
}
/** /**
* 异常 * 异常
* *
......
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token' const TokenKey = 'Jd-Admin-Token'
export function getToken() { export function getToken() {
return Cookies.get(TokenKey) return Cookies.get(TokenKey)
......
<template> <template>
<div> <div>
<el-form ref="cusClearanceForm" :rules="rules" :model="cusClearanceObj" label-width="120px"> <el-form
ref="cusClearanceForm"
:rules="rules"
:model="cusClearanceObj"
label-width="160px"
>
<el-form-item :label="$t('清关情况')" prop="arriveType"> <el-form-item :label="$t('清关情况')" prop="arriveType">
<el-radio-group v-model="cusClearanceObj.clearanceType"> <el-radio-group v-model="cusClearanceObj.clearanceType">
<el-radio :label="0">{{ $t('一次清关') }}</el-radio> <el-radio :label="0">{{ $t("一次清关") }}</el-radio>
<el-radio :label="1">{{ $t('多次清关') }}</el-radio> <el-radio :label="1">{{ $t("多次清关") }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('选择订单')" prop="clearanceOrderIdList" v-show="cusClearanceObj.clearanceType == 1"> <el-form-item
<el-select v-model="cusClearanceObj.clearanceOrderIdList" multiple filterable clearable reserve-keyword :filter-method="filterOrder" :placeholder="$t('请输入订单号、提单号、唛头')" @change="selectOrderId"> :label="$t('选择订单')"
<el-option v-for="item in statusOrderList" :key="item.orderId" :label="item.orderNo + ' ' + item.clear + ' ' + item.arrival" :value="item.orderId"> </el-option> prop="clearanceOrderIdList"
</el-select> v-show="cusClearanceObj.clearanceType == 1"
>
<span v-for="order in selectOrders" :key="order.id"
>{{ order.orderNo }}
</span>
<el-button type="primary" @click="orderdialogVisible = true">{{
$t("订单列表")
}}</el-button>
</el-form-item> </el-form-item>
<el-form-item :label="$t('已清关订单')" v-show="cusClearanceObj.clearanceType == 1"> <el-form-item
<span v-for="order in cusClearanceObj.clearanceOrderList" :key="order.id">{{ order.orderNo }} </span> :label="$t('已清关订单')"
v-show="cusClearanceObj.clearanceType == 1"
>
<span
v-for="order in cusClearanceObj.clearanceOrderList"
:key="order.id"
>{{ order.orderNo }}
</span>
</el-form-item> </el-form-item>
<div v-if="cusClearanceObj.clearanceOrderIdList.length > 0"> <div>
<el-form ref="airArrivalForm" :rules="airArrivalrules" :model="airArrivalInfo" label-width="120px"> <el-form
ref="airArrivalForm"
:rules="airArrivalrules"
:model="airArrivalInfo"
label-width="160px"
>
<el-form-item :label="$t('实际二程起飞时间')" prop="actSecondTime"> <el-form-item :label="$t('实际二程起飞时间')" prop="actSecondTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="airArrivalInfo.actSecondTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker
type="datetime"
:placeholder="$t('请选择日期')"
v-model="airArrivalInfo.actSecondTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="$t('预计到港时间')" prop="estTime"> <el-form-item :label="$t('预计到港时间')" prop="estTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="airArrivalInfo.estTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker
type="datetime"
:placeholder="$t('请选择日期')"
v-model="airArrivalInfo.estTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="$t('实际到港时间')" prop="actTime"> <el-form-item :label="$t('实际到港时间')" prop="actTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="airArrivalInfo.actTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker
type="datetime"
:placeholder="$t('请选择日期')"
v-model="airArrivalInfo.actTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<el-form-item :label="$t('预计清关时间')" prop="clEstTime"> <el-form-item :label="$t('预计清关时间')" prop="clEstTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusClearanceObj.clEstTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker
type="datetime"
:placeholder="$t('请选择日期')"
v-model="cusClearanceObj.clEstTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="$t('清关时间')" prop="clClearTime"> <el-form-item :label="$t('清关时间')" prop="clClearTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusClearanceObj.clClearTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker
<p class="message-area" v-show="showMsg">{{ $t('清关时间与预计时间不符,如有异常请登记') }}</p> type="datetime"
:placeholder="$t('请选择日期')"
v-model="cusClearanceObj.clClearTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
<p class="message-area" v-show="showMsg">
{{ $t("清关时间与预计时间不符,如有异常请登记") }}
</p>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row class="operate-button"> <el-row class="operate-button">
<el-button type="primary" @click="onSubmit(1)">{{ $t('保存') }}</el-button> <el-button type="primary" @click="onSubmit(1)">{{
<el-button type="success" @click="onSubmit(2)">{{ $t('提交') }}</el-button> $t("保存")
<el-button @click="cancel">{{ $t('关闭') }}</el-button> }}</el-button>
<el-button type="primary" @click="exceptionReg" :disabled="!showMsg">{{ $t('异常登记') }}</el-button> <el-button type="success" @click="onSubmit(2)">{{
$t("提交")
}}</el-button>
<el-button @click="cancel">{{ $t("关闭") }}</el-button>
<el-button type="primary" @click="exceptionReg" :disabled="!showMsg">{{
$t("异常登记")
}}</el-button>
</el-row> </el-row>
<!-- 对话框 --> <!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="$t('票异常')" :visible.sync="dialogVisible" width="700px" :modal-append-to-body="false" append-to-body destroy-on-close> <el-dialog
custom-class="shipping-dialog"
:title="$t('票异常')"
:visible.sync="dialogVisible"
width="700px"
:modal-append-to-body="false"
append-to-body
destroy-on-close
>
<regError @closeDialog="dialogVisible = false" v-bind="$attrs" /> <regError @closeDialog="dialogVisible = false" v-bind="$attrs" />
</el-dialog> </el-dialog>
<!-- 订单列表 -->
<el-dialog
:fullscreen="true"
:title="$t('选择订单')"
:visible.sync="orderdialogVisible"
:modal-append-to-body="false"
append-to-body
destroy-on-close
>
<el-row :gutter="10">
<el-col :span="7">
{{ $t("关键字:") }}
<el-input
style="width: 300px"
v-model="orderKeyword"
:placeholder="$t('请输入订单号、提单号、唛头')"
/>
</el-col>
<el-col :span="7">
{{ $t("到港状态") }}
<el-select v-model="orderPortStatus">
<el-option :value="0" :label="$t('未到港')" />
<el-option :value="1" :label="$t('已到港')" />
</el-select>
</el-col>
<el-col :span="7">
{{ $t("清关状态") }}
<el-select v-model="orderCustomsClearanceStatus">
<el-option :value="0" :label="$t('未清关')" />
<el-option :value="1" :label="$t('已清关')" />
</el-select>
</el-col>
<el-col :span="3">
<el-button type="primary" @click="searchOrderList">
{{ $t("查询") }}</el-button
>
</el-col>
</el-row>
<div style="margin-top: 10px">
<el-button type="primary" @click="multipleSelect">
{{ $t("批量选择") }}
</el-button>
</div>
<el-table
style="margin-top: 10px"
:data="statusOrderList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column :label="$t('序号')" type="index" width="50">
</el-table-column>
<el-table-column :label="$t('订单号')" prop="orderNo" />
<el-table-column :label="$t('唛头')" prop="marks" />
<el-table-column :label="$t('提单号')" prop="tidanNo" />
<el-table-column width="150" :label="$t('总箱数/入仓箱数')" prop="" />
<el-table-column :label="$t('体积/重量')" prop="" />
<el-table-column :label="$t('清关状态')" prop="clear" />
<el-table-column :label="$t('到港状态')" prop="arrival" />
<el-table-column :label="$t('控货')" prop="" />
<el-table-column :label="$t('订单状态')" prop="" />
<el-table-column :label="$t('操作')">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
@click="selectOrder(scope.row)"
>{{ $t("选择") }}</el-button
>
</template>
</el-table-column>
</el-table>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import regError from '../../regError' import regError from "../../regError";
import dayjs from 'dayjs' import dayjs from "dayjs";
import { clearanceCreate } from '@/api/ecw/boxSea' import { clearanceCreate } from "@/api/ecw/boxSea";
import { shipmentOrderList } from '@/api/ecw/boxAir' import { shipmentOrderList } from "@/api/ecw/boxAir";
import { formatDateStr, serviceMsg, formatDate } from '../utils' import { formatDateStr, serviceMsg, formatDate } from "../utils";
import { updateOrderArrival } from '@/api/ecw/boxAir' import { updateOrderArrival } from "@/api/ecw/boxAir";
import search from "bpmn-js/lib/features/search";
/** /**
* 清关 * 清关
*/ */
export default { export default {
name: 'cusClearance', name: "cusClearance",
inheritAttrs: false, inheritAttrs: false,
components: { components: {
regError regError,
}, },
data() { data() {
return { return {
...@@ -76,188 +214,346 @@ export default { ...@@ -76,188 +214,346 @@ export default {
cusClearanceObj: {}, cusClearanceObj: {},
// 校验 // 校验
rules: { rules: {
clEstTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }], clEstTime: [
clClearTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }] { required: true, message: this.$t("必填"), trigger: "change" },
],
clClearTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
}, },
airArrivalrules: { airArrivalrules: {
actSecondTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }], actSecondTime: [
actTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }] { required: true, message: this.$t("必填"), trigger: "change" },
],
actTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
}, },
// 弹窗配置 // 弹窗配置
dialogVisible: false, dialogVisible: false,
// 提示消息 // 提示消息
showMsg: false, showMsg: false,
orderList: [], orderList: [],
orderListFilter: [],
arrivalOrderList: [], arrivalOrderList: [],
clearanceOrderList: [], clearanceOrderList: [],
airArrivalInfo: {} airArrivalInfo: {},
} orderdialogVisible: false,
selectOrders: [],
multipleSelectOrder: [],
orderKeyword: null,
orderPortStatus: null,
orderCustomsClearanceStatus: null,
};
}, },
created() { created() {
const voName = this.$attrs.currNode.voName const voName = this.$attrs.currNode.voName;
let oldData = { ...this.$attrs.shipmentObj[voName] } let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ['clEstTime']) oldData = formatDateStr(oldData, ["clEstTime"]);
oldData = formatDateStr(oldData, ['clClearTime'], 'YYYY-MM-DD HH:mm:ss') oldData = formatDateStr(oldData, ["clClearTime"], "YYYY-MM-DD HH:mm:ss");
this.cusClearanceObj = oldData this.cusClearanceObj = oldData;
if (!this.cusClearanceObj.clearanceType) this.$set(this.cusClearanceObj, 'clearanceType', 0) if (!this.cusClearanceObj.clearanceType)
this.$set(this.cusClearanceObj, 'clearanceOrderIdList', []) this.$set(this.cusClearanceObj, "clearanceType", 0);
if (typeof this.$attrs.shipmentObj.airArrivalInfo?.arrivalOrderList != 'undefined' && this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList) this.arrivalOrderList = this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList this.$set(this.cusClearanceObj, "clearanceOrderIdList", []);
if (typeof this.$attrs.shipmentObj.clearanceInfo?.clearanceOrderList != 'undefined' && this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList) this.clearanceOrderList = this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList if (
typeof this.$attrs.shipmentObj.airArrivalInfo?.arrivalOrderList !=
"undefined" &&
this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList
)
this.arrivalOrderList =
this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList;
if (
typeof this.$attrs.shipmentObj.clearanceInfo?.clearanceOrderList !=
"undefined" &&
this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList
)
this.clearanceOrderList =
this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList;
shipmentOrderList(this.$attrs.shipmentObj.id).then((r) => { shipmentOrderList(this.$attrs.shipmentObj.id).then((r) => {
this.orderList = r.data this.orderList = r.data;
this.orderListFilter = r.data });
})
}, },
watch: { watch: {
// 预计清关时间 // 预计清关时间
'cusClearanceObj.clEstTime'(val) { "cusClearanceObj.clEstTime"(val) {
this.compareDate(val, this.cusClearanceObj.clClearTime) this.compareDate(val, this.cusClearanceObj.clClearTime);
}, },
// 清关时间 // 清关时间
'cusClearanceObj.clClearTime'(val) { "cusClearanceObj.clClearTime"(val) {
this.compareDate(this.cusClearanceObj.clEstTime, val) this.compareDate(this.cusClearanceObj.clEstTime, val);
}, },
'cusClearanceObj.clearanceType'(val) { "cusClearanceObj.clearanceType"(val) {
if (val == 1) { if (val == 1) {
this.$set(this.cusClearanceObj, 'clEstTime', null) this.$set(this.cusClearanceObj, "clEstTime", null);
this.$set(this.cusClearanceObj, 'clClearTime', null) this.$set(this.cusClearanceObj, "clClearTime", null);
} else { } else {
let oldData = { ...this.$attrs.shipmentObj[this.$attrs.currNode.voName] } let oldData = {
oldData = formatDateStr(oldData, ['clEstTime', 'clClearTime'], 'YYYY-MM-DD HH:mm:ss') ...this.$attrs.shipmentObj[this.$attrs.currNode.voName],
this.$set(this.cusClearanceObj, 'clClearTime', oldData.clClearTime) };
this.$set(this.cusClearanceObj, 'clEstTime', oldData.clEstTime) oldData = formatDateStr(
} oldData,
["clEstTime", "clClearTime"],
"YYYY-MM-DD HH:mm:ss"
);
this.$set(this.cusClearanceObj, "clClearTime", oldData.clClearTime);
this.$set(this.cusClearanceObj, "clEstTime", oldData.clEstTime);
} }
}, },
},
computed: { computed: {
statusOrderList() { statusOrderList() {
let data = [] let data = [];
this.orderListFilter.forEach((item) => { this.orderList.forEach((item) => {
let json = { let json = {
orderId: item.orderId, orderId: item.orderId,
orderNo: item.orderNo, orderNo: item.orderNo,
tidanNo: item.tidanNo, tidanNo: item.tidanNo,
marks: item.marks marks: item.marks,
} };
let clearindex = this.cusClearanceObj.clearanceOrderList ? this.cusClearanceObj.clearanceOrderList.findIndex((p) => p.orderId == item.orderId) : -1 let clearindex = this.cusClearanceObj.clearanceOrderList
? this.cusClearanceObj.clearanceOrderList.findIndex(
(p) => p.orderId == item.orderId
)
: -1;
if (clearindex != -1) { if (clearindex != -1) {
json.clear = this.$t('已清关') json.clear = this.$t("已清关");
json.clearValue = 1;
} else { } else {
json.clear = this.$t('未清关') json.clear = this.$t("未清关");
json.clearValue = 0;
} }
let arrivalindex = this.arrivalOrderList ? this.arrivalOrderList.findIndex((p) => p.orderId == item.orderId) : -1 let arrivalindex = this.arrivalOrderList
? this.arrivalOrderList.findIndex((p) => p.orderId == item.orderId)
: -1;
if (arrivalindex != -1) { if (arrivalindex != -1) {
json.arrival = this.$t('已到港') json.arrival = this.$t("已到港");
json.arrivalValue = 1;
} else { } else {
json.arrival = this.$t('未到港') json.arrival = this.$t("未到港");
} json.arrivalValue = 0;
data.push(json)
})
return data
} }
data.push(json);
});
return data;
},
}, },
methods: { methods: {
formatDate, formatDate,
filterOrder(val) { searchOrderList() {
if (val != '') { if (this.orderKeyword && this.orderKeyword != "") {
this.orderListFilter = this.orderList.filter((item) => { this.statusOrderList = this.statusOrderList.filter((item) => {
return item.orderNo&&item.orderNo.indexOf(val) > -1 || item.tidanNo&&item.tidanNo.indexOf(val) > -1 || item.marks&&item.marks.indexOf(val) > -1 return (
}) (item.orderNo && item.orderNo.indexOf(this.orderKeyword) > -1) ||
} else { (item.tidanNo && item.tidanNo.indexOf(this.orderKeyword) > -1) ||
this.orderListFilter = this.orderList (item.marks && item.marks.indexOf(this.orderKeyword) > -1)
);
});
}
if (this.orderPortStatus != null) {
this.statusOrderList = this.statusOrderList.filter((item) => {
return item.arrivalValue == this.orderPortStatus;
});
} }
if (this.orderCustomsClearanceStatus != null) {
console.log(
this.statusOrderList,
"333",
this.orderCustomsClearanceStatus
);
this.statusOrderList = this.statusOrderList.filter((item) => {
return item.clearValue == this.orderCustomsClearanceStatus;
});
}
console.log(this.statusOrderList, "222");
}, },
selectOrderId(val) { selectOrderId(val) {
if (val.length == 1) { if (val.length == 1) {
let arr = this.arrivalOrderList.find((item) => item.orderId == val[0]) let arr = this.arrivalOrderList.find((item) => item.orderId == val[0]);
if (arr) { if (arr) {
this.$set(this.airArrivalInfo, 'actSecondTime', formatDate(arr.actSecondTime)) this.$set(
this.$set(this.airArrivalInfo, 'estTime', formatDate(arr.estTime)) this.airArrivalInfo,
this.$set(this.airArrivalInfo, 'actTime', formatDate(arr.actTime)) "actSecondTime",
formatDate(arr.actSecondTime)
);
this.$set(this.airArrivalInfo, "estTime", formatDate(arr.estTime));
this.$set(this.airArrivalInfo, "actTime", formatDate(arr.actTime));
} }
let clear = this.clearanceOrderList.find((item) => item.orderId == val[0]) let clear = this.clearanceOrderList.find(
if(clear){ (item) => item.orderId == val[0]
this.$set(this.cusClearanceObj, 'clEstTime', formatDate(clear.clEstTime)) );
this.$set(this.cusClearanceObj, 'clClearTime', formatDate(clear.clClearTime)) if (clear) {
this.$set(
this.cusClearanceObj,
"clEstTime",
formatDate(clear.clEstTime)
);
this.$set(
this.cusClearanceObj,
"clClearTime",
formatDate(clear.clClearTime)
);
} }
} else { } else {
this.$set(this.airArrivalInfo, 'actSecondTime', null) this.$set(this.airArrivalInfo, "actSecondTime", null);
this.$set(this.airArrivalInfo, 'estTime', null) this.$set(this.airArrivalInfo, "estTime", null);
this.$set(this.airArrivalInfo, 'actTime', null) this.$set(this.airArrivalInfo, "actTime", null);
this.$set(this.cusClearanceObj, 'clEstTime', null) this.$set(this.cusClearanceObj, "clEstTime", null);
this.$set(this.cusClearanceObj, 'clClearTime', null) this.$set(this.cusClearanceObj, "clClearTime", null);
} }
}, },
selectOrder(val) {
this.selectOrders = [];
this.selectOrders.push(val);
let arr = this.arrivalOrderList.find(
(item) => item.orderId == val.orderId
);
if (arr) {
this.$set(
this.airArrivalInfo,
"actSecondTime",
formatDate(arr.actSecondTime)
);
this.$set(this.airArrivalInfo, "estTime", formatDate(arr.estTime));
this.$set(this.airArrivalInfo, "actTime", formatDate(arr.actTime));
}
let clear = this.clearanceOrderList.find(
(item) => item.orderId == val.orderId
);
console.log(clear, 111);
if (clear) {
this.$set(
this.cusClearanceObj,
"clEstTime",
formatDate(clear.clEstTime)
);
this.$set(
this.cusClearanceObj,
"clClearTime",
formatDate(clear.clClearTime)
);
}
this.orderdialogVisible = false;
},
handleSelectionChange(val) {
this.multipleSelectOrder = val;
},
multipleSelect() {
if (this.multipleSelectOrder.length == 0) {
this.$message.error(this.$t("请先选择订单"));
return;
}
this.selectOrders = [];
this.selectOrders = this.multipleSelectOrder;
if (this.multipleSelectOrder.length == 1) {
let arr = this.arrivalOrderList.find(
(item) => item.orderId == this.multipleSelectOrder[0].orderId
);
if (arr) {
this.$set(
this.airArrivalInfo,
"actSecondTime",
formatDate(arr.actSecondTime)
);
this.$set(this.airArrivalInfo, "estTime", formatDate(arr.estTime));
this.$set(this.airArrivalInfo, "actTime", formatDate(arr.actTime));
}
let clear = this.clearanceOrderList.find(
(item) => item.orderId == this.multipleSelectOrder[0].orderId
);
if (clear) {
this.$set(
this.cusClearanceObj,
"clEstTime",
formatDate(clear.clEstTime)
);
this.$set(
this.cusClearanceObj,
"clClearTime",
formatDate(clear.clClearTime)
);
}
} else {
this.$set(this.airArrivalInfo, "actSecondTime", null);
this.$set(this.airArrivalInfo, "estTime", null);
this.$set(this.airArrivalInfo, "actTime", null);
this.$set(this.cusClearanceObj, "clEstTime", null);
this.$set(this.cusClearanceObj, "clClearTime", null);
}
this.orderdialogVisible = false;
},
getClAgent(type) { getClAgent(type) {
const agentId = this.$attrs.shipmentObj.agentInfo.agentId const agentId = this.$attrs.shipmentObj.agentInfo.agentId;
if (type === 'label') { if (type === "label") {
const selected = this.$attrs.allSupplier.find((item) => item.id === agentId) const selected = this.$attrs.allSupplier.find(
return this.$l(selected, 'company') ?? agentId (item) => item.id === agentId
);
return this.$l(selected, "company") ?? agentId;
} }
return agentId return agentId;
}, },
// 时间比较 // 时间比较
compareDate(clEstTime, clClearTime) { compareDate(clEstTime, clClearTime) {
this.showMsg = false this.showMsg = false;
let date1 = null, let date1 = null,
date2 = null date2 = null;
if (clEstTime) date1 = dayjs(clEstTime) if (clEstTime) date1 = dayjs(clEstTime);
if (clClearTime) date2 = dayjs(clClearTime) if (clClearTime) date2 = dayjs(clClearTime);
if (date1 && date2 && !date2.isSame(date1)) { if (date1 && date2 && !date2.isSame(date1)) {
this.showMsg = true this.showMsg = true;
} }
}, },
// 异常登记 // 异常登记
exceptionReg() { exceptionReg() {
this.dialogVisible = true this.dialogVisible = true;
}, },
/** 提交 */ /** 提交 */
onSubmit(operateType) { onSubmit(operateType) {
this.$refs['cusClearanceForm'].validate((valid) => { this.$refs["cusClearanceForm"].validate((valid) => {
if (valid) { if (valid) {
if (this.cusClearanceObj.clearanceType == 1 && this.cusClearanceObj.clearanceOrderIdList.length > 0) { if (
this.$refs['airArrivalForm'].validate((arrvalid) => { this.cusClearanceObj.clearanceType == 1 &&
this.cusClearanceObj.clearanceOrderIdList.length > 0
) {
this.$refs["airArrivalForm"].validate((arrvalid) => {
if (arrvalid) { if (arrvalid) {
updateOrderArrival({ updateOrderArrival({
...this.airArrivalInfo, ...this.airArrivalInfo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
orderIdList: this.cusClearanceObj.clearanceOrderIdList orderIdList: this.cusClearanceObj.clearanceOrderIdList,
}).then(() => { }).then(() => {
clearanceCreate({ clearanceCreate({
...this.cusClearanceObj, ...this.cusClearanceObj,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
clAgentId: this.getClAgent(), clAgentId: this.getClAgent(),
operateType operateType,
}).then((res) => { }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.cancel('submit') this.cancel("submit");
}) });
}) });
}) });
} }
}) });
} else { } else {
clearanceCreate({ clearanceCreate({
...this.cusClearanceObj, ...this.cusClearanceObj,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
clAgentId: this.getClAgent(), clAgentId: this.getClAgent(),
operateType operateType,
}).then((res) => { }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.cancel('submit') this.cancel("submit");
}) });
}) });
} }
} }
}) });
}, },
/** 取消 */ /** 取消 */
cancel(type) { cancel(type) {
this.$emit('closeDialog', type) this.$emit("closeDialog", type);
} },
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</div> </div>
<div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</div> <div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</div>
<div> <div>
<el-button v-if="toBePreList.sectionGoodList&&item.airShipment==4" type="text" @click="handleGoods('all', item)">[{{$t('全部分拣')}}]</el-button> <el-button v-if="item.airShipment==4" type="text" @click="handleGoods('all', item)">[{{$t('全部分拣')}}]</el-button>
<el-button type="text" @click="foldTable(index, item)">[{{item.fold ? $t('展开') : $t('收起')}}]</el-button> <el-button type="text" @click="foldTable(index, item)">[{{item.fold ? $t('展开') : $t('收起')}}]</el-button>
</div> </div>
</el-row> </el-row>
...@@ -123,7 +123,7 @@ ...@@ -123,7 +123,7 @@
width="120">{{ $t('无返回') }}</el-table-column> --> width="120">{{ $t('无返回') }}</el-table-column> -->
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100"> <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="toBePreList.sectionGoodList&&item.airShipment==4" type="text" size="small" @click="handleGoods('singele',scope.row)">{{$t('分拣')}}</el-button> <el-button v-if="item.airShipment==4" type="text" size="small" @click="handleGoods('singele',scope.row)">{{$t('分拣')}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -190,7 +190,7 @@ export default { ...@@ -190,7 +190,7 @@ export default {
list.push({ list.push({
...oItem, ...oItem,
warehouseInInfo, warehouseInInfo,
multiSpecification: item.multiSpecification, multiSpecification: oItem.multiSpecification,
positionNo: oItem.positionNo, positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus, tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime, tallyTime: item.tallyTime,
......
...@@ -151,12 +151,12 @@ ...@@ -151,12 +151,12 @@
import unloadingError from "./unloadingError.vue"; import unloadingError from "./unloadingError.vue";
import { import {
loadGoodsList, loadGoodsList,
batchUnload, airBatchUnload,
allUnload, airAllUnload,
approvalCreate, approvalCreate,
approvalCancel, approvalCancel,
getSectionList, getSectionList,
singleUnload, airSingleUnload,
boxGoodsDetail boxGoodsDetail
} from "@/api/ecw/boxSea"; } from "@/api/ecw/boxSea";
import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils"; import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils";
...@@ -254,7 +254,7 @@ export default { ...@@ -254,7 +254,7 @@ export default {
this.$message.error(this.$t("请输入箱号标签")); this.$message.error(this.$t("请输入箱号标签"));
return; return;
} }
singleUnload({ airSingleUnload({
orderNumCode: this.labelNo, orderNumCode: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => { }).then((res) => {
...@@ -274,7 +274,7 @@ export default { ...@@ -274,7 +274,7 @@ export default {
this.$message.error(this.$t("请选择到仓时间")); this.$message.error(this.$t("请选择到仓时间"));
return; return;
} }
batchUnload({ airBatchUnload({
orderNo: this.labelNo, orderNo: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
unloadTime: this.ulWarehouseTime unloadTime: this.ulWarehouseTime
...@@ -295,7 +295,7 @@ export default { ...@@ -295,7 +295,7 @@ export default {
type: "warning", type: "warning",
}) })
.then((_) => { .then((_) => {
allUnload({ shipmentId: this.$attrs.shipmentObj.id, unloadTime: this.ulWarehouseTime }).then((res) => { airAllUnload({ shipmentId: this.$attrs.shipmentObj.id, unloadTime: this.ulWarehouseTime }).then((res) => {
serviceMsg(res, this).then((res) => { serviceMsg(res, this).then((res) => {
this.getLoadGoodsList(); this.getLoadGoodsList();
}); });
......
...@@ -184,6 +184,10 @@ export default { ...@@ -184,6 +184,10 @@ export default {
case "cusDeclaration": case "cusDeclaration":
this.$set(this.dialogConfig, "width", "700px"); this.$set(this.dialogConfig, "width", "700px");
break; break;
// 清关
case "cusClearance":
this.$set(this.dialogConfig, "width", "700px");
break;
// AGENT // AGENT
case "agent": case "agent":
this.$set(this.dialogConfig, "title", this.$t("代理商设置")); this.$set(this.dialogConfig, "title", this.$t("代理商设置"));
......
...@@ -297,8 +297,8 @@ function airBaseData() { ...@@ -297,8 +297,8 @@ function airBaseData() {
keyName: "toWarehouseStatus", keyName: "toWarehouseStatus",
status: { status: {
start: [181], start: [181],
wait: [182, 183, 184, 185], wait: [182, 183, 184],
end: [186], end: [185, 186],
}, },
}, },
], ],
......
...@@ -141,9 +141,10 @@ ...@@ -141,9 +141,10 @@
<div> <div>
{{$t('运费')}}{{row.oneSeaFreight}} {{currentcyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}} {{$t('运费')}}{{row.oneSeaFreight}} {{currentcyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}
</div> </div>
<div> <div v-if="row.oneClearanceFreight">
{{$t('清关费')}}{{row.oneClearanceFreight}} {{currentcyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}} {{$t('清关费')}}{{row.oneClearanceFreight}} {{currentcyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}
</div> </div>
<div v-else>{{$t('清关费未报价')}}</div>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-dialog <el-dialog
:title="title + ' - ' + warehousing.orderNo" :title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible" :visible.sync="visible"
width="1280px" width="100%"
> >
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card">
<el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first"> <el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first">
...@@ -185,8 +185,16 @@ ...@@ -185,8 +185,16 @@
:is-editing="edit"></warehouse-area-select> :is-editing="edit"></warehouse-area-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('备注')">
<template v-slot="{r,c,$index}">
<el-form-item>
<el-input v-model="form.table[$index].remark" type="textarea" show-word-limit maxlength="100" placeholder=""></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('操作')"> <el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}"> <template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" />
<el-popconfirm <el-popconfirm
v-if="$index >= protectRowCount" v-if="$index >= protectRowCount"
title="确定要删除该行入仓记录吗?" title="确定要删除该行入仓记录吗?"
...@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr" ...@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType" import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product" import {addProduct} from "@/api/ecw/product"
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue" import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue"
export default { export default {
name: "Warehouse", name: "Warehouse",
components: { components: {
WarehouseRecordDetail,
ImageAndVideoUpload, ImageAndVideoUpload,
ProductSelector, ProductSelector,
WarehouseAreaSelect, WarehouseAreaSelect,
......
<template>
<div style="display: inline-block">
<el-button size="mini" type="primary" style="margin-right: 10px" @click="handleOpen">{{ title }}</el-button>
<el-dialog
append-to-body
:title="title"
:visible.sync="dialogVisible"
width="1024px"
:before-close="handleClose">
<el-form>
<WarehouseRecordDetailItem v-for="(item, index) in dataList" :key="index" v-model="dataList[index]" :index="index" :attr-list="attrList" />
</el-form>
<el-button type="primary" size="mini" @click="handleAddItem">添加一条明细</el-button>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleSave">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import ProductSelector from "@/components/ProductSelector/index.vue";
import WarehouseRecordDetailItem from "@/views/ecw/order/warehousing/components/WarehouseRecordDetailItem.vue";
import {getProductAttrList} from "@/api/ecw/productAttr";
/**
* 入仓明细弹窗
*/
export default {
name: 'WarehouseRecordDetail',
components: {WarehouseRecordDetailItem, ProductSelector},
props: {
value: {
type: Array,
default: () => []
},
readOnly: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
dataList: [],
// 特性列表
attrList: []
};
},
mounted() {
this.getAttrList()
},
methods: {
init() {
if (!this.value || this.value.length === 0) {
this.dataList = [{
"boxGauge": "",
"boxGauge1": "",
"boxGauge2": "",
"boxGauge3": "",
"brand": undefined,
"cartonsNum": undefined,
"createTime": "",
"expressNo": "",
"prodAttrIds": [],
"prodId": undefined,
"quantityAll": undefined,
"specificationType": undefined,
"unit": "",
"usageIds": "",
"volume": undefined,
"weight": undefined
}]
} else {
this.dataList = JSON.parse(JSON.stringify(this.value))
}
},
/** 获取产品属性列表 */
getAttrList() {
getProductAttrList().then(response => {
this.attrList = response.data;
})
},
handleAddItem() {
this.dataList.push({
"boxGauge": "",
"boxGauge1": "",
"boxGauge2": "",
"boxGauge3": "",
"brand": undefined,
"cartonsNum": undefined,
"createTime": "",
"expressNo": "",
"prodAttrIds": [],
"prodId": undefined,
"quantityAll": undefined,
"specificationType": undefined,
"unit": "",
"usageIds": "",
"volume": undefined,
"weight": undefined
})
},
handleOpen() {
this.init()
this.dialogVisible = true
},
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
handleSave() {
this.$emit('input', this.dataList)
}
},
computed: {
title() {
return !this.value || this.value.length === 0 ? '添加箱明细' : '编辑箱明细'
}
}
}
</script>
<style scoped lang="scss">
</style>
<template>
<el-card style="margin-bottom: 10px">
<div slot="header">
<span>序号{{ index + 1 }}</span>
</div>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('中文品名')">
<product-selector v-if="!readOnly" v-model="value.prodId" determined protect-once/>
<span v-else>{{ value.prodTitleZh }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('品牌')">
<el-select
v-model="value.brand"
:placeholder="$t('可修改')"
filterable
remote
@change="handleBrandChange"
:remote-method="getProductBrandPage"
clearable>
<el-option
v-for="item in brandList"
:key="item.id"
:label="item.titleZh"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('商品特性')">
<el-checkbox-group v-model="value.prodAttrIds">
<el-checkbox v-for="item in attrList" :key="item.id" :label="item.id">{{ item.attrName }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('用途')">
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4">
<el-form-item :label="$t('长')">
<el-input v-model="value.boxGauge1" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('宽')">
<el-input v-model="value.boxGauge2" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('高')">
<el-input v-model="value.boxGauge3" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('重量')">
<el-input v-model="value.weight" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('体积')">
<el-input v-model="value.volume" />
</el-form-item>
</el-col>
</el-row>
</el-card>
</template>
<script>
import ProductSelector from "@/components/ProductSelector/index.vue";
import {getProductBrankPage} from "@/api/ecw/productBrank";
import {getProductAttrList} from "@/api/ecw/productAttr";
// import {getFeeTypeByOrderProduct} from "@/api/ecw/productBrank";
export default {
name: "WarehouseRecordDetailItem",
components: {ProductSelector},
props: {
value: {
type: Object,
default: () => {}
},
index: {
type: Number,
default: 0
},
readOnly: {
type: Boolean,
default: false
},
// 特性列表
attrList: {
type: Array,
default: () => []
}
},
data() {
return {
brandList: [],
}
},
methods: {
/** 获取产品属性列表 */
getAttrList() {
getProductAttrList().then(response => {
this.attrList = response.data;
})
},
handleBrandChange(v){
// getFeeTypeByOrderProduct({
// brandId: parseInt(v),
// productId: this.warehousing.prodId,
// orderId: this.orderId
// }).then(r => {
// if(r.code === 0){
// (this.activeName === "first" ? this.form : this.form1).feeType = parseInt(r.data.feeType);
// (this.activeName === "first" ? this.form : this.form1).recordMode = parseInt(r.data.recordMode)
// }
// })
},
getProductBrandPage(titleZh = undefined) {
getProductBrankPage({pageSize: 20, titleZh}).then(r => {
this.brandList = r.data.list
})
},
}
}
</script>
<style scoped lang="scss">
</style>
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