Commit 9a5e67fb authored by 邓春圆's avatar 邓春圆

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

parents 45dda5cf 66c486d8
......@@ -54,6 +54,15 @@ export function exportboxExcel(query) {
});
}
// 导出预装单-异步
export function exportPreloadGoodsList(query) {
return request({
url: "/ecw/box-preload-goods/downloadPreloadGoodsList",
method: "get",
params: query
});
}
// 创建费用登记
export function createCost(data) {
if (data.id) {
......@@ -220,6 +229,15 @@ export function getNoticeList(data) {
});
}
// 空运出货提示
export function getAirNoticeList(data) {
return request({
url: "/shipment/box/airNoticeList",
method: "post",
data,
});
}
/**
* 根据订单ID下载提货单
*
......
......@@ -112,7 +112,7 @@ export function getBmpDetailByBusinessId(businessId) {
// 导出订单异常 Excel
export function exportExcel(params) {
return request({
url: '/ecw/order-exception/export-excel',
url: '/ecw/order-exception/export-excel-async',
method: 'get',
timeout: 30*60*1000,
params,
......
......@@ -21,3 +21,17 @@ export function download(id){
export function downloadFileResponse(url){
return axios.get(url, {responseType: 'blob'})
}
// 重试
export function retry(id){
return request({
url: '/system/download-log/retry/' + id
})
}
// 删除
export function deleteLog(id){
return request({
url: '/system/download-log/del/' + id
})
}
......@@ -220,6 +220,7 @@ export const DICT_TYPE = {
BOX_SHIPPING_BRAND_TYPE: 'shipping_brand_type', // 出货品牌类型
BOX_SHIPPING_NOTICE_TYPE: 'shipping_notice_type', // 出货通知类型
BOX_ORDER_SHIPMENT_STATE: 'order_shipment_state',
BOX_AIR_SHIPMENT_STATE: 'air_shipment_status',
BOX_INSPECTION_TIME_CUSTOMS: 'inspection_time_customs', // 校验时间-报关
BOX_INSPECTION_TIME_SHIPPING: 'inspection_time_shipping', // 校验时间-起运
BOX_INSPECTION_TIME_ARRIVAL: 'inspection_time_arrival', // 校验时间-到港
......
......@@ -421,6 +421,28 @@ export default {
component: () => import('@/views/ecw/customer/components/customer-handover-details.vue'),
processId: this.processInstance.businessKey,
type: this.processInstance.processDefinition?.formCustomViewPath
},
// 出货审核
air_shipment: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: 'shipment'
},
//排单分拣审核
shipment_order_sorting: {
component: "shippingDetail",
processId: this.processInstance.businessKey
},
// 出货反审
shipment_review: {
component: "shippingDetail",
processId: this.processInstance.businessKey
},
// 删单退场
customs_declare_remove: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: 'deleteExit'
}
}
console.log('formCustomViewPath', this.processInstance.processDefinition.formCustomViewPath.trim())
......
<template>
<el-dialog :title="orderNo + $t('订单转异')" center :visible.sync="show" v-bind="$attrs" :close-on-click-modal="false">
<el-form label-position="top" label-width="200" ref="exceptionForm" :model="form" :rules="exceptionRules">
<el-form-item :label="$t('原因类型')" prop="manualExceptionType">
<dict-selector v-model="form.manualExceptionType" form-type="checkbox" :type="DICT_TYPE.MANUAL_EXCEPTION_TYPE" multiple ></dict-selector>
</el-form-item>
<el-form-item :label="$t('附件')">
<image-upload v-model="form.exceptionUrls"></image-upload>
</el-form-item>
<el-form-item :label="$t('详细信息')">
<el-input v-model="form.descZh" type="textarea"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleException">{{$t('确认转异')}}</el-button>
<el-button @click="cancel">{{$t('取消')}}</el-button>
</span>
</el-dialog>
</template>
<script>
import imageUpload from "@/components/ImageUpload/index.vue";
import {batchException} from "@/api/ecw/order";
export default {
components: {imageUpload},
props:{
orderNo:{
type: String,
},
orderId:{
type: Number,
}
},
data(){
return {
show: false,
form: {
manualExceptionType: [],
exceptionUrls: '',
descZh: ''
},
exceptionRules:{}
}
},
async created(){
this.$nextTick()
this.show = true
},
methods:{
cancel(){
this.show = false
this.$emit('cancel');
},
handleException(){
if(!this.form.manualExceptionType.length){
return this.$message.error(this.$t('请选择异常类型'))
}
batchException({
orderIds: [this.orderId],
manualExceptionType: this.form.manualExceptionType.join(","),
exceptionUrls: this.form.exceptionUrls?.split(",") || [],
descZh: this.form.descZh
}).then(res=>{
this.$message.success(this.$t('操作成功'));
this.show = false
this.$emit('success');
})
}
}
}
</script>
<style scoped lang="scss">
</style>
......@@ -25,13 +25,14 @@
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的港清关')" prop="destinationClearance">
<el-radio-group v-model="form.destinationClearanceSelect" @input="destinationClearanceSelect">
<el-radio :label="1">{{$t('我司')}}</el-radio>
<el-form-item :label="$t('目的港清关')" prop="destinationClearanceSelect">
<el-radio-group v-model="form.destinationClearance">
<el-radio v-if="form.destinationClearance != 2" :label="1">{{$t('我司')}}</el-radio>
<el-radio v-else :label="2">{{$t('我司')}}</el-radio>
<el-radio :label="3">{{$t('客户')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.destinationClearanceSelect==1" prop="destinationClearance" :rules="[
<el-form-item v-if="form.destinationClearance===1 || form.destinationClearance===2" prop="destinationClearance" :rules="[
{ required: true, message: this.$t('清关方式不能为空'), trigger: 'blur' }
]">
<el-radio-group v-model="form.destinationClearance">
......@@ -79,7 +80,7 @@ export default {
data() {
return {
// 表单参数
form: {},
form: { },
channelList: [],
// 表单校验
rules: {
......@@ -95,13 +96,20 @@ export default {
}
};
},
watch:{
'form.destinationClearanceSelect'(){
if(!this.form.destinationClearance){
this.$set(this.form, 'destinationClearance', 1)
}
}
},
methods: {
getChannelList() {
getChannelList().then((res) => (this.channelList = res.data))
},
destinationClearanceSelect(val) {
/*destinationClearanceSelect(val) {
this.$set(this.form,'destinationClearance',val)
},
},*/
/** 提交按钮 */
submitForm() {
this.$refs['form'].validate((valid) => {
......
......@@ -21,9 +21,9 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('状态')" prop="boxStatus">
<el-select v-model="queryParams.boxStatus" :placeholder="$t('请选择状态')" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BOX_SHIPMENT_STATUS)" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
<el-form-item :label="$t('状态')" prop="shipmentStatusAir">
<el-select v-model="queryParams.shipmentStatusAir" :placeholder="$t('请选择状态')" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BOX_AIR_SHIPMENT_STATE)" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
</el-select>
</el-form-item>
<el-row>
......@@ -113,7 +113,7 @@
<el-dropdown trigger="click" @command="(command) => handleCommand(scope.row, command)" style="marginRight:10px;">
<el-button type="primary"> {{ $t('操作') }}<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="edit">{{$t('编辑')}}</el-dropdown-item>
<el-dropdown-item command="edit" :disabled="scope.row.prStatus>21">{{$t('编辑')}}</el-dropdown-item>
<el-dropdown-item command="air">{{$t('操作')}}-{{$t('空运')}}</el-dropdown-item>
<el-dropdown-item command="error">{{$t('异常登记')}}</el-dropdown-item>
<el-dropdown-item command="cost">{{$t('费用登记')}}</el-dropdown-item>
......@@ -194,7 +194,15 @@
</template>
<script>
import {deletebox, getbox, getboxPage, exportboxExcel, getNoticeList, dealCustomsSplitNotify} from '@/api/ecw/box'
import {
deletebox,
getbox,
getboxPage,
exportboxExcel,
getNoticeList,
dealCustomsSplitNotify,
exportPreloadGoodsList, downloadReceivableList, getAirNoticeList, zipDownload
} from '@/api/ecw/box'
import { getChannelList } from '@/api/ecw/channel'
import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue'
......@@ -260,7 +268,7 @@ export default {
selfNo: null,
cubNo: null,
cabinetId: null,
boxStatus: null,
shipmentStatusAir: null,
startWarehouseId: null,
destWarehouseId: null,
transportType: null
......@@ -350,7 +358,7 @@ export default {
getChannelList().then((res) => (this.channelList = res.data))
},
queryNotice() {
getNoticeList({
getAirNoticeList({
transportTypeList: this.transportTypes.map((item) => item.value),
}).then((res) => {
const { data } = res;
......@@ -506,12 +514,13 @@ export default {
this.$router.push('/boxAir/batch_markup?shipmentId=' + row.id)
break
case "downloadPreloadGoodsList":
downloadFile(
command,
{shipmentId: row.id},
this.$t("预装单") + `(${row.selfNo}).xlsx`,
"xlsx"
);
// downloadFile(
// command,
// {shipmentId: row.id},
// this.$t("预装单") + `(${row.selfNo}).xlsx`,
// "xlsx"
// );
this.exportExcel(exportPreloadGoodsList, { shipmentId: row.id }, this.$t("预装单") + `(${row.selfNo}).xlsx`)
break;
case "downloadLoadGoodsList":
downloadFile(
......@@ -522,20 +531,19 @@ export default {
);
break;
case "downloadReceivableList":
downloadFile(
command,
{shipmentId: row.id},
this.$t("应收汇总表") + `(${row.selfNo}).xlsx`,
"xlsx"
this.exportExcel(
downloadReceivableList,
{shipmentId: row.id}
);
break;
case "zipDownload":
downloadFile(
/*downloadFile(
command,
{shipmentId: row.id},
this.$t("提货单") + `(${row.selfNo}).zip`,
"zip"
);
);*/
this.exportExcel(zipDownload, { shipmentId: row.id }, this.$t("提货单") + `(${row.selfNo}).zip`)
break;
case "downloadAgentListFiles":
case "downloadSoncapFiles":
......@@ -563,6 +571,20 @@ export default {
this.$set(this.dialogCfg, "open", true);
}
},
// 通用导出函数
exportExcel(func, params, fileName = null){
this.exportLoading = true;
func(params).then(res => {
console.log({res})
if(!fileName){
fileName = this.$t('订单')
}
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
// this.$download.excel(res, fileName + '.xls');
}).finally(() => {
this.exportLoading = false
})
},
}
}
......
......@@ -213,7 +213,7 @@ import {
getbox,
getboxPage,
exportboxExcel,
getNoticeList, dealCustomsSplitNotify,
getNoticeList, dealCustomsSplitNotify, exportPreloadGoodsList, zipDownload,
} from "@/api/ecw/box";
import {
downloadFile,
......@@ -287,7 +287,7 @@ export default {
countryList: [],
// 通知列表
noticeList: [],
allUsers: [],
allUsers: []
};
},
computed: {
......@@ -489,12 +489,13 @@ export default {
break;
case "downloadPreloadGoodsList":
downloadFile(
command,
{ shipmentId: row.id },
this.$t("预装单") + `(${row.selfNo}).xlsx`,
"xlsx"
);
// downloadFile(
// command,
// { shipmentId: row.id },
// this.$t("预装单") + `(${row.selfNo}).xlsx`,
// "xlsx"
// );
this.exportExcel(exportPreloadGoodsList, { shipmentId: row.id }, this.$t("预装单") + `(${row.selfNo}).xlsx`)
break;
case "downloadLoadGoodsList":
downloadFile(
......@@ -513,12 +514,13 @@ export default {
);
break;
case "zipDownload":
downloadFile(
/* downloadFile(
command,
{ shipmentId: row.id },
this.$t("提货单") + `(${row.selfNo}).zip`,
"zip"
);
);*/
this.exportExcel(zipDownload, { shipmentId: row.id }, this.$t("提货单") + `(${row.selfNo}).zip`)
break;
case "downloadAgentListFiles":
case "downloadSoncapFiles":
......@@ -547,6 +549,20 @@ export default {
this.$set(this.dialogCfg, "open", true);
}
},
// 通用导出函数
exportExcel(func, params, fileName = null){
this.exportLoading = true;
func(params).then(res => {
console.log({res})
if(!fileName){
fileName = this.$t('订单')
}
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
// this.$download.excel(res, fileName + '.xls');
}).finally(() => {
this.exportLoading = false
})
},
/* 分页 */
pageChange(page) {
this.pageParam.page = page;
......
......@@ -302,7 +302,7 @@ export default {
// 下载
downloadList: [
{ title: this.$t("预装单"), serviceName: "downloadPreloadGoodsList", hasPermi: "shipment:box:download:downloadPreloadGoodsList" },
{ title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
// { title: this.$t("已装单"), serviceName: "downloadLoadGoodsList", hasPermi: "shipment:box:download:downloadLoadGoodsList" },
{ title: this.$t("应收汇总表"), serviceName: "downloadReceivableList", hasPermi: "shipment:box:download:downloadReceivableList" },
{
title: this.$t("提货单"),
......
......@@ -68,12 +68,12 @@
<el-input type="textarea" :rows ="6" v-model="airCheckoutObj.remark" :placeholder="$t('备注')"></el-input>
</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 :disabled="$attrs.shipmentObj.approvaling" type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button>
</el-row>
</div>
......
......@@ -21,7 +21,7 @@
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.dcDecTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('状态')" prop="dcCustomsStatus">
<el-radio-group v-model="cusDeclarationObj.dcCustomsStatus" :disabled="inReview || isCheckDeal('status')">
<el-radio-group v-model="cusDeclarationObj.dcCustomsStatus" :disabled="inReview || inOverReview || isCheckDeal('status')">
<el-radio v-for="item in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_DCCUSTOMS_STATUS)" :key="item.value" :label="item.value">{{$l(item, 'label')}}</el-radio>
</el-radio-group>
</el-form-item>
......@@ -29,7 +29,7 @@
<!-- 查验 -->
<div v-show="cusDeclarationObj.dcCustomsStatus === '3'">
<el-form-item :label="$t('查验')">
<el-radio-group v-model="cusDeclarationObj.dcCheckStatus" :disabled="inReview || isCheckDeal('check')">
<el-radio-group v-model="cusDeclarationObj.dcCheckStatus" :disabled="inReview || inOverReview || isCheckDeal('check')">
<el-radio v-for="item in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_CHECK_STATUS)" :key="item.value" :label="item.value" :disabled="disabledRadio(item)">{{$l(item, 'label')}}</el-radio>
</el-radio-group>
</el-form-item>
......@@ -54,27 +54,40 @@
</el-form-item>
<el-form-item :label="$t('过机状态')" prop="overMachineStatus">
<el-radio-group v-model="cusDeclarationObj.overMachineStatus" :disabled="inReview">
<el-radio-group v-model="cusDeclarationObj.overMachineStatus" :disabled="inReview||inOverReview">
<el-radio :label="1">{{$t('顺利')}}</el-radio>
<el-radio :label="2">{{$t('异常')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="overMachineAbnormalStatus" v-show="cusDeclarationObj.overMachineStatus == 2">
<el-radio-group v-model="cusDeclarationObj.overMachineAbnormalStatus" :disabled="inReview">
<el-radio-group v-model="cusDeclarationObj.overMachineAbnormalStatus" :disabled="inReview||inOverReview">
<el-radio :label="1">{{$t('敏感货')}}</el-radio>
<el-radio :label="2">{{$t('重量误报')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1" :label="$t('删单退场类型')">
<el-radio-group v-model="cusDeclarationObj.deleteExitType" :disabled="inReview||inOverReview">
<el-radio :label="1">{{$t('退场时间')}}<el-tooltip class="item" effect="dark" :content="$t('选择退场时间,填写退场时间后,提交删单退场审核,订单返回到“已订舱”环节修改订舱号后,提交之后直接到报关流程')" placement="top">
<div class="el-icon-question"></div>
</el-tooltip></el-radio>
<el-radio :label="2">{{$t('返回仓库')}}<el-tooltip class="item" effect="dark" :content="$t('删单退场审核通过后,通过PDA空运退场到仓进行货物入仓')" placement="top">
<div class="el-icon-question"></div>
</el-tooltip></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1 && cusDeclarationObj.deleteExitType == 1" :label="$t('退场时间')">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="cusDeclarationObj.deleteExitTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1">
<el-form-item :label="$t('删单退场状态')">
{{getCheckExamineStatus}}
{{getOverExamineStatus}}
</el-form-item>
</el-form-item>
<el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1 && shipmentObj.overMachineExamineStatus == 0 && (typeof cusDeclarationObj.id != 'undefined')">
<el-form-item v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 1 && ![1].includes(shipmentObj.overMachineExamineStatus)">
<el-button type="primary" @click="approvalCreate">{{$t('提交删单退场审核')}}</el-button>
</el-form-item>
<el-form-item prop="weightMisreport" v-show="cusDeclarationObj.overMachineStatus == 2 && cusDeclarationObj.overMachineAbnormalStatus == 2">
<el-radio-group v-model="cusDeclarationObj.weightMisreport" :disabled="inReview">
<el-radio-group v-model="cusDeclarationObj.weightMisreport" :disabled="inOverReview">
<el-radio :label="1">{{$t('机场误差3%')}}</el-radio>
<el-radio :label="2">{{$t('超过误差10KG')}}</el-radio>
<el-radio :label="3">{{$t('过机放行-未找到重货订单')}}</el-radio>
......@@ -106,10 +119,14 @@
</el-form-item>
</el-form>
<el-row class="operate-button" v-if="inReview">
<el-button type="primary" @click="jumpReviewDetail">{{cusDeclarationObj.dcCheckStatus === '1' ? $t('全部退场审核中') : $t('部分退场审核中')}}</el-button>
<el-button type="primary" plain @click="canclAudit">{{cusDeclarationObj.dcCheckStatus === '1' ? $t('取消全部退场审核') : $t('取消部分退场审核')}}</el-button>
</el-row>
<el-row class="operate-button">
<el-button type="primary" v-if="inReview" plain @click="canclAudit">{{$t('取消删单退场审核')}}</el-button>
<el-button type="primary" v-if="inOverReview" plain @click="canclOverAudit">{{$t('取消删单退场审核')}}</el-button>
<el-button type="primary" @click="onSubmit(1)" :disabled="isCheckDeal('submit')">{{$t('保存')}}</el-button>
<el-button type="success" v-if="!inReview" @click="onSubmit(2)" :disabled="isCheckDeal('submit')">{{$t('提交')}}</el-button>
<el-button type="success" v-if="!inReview&&!inOverReview" @click="onSubmit(2)" :disabled="isCheckDeal('submit')">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button>
<el-button type="primary" @click="extraCost" v-show="cusDeclarationObj.dcCustomsStatus === '2' || cusDeclarationObj.dcCustomsStatus === '3'">{{$t('额外费用')}}</el-button>
<!-- <el-button type="primary" @click="exceptionReg" :disabled="!isShowError">{{$t('异常登记')}}</el-button> -->
......@@ -250,6 +267,7 @@ export default {
costList: [],
// 是否审核中
inReview: false,
inOverReview: false,
// 异常登记
regDialogVisible: false,
isShowError: false,
......@@ -294,6 +312,13 @@ export default {
this.$set(this.cusDeclarationObj, "overMachineStatus", 2)
this.$set(this.cusDeclarationObj, "overMachineAbnormalStatus", 1)
}
if(this.shipmentObj.customsDeleteExitApprovalInfo){
if(this.shipmentObj.customsDeleteExitApprovalInfo.details){
let details = JSON.parse(this.shipmentObj.customsDeleteExitApprovalInfo.details)
this.$set(this.cusDeclarationObj, "deleteExitType", details.deleteExitType)
this.$set(this.cusDeclarationObj, "deleteExitTime", details.deleteExitTime)
}
}
},
methods: {
strToArray(str) {
......@@ -372,12 +397,26 @@ export default {
},
//提交删单退场审核
approvalCreate(){
if(!this.cusDeclarationObj.deleteExitType){
this.$message.error(this.$t("请选择删单退场类型或者时间"));
return;
}
if(this.cusDeclarationObj.deleteExitType == 1 && !this.cusDeclarationObj.deleteExitTime){
this.$message.error(this.$t("请选择退场时间"));
return;
}
let details = {
deleteExitType: this.cusDeclarationObj.deleteExitType,
deleteExitTime: this.cusDeclarationObj.deleteExitTime
}
approvalCreate({
shipmentId: this.shipmentObj.id,
approvalStatus: 0,
approvalType: 11
approvalType: 11,
details: JSON.stringify(details)
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel("submit");
});
});
},
......@@ -564,8 +603,23 @@ export default {
toReviewDetail.apply(this, [customsApprovalInfo.bpmProcessId]);
this.cancel("close");
},
/* 取消审核 */
/* 取消退场审核 */
canclAudit() {
console.log(this.shipmentObj)
approvalCancel({
applyReason: this.$t("取消审核"),
id: this.shipmentObj["customsApprovalInfo"].id,
shipmentId: this.shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then(() => {
// 触发外层重新查询出货信息
this.cancel("close");
this.$emit("getBoxInfo");
});
});
},
/* 取消删单退场审核 */
canclOverAudit() {
console.log(this.shipmentObj)
approvalCancel({
applyReason: this.$t("取消审核"),
......@@ -636,8 +690,12 @@ export default {
immediate: true,
handler: function (val) {
// 监听查验状态变化
let { overMachineExamineStatus } = val;
let { overMachineExamineStatus, checkExamineStatus } = val;
if (overMachineExamineStatus === 1) {
// 按钮变成审核中
this.inOverReview = true;
}
if (checkExamineStatus === 1) {
// 按钮变成审核中
this.inReview = true;
}
......@@ -662,21 +720,38 @@ export default {
computed: {
/* 获取报关审核退场状态文字 */
getCheckExamineStatus() {
const { overMachineExamineStatus, checkDealStatus, customsInfo } =
const { checkExamineStatus, checkDealStatus, customsInfo } =
this.shipmentObj;
const { dcCheckStatus } = customsInfo ?? {};
if (overMachineExamineStatus === 1) {
if (checkExamineStatus === 1) {
return dcCheckStatus === 1
? this.$t("退场审核中")
: this.$t("部分退场审核中");
}
if (overMachineExamineStatus === 2 && checkDealStatus === 0) {
if (checkExamineStatus === 2 && checkDealStatus === 0) {
return dcCheckStatus === 1
? this.$t("审核通过,退场中")
: this.$t("审核通过,部分退场中");
}
return this.$t("未审核");
},
/* 获取报关审核删单退场状态文字 */
getOverExamineStatus() {
const { overMachineExamineStatus, checkDealStatus, customsInfo } =
this.shipmentObj;
const { dcCheckStatus } = customsInfo ?? {};
if (overMachineExamineStatus === 1) {
return dcCheckStatus === 1
? this.$t("删单退场审核中")
: this.$t("删单退场审核中");
}
if (overMachineExamineStatus === 2 && checkDealStatus === 0) {
return dcCheckStatus === 1
? this.$t("删单退场审核通过,退场中")
: this.$t("删单退场审核通过,退场中");
}
return this.$t("未审核");
},
/* 判断是否已处理 */
isCheckDeal() {
return (type) => {
......
......@@ -24,6 +24,7 @@
<el-button
size="small"
type="primary"
:disabled="shipmentObj.approvaling"
@click="
addMergedialogVisible = true
isMergeEdit = false
......@@ -57,8 +58,8 @@
</el-table-column>
<el-table-column :label="$t('操作')" align="center" width="260" class-name="small-padding fixed-width" fixed="right">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 1" type="text" size="small" @click="editMerge(scope.row)">{{ $t('编辑') }}</el-button>
<el-button type="text" size="small" @click="pkgPage(scope.row)">{{ $t('装箱') }}</el-button>
<el-button :disabled="shipmentObj.approvaling" v-if="scope.row.status == 1" type="text" size="small" @click="editMerge(scope.row)">{{ $t('编辑') }}</el-button>
<el-button :disabled="shipmentObj.approvaling" type="text" size="small" @click="pkgPage(scope.row)">{{ $t('装箱') }}</el-button>
<el-button v-if="scope.row.status != 2" type="text" size="small" @click="deleteMerge(scope.row.id)">{{ $t('删除') }}</el-button>
<el-button type="text" size="small" @click="printTag(scope.row.id)">{{ $t('打印标签') }}</el-button>
</template>
......@@ -115,7 +116,7 @@
</el-dialog>
<el-row style="margin-top: 15px" class="operate-button">
<el-button size="small" type="primary" @click="finish">{{ $t('完成') }}</el-button>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="finish">{{ $t('完成') }}</el-button>
<el-button size="small" @click="$emit('closeDialog')">{{ $t('取消') }}</el-button>
</el-row>
</el-col>
......
......@@ -23,7 +23,7 @@
</el-table-column>
<el-table-column :label="$t('备案')" align="center">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="row.productRecord" />
<dict-tag :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" :value="row.productRecord" />
</template>
</el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="sumNum">
......@@ -265,4 +265,4 @@ export default {
</script>
<style>
</style>
\ No newline at end of file
</style>
......@@ -109,11 +109,11 @@
<!--<div class="red-label">
<p>{{$t('可分拣方数')}}</p>
<p>{{preList.remainVolume}}</p>
</div>-->
</div>
<div class="red-label">
<p>{{$t('重量')}}</p>
<p>{{preList.remainWeight || 0}}kg</p>
</div>
</div-->
<div class="table-button">
<el-button type="success" size="small" @click="addPart" :disabled="isAudit">{{$t('增加')}}</el-button>
</div>
......@@ -174,7 +174,7 @@
</el-table-column>
<el-table-column :label="$t('特性')" align="center" prop="attrNameList" width="120">
<template slot-scope="scope">
{{scope.row.attrNameList?scope.row.attrNameList.toString():''}}
{{scope.row.warehouseInAttrNameList?scope.row.warehouseInAttrNameList.toString():""}}
</template>
</el-table-column>
<el-table-column :label="$t('备案')" align="center" prop="productRecord" width="100">
......@@ -335,7 +335,7 @@
<el-row class="process-area">
<div class="process">
<div>{{$t('审批流程')}}</div>
<work-flow xmlkey="shipment_preassemble" v-model="selectedUsers"></work-flow>
<work-flow xmlkey="shipment_order_sorting" v-model="selectedUsers"></work-flow>
</div>
<div v-show="isAudit">
<el-button type="primary" @click="jumpReviewDetail">{{$t('审核中')}}</el-button>
......
......@@ -6,6 +6,7 @@
</el-form-item>
<span v-if="voKey=='preInstallBackInfo'" style="color: red;margin-left: 120px;">{{$t('请注意,分拣反审后,全部提单需重新制作')}}</span>
</el-form>
<work-flow v-if="xmlKey" :xmlkey="xmlKey" v-model="copyUserId"></work-flow>
<el-row class="operate-button">
<el-button type="success" @click="onSubmit" v-show="!isReview">{{$t('发起申请')}}</el-button>
<el-button type="primary" @click="jumpReviewDetail" v-show="isReview">{{$t('审核中')}}</el-button>
......@@ -18,6 +19,7 @@
<script>
import { approvalCreate, approvalCancel } from "@/api/ecw/boxSea";
import { serviceMsg, toReviewDetail } from "../utils";
import WorkFlow from "@/components/WorkFlow/index.vue";
/**
* 反审
......@@ -25,6 +27,7 @@ import { serviceMsg, toReviewDetail } from "../utils";
export default {
name: "review",
inheritAttrs: false,
components: {WorkFlow},
data() {
return {
// 反审对象
......@@ -32,8 +35,21 @@ export default {
isReview: false,
bpmProcessId: "",
voKey: "",
copyUserId: [], // 抄送人
};
},
computed:{
type(){
return this.$attrs.currNode?.type
},
xmlKey(){
if(!this.type) return null
return {
// 出货反审核
'shipment': 'shipment_audit_no'
}[this.type]
}
},
created() {
const { currNode, shipmentObj } = this.$attrs;
......@@ -48,6 +64,8 @@ export default {
case "unloading":
voKey = "cabinetUnloadBackApprovalInfo";
break;
case "shipment":
voKey = "airShipmentBackApprovalInfo";
}
if (voKey) {
......@@ -95,6 +113,7 @@ export default {
let approvalType = 14; // 预装反审
if (currNode.type === "cabinet") approvalType = 9; // 装柜反审
if (currNode.type === "unloading") approvalType = 16; // 到仓反审核
if(currNode.type === "shipment") approvalType = 19; // 出货反审核
approvalCreate({
shipmentId: shipmentObj.id,
......
......@@ -58,15 +58,17 @@
</el-form>
<el-row class="operate-button">
<el-button v-if="airShipmentApprovalInfo && airShipmentApprovalInfo.approvalStatus == 1" type="primary" @click="$router.push({path: '/bpm/process-instance/detail', query: {id: airShipmentApprovalInfo.bpmProcessId}})">{{$t('出货审核中')}}</el-button>
<el-button v-if="airShipmentApprovalInfo && airShipmentApprovalInfo.approvalStatus == 1" type="primary" @click="canclAudit">{{$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 :disabled="$attrs.shipmentObj.approvaling" v-if="!airShipmentApprovalInfo || airShipmentApprovalInfo.approvalStatus != 1" type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button>
</el-row>
</div>
</template>
<script>
import { airShipmentCreate } from "@/api/ecw/boxSea";
import { airShipmentCreate, approvalCancel } from "@/api/ecw/boxSea";
import userSelect from "./common/userSelect.vue";
import { constantDict, formatDateStr, formatNumberString, serviceMsg } from "../utils";
......@@ -87,6 +89,7 @@ export default {
rules: {
deliverType: [{ required: true, message: this.$t("必填"), trigger: "change" }],
},
airShipmentApprovalInfo: {}
};
},
created() {
......@@ -95,7 +98,7 @@ export default {
oldData = formatDateStr(oldData, ["deliverTime"]);
oldData = formatNumberString(oldData, ["deliverType"]);
this.airShipmentObj = oldData;
console.log(this.airShipmentObj)
this.airShipmentApprovalInfo = this.$attrs.shipmentObj.airShipmentApprovalInfo
},
methods: {
/** 提交 */
......@@ -114,6 +117,21 @@ export default {
}
});
},
/* 取消审核 */
canclAudit() {
console.log(this.shipmentObj)
approvalCancel({
applyReason: this.$t("取消审核"),
id: this.airShipmentApprovalInfo.id,
shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then(() => {
// 触发外层重新查询出货信息
this.cancel("close");
this.$emit("getBoxInfo");
});
});
},
/** 取消 */
cancel(type) {
this.$emit("closeDialog", type);
......
......@@ -64,7 +64,7 @@
<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 :disabled="shipmentObj.approvaling" type="success" @click="onSubmit(2)">{{$t('提交')}}</el-button>
<el-button @click="cancel">{{$t('关闭')}}</el-button>
<el-button :disabled="shipmentObj.ladingBillInfo == null" @click="download">{{$t('下载提单确认件')}}</el-button>
</el-row>
......@@ -134,7 +134,7 @@ export default {
packageUnit: oldData.packageUnit === 0 ? undefined : oldData.packageUnit,
};
if(!this.shipmentObj.ladingBillInfo){
this.$set(this.subMaterialObj,'agentId',this.shipmentObj.agentInfo?.agentId||undefined)
this.$set(this.subMaterialObj,'soNo',this.shipmentObj.bookSeaInfo?.sono||undefined)
this.$set(this.subMaterialObj,'blMblNo',this.shipmentObj.bookSeaInfo?.sono||undefined)
......@@ -192,7 +192,7 @@ export default {
download() {
getBoxLadingBillPdf({shipmentId: this.shipmentObj.id}).then(res=>{
let blob = new Blob([res], {type: "application/vnd.ms-excel"})
FileSaver.saveAs(blob, this.$t('提单确认件.xlsx'));
FileSaver.saveAs(blob, this.$t('提单确认件.xlsx'));
})
}
},
......
......@@ -21,8 +21,8 @@
<el-row style="margin-top: 15px">
<el-row>
<el-button size="small" type="primary" @click="()=>tallyClick('batch')">{{$t('批量理货')}}</el-button>
<el-button size="small" type="primary" @click="()=>removeClick('batch')">{{$t('批量移出')}}</el-button>
<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>
</el-row>
<el-row style="margin-top: 5px">
<el-table border :data="tallyList" @select="checkboxSelect" @select-all="checkboxSelect" max-height="600px">
......@@ -93,8 +93,9 @@
</el-table-column>
<el-table-column :label="$t('操作')" align="center" width="160" class-name="small-padding fixed-width" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small" @click="tallyClick('single',scope.row)">{{$t('理货')}}</el-button>
<el-button type="text" size="small" @click="removeClick('single',scope.row)">{{$t('移出')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" type="text" size="small" @click="tallyClick('single',scope.row)">{{$t('理货')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" type="text" size="small" @click="removeClick('single',scope.row)">{{$t('移出')}}</el-button>
<el-button type="text" size="small" @click="currentTurnExceptionOrder=scope.row">{{$t('转异')}}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -102,7 +103,7 @@
</el-row>
<el-row style="margin-top: 15px" class="operate-button">
<el-button size="small" type="primary" @click="tallyFinish">{{$t('完成理货')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="tallyFinish">{{$t('完成理货')}}</el-button>
<el-button size="small" @click="cancel">{{$t('取消')}}</el-button>
</el-row>
</el-col>
......@@ -112,6 +113,13 @@
<batchTally v-if="dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
</el-dialog>
<warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" />
<exception
v-if="currentTurnExceptionOrder"
:orderNo="currentTurnExceptionOrder.orderNo"
:orderId="currentTurnExceptionOrder.orderId"
append-to-body
@cancel="currentTurnExceptionOrder=null"
@success="currentTurnExceptionOrder=null" />
</div>
</template>
......@@ -121,11 +129,13 @@ import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea";
import { formatDate, serviceMsg } from "../../utils";
import WarehouseDetail from "./warehouseDetail";
import { getOrder } from "@/api/ecw/order";
import Exception from "@/views/ecw/box/components/Exception.vue";
export default {
name: "tally",
inheritAttrs: false,
components: {
Exception,
batchTally,
WarehouseDetail,
},
......@@ -149,6 +159,8 @@ export default {
type: "",
fullscreen: false,
},
// 当前转异订单
currentTurnExceptionOrder: null
};
},
created() {
......@@ -203,6 +215,9 @@ export default {
},
// 理货点击
tallyClick(type, data) {
if(this.shipmentObj.approvaling){
return this.$message.error(this.$t('业务待审核,暂不能操作'))
}
if (type === "batch") {
if (this.selectedRows.length === 0) {
this.$message.error(this.$t("请选择需要理货的订单"));
......
......@@ -67,14 +67,6 @@ export default {
onSubmit(operateType) {
this.$refs["unloadingForm"].validate((valid) => {
if (valid) {
if (operateType === 2) {
const { keyName } = this.$attrs.currNode;
const ulStatus = this.$attrs.shipmentObj[keyName];
if (ulStatus !== 185) {
this.$message.error(this.$t("请先通过卸柜审批"));
return;
}
}
unloadCreate({
...this.unloadingObj,
shipmentId: this.$attrs.shipmentObj.id,
......
......@@ -12,6 +12,12 @@
<p style="color:#D9001B;" v-if="pageData.boxCustomsBackVO&&pageData.boxCustomsBackVO.overMachineStatus==2&&pageData.boxCustomsBackVO.overMachineAbnormalStatus==2&&pageData.boxCustomsBackVO.overWeight>0">
{{$t('过机重量异常')}}:{{$t('超过机场重量')}}{{pageData.boxCustomsBackVO.overWeight}}kg
</p>
<p style="color:#D9001B;" v-if="pageData.boxCustomsBackVO&&pageData.boxCustomsBackVO.overMachineStatus==2&&pageData.boxCustomsBackVO.overMachineAbnormalStatus==2&&pageData.boxCustomsBackVO.weightMisreport==3">
{{$t('过机重量异常')}}: {{$t('过机放行-未找到重货订单')}}
</p>
<p style="color:#D9001B;" v-if="pageData.boxCustomsBackVO&&pageData.boxCustomsBackVO.overMachineStatus==2&&pageData.boxCustomsBackVO.overMachineAbnormalStatus==2&&pageData.boxCustomsBackVO.weightMisreport==4">
{{$t('过机重量异常')}}: {{$t('过机放行-已找到重货订单')}}:{{pageData.boxCustomsBackVO.overOrders}}
</p>
</el-row>
<el-row class="number-area">
<p class="label-font">{{$t('自编号')}}</p>
......
......@@ -162,6 +162,14 @@ export default {
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", this.$t("合包列表"));
break;
// 出货
case "shipment":
if (this.shipmentObj[node.keyName] == 175) {
this.currentComponent = `reviewWidget`;
this.$set(this.dialogConfig, "width", "700px");
this.$set(this.dialogConfig, "title", this.$t("出货反审"));
}
break;
// 清关文件
case "clrDocument":
this.$set(this.dialogConfig, "width", "700px");
......
......@@ -107,14 +107,14 @@ function airBaseData() {
type: "shipment",
dataKey: "4", // 字典数据键值
/**
* 出货状态:171、待出货 172、已出货
* 出货状态:171、待出货 172、出货审核中 173、审核失败 174、审核成功 = 175、已出货
*/
voName: "boxAirShipmentBackVO",
keyName: "airShipmentStatus",
status: {
start: [171],
wait: [],
end: [172],
wait: [172,173],
end: [175],
},
},
{
......@@ -293,7 +293,7 @@ function airBaseData() {
* 卸柜状态:181、未卸柜;182、卸柜中;183、卸柜审核中;184、卸柜审核失败;185、卸柜审核成功;186、已卸柜
*/
voName: "cabinetUnloadInfo",
keyName: "ulStatus",
keyName: "toWarehouseStatus",
status: {
start: [181],
wait: [182, 183, 184, 185],
......
......@@ -9,7 +9,7 @@
<el-descriptions-item :label="$t('出货渠道')">
{{getShipChannelName(boxBackVO.shippingChannelId)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('柜型')">
<el-descriptions-item :label="$t('柜型')" v-if="boxBackVO.transportType != 3">
{{cabinetLabel}}
</el-descriptions-item>
<el-descriptions-item :label="$t('体积/重量')">
......@@ -20,6 +20,30 @@
</el-descriptions-item>
</el-descriptions>
<div class="mt-20" v-if="type === 'shipment'">
<el-descriptions :column="1" v-if="boxAirShipmentBackVO" border :label-style="{width: '200px'}">
<el-descriptions-item :label="$t('出货方式')">
{{deliverType}}
</el-descriptions-item>
<el-descriptions-item :label="$t('送货时间') + '/' + $t('自提时间')">
{{parseTime(boxAirShipmentBackVO.deliverTime)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('送货地址') + '/' + $t('自提地址')">
{{boxAirShipmentBackVO.deliverAddress}}
</el-descriptions-item>
<el-descriptions-item :label="$t('车牌')">
{{boxAirShipmentBackVO.licensePlate}}
</el-descriptions-item>
<el-descriptions-item :label="$t('司机')">
{{boxAirShipmentBackVO.driver}}
</el-descriptions-item>
<el-descriptions-item :label="$t('司机联系方式')">
{{boxAirShipmentBackVO.driverPhone}}
</el-descriptions-item>
</el-descriptions>
<template v-else>暂无出货审核信息</template>
</div>
<el-row style="marginTop:15px">
<el-button type="primary" @click="showOrder">{{$t('订单列表')}}</el-button>
</el-row>
......@@ -103,12 +127,14 @@
</template>
<script>
import { approvalDetail } from "@/api/ecw/box";
import {approvalDetail, getbox} from "@/api/ecw/box";
import { getSeaStatus, getTotlContent } from "./shippingSea/utils";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getChannelList } from "@/api/ecw/channel";
import Decimal from "decimal.js";
import ImagePreview from "@/components/ImagePreview";
import {constantDict} from "@/views/ecw/box/shippingAir/utils";
import {parseTime} from "../../../utils/ruoyi";
/**
* 出货审核详情
......@@ -137,12 +163,15 @@ export default {
visible: false,
},
srcStrs: [],
// 出货审核详情
boxAirShipmentBackVO: null
};
},
created() {
getChannelList().then((res) => (this.channelList = res.data));
},
methods: {
parseTime,
getTotlContent,
/* 获取详情 */
getApprovalDetail(processId) {
......@@ -161,8 +190,20 @@ export default {
? res.data.cabinetUnloadVO.ulImgs.split(",")
: [];
}
// 如果是出货审核则需要调用出货详情获取出货信息
if (this.type === "shipment") {
this.getShipmentDetail();
}
if (this.type === "deleteExit") {
this.getDeleteExit();
}
});
},
getShipmentDetail(){
getbox(this.boxBackVO.id).then(res => {
this.boxAirShipmentBackVO = res.data.boxAirShipmentBackVO
})
},
/* 获取柜型 */
getCabinetLabel(cabinetId) {
getCabinetPage(null).then((response) => {
......@@ -210,6 +251,9 @@ export default {
},
},
computed: {
constantDict() {
return constantDict
},
/* 渠道 */
getShipChannelName() {
return (shippingChannelId) => {
......@@ -232,6 +276,11 @@ export default {
return getSeaStatus(shippingVO) >= 182 ? true : false;
};
},
// 出乎方式
deliverType(){
if(!this.boxAirShipmentBackVO) return ''
return constantDict.deliverType.find(item => item.value == this.boxAirShipmentBackVO.deliverType)?.label
}
},
};
</script>
......
<template>
<div>
<el-select
filterable
:value="value === 0 ? undefined : value"
@change="change"
v-bind="$attrs"
clearable
>
<el-option
v-for="supplier in getSuppliers"
:key="supplier.id"
:label="$t('公司名称:')+$l(supplier, 'company')+$t(',地址:')+supplier.externalBackVO.receiveAddress+$t(',邮箱:')+supplier.externalBackVO.receiveEmail+$t(',品名:')+supplier.externalBackVO.goodName+$t(',From M No:')+supplier.externalBackVO
.fromNo+$t(',BA No:')+supplier.externalBackVO
.baNo"
:value="supplier.id"
></el-option>
</el-select>
<el-select filterable :value="value === 0 ? undefined : value" @change="change" v-bind="$attrs" clearable>
<el-option v-for="supplier in getSuppliers" :key="supplier.id" :label="$t('公司名称:') + $l(supplier, 'company') + $t(',地址:') + supplier.externalBackVO.receiveAddress + $t(',邮箱:') + supplier.externalBackVO.receiveEmail + $t(',品名:') + supplier.externalBackVO.goodName + $t(',From M No:') + supplier.externalBackVO.fromNo + $t(',BA No:') + supplier.externalBackVO.baNo" :value="supplier.id" style="width: 600px">
<el-tooltip class="item" effect="dark" placement="top">
<div slot="content">
<span>{{ $t('公司名称:') + $l(supplier, 'company') + $t(',地址:') + supplier.externalBackVO.receiveAddress + $t(',邮箱:') + supplier.externalBackVO.receiveEmail + $t(',品名:') + supplier.externalBackVO.goodName + $t(',From M No:') + supplier.externalBackVO.fromNo + $t(',BA No:') + supplier.externalBackVO.baNo }}</span>
</div>
<div class="iclass">{{ $t('公司名称:') + $l(supplier, 'company') + $t(',地址:') + supplier.externalBackVO.receiveAddress + $t(',邮箱:') + supplier.externalBackVO.receiveEmail + $t(',品名:') + supplier.externalBackVO.goodName + $t(',From M No:') + supplier.externalBackVO.fromNo + $t(',BA No:') + supplier.externalBackVO.baNo }}</div>
</el-tooltip>
</el-option>
</el-select>
</div>
</template>
<script>
......@@ -25,7 +18,7 @@
* 供应商
*/
export default {
name: "supplierSelect",
name: 'supplierSelect',
props: {
companyType: String,
value: Number,
......@@ -33,38 +26,40 @@ export default {
areaType: {
type: Number,
default: 0
},
}
},
model: {
prop: "value",
event: "change",
prop: 'value',
event: 'change'
},
data() {
return {};
return {}
},
computed: {
getSuppliers() {
let allSupplier = this.allSupplier.filter(
(item) => item.areaType == this.areaType
);
allSupplier.forEach(map=>{
map.externalBackVO.receiveAddress = map.externalBackVO.receiveAddress?map.externalBackVO.receiveAddress: ''
map.externalBackVO.receiveEmail = map.externalBackVO.receiveEmail?map.externalBackVO.receiveEmail:''
map.externalBackVO.goodName = map.externalBackVO.goodName?map.externalBackVO.goodName:''
map.externalBackVO.fromNo = map.externalBackVO.fromNo?map.externalBackVO.fromNo:''
map.externalBackVO.baNo = map.externalBackVO.baNo?map.externalBackVO.baNo:''
let allSupplier = this.allSupplier.filter((item) => item.areaType == this.areaType)
allSupplier.forEach((map) => {
map.externalBackVO.receiveAddress = map.externalBackVO.receiveAddress ? map.externalBackVO.receiveAddress : ''
map.externalBackVO.receiveEmail = map.externalBackVO.receiveEmail ? map.externalBackVO.receiveEmail : ''
map.externalBackVO.goodName = map.externalBackVO.goodName ? map.externalBackVO.goodName : ''
map.externalBackVO.fromNo = map.externalBackVO.fromNo ? map.externalBackVO.fromNo : ''
map.externalBackVO.baNo = map.externalBackVO.baNo ? map.externalBackVO.baNo : ''
})
if(this.areaType == 1 || !this.companyType) return allSupplier;
return allSupplier.filter((item) =>
item.companyTypes.includes(this.companyType)
);
},
if (this.areaType == 1 || !this.companyType) return allSupplier
return allSupplier.filter((item) => item.companyTypes.includes(this.companyType))
}
},
methods: {
change(val) {
this.$emit("change", val);
},
},
};
this.$emit('change', val)
}
}
}
</script>
<style scoped>
.iclass {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
......@@ -56,7 +56,7 @@
<el-descriptions-item :label="$t('付款人姓名')">{{ customer.payerName }}</el-descriptions-item>
<el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证姓名')">{{ customer.carName }}</el-descriptions-item>
<el-descriptions-item v-if="permissions.includes('ecw:customer:query-card')" :label="$t('身份证号码')">{{ customer.carNo }}</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('信用等级')">{{ customer }}</el-descriptions-item>-->
<el-descriptions-item :label="$t('询盘信息')">{{ customer.inquiry }}</el-descriptions-item>
</el-descriptions>
</el-card>
......
......@@ -66,7 +66,7 @@ export default {
}).then(r=>{
if(r.code === 0){
if(r.data){
this.$message.warning(r.data)
this.$message.success(r.data)
this.$emit('update:show',false)
this.$emit('update:customerIds',[])
this. service = '';
......
......@@ -183,7 +183,7 @@
<el-descriptions :column="5" border>
<el-descriptions-item :label="$t('保价费')">
{{list.estCostVO?list.estCostVO.insuranceFee: 0}} {{$t('美元')}}
{{list.estCostVO?list.estCostVO.insuranceFee: 0}} {{ selectedRouter ? currentcyMap[selectedRouter.currencyUnit || 1] : '' }}
</el-descriptions-item>
<el-descriptions-item :label="$t('总运费')">
<template v-if="freightFeeList.length>0" v-for="item in freightFeeList">
......@@ -435,6 +435,11 @@
return this.$l(row, 'prodTitle')
}
},
selectedRouter(){
// otherService 1 送货上门,2非控货订单代收货款
if(!this.list.lineId) return null
return this.routerList.find(item => item.id == this.list.lineId)
},
currentcyMap(){
let map = {}
this.currencyList.forEach(item => {
......@@ -495,32 +500,32 @@
originalFeeList(){
let arr = []
this.clearanceFeeList.forEach(item => {
let it = {...item}
let it = {
src: this.$t('清关费'),
currencyId: item.currencyId,
amount: Decimal(item.amount)
}
let freight = this.freightFeeList.find(fee => fee.currencyId == item.currencyId)
if(freight){
it.amount += freight.amount
it.amount = it.amount.plus(freight.amount)
}
arr.push(it)
})
// 判断是否有运费单位不在清关费里的
this.freightFeeList.forEach(item => {
if(!arr.find(items=>items.currencyId==item.currencyId)){
let its = {...item}
// let freights = this.clearanceFeeList.find(fee => fee.currencyId == item.currencyId)
// if(freights){
// its.amount += freights.amount
// }
arr.push(its)
if(!arr.find(arrItem => arrItem.currencyId == item.currencyId)){
arr.push({
src: this.$t('未计算的运费'),
currencyId: item.currencyId,
amount: Decimal(item.amount)
})
}
})
return arr
},
// 预计费用(原价 - 优惠金额)
estimatedCosts(){
let arr = []
let withInsuranceFee = false
let withOtherFee = false
this.originalFeeList.forEach(item => {
let it = {
currencyId: item.currencyId,
......@@ -530,56 +535,38 @@
if(coupon){
it.amount = it.amount.minus(coupon.reduceAmount)
}
// if(this.list.otherFee && this.list.otherFeeCurrencyId == item.currencyId){
// it.amount = it.amount.plus(this.list.otherFee)
// withOtherFee = true
// }
let otherFee = this.otherFeeList.find(fee => fee.currencyId == item.currencyId)
if(otherFee){
it.amount = it.amount.plus(otherFee.amount || 0)
withOtherFee = true
}
// 保价费(美元)
if(item.currencyId == 1 && this.fee && this.fee.insuranceFee){
it.amount = it.amount.plus(this.fee.insuranceFee)
withInsuranceFee = true
}
arr.push(it)
})
// 累加保价费
const insuranceFeeIndex = arr.findIndex(item => item.currencyId == this.insuranceFeeCurrency)
const insuranceFee = this.list&&this.list.estCostVO&&this.list.estCostVO.insuranceFee
if(insuranceFeeIndex > -1){
arr[insuranceFeeIndex].amount = arr[insuranceFeeIndex].amount.plus(insuranceFee || 0)
}else{
arr.push({
currencyId: this.insuranceFeeCurrency,
amount: Decimal(insuranceFee || 0)
})
}
// 如果没有累加其他费用,则另外增加货币
if(!withOtherFee && this.list.otherFee){
let fee = {
currencyId: this.list.otherFeeCurrencyId,
amount: Decimal(this.list.otherFee)
}
// 如果保价费跟其他费用是同一种货币(都是美元)
if(!withInsuranceFee && this.fee && this.fee.insuranceFee && this.list.otherFeeCurrencyId == 1){
fee.amount = fee.amount.plus(this.fee.insuranceFee)
}
arr.push(fee)
}
// 没有累加保价费(没有美元计价)但是有保价费则需要加上去
if(!withInsuranceFee && this.fee && this.fee.insuranceFee){
// 累加其他费用
const otherFeeIndex = arr.findIndex(item => item.currencyId == this.list.otherFeeCurrencyId)
if(otherFeeIndex > -1){
arr[otherFeeIndex].amount = arr[otherFeeIndex].amount.plus(this.list.otherFee || 0)
}else{
if(this.list.otherFee>0){
arr.push({
currencyId: 1,
amount: Decimal(this.fee.insuranceFee)
currencyId: this.list.otherFeeCurrencyId,
amount: Decimal(this.list.otherFee || 0)
})
}
this.otherFeeList.forEach(item => {
if(!arr.find(items=>items.currencyId==item.currencyId)){
let its = {...item}
// let freights = this.clearanceFeeList.find(fee => fee.currencyId == item.currencyId)
// if(freights){
// its.amount += freights.amount
// }
arr.push(its)
}
})
return arr
}
}
}
return arr
},
// 保价费单位(路线里设置,默认美元)
insuranceFeeCurrency() {
return this.selectedRouter?.currencyUnit || 1;
},
},
created() {
getCurrencyList().then(res => this.currencyList = res.data)
......
......@@ -758,10 +758,12 @@ export default {
if(otherFeeIndex > -1){
arr[otherFeeIndex].amount = arr[otherFeeIndex].amount.plus(this.form.otherFee || 0)
}else{
arr.push({
currencyId: this.form.otherFeeCurrencyId,
amount: Decimal(this.form.otherFee || 0)
})
if(this.form.otherFee>0){
arr.push({
currencyId: this.form.otherFeeCurrencyId,
amount: Decimal(this.form.otherFee || 0)
})
}
}
return arr
......
......@@ -373,8 +373,12 @@
<el-card class="mt-10">
<span slot="header">{{$t('特价折扣')}}</span>
<el-table :data="orderSpecialApplyVOList">
<el-table-column :label="$t('商品类型')" prop="prodType"></el-table-column>
<el-table-column :label="$t('商品名称')" prop="prodTitleEn"></el-table-column>
<el-table-column :label="$t('商品类型')" prop="prodType">
<template slot-scope="{row}">
{{showProductTypeName(row.prodType)}}
</template>
</el-table-column>
<el-table-column :label="$t('商品名称')" prop="prodTitleZh"></el-table-column>
<el-table-column :label="$t('英文名称')" prop="prodTitleEn"></el-table-column>
<!--<el-table-column :label="$t('线路')" width="120" prop="line">
......@@ -420,6 +424,7 @@ import Price from "@/views/ecw/order/components/price.vue";
import {parseTime} from "@/utils/ruoyi";
import Decimal from "decimal.js";
import {createElementVNode} from "@vue/runtime-dom";
import {getProductTypeList} from "@/api/ecw/productType";
export default {
props:{
orderId: [Number, String],
......@@ -437,7 +442,9 @@ export default {
// 订单费用汇总
orderSummary: null,
// 订单费用明细汇总
orderDetailSummary: null
orderDetailSummary: null,
// 商品类型
productTypeList: []
}
},
computed:{
......@@ -467,8 +474,25 @@ export default {
// 特价折扣
orderSpecialApplyVOList(){
return this.orderDetailSummary?.orderSpecialApplyVOList || []
},
// 根据商品类型ID返回名称
showProductTypeName(){
return id => {
if(!this.productTypeList.length) return '-'
const item = this.productTypeList.find(item => item.id === id)
return this.$l(item, 'title')
}
}
},
watch:{
orderSpecialApplyVOList(list){
if(list.length && !this.productTypeList.length){
getProductTypeList().then(res => {
this.productTypeList = res.data
})
}
}
},
mounted() {
this.getOrderSummary()
this.getOrderDetailSummary()
......
......@@ -495,7 +495,7 @@
</div>
<div v-if="[2,3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('清关证书')">
<dict-selector v-model="form.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" defaultable :disabled="false" />
<dict-selector v-model="form.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" :defaultable="!editMode" :disabled="false" />
</el-form-item>
<el-form-item :label="$t('清关证书备注')" >
<el-input v-model="form.customsClearCertRemarks" :disabled="false"></el-input>
......@@ -503,12 +503,12 @@
</div>
<div v-if="[3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('是否拆包')">
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" defaultable :disabled="false" />
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" :defaultable="!editMode" :disabled="false" />
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('单票立刻转运')" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" defaultable :disabled="false" />
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" :defaultable="!editMode" :disabled="false" />
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span>
</el-form-item>
</div>
......@@ -524,7 +524,7 @@
<el-card class="mt-10" v-if="showWorkFlow">
<div class="card-title" slot="header">{{$t('审批流程')}}</div>
<work-flow xmlkey="order_modify" v-model="ccIdArr" />
<work-flow :xmlkey="updateChannel ? 'shipment_channel_change' : 'order_modify'" v-model="ccIdArr" />
</el-card>
<div style="margin: 30px 0; display: flex">
......@@ -870,7 +870,7 @@ export default {
// 空运
if(!this.initing && (this.form.transportId == 4 || this.form.transportId == 3)){
this.$nextTick(() => {
connsole.log('切换空运,修改默认值')
console.log('切换空运,修改默认值')
this.$set(this, 'form', Object.assign(this.form, {
doubleClear: 2,
customsClearCert: false,
......@@ -1068,6 +1068,12 @@ export default {
this.getOfferData()
/* this.form.orderItemVOList = []; */
console.log({...this.form}, {
customsClearCert: this.form.customsClearCert,
isUnpack: this.form.isUnpack,
isSingleTicketTransport: this.form.isSingleTicketTransport,
})
this.form.type = this.form.type ? this.form.type.split(',').filter(item => item != '') : []
this.form.packageTypeArr = this.form.packageType ? this.form.packageType.split(',').filter(item => item != '') : []
if(res.data.consignorVO){
......
......@@ -108,13 +108,6 @@
<el-option :label="$t('自有仓')" :value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('品名')+':'">
<div style="display: flex;width: 100%;">
<dict-selector :type="DICT_TYPE.EXCEPTION_SELECT_FILED" style="width: 90px;" v-model="queryParams.goodsNameKey" />
<product-selector v-model="queryParams.goodsName" style="flex:1;" :clearable="true" @keyup.enter.native="handleQuery" />
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="">
......@@ -189,17 +182,17 @@
</el-table-column>
<el-table-column :label="$t('体积/重量')" align="center">
<template slot-scope="scope">
<div v-if="scope.row.orderExceptionType!='order_heavy_cargo_exception'&&scope.row.orderExceptionType!='order_bulky_cargo_exception'">
<div v-if="scope.row.orderType==1">
<span v-if="scope.row.orderStatus >= 5 ">{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
<span v-else>{{scope.row.totalVolume+"m³/"+scope.row.totalWeight+"kg"}}</span>
</div>
<el-tooltip v-if="scope.row.orderExceptionType=='order_heavy_cargo_exception'" class="item" effect="dark" :content="(scope.row.wvolume||0)+'m³'" placement="bottom">
<span style="color:#ff4949" v-if="scope.row.orderStatus >= 5 ">{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
<span style="color:#ff4949" v-else>{{scope.row.totalVolume+"m³/"+scope.row.totalWeight+"kg"}}</span>
<el-tooltip v-else-if="scope.row.orderType==2" class="item" effect="dark" :content="(scope.row.wvolume||0)+'m³'" placement="bottom">
<span class="red" v-if="scope.row.orderStatus >= 5 ">{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
<span class="red" v-else>{{scope.row.totalVolume+"m³/"+scope.row.totalWeight+"kg"}}</span>
</el-tooltip>
<el-tooltip v-if="scope.row.orderExceptionType=='order_bulky_cargo_exception'" class="item" effect="dark" :content="(scope.row.vweight||0)+'kg'" placement="bottom">
<span style="color:#ff4949" v-if="scope.row.orderStatus >= 5 ">{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
<span style="color:#ff4949" v-else>{{scope.row.totalVolume+"m³/"+scope.row.totalWeight+"kg"}}</span>
<el-tooltip v-else-if="scope.row.orderType==3" class="item" effect="dark" :content="(scope.row.vweight||0)+'kg'" placement="bottom">
<span class="red" v-if="scope.row.orderStatus >= 5 ">{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
<span class="red" v-else>{{scope.row.totalVolume+"m³/"+scope.row.totalWeight+"kg"}}</span>
</el-tooltip>
</template>
</el-table-column>
......@@ -261,6 +254,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='in_warehousing_diff_exception'" v-hasPermi="['ecw:exception:inWarehousingException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='stock_up_exception'" v-hasPermi="['ecw:exception:stockUpException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='channel_exception'" v-hasPermi="['ecw:exception:channelException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='channel_packaging_overweight_exception'" v-hasPermi="['ecw:exception:channelPackagingException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row.orderId)">{{$t('处理')}}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -301,9 +295,9 @@ export default {
queryParams: {
page: 1,
rows: 10,
orderNoKey:'eq',
marksKey:'eq',
goodsNameKey:'eq'
orderNoKey:'in',
marksKey:'in',
goodsNameKey:'in'
},
tradeCityList:[],
warehouseList:[],
......@@ -363,9 +357,9 @@ export default {
this.queryParams = {
page: 1,
rows: 10,
orderNoKey:'eq',
marksKey:'eq',
goodsNameKey:'eq'
orderNoKey:'in',
marksKey:'in',
goodsNameKey:'in'
}
this.getList()
},
......@@ -409,19 +403,9 @@ export default {
return tag
},
exportSearch(){
this.exportExcel(exportExcel, this.queryParams, this.$t('异常订单'))
},
// 通用导出函数
exportExcel(func, params, fileName = null){
this.exportLoading = true;
func(params).then(res => {
if(!fileName){
fileName = this.$t('订单')
}
this.$download.excel(res, fileName + '.xls');
}).finally(() => {
this.exportLoading = false
})
exportExcel(this.queryParams).then(res => {
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
})
},
}
}
......@@ -437,4 +421,7 @@ export default {
display:flex;
align-items: center;
}
.red{
color:#ff4949;
}
</style>
......@@ -55,10 +55,10 @@
</el-table-column>
<el-table-column :label="$t('操作')">
<template v-slot:default = 'scope'>
<!--<el-button type="text" v-if="scope.row.status !== 0&&scope.row.status !== 1">{{STATUS[scope.row.status]}}</el-button>
<el-button type="text" v-if="scope.row.status == 1" @click="examineFn">{{$t('审核中')}}</el-button>
<el-button type="text" v-if="scope.row.status !== 0&&scope.row.status !== 1">{{STATUS[scope.row.status]}}</el-button>
<!--el-button type="text" v-if="scope.row.status == 1" @click="examineFn">{{$t('审核中')}}</el-button>
<el-button type="text" v-if="scope.row.status === 2" @click="modify(scope.row)">{{$t('修改')}}</el-button>-->
<el-button type="text" :disabled="!!scope.row.status" @click="del(scope.$index)">删除</el-button>
<el-button type="text" v-if="scope.row.status === 0" @click="del(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -66,7 +66,7 @@
<work-flow xmlkey="free_apply" v-model="selectedUsers" />
</div>
<div style="text-align: center;margin-top: 20px;">
<el-button type="primary" v-if="!processInstanceId" style="margin-right: 30px;" @click="submit">{{$t('提交')}}</el-button>
<el-button type="primary" v-if="!processInstanceId" style="margin-right: 30px;" :disabled="!feeList.length" @click="submit">{{$t('提交')}}</el-button>
<el-button type="primary" v-if="processInstanceId" style="margin-right: 30px;" @click="goProcessDetail">{{$t('审核中')}}</el-button>
<el-button type="primary" v-if="processInstanceId" style="margin-right: 30px;" @click="cancel">{{$t('取消审核')}}</el-button>
<el-button @click="$emit('update:dialogVisible',false)">{{$t('返回')}}</el-button>
......@@ -117,6 +117,11 @@ export default {
selectedUsers:[]
}
},
computed:{
feeList(){
return this.list.filter(item => item.status === 0)
}
},
created() {
this.getDictDatas(this.DICT_TYPE.AUDIT_STATUS).forEach( e =>{
this.STATUS[e.value] = e.label
......@@ -135,9 +140,9 @@ export default {
getFeeApplicationApproveByOrderId(this.orderId).then(res => {
if(res.data.formId){
this.processInstanceId = res.data.formId
getBatchFeeByBusinessId(res.data.orderApprovalId).then(res => {
/*getBatchFeeByBusinessId(res.data.orderApprovalId).then(res => {
this.list = res.data
})
})*/
}
})
},
......@@ -160,8 +165,15 @@ export default {
})
},
submit(){
// 判断费用申请是否有未填项
const errList = this.feeList.filter(item => {
return !item['feeType'] || !item['applicationFee'] || !item['applicationFeeCurrency'] || !item['payType']
})
if(errList.length){
return this.$message.error('请填写完整费用申请信息')
}
feeApplicationCreateBatch( {
orderFeeApplicationCreateReqVOList: this.list.filter(item => !item.status),
orderFeeApplicationCreateReqVOList: this.feeList,
copyUserId:this.selectedUsers,
orderId: this.orderId
}).then(r=>{
......
......@@ -267,7 +267,10 @@
<el-dropdown-menu slot="dropdown">
<!-- 编辑 -->
<template v-if="
( scope.row.status < 12 || (scope.row.status == 12 && scope.row.shipmentState == 314) ) && !scope.row.abnormalState && exclude(scope.row.inWarehouseState, [204,205,206])
( scope.row.status < 12 || (scope.row.status == 12 && scope.row.shipmentState == 314) ) &&
!scope.row.abnormalState &&
exclude(scope.row.inWarehouseState, [204,205,206]) &&
exclude(scope.row.shipmentState, [307, 407])
">
<el-dropdown-item @click.native="handleUpdate(scope.row)" v-hasPermi="['ecw:order:edit']" >{{$t('编辑')}}</el-dropdown-item>
</template>
......
......@@ -173,6 +173,7 @@
<el-button v-else-if="scope.row.orderExceptionType=='in_warehousing_diff_exception'" v-hasPermi="['ecw:exception:inWarehousingException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='stock_up_exception'" v-hasPermi="['ecw:exception:stockUpException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='channel_exception'" v-hasPermi="['ecw:exception:channelException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
<el-button v-else-if="scope.row.orderExceptionType=='channel_packaging_overweight_exception'" v-hasPermi="['ecw:exception:channelPackagingException']" size="mini" type="text" icon="el-icon-edit" @click="handEdit(scope.row)">{{$t('处理')}}</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -14,7 +14,7 @@
</el-form-item>
</el-row>
<div v-if="shopData&&['goods_add_exception','line_loop_exception','overweight_exception','stock_up_exception','in_warehousing_diff_exception','channel_exception','not_shipping_channel_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<div v-if="shopData&&['goods_add_exception','line_loop_exception','overweight_exception','stock_up_exception','in_warehousing_diff_exception','channel_exception','not_shipping_channel_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<el-row>
<el-form-item :label="$t('产品名称')+':'" >
{{shopData.prodTitleZh || ''}}
......@@ -33,7 +33,12 @@
{{orderData?getRouterNameById():''}}
</el-form-item>
</el-row>
<el-row :span="12" v-if="orderExceptionData.orderExceptionType=='overweight_exception'">
<el-row>
<el-form-item :label="$t('异常类型')+':'" v-if="orderExceptionData.orderExceptionType=='overweight_exception'||orderExceptionData.orderExceptionType=='channel_packaging_overweight_exception'">
<dict-tag :type="DICT_TYPE.ORDER_ERROR_TYPE" :value="orderExceptionData.orderExceptionType" />
</el-form-item>
</el-row>
<el-row :span="12" v-if="orderExceptionData.orderExceptionType=='overweight_exception'||orderExceptionData.orderExceptionType=='channel_packaging_overweight_exception'">
<el-form-item :label="$t('异常描述')+':'">
<!-- <dict-tag :type="DICT_TYPE.ORDER_ERROR_TYPE" :value="orderExceptionData.orderExceptionType" /> -->
<!-- {{orderExceptionData.orderExceptionDescVO?orderExceptionData.orderExceptionDescVO.descZh:''}} -->
......@@ -41,7 +46,7 @@
</el-form-item>
</el-row>
<!-- 单证异常,发货人异常,其他异常 不显示这部分内容 -->
<div v-if="['order_doc_exception','order_consignor_exception', 'order_other_exception','overweight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<div v-if="['order_doc_exception','order_consignor_exception', 'order_other_exception','overweight_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) == -1">
<!-- 预付异常,提货异常,代收货款是针对整个订单的 -->
<template v-if="['order_pay_exception','order_pick_up_exception', 'order_cod_exception','not_customer_service_exception'].indexOf(orderExceptionData.orderExceptionType) > -1">
<el-row>
......@@ -174,7 +179,7 @@
</el-table>
<!-- 单证异常,发货人异常,其他异常的表格 -->
<el-table v-if="['order_doc_exception', 'order_consignor_exception', 'order_other_exception','fee_exception','overweight_exception'].indexOf(orderExceptionData.orderExceptionType) > -1" v-loading="loading" border :data="orderData.orderItemVOList">
<el-table v-if="['order_doc_exception', 'order_consignor_exception', 'order_other_exception','fee_exception','overweight_exception','channel_packaging_overweight_exception'].indexOf(orderExceptionData.orderExceptionType) > -1" v-loading="loading" border :data="orderData.orderItemVOList">
<el-table-column :label="$t('序号')" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
......@@ -886,7 +891,6 @@
changeLined(e){
this.selectLine = this.routerList.find(item => item.id == this.handlerParams.lineId)
},
// getDictData,
getDictData,
onTableMounted(e){
// console.warn('onTableMounted', e)
......
......@@ -84,7 +84,7 @@
<template v-slot:header>
<span style="color: red">*</span>{{ $t('箱数') }}</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.cartonsNum">
<el-form-item :rules="tableFormRules.cartonsNum" :prop="`table.${$index}.cartonsNum`">
<el-input v-model="form.table[$index].cartonsNum" placeholder="" @blur="handleVolume($index)" :disabled="$index < protectRowCount">
<span slot="append">{{ getDictDataLabel(DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE, form.table[$index].specificationType) }}</span>
</el-input>
......@@ -106,7 +106,7 @@
<span>{{ $t('') }}</span>(cm)
</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge1">
<el-form-item :rules="tableFormRules.boxGauge1" :prop="`table.${$index}.boxGauge1`">
<el-input :disabled="$index < protectRowCount" type="number" v-model="form.table[$index].boxGauge1" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item>
</template>
......@@ -116,7 +116,7 @@
<span>{{ $t('') }}</span>(cm)
</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge2">
<el-form-item :rules="tableFormRules.boxGauge2" :prop="`table.${$index}.boxGauge2`">
<el-input :disabled="$index < protectRowCount" type="number" v-model="form.table[$index].boxGauge2" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item>
</template>
......@@ -126,7 +126,7 @@
<span>{{ $t('') }}</span>(cm)
</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge3">
<el-form-item :rules="tableFormRules.boxGauge3" :prop="`table.${$index}.boxGauge3`">
<el-input :disabled="$index < protectRowCount" type="number" v-model="form.table[$index].boxGauge3" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item>
</template>
......@@ -136,7 +136,7 @@
<span style="color: red">*</span> <span>{{ $t('体积') }}</span>(m³)
</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.volume">
<el-form-item :rules="tableFormRules.volume" :prop="`table.${$index}.volume`">
<el-input :disabled="$index < protectRowCount" v-model="form.table[$index].volume" placeholder="" type="number"></el-input>
</el-form-item>
</template>
......@@ -146,7 +146,7 @@
<span style="color: red">*</span> <span>{{ $t('重量') }}</span>(Kg)
</template>
<template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.weight">
<el-form-item :rules="tableFormRules.weight" :prop="`table.${$index}.weight`">
<el-input :disabled="$index < protectRowCount" v-model="form.table[$index].weight" placeholder="" type="number"></el-input>
</el-form-item>
</template>
......@@ -376,13 +376,13 @@ export default {
brand: [{required: true, message: this.$t("请选择品牌"), trigger: "change"}],
},
tableFormRules: {
// cartonsNum: [{required: true, message: this.$t("箱数不能为空"), trigger: "change"}],
// boxGauge1: [{required: true, message: this.$t("货物长不能为空"), trigger: "change"}],
// boxGauge2: [{required: true, message: this.$t("货物宽不能为空"), trigger: "change"}],
// boxGauge3: [{required: true, message: this.$t("货物高不能为空"), trigger: "change"}],
// volume: [{required: true, message: this.$t("体积不能为空"), trigger: "change"}],
// weight: [{required: true, message: this.$t("重量不能为空"), trigger: "change"}],
// // quantityAll: [{required: true, message: this.$t("数量不能为空"), trigger: "change"}]
cartonsNum: [{required: true, message: this.$t("箱数不能为空"), trigger: "change"}],
boxGauge1: [{required: true, message: this.$t("货物长不能为空"), trigger: "change"}],
boxGauge2: [{required: true, message: this.$t("货物宽不能为空"), trigger: "change"}],
boxGauge3: [{required: true, message: this.$t("货物高不能为空"), trigger: "change"}],
volume: [{required: true, message: this.$t("体积不能为空"), trigger: "change"}],
weight: [{required: true, message: this.$t("重量不能为空"), trigger: "change"}],
// quantityAll: [{required: true, message: this.$t("数量不能为空"), trigger: "change"}]
},
......@@ -492,31 +492,30 @@ export default {
type: 'warning'
})
}
this.$refs['form'].validate(valid => {
this.$refs['tableForm'].validate(valid1 => {
if (!valid || !valid1) {
return
}
// 首次入仓、入仓补充
return finishPacked({
brand: this.form.brand,
orderId: this.warehousing.orderId,
orderItemId: this.warehousing.orderItemId,
orderWarehouseInItemDtoList: this.form.table.map(e => {
return {
...e,
boxGauge: e.boxGauge1 + '*' + e.boxGauge2 + '*' + e.boxGauge3,
orderLocationCreateReqVOList: e.orderLocationBackVOList
}
}),
}).then(r => {
if (r.data) {
this.$message.success('打包成功')
this.handleClose()
} else {
this.$message.success('打包失败')
this.$refs['tableForm'].validate(valid1 => {
console.log("表单校验", valid1)
if (!valid1) {
return
}
// 首次入仓、入仓补充
return finishPacked({
brand: this.form.brand,
orderId: this.warehousing.orderId,
orderItemId: this.warehousing.orderItemId,
orderWarehouseInItemDtoList: this.form.table.map(e => {
return {
...e,
boxGauge: e.boxGauge1 + '*' + e.boxGauge2 + '*' + e.boxGauge3,
orderLocationCreateReqVOList: e.orderLocationBackVOList
}
})
}),
}).then(r => {
if (r.data) {
this.$message.success('打包成功')
this.handleClose()
} else {
this.$message.success('打包失败')
}
})
})
},
......
......@@ -306,7 +306,7 @@
{{ form1.table[$index].cartonsNum }}
{{ getDictDataLabel(DICT_TYPE.ECW_PACKAGING_TYPE, form1.table[$index].unit) }}
</span>
<el-input v-else v-model="form1.table[$index].cartonsNum" placeholder="">
<el-input v-else v-model="form1.table[$index].cartonsNum" placeholder="" @blur="handleVolume($index, 1)">
<span slot="append">{{ getDictDataLabel(DICT_TYPE.ECW_PACKAGING_TYPE, form1.table[$index].unit) }}</span>
</el-input>
<dict-selector :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE" v-model="form1.table[$index].specificationType" @change="handleVolume($index, 1)"></dict-selector>
......@@ -743,10 +743,15 @@ export default {
this.form.orderId = this.warehousing.orderId
this.form.orderItemId = this.warehousing.orderItemId
this.form.orderNo = this.warehousing.orderNo
this.form.warehouseInProdAttrIds =
this.warehousing.warehouseInProdAttrIds?.split(',').map(e => +e)
|| this.warehousing.prodAttrIds?.split(',').map(e => +e)
|| []
if (this.edit || this.isAdd) {
this.form.warehouseInProdAttrIds = this.warehousing.warehouseInProdAttrIds?.split(',').map(e => +e) || []
} else {
this.form.warehouseInProdAttrIds =
this.warehousing.warehouseInProdAttrIds?.split(',').map(e => +e)
|| this.warehousing.prodAttrIds?.split(',').map(e => +e)
|| []
}
this.form.prodId = this.warehousing.prodId
this.form.prodTitleEn = this.warehousing.prodTitleEn
this.form.prodTitleZh = this.warehousing.prodTitleZh
......
......@@ -4,6 +4,9 @@
<el-card>
<div slot="header" class="card-title">{{$t('查看')}}</div>
<el-descriptions :column="4">
<el-descriptions-item :label="$t('订单号')">
{{orderData.orderNo||''}}
</el-descriptions-item>
<el-descriptions-item :label="$t('唛头')">
{{orderData.marks?orderData.marks:$t('')}}
</el-descriptions-item>
......@@ -16,8 +19,9 @@
<el-descriptions-item :label="$t('送货日期')">
<span>{{orderData.deliveryDate||$t('')}}</span>
</el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<el-descriptions-item :label="$t('运输方式')" :span="2">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="orderData.transportId" />
<span v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, orderData.transportId).cssClass == 'channel'" style="margin-left:10px">{{$t('出货渠道')}}:{{orderData.channelName}}</span>
</el-descriptions-item>
<el-descriptions-item :label="$t('始发地')" :span="2">
{{orderData.logisticsInfoDto?orderData.logisticsInfoDto.startTitleZh:$t('')}}
......@@ -117,7 +121,9 @@
{{parseTime(handlerParams.handlerTime)}}
</el-descriptions-item>
<el-descriptions-item :label="$t('处理结果')">
{{handlerParams.handlerResult=='general_cargo'?$t('设为普货'):$t('设为已处理')}}
<span v-if="handlerParams.handlerResult=='general_cargo'">{{$t('设为普货')}}</span>
<span v-else-if="handlerParams.handlerResult=='process'">{{$t('设为已处理')}}</span>
<span v-else>{{$t('设为半抛')}}</span>
</el-descriptions-item>
<el-descriptions-item :label="$t('备注')">
{{handlerParams.handlerRemark||"无"}}
......@@ -128,6 +134,7 @@
<div v-if="list.orderExceptionStatus!=2">
<el-button type="primary" @click="submit('general_cargo')">{{$t('设为普货')}}</el-button>
<el-button plain type="primary" @click="submit('process')">{{$t('设为已处理')}}</el-button>
<el-button v-if="type!='order_heavy_cargo_exception'" plain type="primary" @click="submit('half_throw')">{{$t('设为半抛')}}</el-button>
</div>
<div v-else>
<el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button>
......@@ -147,6 +154,7 @@ import {getExceptionById,handlerExceptionByExceptionId,getOrderExcptionResult} f
import {DICT_TYPE} from '@/utils/dict'
import {getOrder} from '@/api/ecw/order'
import {getProductBrankPage} from '@/api/ecw/productBrank'
import {getDictData, getDictDatas} from '@/utils/dict'
export default {
name: "WeightDeal",
......@@ -179,6 +187,11 @@ export default {
this.branklist=data.data.list
})
},
computed:{
getDictData(){
return (type, value) => getDictData(type, value) || {}
},
},
methods: {
/** 查询列表 */
getList() {
......
......@@ -177,7 +177,7 @@
</el-form-item>
</template>
<el-form-item :label="$t('是否询')" prop="inquiry">
<el-form-item :label="$t('是否询')" prop="inquiry">
<dict-selector :type="DICT_TYPE.NEED_ORDER_INQUIRY" v-model="form.needOrderInquiry" form-type="radio"></dict-selector>
</el-form-item>
</el-card>
......@@ -321,8 +321,6 @@ export default {
this.$set(this.form, 'stepPrice', 1)
}
})
},
methods: {
// 获取模板数据(复制的源路线价格信息)
......@@ -351,11 +349,13 @@ export default {
stepPrice,
specialList,
priceStepList,
minWeight,
minWeightUnit
minWeight,
minWeightUnit,
needOrderInquiry,
needBook
} = res.data
this.$set(this, 'form', Object.assign({}, this.form, {
const data = {
allPrice,
allPriceUnit,
allVolumeUnit,
......@@ -370,8 +370,16 @@ export default {
specialList,
priceStepList,
minWeight,
minWeightUnit
}))
minWeightUnit,
needOrderInquiry,
needBook
}
// 海运需要填充货柜位置和订单方数上限
if(this.type == 'sea'){
data.containerLocation = res.data.containerLocation
data.square = res.data.square
}
this.$set(this, 'form', Object.assign({}, this.form, data))
// 产品选择器默认选择的商品
getProduct(res.data.productId).then(res => {
......
......@@ -876,7 +876,8 @@ export default {
// 复制模板
copyTemplate(row){
// 跳转到批量设置页面,并填充数据
this.$router.push(`../../lineProject/batch-edit-${row.transportType == 3 || row.transportType == 4 ? 'air' : 'sea'}?templateId=${row.id}`)
let transportType = row.warehouseLineDO.transportType
this.$router.push(`../../lineProject/batch-edit-${transportType == 3 || transportType == 4 ? 'air' : 'sea'}?templateId=${row.id}`)
},
// 关闭更多阶梯价格窗口
closeMoreStepPrice(){
......
......@@ -325,10 +325,13 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('保费币种')">
<el-select v-model="lineform.currencyUnit">
<el-select @change="modifyAmountUnit" v-model="lineform.currencyUnit">
<el-option v-for="(item) in currencyList" :disabled="item.status === 1" :label="$l(item, 'title')" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('最小保价费金额')" >
<el-input-number :controls="false" v-model="lineform.minPrice" > </el-input-number>
</el-form-item>
<el-form-item :label="$t('是否支持控货')">
<el-radio-group v-model="lineform.controlStatus">
<el-radio :label="0">支持</el-radio>
......@@ -554,8 +557,7 @@ export default {
// 表单参数
form: {checkList:[],},
ladingform: {prefixCounter:null,titleZh:null,contentZh:null,account:null,acctArr:[]},
lineform: {otherService:[],isClientShow:1,makeBillNode:'2'},
lineform: {otherService:[],isClientShow:1,makeBillNode:'2',controlStatus:'0',currencyUnit:1},
lineform: {otherService:[],isClientShow:1,makeBillNode:'2',controlStatus:'0',currencyUnit:1,minPrice:0},
startName:'',
destName:'',
......@@ -590,17 +592,17 @@ export default {
},
computed: {
checkedFn(){
return (val)=>{
return (Array.isArray(this.lineform.otherService) ? this.lineform.otherService : []).includes(val)
}
},
DICT_TYPE() {
return DICT_TYPE
},
getDictDataL() {
return getDictDataL
},
checkedFn(){
return (val)=>{
return (Array.isArray(this.lineform.otherService) ? this.lineform.otherService : []).includes(val)
}
},
isShowError() {
return (item) => {
if(item.id !== '5' && item.id !== '10') return true;
......@@ -698,6 +700,17 @@ export default {
},
methods: {
getDictDataLabel,
modifyAmountUnit(val){
if(val === 6){
this.lineform.minPrice = 900
} else if(val === 3){
this.lineform.minPrice = 10
}
else {
this.lineform.minPrice = 2
}
},
changeOtherService(val){
if(val === '2' && !( Array.isArray(this.lineform.otherService) ? this.lineform.otherService :[]).includes('10')){
this.lineform.otherService.push('10');
......@@ -884,6 +897,20 @@ export default {
this.lineform.makeBillNode = row.makeBillNode;
this.lineform.currencyUnit = row.currencyUnit ? row.currencyUnit : 1
this.lineform.controlStatus = row.controlStatus ? row.controlStatus : 0
this.lineform.minPrice = row.minPrice ? row.minPrice : 0
if(row.minPrice){
this.lineform.minPrice = row.minPrice;
}else {
if(this.lineform.currencyUnit === 6){
this.lineform.minPrice = 900
} else if(this.lineform.currencyUnit === 3 ){
this.lineform.minPrice = 10
} else {
this.lineform.minPrice = 2
}
}
console.log(row,'row')
},
......@@ -899,7 +926,8 @@ export default {
isClientShow:this.lineform.isClientShow,
makeBillNode:this.lineform.makeBillNode,
controlStatus:this.lineform.controlStatus,
currencyUnit:this.lineform.currencyUnit
currencyUnit:this.lineform.currencyUnit,
minPrice:this.lineform.minPrice
}).then(res => {
this.$modal.msgSuccess(this.$t("操作成功"));
this.getRouteList()
......
......@@ -42,7 +42,11 @@
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope" >
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleDownload(scope.row)"
v-hasPermi="['system:notice:update']">{{$t('下载')}}</el-button>
v-hasPermi="['system:notice:update']" v-if="scope.row.status == 2">{{$t('下载')}}</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleRetry(scope.row)"
v-hasPermi="['system:notice:update']" v-if="scope.row.status == 3">{{$t('重试')}}</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleDel(scope.row)"
v-hasPermi="['system:notice:update']">{{$t('删除')}}</el-button>
</template>
</el-table-column>
</el-table>
......@@ -54,13 +58,11 @@
</template>
<script>
import {download, downloadFileArrayBuffer, downloadFileResponse, downloadPage} from "@/api/system/download";
import {deleteLog, download, downloadFileResponse, downloadPage, retry} from "@/api/system/download";
import {parseTime} from "../../../utils/ruoyi";
import Template from "@/views/cms/template/index.vue";
export default {
name: "Download",
components: {Template},
data() {
return {
// 遮罩层
......@@ -103,7 +105,18 @@ export default {
this.loading = false;
})
},
handleRetry(row){
retry(row.id).then(res => {
this.$message.success('重试已提交')
this.getList()
})
},
handleDel(row){
deleteLog(row.id).then(res => {
this.$message.success('删除成功')
this.getList()
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.page = 1;
......
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