Commit 902dbb56 authored by dragondean@qq.com's avatar dragondean@qq.com

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

parents 2757587f 4e8f4b8c
......@@ -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) {
});
}
/**
* 单个到仓
*
* @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) {
});
}
/**
* 一键到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airAllUnload(data) {
return request({
url: "/ecw/box-load-info/airAllUnload",
method: "post",
data,
});
}
/**
* 异常
*
......
......@@ -194,6 +194,7 @@ export const DICT_TYPE = {
APPLY_STATUS:'apply_status',//特价申请审核状态
WAREHOUSING_SPECIFICATION_TYPE: 'warehousing_specification_type',
ECW_AUTH_TYPE:'auth_type',//品牌授权
OREER_ITEM_USAGE:'order_item_usage',//用途
NEED_ORDER_INQUIRY: 'need_order_inquiry', // 是否需要単询
EXCEPTION_SELECT_FILED:'exception_select_filed',
......
<template>
<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-radio-group v-model="cusClearanceObj.clearanceType">
<el-radio :label="0">{{ $t('一次清关') }}</el-radio>
<el-radio :label="1">{{ $t('多次清关') }}</el-radio>
<el-radio :label="0">{{ $t("一次清关") }}</el-radio>
<el-radio :label="1">{{ $t("多次清关") }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('选择订单')" prop="clearanceOrderIdList" v-show="cusClearanceObj.clearanceType == 1">
<el-select v-model="cusClearanceObj.clearanceOrderIdList" multiple filterable clearable reserve-keyword :filter-method="filterOrder" :placeholder="$t('请输入订单号、提单号、唛头')" @change="selectOrderId">
<el-option v-for="item in statusOrderList" :key="item.orderId" :label="item.orderNo + ' ' + item.clear + ' ' + item.arrival" :value="item.orderId"> </el-option>
</el-select>
<el-form-item
:label="$t('选择订单')"
prop="clearanceOrderIdList"
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 :label="$t('已清关订单')" v-show="cusClearanceObj.clearanceType == 1">
<span v-for="order in cusClearanceObj.clearanceOrderList" :key="order.id">{{ order.orderNo }} </span>
<el-form-item
:label="$t('已清关订单')"
v-show="cusClearanceObj.clearanceType == 1"
>
<span
v-for="order in cusClearanceObj.clearanceOrderList"
:key="order.id"
>{{ order.orderNo }}
</span>
</el-form-item>
<div v-if="cusClearanceObj.clearanceOrderIdList.length > 0">
<el-form ref="airArrivalForm" :rules="airArrivalrules" :model="airArrivalInfo" label-width="120px">
<div>
<el-form
ref="airArrivalForm"
:rules="airArrivalrules"
:model="airArrivalInfo"
label-width="160px"
>
<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 :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 :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>
</div>
<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 :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>
<p class="message-area" v-show="showMsg">{{ $t('清关时间与预计时间不符,如有异常请登记') }}</p>
<el-date-picker
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>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit(1)">{{ $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-button type="primary" @click="onSubmit(1)">{{
$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-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" />
</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>
</template>
<script>
import regError from '../../regError'
import dayjs from 'dayjs'
import { clearanceCreate } from '@/api/ecw/boxSea'
import { shipmentOrderList } from '@/api/ecw/boxAir'
import { formatDateStr, serviceMsg, formatDate } from '../utils'
import { updateOrderArrival } from '@/api/ecw/boxAir'
import regError from "../../regError";
import dayjs from "dayjs";
import { clearanceCreate } from "@/api/ecw/boxSea";
import { shipmentOrderList } from "@/api/ecw/boxAir";
import { formatDateStr, serviceMsg, formatDate } from "../utils";
import { updateOrderArrival } from "@/api/ecw/boxAir";
import search from "bpmn-js/lib/features/search";
/**
* 清关
*/
export default {
name: 'cusClearance',
name: "cusClearance",
inheritAttrs: false,
components: {
regError
regError,
},
data() {
return {
......@@ -76,188 +214,346 @@ export default {
cusClearanceObj: {},
// 校验
rules: {
clEstTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }],
clClearTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }]
clEstTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
clClearTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
},
airArrivalrules: {
actSecondTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }],
actTime: [{ required: true, message: this.$t('必填'), trigger: 'change' }]
actSecondTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
actTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
},
// 弹窗配置
dialogVisible: false,
// 提示消息
showMsg: false,
orderList: [],
orderListFilter: [],
arrivalOrderList: [],
clearanceOrderList: [],
airArrivalInfo: {}
}
airArrivalInfo: {},
orderdialogVisible: false,
selectOrders: [],
multipleSelectOrder: [],
orderKeyword: null,
orderPortStatus: null,
orderCustomsClearanceStatus: null,
};
},
created() {
const voName = this.$attrs.currNode.voName
let oldData = { ...this.$attrs.shipmentObj[voName] }
oldData = formatDateStr(oldData, ['clEstTime'])
oldData = formatDateStr(oldData, ['clClearTime'], 'YYYY-MM-DD HH:mm:ss')
this.cusClearanceObj = oldData
if (!this.cusClearanceObj.clearanceType) this.$set(this.cusClearanceObj, 'clearanceType', 0)
this.$set(this.cusClearanceObj, 'clearanceOrderIdList', [])
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
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["clEstTime"]);
oldData = formatDateStr(oldData, ["clClearTime"], "YYYY-MM-DD HH:mm:ss");
this.cusClearanceObj = oldData;
if (!this.cusClearanceObj.clearanceType)
this.$set(this.cusClearanceObj, "clearanceType", 0);
this.$set(this.cusClearanceObj, "clearanceOrderIdList", []);
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) => {
this.orderList = r.data
this.orderListFilter = r.data
})
this.orderList = r.data;
});
},
watch: {
// 预计清关时间
'cusClearanceObj.clEstTime'(val) {
this.compareDate(val, this.cusClearanceObj.clClearTime)
"cusClearanceObj.clEstTime"(val) {
this.compareDate(val, this.cusClearanceObj.clClearTime);
},
// 清关时间
'cusClearanceObj.clClearTime'(val) {
this.compareDate(this.cusClearanceObj.clEstTime, val)
"cusClearanceObj.clClearTime"(val) {
this.compareDate(this.cusClearanceObj.clEstTime, val);
},
'cusClearanceObj.clearanceType'(val) {
"cusClearanceObj.clearanceType"(val) {
if (val == 1) {
this.$set(this.cusClearanceObj, 'clEstTime', null)
this.$set(this.cusClearanceObj, 'clClearTime', null)
this.$set(this.cusClearanceObj, "clEstTime", null);
this.$set(this.cusClearanceObj, "clClearTime", null);
} else {
let oldData = { ...this.$attrs.shipmentObj[this.$attrs.currNode.voName] }
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)
}
let oldData = {
...this.$attrs.shipmentObj[this.$attrs.currNode.voName],
};
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: {
statusOrderList() {
let data = []
this.orderListFilter.forEach((item) => {
let data = [];
this.orderList.forEach((item) => {
let json = {
orderId: item.orderId,
orderNo: item.orderNo,
tidanNo: item.tidanNo,
marks: item.marks
}
let clearindex = this.cusClearanceObj.clearanceOrderList ? this.cusClearanceObj.clearanceOrderList.findIndex((p) => p.orderId == item.orderId) : -1
marks: item.marks,
};
let clearindex = this.cusClearanceObj.clearanceOrderList
? this.cusClearanceObj.clearanceOrderList.findIndex(
(p) => p.orderId == item.orderId
)
: -1;
if (clearindex != -1) {
json.clear = this.$t('已清关')
json.clear = this.$t("已清关");
json.clearValue = 1;
} 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) {
json.arrival = this.$t('已到港')
json.arrival = this.$t("已到港");
json.arrivalValue = 1;
} else {
json.arrival = this.$t('未到港')
}
data.push(json)
})
return data
json.arrival = this.$t("未到港");
json.arrivalValue = 0;
}
data.push(json);
});
return data;
},
},
methods: {
formatDate,
filterOrder(val) {
if (val != '') {
this.orderListFilter = this.orderList.filter((item) => {
return item.orderNo&&item.orderNo.indexOf(val) > -1 || item.tidanNo&&item.tidanNo.indexOf(val) > -1 || item.marks&&item.marks.indexOf(val) > -1
})
} else {
this.orderListFilter = this.orderList
searchOrderList() {
if (this.orderKeyword && this.orderKeyword != "") {
this.statusOrderList = this.statusOrderList.filter((item) => {
return (
(item.orderNo && item.orderNo.indexOf(this.orderKeyword) > -1) ||
(item.tidanNo && item.tidanNo.indexOf(this.orderKeyword) > -1) ||
(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) {
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) {
this.$set(this.airArrivalInfo, 'actSecondTime', formatDate(arr.actSecondTime))
this.$set(this.airArrivalInfo, 'estTime', formatDate(arr.estTime))
this.$set(this.airArrivalInfo, 'actTime', formatDate(arr.actTime))
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[0])
if(clear){
this.$set(this.cusClearanceObj, 'clEstTime', formatDate(clear.clEstTime))
this.$set(this.cusClearanceObj, 'clClearTime', formatDate(clear.clClearTime))
let clear = this.clearanceOrderList.find(
(item) => item.orderId == val[0]
);
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.$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);
}
},
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) {
const agentId = this.$attrs.shipmentObj.agentInfo.agentId
if (type === 'label') {
const selected = this.$attrs.allSupplier.find((item) => item.id === agentId)
return this.$l(selected, 'company') ?? agentId
const agentId = this.$attrs.shipmentObj.agentInfo.agentId;
if (type === "label") {
const selected = this.$attrs.allSupplier.find(
(item) => item.id === agentId
);
return this.$l(selected, "company") ?? agentId;
}
return agentId
return agentId;
},
// 时间比较
compareDate(clEstTime, clClearTime) {
this.showMsg = false
this.showMsg = false;
let date1 = null,
date2 = null
if (clEstTime) date1 = dayjs(clEstTime)
if (clClearTime) date2 = dayjs(clClearTime)
date2 = null;
if (clEstTime) date1 = dayjs(clEstTime);
if (clClearTime) date2 = dayjs(clClearTime);
if (date1 && date2 && !date2.isSame(date1)) {
this.showMsg = true
this.showMsg = true;
}
},
// 异常登记
exceptionReg() {
this.dialogVisible = true
this.dialogVisible = true;
},
/** 提交 */
onSubmit(operateType) {
this.$refs['cusClearanceForm'].validate((valid) => {
this.$refs["cusClearanceForm"].validate((valid) => {
if (valid) {
if (this.cusClearanceObj.clearanceType == 1 && this.cusClearanceObj.clearanceOrderIdList.length > 0) {
this.$refs['airArrivalForm'].validate((arrvalid) => {
if (
this.cusClearanceObj.clearanceType == 1 &&
this.cusClearanceObj.clearanceOrderIdList.length > 0
) {
this.$refs["airArrivalForm"].validate((arrvalid) => {
if (arrvalid) {
updateOrderArrival({
...this.airArrivalInfo,
shipmentId: this.$attrs.shipmentObj.id,
orderIdList: this.cusClearanceObj.clearanceOrderIdList
orderIdList: this.cusClearanceObj.clearanceOrderIdList,
}).then(() => {
clearanceCreate({
...this.cusClearanceObj,
shipmentId: this.$attrs.shipmentObj.id,
clAgentId: this.getClAgent(),
operateType
operateType,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel('submit')
})
})
})
this.cancel("submit");
});
});
});
}
})
});
} else {
clearanceCreate({
...this.cusClearanceObj,
shipmentId: this.$attrs.shipmentObj.id,
clAgentId: this.getClAgent(),
operateType
operateType,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel('submit')
})
})
this.cancel("submit");
});
});
}
}
})
});
},
/** 取消 */
cancel(type) {
this.$emit('closeDialog', type)
}
}
}
this.$emit("closeDialog", type);
},
},
};
</script>
<style lang="scss" scoped>
......
......@@ -87,7 +87,7 @@
</div>
<div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</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>
</div>
</el-row>
......@@ -123,7 +123,7 @@
width="120">{{ $t('无返回') }}</el-table-column> -->
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100">
<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>
</el-table-column>
</el-table>
......
......@@ -190,7 +190,7 @@ export default {
list.push({
...oItem,
warehouseInInfo,
multiSpecification: item.multiSpecification,
multiSpecification: oItem.multiSpecification,
positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime,
......
......@@ -151,12 +151,12 @@
import unloadingError from "./unloadingError.vue";
import {
loadGoodsList,
batchUnload,
allUnload,
airBatchUnload,
airAllUnload,
approvalCreate,
approvalCancel,
getSectionList,
singleUnload,
airSingleUnload,
boxGoodsDetail
} from "@/api/ecw/boxSea";
import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils";
......@@ -254,7 +254,7 @@ export default {
this.$message.error(this.$t("请输入箱号标签"));
return;
}
singleUnload({
airSingleUnload({
orderNumCode: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => {
......@@ -274,7 +274,7 @@ export default {
this.$message.error(this.$t("请选择到仓时间"));
return;
}
batchUnload({
airBatchUnload({
orderNo: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id,
unloadTime: this.ulWarehouseTime
......@@ -295,7 +295,7 @@ export default {
type: "warning",
})
.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) => {
this.getLoadGoodsList();
});
......
......@@ -184,6 +184,10 @@ export default {
case "cusDeclaration":
this.$set(this.dialogConfig, "width", "700px");
break;
// 清关
case "cusClearance":
this.$set(this.dialogConfig, "width", "700px");
break;
// AGENT
case "agent":
this.$set(this.dialogConfig, "title", this.$t("代理商设置"));
......
......@@ -297,8 +297,8 @@ function airBaseData() {
keyName: "toWarehouseStatus",
status: {
start: [181],
wait: [182, 183, 184, 185],
end: [186],
wait: [182, 183, 184],
end: [185, 186],
},
},
],
......
<template>
<div>
<div class="app-container">
<el-descriptions :column="5" >
<el-descriptions :column="4" border>
<el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">
......@@ -14,11 +14,8 @@
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div>
</template>
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item >
<template slot="label">
{{ $t('实收已核销总金额') }}
......@@ -29,7 +26,7 @@
</template>
<div v-else>
<div v-for="(amount, currency) in writeOffTotal" :key="currency">
{{amount}}{{getCurrencyLabel(currency)}}
{{getCurrencyLabel(currency)}}: {{amount}}
</div>
</div>
</el-descriptions-item>
......@@ -49,8 +46,56 @@
</template>
{{ WriteOffProportion }}%
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</div>
<div style="margin: 20px 0;font-size:16px" v-if="form.financeRemark">{{$t('备注')}}:{{form.financeRemark}}</div>
<el-card class="card">
<div slot="header" class="card-title">{{ $t('应收明细') }}</div>
<el-table :data="list" border>
<el-table-column :label="$t('订单号')" align="center" prop="orderNo" />
<el-table-column :label="$t('提单号')" align="center" prop="tidanNo" />
<el-table-column :label="$t('唛头')" align="center" prop="marks" />
<el-table-column :label="$t('品名')" align="center" prop="title">
<template slot-scope="scope">
<span v-if="scope.row.feeType!=5">{{ scope.row.titleZh?(scope.row.titleZh + "(" + scope.row.titleEn + ")"):'' }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="num" />
<el-table-column :label="$t('体积/重量')" align="center" prop="weight">
<template slot-scope="scope">
<span v-if="scope.row.feeType!=5"> {{ scope.row.volume + "/" + scope.row.weight }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('收入类型')" align="center" prop="feeType">
<template slot-scope="scope">
<dict-tag
:type="DICT_TYPE.FEE_TYPE"
:value="scope.row.feeType"
></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('单价金额')" align="center" prop="unitPrice">
<template slot-scope="scope">
<span>{{ scope.row.unitPrice }}</span>
{{getCurrencyLabel(scope.row.currencyId)}}
</template>
</el-table-column>
<el-table-column :label="$t('总金额')" align="center" prop="totalAmount">
<template slot-scope="scope">
<span>{{ scope.row.totalAmount }}</span>
{{getCurrencyLabel(scope.row.currencyId)}}
</template>
</el-table-column>
<el-table-column :label="$t('优惠金额')" align="center">
<template slot-scope="scope">
{{ scope.row.discountTotal ? `${scope.row.discountTotal}(${scope.row.discountRemark})` : 0 }}
</template>
</el-table-column>
</el-table>
</el-card>
<div class="btn">
<el-button
size="mini"
......@@ -245,12 +290,19 @@ export default {
}
.app-container {
::v-deep .el-descriptions-item__label {
font-size:16px;
font-weight:600;
font-size:14px;
// font-weight:600;
}
::v-deep .el-descriptions-item__content {
font-size:16px;
font-weight:600;
font-size:14px;
// font-weight:600;
}
}
.card {
margin-top: 20px;
}
.card-title {
font-size: 18px;
font-weight: bold;
}
</style>
<template>
<div>
<!-- 订单获取入仓记录 -->
<el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="1200px">
<el-card style="margin-bottom:10px">
......@@ -15,6 +16,14 @@
<el-descriptions-item :label="$t('数量')">{{orderItem.warehouseInInfoVO ? orderItem.warehouseInInfoVO.quantityAll : orderItem.quantity}}{{$t('个')}}</el-descriptions-item>
<el-descriptions-item :label="$t('备货状态')">{{airShipmentData[info.airShipment]}}</el-descriptions-item>
<el-descriptions-item :label="$t('商品特性')">{{productAttr}}</el-descriptions-item>
<el-descriptions-item :label="$t('用途')">
<div v-if="orderItem.usageIds">
<div v-for="(item,index) in row.usageIds.split(',')">
<dict-tag :type="DICT_TYPE.OREER_ITEM_USAGE" :value="item" />
<span v-if="(index+1)!=row.usageIds.split(',').length">,</span>
</div>
</div>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card style="margin-bottom:10px">
......@@ -23,7 +32,12 @@
</div>
<el-table v-if="orderWarehouseInContent" :data="orderWarehouseInContent">
<el-table-column type="index" :label="$t('序号')" />
<el-table-column :label="$t('箱数')" prop="cartonsNum" />
<el-table-column :label="$t('箱数')" prop="cartonsNum">
<template slot-scope="{row}">
<span>{{row.cartonsNum}}</span>
<!-- <el-button type="primary" @click="seeBox(row)">({{$t('混箱')}})</el-button> -->
</template>
</el-table-column>
<el-table-column :label="$t('入仓类型')" prop="cartonsNum">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE" :value="row.specificationType" />
......@@ -61,6 +75,11 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<el-button type="primary" @click="seeMv(row.pictureUrls)">{{$t('查看')}}</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card style="margin-bottom:10px">
......@@ -107,6 +126,11 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<el-button type="primary" @click="seeMv(row.pictureUrls)">{{$t('查看')}}</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card style="margin-bottom:10px">
......@@ -120,7 +144,20 @@
</el-descriptions>
</el-card>
<el-button type="primary" @click="closeDialog">{{$t('关闭窗口')}}</el-button>
</el-dialog>
<el-dialog :title="$t('入仓影像')" :visible="mvShow" :before-close="closeMv" :close-on-click-modal="false" width="600px">
<div style="display:flex;flex-wrap:wrap">
<div v-for="(item, index) in pictureUrls" :index="index" :key="index" style="width:80px;height:80px">
<image v-if="item.type === 'image'" :src="item.url" mode="scaleToFill" style="height: 100%" @tap="previewImage(item.url)" />
<video v-else-if="item.type === 'video'" :id="`video_${index}`" style="width: 100%;height: 100%" :src="item.url" @play="playVideo(index)" @tap="playVideo(index)" @fullscreenchange="fullscreenchange"></video>
</div>
</div>
<div v-if="pictureUrls.length==0">
<span>{{$t('暂无影像')}}</span>
</div>
</el-dialog>
</div>
</template>
<script>
import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order'
......@@ -149,7 +186,9 @@ export default {
volume:0,
weight:0,
quantityAll:0
}
},
pictureUrls:[],
mvShow:false
}
},
computed:{
......@@ -225,6 +264,34 @@ export default {
}
})
},
seeMv(list){
this.mvShow=true
if(list){
this.pictureUrls = list.map(e => {
return {
url: e,
type: this.isImageFile(e) ? 'image' : 'video',
}
})
}
},
isImageFile(filename) {
var imageExtensions = [".jpeg", ".jpg", ".png", ".gif", ".bmp", ".tiff"];
var extension = "";
var length = filename.length;
for (var i = length - 1; i >= 0; i--) {
if (filename[i] === ".") {
extension = filename.slice(i).toLowerCase();
break;
}
}
return imageExtensions.indexOf(extension) !== -1;
},
closeMv(){
this.mvShow = false
}
}
}
</script>
......
......@@ -264,6 +264,17 @@
<dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.isPayAdvance" />
</template>
</el-table-column>
<el-table-column prop="" :label="$t('用途')">
<template slot-scope="{row}">
<div v-if="row.usageIds">
<div v-for="(item,index) in row.usageIds.split(',')">
<dict-tag :type="DICT_TYPE.OREER_ITEM_USAGE" :value="item" />
<span v-if="(index+1)!=row.usageIds.split(',').length">,</span>
</div>
</div>
<div v-else></div>
</template>
</el-table-column>
<el-table-column prop="" :label="$t('成交单价')" width="220px">
<template slot-scope="{row}">
......
......@@ -4,7 +4,7 @@
<el-dialog
:title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible"
width="1280px"
width="100%"
>
<el-tabs v-model="activeName" type="card">
<el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first">
......@@ -185,8 +185,16 @@
:is-editing="edit"></warehouse-area-select>
</template>
</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('操作')">
<template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" />
<el-popconfirm
v-if="$index >= protectRowCount"
title="确定要删除该行入仓记录吗?"
......@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product"
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue"
export default {
name: "Warehouse",
components: {
WarehouseRecordDetail,
ImageAndVideoUpload,
ProductSelector,
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