Commit e1275214 authored by 我在何方's avatar 我在何方
parents bd956fd8 b212e0fe
......@@ -255,3 +255,22 @@ export function getMergeTagById(id) {
/***************************** 合包 end **********************************/
/***************************** 起运 start *******************************/
export function takeoffCreate(data) {
if (data.id) {
return request({
url: "/ecw/box-air-fly/update",
method: "put",
data,
});
}
return request({
url: "/ecw/box-air-fly/create",
method: "post",
data,
});
}
/***************************** 起运 end *******************************/
......@@ -224,6 +224,7 @@ export const DICT_TYPE = {
BOX_ARRIVAL_ERROR_TYPE: "arrival_error_type",// 到港异常状态
APP_TYPE:"app_type", //系统类型
AIR_SHIPMENT_PROCESS:'air_shipment_process'
}
/**
......
......@@ -10,6 +10,7 @@ export function checkPermi(value) {
const permissions = store.getters && store.getters.permissions
const permissionDatas = value
const all_permission = "*:*:*";
console.log(permissionDatas)
const hasPermission = permissions.some(permission => {
return all_permission === permission || permissionDatas.includes(permission)
......
<template>
<div>
<el-form ref="arrivalForm" :rules="rules" :model="arrivalObj" label-width="120px">
<el-form-item :label="$t('预计到港时间')">{{getExpectedTime()}}</el-form-item>
<el-form ref="arrivalForm" :rules="rules" :model="airArrivalInfo" label-width="120px">
<!-- <el-form-item :label="$t('预计到港时间')">{{getExpectedTime()}}</el-form-item>
<el-form-item :label="$t('实际到港时间')" prop="apRealTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="arrivalObj.apRealTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
......@@ -9,10 +9,19 @@
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="arrivalObj.apConfirmTime" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
<p class="message-area" v-show="showMsg">{{$t('请确认是否有异常,如有异常请进行异常登记')}}</p>
</el-form-item> -->
<el-form-item :label="$t('实际二程起飞时间')" prop="actSecondTime" v-show="this.$attrs.shipmentObj.bookAirInfo.voyage">
<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-form-item>
<el-form-item :label="$t('卸港时间')">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="arrivalObj.apUnloadPortTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<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-form-item>
</el-form>
<el-row class="operate-button">
......@@ -32,7 +41,7 @@
<script>
import regError from "../../regError";
import dayjs from "dayjs";
import { arrivalCreate } from "@/api/ecw/boxSea";
import { arrivalCreate } from "@/api/ecw/boxSeaAir";
import { formatDateStr, serviceMsg } from "../utils";
/**
......@@ -47,12 +56,15 @@ export default {
data() {
return {
// 到港对象
arrivalObj: {},
airArrivalInfo: {},
// 校验
rules: {
apRealTime: [
actSecondTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
],
actTime: [
{ required: true, message: this.$t("必填"), trigger: "change" },
]
},
// 弹窗配置
dialogVisible: false,
......@@ -68,16 +80,23 @@ export default {
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(
oldData,
["apRealTime", "apConfirmTime"],
["actSecondTime", "estTime", "actTime"],
"YYYY-MM-DD HH:mm:ss"
);
oldData = formatDateStr(oldData, ["apUnloadPortTime"]);
this.arrivalObj = oldData;
this.airArrivalInfo = oldData;
},
watch: {
// 确认到港时间
"arrivalObj.apConfirmTime"(val) {
this.compareDate(this.getExpectedTime(), val);
// 实际二程起飞时间
"airArrivalInfo.actSecondTime"(val) {
this.compareDate(this.getHeadTravelTime(), val);
},
"airArrivalInfo.estTime"(val) {
this.compareDate(this.airArrivalInfo.actTime, val);
},
"airArrivalInfo.actTime"(val) {
this.compareDate(this.airArrivalInfo.estTime, val);
},
},
methods: {
......@@ -88,10 +107,10 @@ export default {
}
},
// 获取预计到港时间
getExpectedTime() {
getHeadTravelTime() {
const { shippingInfo } = this.$attrs.shipmentObj;
if (shippingInfo) {
return dayjs(shippingInfo.dtEstArrivalTime).format(
return dayjs(shippingInfo.realHeadTravelTime).format(
"YYYY-MM-DD HH:mm:ss"
);
}
......@@ -120,7 +139,7 @@ export default {
this.$refs["arrivalForm"].validate((valid) => {
if (valid) {
arrivalCreate({
...this.arrivalObj,
...this.airArrivalInfo,
shipmentId: this.$attrs.shipmentObj.id,
operateType,
}).then((res) => {
......
<template>
<div>
<el-form ref="cusClearanceForm" :rules="rules" :model="cusClearanceObj" label-width="120px">
<el-form-item :label="$t('清关代理')">{{getClAgent('label')}}</el-form-item>
<!-- <el-form-item :label="$t('清关代理')">{{getClAgent('label')}}</el-form-item> -->
<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-form-item>
......
......@@ -107,7 +107,7 @@
<pkg-page v-if="pkgPageType == 2" :pkgData="pkgData" :shipmentObj="shipmentObj" @closeDialog="closeDialog" />
</el-dialog>
<!-- 打印标签 -->
<el-dialog :title="$t('集运封箱标签')" :visible.sync="printdialogVisible" width="300px" :modal-append-to-body="false" append-to-body>
<el-dialog :title="$t('集运封箱标签')" :visible.sync="printdialogVisible" width="350px" :modal-append-to-body="false" append-to-body>
<print-tag v-if="printdialogVisible" :tagData="tagData" />
</el-dialog>
......
<template>
<div>
<div class="tag">
<div style="display: flex;height: 200px;">
<div style="border-right: 1px solid #999; width: 125px">
<div style="display: flex;height: 180px;">
<div style="border-right: 1px solid #999; width: 140px">
<div>
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">{{ $t('扫码查看产品数量') }}</span>
......@@ -13,7 +13,7 @@
</p>
</div>
</div>
<div style="width: 125px">
<div style="width: 140px">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">EC001141212</span>
</p>
......@@ -27,29 +27,30 @@
</p>
<div style="border: 1px solid #999;margin-left: 10px;" />
<div style="display: flex;margin-top: 10px;">
<div style="border-right: 2px solid #999;width: 35px;">
<div style="border-right: 2px solid #999;width: 45px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.transportName }}</span>
</p>
</div>
<div style="width: 75px;">
<div style="width: 90px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">{{ tagData.date }}</span>
<span style="text-align: center; font-weight: 600; font-size: 4mm">{{ tagData.date }}</span>
</p>
</div>
</div>
</div>
</div>
<div style="border: 1px solid #999;margin: 10px;" />
<div>
<!-- <img :src="tagData.qrCodeUrl" style="margin-left: 10px;width:17mm;vertical-align:middle" /> -->
<img :src="tagData.barcodeUrl" style="width:250px;height: 50px;" />
</div>
<div style="height: 50px;border-top: 1px solid #999;">
<div style="height: 50px;">
<p style="margin-top: 1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 3mm">E&C Logistics: www.groupage.com</span>
</p>
</div>
</div>
<div style="text-align:center;">
<div style="text-align:center;margin-top: 20px;">
<el-button type="primary" @click="print">{{$t('确定打印')}}</el-button>
</div>
</div>
......@@ -101,8 +102,8 @@ export default {
<style scoped>
.tag {
width: 250px;
height: 250px;
width: 300px;
height: 300px;
/* background-color: #e2dede; */
text-align: center;
padding: 15px;
......
<template>
<div>
<el-form ref="twoWayTakeoffForm" :rules="rules" :model="twoWayTakeoffObj" label-width="120px">
<el-form-item :label="$t('预计头程时间')" prop="estHeadTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.estHeadTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-form-item :label="$t('预计起飞时间')">
{{getTakeOffTime()}}
</el-form-item>
<el-form-item :label="$t('实际头程时间')" prop="actHeadTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.actHeadTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-form-item :label="$t('实际起飞时间')" prop="dtRealFlyTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.dtRealFlyTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('预计二程时间')" prop="estSecondTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.estSecondTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-form-item :label="$t('实际头程时间')" prop="realHeadTravelTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.realHeadTravelTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-form>
......@@ -28,7 +28,7 @@
<script>
import regError from "../../regError";
import { takeoffCreate } from "@/api/ecw/boxSeaAir";
import { takeoffCreate } from "@/api/ecw/boxAir";
import { formatDateStr, serviceMsg } from "../utils";
/**
......@@ -46,9 +46,8 @@ export default {
twoWayTakeoffObj: {},
// 校验
rules: {
actHeadTime: [{ required: true, message: this.$t("必填"), trigger: "blur" }],
estHeadTime: [{ required: true, message: this.$t("必填"), trigger: "blur" }],
estSecondTime: [{ required: true, message: this.$t("必填"), trigger: "blur" }],
dtRealFlyTime: [{ required: true, message: this.$t("必填"), trigger: "blur" }],
realHeadTravelTime: [{ required: true, message: this.$t("必填"), trigger: "blur" }],
},
// 弹窗配置
dialogVisible: false,
......@@ -59,9 +58,8 @@ export default {
created() {
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["actHeadTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["estHeadTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["estSecondTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["dtRealFlyTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["realHeadTravelTime"], "YYYY-MM-DD HH:mm:ss");
this.twoWayTakeoffObj = oldData;
},
watch: {
......@@ -91,6 +89,13 @@ export default {
cancel(type) {
this.$emit("closeDialog", type);
},
// 预计开船时间
getTakeOffTime() {
return dayjs(this.$attrs.shipmentObj.bookAirInfo.flyTime).format(
"YYYY-MM-DD HH:mm:ss"
);
},
},
};
</script>
......
......@@ -61,6 +61,7 @@ export default {
},
data() {
return {
airBaseData,
shipmentObj: {},
warehouseList: [],
// 供应商
......@@ -72,7 +73,7 @@ export default {
// 用户
allUsers: [],
// 流程图节点
seaBaseData: airBaseData(),
seaBaseData: [],
// 状态
statusLabel: "",
};
......@@ -119,6 +120,24 @@ export default {
getbox(this.shipmentId).then((res) => {
const { data } = res;
this.shipmentObj = data ?? {};
this.seaBaseData = this.airBaseData()
if(this.shipmentObj.destinationClearance==3&&this.shipmentObj.deliveryType==2){
this.seaBaseData = this.seaBaseData.filter(item=>{
var flag = true
item.forEach(element => {
if(element.type == 'agent'){
flag = false
}
if(element.type == 'unloading'){
flag = false
}
if(element.type == 'clrDocument'){
flag = false
}
});
return flag
})
}
});
},
},
......
......@@ -200,16 +200,16 @@ function airBaseData() {
end: require("@/assets/images/shipping/ecqf-end.png"),
},
type: "twoWayTakeoff",
dataKey: "14", // 字典数据键值
dataKey: "9", // 字典数据键值
/**
* 起飞状态:141、未起飞;142、已起飞
* 起飞状态:231、未起飞;232、已起飞
*/
voName: "takeOffInfo",
keyName: "stkStatus",
voName: "boxAirFlyInfo",
keyName: "flyStatus",
status: {
start: [141],
start: [231],
wait: [],
end: [142],
end: [232],
},
},
],
......
......@@ -242,6 +242,8 @@ export default {
this.warehouseIdsArr = this.form.warehouseIds.split(',')?.filter(item => !!item)
}
});
}else {
this.addPackaging()
}
},
......@@ -316,11 +318,14 @@ export default {
//添加包装类型
addPackaging(){
let p = {
airWeightLimit:undefined,
airWeightLimit:'',
packagingTypes:[],
channelPriceStepClearanceList:[],
}
this.form.channelPackagingList.push(p)
},
verify(row){
return (row.startNum !== '' && row.endNum !== '' && row.clearancePrice !== '' && row.clearancePriceUnit !== '' && row.clearanceVolumeUnit !== '')
},
/** 提交按钮 */
submitForm() {
......@@ -328,6 +333,22 @@ export default {
if (!valid) {
return;
}
let derail = false
this.form.channelPackagingList.forEach(item =>{
if(item.airWeightLimit === '' || item.airWeightLimit === 0){
derail = true
return this.$message.warning('请输入空运订单重量上限')
}
if(!item.packagingTypes.length){
derail = true
return this.$message.warning('请输入包装类型')
}
if(!item.channelPriceStepClearanceList.every(this.verify)){
derail = true
return this.$message.warning('请输入阶梯价格')
}
})
if (derail) return;
this.form.warehouseIds = this.warehouseIdsArr.join(',')
let form = JSON.parse(JSON.stringify(this.form))
let attrId = this.form.attrId
......
......@@ -57,6 +57,12 @@
</template>
</el-table-column>
<el-table-column :label="$t('部门人数')" align="center" prop="deptEmpCount"/>
<el-table-column :label="$t('目标值')" align="center" prop="cubeNum"/>
<el-table-column :label="$t('目标单位')" align="center">
<template v-slot="{row}">
<dict-tag :type="DICT_TYPE.CEBE_UNIT" :value="row.cubeUnit" ></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('目标方数')" align="center" prop="cubeNum"/>
<el-table-column :label="$t('运输方式')" align="center" prop="transportType">
<template slot-scope="scope">
......@@ -156,10 +162,11 @@
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import { parseTime } from '@/utils/ruoyi';
import Template from "@/views/cms/template/index.vue";
export default {
name: "EcwDepttargetMydepttarget",
components: {},
components: {Template},
data() {
return {
// 遮罩层
......@@ -332,7 +339,6 @@ import { parseTime } from '@/utils/ruoyi';
})
},
showChannel(val){
console.log(val);
if(val===3 || val===4){
this.showFlag = true;
} else {
......
......@@ -449,9 +449,9 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.form.priceLineCount = val.id;
this.lineNum = val.priceStepClearanceCount;
this.form.priceLineCount = val.id;
// this.form.priceLineCount = val.id;
this.lineNum = val.priceLineCount;
this.form.productTemplateId = val.id;
this.isCopyProductPriceTemplate = true;
copy()
this.open = true;
......@@ -595,14 +595,27 @@ export default {
})
});
},
verify(row){
return (row.startNum !== '' && row.endNum !== '' && row.clearancePrice !== '' && row.clearancePriceUnit !== '' && row.clearanceVolumeUnit !== '')
},
/** 提交按钮 */
submitForm() {
console.log(this.form);
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
if(!this.form.airWeightLimit){
return this.$message.warning('请输入空运订单重量上限')
}
if(this.form.priceStepClearanceList.length === 0){
return this.$message.warning('阶梯定价输入不完整!')
}else {
let bol = this.form.priceStepClearanceList.every(this.verify)
if(!bol){
return this.$message.warning('阶梯定价输入不完整!')
}
}
//商品特性转字符串
this.form.attrId = this.form.attrArray.join(',');
// 修改的提交
......
......@@ -181,7 +181,7 @@ export default {
}).then(() => {
this.form.priceLineCount = val.id;
this.lineNum = val.priceStepClearanceCount;
this.form.priceLineCount = val.id;
this.form.productTemplateId = val.id;
this.isCopyProductPriceTemplate = true;
copy()
this.open = true;
......@@ -219,25 +219,38 @@ export default {
this.attrIds = []
this.resetForm("form");
},
verify(row){
return (row.startNum !== '' && row.endNum !== '' && row.clearancePrice !== '' && row.clearancePriceUnit !== '' && row.clearanceVolumeUnit !== '')
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (!valid) {
return;
}
let data = Object.assign({}, this.form)
if(!data.isAllProduct && !data.idList.length){
return this.$message(this.$t('请选择商品或勾选全部'))
}
if(!this.form.airWeightLimit){
return this.$message.warning('请输入空运订单重量上限')
}
if(this.form.priceStepClearanceList.length === 0){
return this.$message.warning('阶梯定价输入不完整!')
}else {
let bol = this.form.priceStepClearanceList.every(this.verify)
if(!bol){
return this.$message.warning('阶梯定价输入不完整!')
}
}
batchUpdateProduct(data).then((response) => {
this.$modal.msgSuccess(this.$t("修改成功"));
this.reset()
console.log(this.form.priceStepClearanceList,'priceStepClearanceList')
// this.$refs["form"].validate((valid) => {
// if (!valid) {
// return;
// }
// let data = Object.assign({}, this.form)
// if(!data.isAllProduct && !data.idList.length){
// return this.$message(this.$t('请选择商品或勾选全部'))
// }
// batchUpdateProduct(data).then((response) => {
// this.$modal.msgSuccess(this.$t("修改成功"));
// this.$forceUpdate()
// // this.$store.dispatch('tagsView/delCurrentView')
// });
// });
this.$forceUpdate()
// this.$store.dispatch('tagsView/delCurrentView')
});
});
},
},
};
......
......@@ -295,7 +295,7 @@
</div>
<br/>
<el-form ref="form" :model="lineform" :rules="rules" label-width="120px">
<el-form ref="form" :model="lineform" :rules="rules" label-width="160px">
<el-form-item :label="$t('始发港服务')">
<el-checkbox-group v-model="lineform.otherService">
<el-checkbox v-for="item in serviceGroup" :label="item.id" :key="item.id" :value="item.id"> {{item.text}}</el-checkbox>
......@@ -306,6 +306,17 @@
<el-checkbox v-for="item in endServiceGroup" :label="item.id" :key="item.id" :value="item.id" v-show="isShowError(item)"> {{item.text}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item v-if="['3','4'].includes(lineform.transportType)" label="空运提单制作节点">
<el-select v-model="ladingform.makeBillNode">
<el-option v-show="item.value !== '1'" v-for="(item, index) in getDictDatas(DICT_TYPE.AIR_SHIPMENT_PROCESS)" :label="$l(item, 'label')" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="线路是否在客户端显示">
<el-radio-group v-model="ladingform.isClientShow">
<el-radio :label="1">可见</el-radio>
<el-radio :label="0">不可见</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -393,7 +404,7 @@ import { createWarehouse, updateWarehouse, deleteWarehouse, getWarehouse, getWar
exportWarehouseExcel,routerList,changeRouteStatus,deptBind,deptList,serviceConfig } from "@/api/ecw/warehouse";
import { getNodePage } from "@/api/ecw/node";
import { getListTree } from "@/api/ecw/region";
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {getDictDatas, DICT_TYPE, getDictDataL, getDictDataLabel} from '@/utils/dict'
import {CommonStatusEnum} from '@/utils/constants'
import { uploadFile } from "@/api/infra/file";
import { listDept } from "@/api/system/dept";
......@@ -405,7 +416,6 @@ import Template from "../../cms/template/index";
// 海运和空运的抬头模板
import tpl from './tpl'
console.log(tpl)
export default {
name: "Warehouse",
components: {
......@@ -523,8 +533,8 @@ export default {
},
// 表单参数
form: {checkList:[],},
ladingform: {prefixCounter:null,titleZh:null,contentZh:null,account:null,acctArr:[]},
lineform: {otherService:[]},
ladingform: {prefixCounter:null,titleZh:null,contentZh:null,account:null,acctArr:[],isClientShow:1,makeBillNode:''},
lineform: {otherService:[],},
startName:'',
destName:'',
......@@ -559,6 +569,12 @@ export default {
},
computed: {
DICT_TYPE() {
return DICT_TYPE
},
getDictDataL() {
return getDictDataL
},
isShowError() {
return (item) => {
if(item.id !== '5') return true;
......@@ -652,10 +668,9 @@ export default {
this.getList();
this.getNodeList();
this.getContinentsList();
console.log("regionTypeDatas:"+JSON.stringify(this.regionTypeDatas));
console.log("transportDatas:"+JSON.stringify(this.transportDatas));
},
methods: {
getDictDataLabel,
setTpl(type){
this.ladingform.titleZh = tpl[type]
},
......@@ -1092,7 +1107,6 @@ export default {
});
this.ladingform.lineId=lineId.substr(0,lineId.length-1);
}
console.log(this.ladingform.lineId);
this.ladingform.account = JSON.stringify(this.arr);
createTemplate(this.ladingform).then(response => {
this.$modal.msgSuccess(this.$t("设置路线提单模板成功"));
......
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