<template> <div> <el-form ref="arrivalForm" :rules="rules" :model="arrivalObj" label-width="120px"> <el-form-item label="预计到港时间">{{getExpectedTime()}}</el-form-item> <el-form-item label="实际到港时间" prop="apRealTime"> <el-date-picker type="datetime" placeholder="请选择日期" v-model="arrivalObj.apRealTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> <el-form-item label="确认到港"> <el-date-picker type="datetime" placeholder="请选择日期" v-model="arrivalObj.apConfirmTime" value-format="yyyy-MM-dd HH:mm:ss"> </el-date-picker> <p class="message-area" v-show="showMsg">请确认是否有异常,如有异常请进行异常登记</p> </el-form-item> <el-form-item label="卸港时间"> <el-date-picker type="datetime" placeholder="请选择日期" v-model="arrivalObj.apUnloadPortTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> </el-form> <el-row class="operate-button"> <el-button type="primary" @click="onSubmit(1)">保存</el-button> <el-button type="success" @click="onSubmit(2)">提交</el-button> <el-button @click="cancel">关闭</el-button> <el-button type="primary" @click="exceptionReg" :disabled="!showMsg">异常登记</el-button> </el-row> <!-- 对话框 --> <el-dialog custom-class="shipping-dialog" title="票异常" :visible.sync="dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close> <regError @closeDialog="dialogVisible = false" v-bind="$attrs" /> </el-dialog> </div> </template> <script> import regError from "../../regError"; import dayjs from "dayjs"; import { arrivalCreate } from "@/api/ecw/boxSea"; import { formatDateStr, serviceMsg } from "../utils"; /** * 到港 */ export default { name: "arrival", inheritAttrs: false, components: { regError, }, data() { return { // 到港对象 arrivalObj: {}, // 校验 rules: { apRealTime: [{ required: true, message: "必填", trigger: "change" }], }, // 弹窗配置 dialogVisible: false, // 提示消息 showMsg: false, }; }, created() { const voName = this.$attrs.currNode.voName; let oldData = { ...this.$attrs.shipmentObj[voName] }; oldData = formatDateStr( oldData, ["apRealTime", "apConfirmTime"], "YYYY-MM-DD HH:mm:ss" ); oldData = formatDateStr(oldData, ["apUnloadPortTime"]); this.arrivalObj = oldData; }, watch: { // 确认到港时间 "arrivalObj.apConfirmTime"(val) { this.compareDate(this.getExpectedTime(), val); }, }, methods: { // 获取预计到港时间 getExpectedTime() { const { shippingInfo } = this.$attrs.shipmentObj; if (shippingInfo) { return dayjs(shippingInfo.dtEstArrivalTime).format("YYYY-MM-DD HH:mm:ss"); } return null; }, // 时间比较 compareDate(expectedTime, apConfirmTime) { this.showMsg = false; let date1 = null, date2 = null; if (expectedTime) date1 = dayjs(expectedTime); if (apConfirmTime) date2 = dayjs(apConfirmTime); if (date1 && date2) { const days = date2.diff(date1, "day"); if (days > 5) { this.showMsg = true; } } }, // 异常登记 exceptionReg() { this.dialogVisible = true; }, /** 提交 */ onSubmit(operateType) { this.$refs["arrivalForm"].validate((valid) => { if (valid) { arrivalCreate({ ...this.arrivalObj, shipmentId: this.$attrs.shipmentObj.id, operateType, }).then((res) => { serviceMsg(res, this).then(() => { this.cancel("submit"); }); }); } }); }, /** 取消 */ cancel(type) { this.$emit("closeDialog", type); }, }, }; </script> <style lang="scss" scoped> .message-area { margin: 0; color: red; } </style>