Sfoglia il codice sorgente

1.商务中心 mkt&slot 画页面 对字段 联调接口 完善功能
2.商务中心 预订舱 画页面
3.成本中心 COC 新增默认值 明细新加赋值
4.费用模板 修改默认值

Qukatie 9 mesi fa
parent
commit
cfcf3adb38

+ 127 - 0
src/api/iosBasicData/businessCenter/mkt&slot.js

@@ -0,0 +1,127 @@
+import request from '@/router/axios';
+//查询列表
+export const getList = (current, size, params) => {
+    return request({
+        url: '/api/blade-los/mktslot/list',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+//查询明细
+export const detail = (params) => {
+    return request({
+        url: '/api/blade-los/mktslot/detail',
+        method: 'get',
+        params: params
+    })
+}
+//删除
+export const remove = (data) => {
+    return request({
+        url: '/api/blade-los/mktslot/remove',
+        method: 'post',
+        params: data
+    })
+}
+//删除明细
+export const itemRemove = (data) => {
+    return request({
+        url: '/api/blade-los/mktslotitem/remove',
+        method: 'post',
+        params: data
+
+    })
+}
+//删除明细
+export const quotationRemove = (data) => {
+    return request({
+        url: '/api/blade-los/mktslotquotation/remove',
+        method: 'post',
+        params: data
+
+    })
+}
+//保存
+export function submit(data) {
+    return request({
+        url: '/api/blade-los/mktslot/submit',
+        method: 'post',
+        data
+    })
+}
+//明细保存
+export function submitItemList(data) {
+    return request({
+        url: '/api/blade-los/mktslotquotation/submitList',
+        method: 'post',
+        data
+    })
+}
+// 请核
+export function pleaseCheck(data) {
+    return request({
+        url: '/api/blade-box-tube/tradingBox/checkTradingBox',
+        method: 'post',
+        data: data
+    })
+}
+// 撤销
+export function repealCancel(data) {
+    return request({
+        url: '/api/blade-box-tube/tradingBox/withdrawTradingBox',
+        method: 'post',
+        data: data
+    })
+}
+//提取运价 
+export const MktSlotQuotation = (params) => {
+    return request({
+        url: '/api/blade-los/routecost/MktSlotQuotation',
+        method: 'get',
+        params: params
+    })
+}
+// 生成报价
+export function generateQuotation(data) {
+    return request({
+        url: '/api/blade-los/mktslot/generateQuotation',
+        method: 'post',
+        data: data
+    })
+}
+// 撤销报价
+export function revokeQuotation(data) {
+    return request({
+        url: '/api/blade-los/mktslot/revokeQuotation',
+        method: 'post',
+        data: data
+    })
+}
+//提交 
+export const submitMktSlot = (params) => {
+    return request({
+        url: '/api/blade-los/mktslot/submitMktSlot',
+        method: 'get',
+        params: params
+    })
+}
+//撤销 
+export const revokeMktSlot = (params) => {
+    return request({
+        url: '/api/blade-los/mktslot/revokeMktSlot',
+        method: 'get',
+        params: params
+    })
+}
+//单据复制
+export const copyAgent = (data) => {
+    return request({
+        url: '/api/blade-los/putbox/copyDocument',
+        method: 'get',
+        params: data
+    })
+}

+ 15 - 0
src/enums/column-name.js

@@ -2135,6 +2135,21 @@ const columnName = [{
 },{
   code: 494,
   name: '货代-财务管理-发票申请(F)费用明细表'
+},{
+  code: 495,
+  name: '永发-商务中心-mkt&slot列表页'
+},{
+  code: 496,
+  name: '永发-商务中心-mkt&slot明细成本价'
+},{
+  code: 497,
+  name: '永发-商务中心-mkt&slot明细销售价'
+},{
+  code: 498,
+  name: '永发-商务中心-预订舱列表页'
+},{
+  code: 499,
+  name: '永发-商务中心-预订舱箱明细'
 }
 
 ]

+ 13 - 0
src/router/views/index.js

@@ -4219,5 +4219,18 @@ export default [{
     },
     component: () => import( /* webpackChunkName: "views" */ '@/views/iosBasicData/feeApplication/index')
   }]
+}, {
+  path: '/iosBasicData/businessCenter/mkt&slot/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/iosBasicData/businessCenter/mkt&slot/index',
+    name: 'mkt&slot',
+    meta: {
+      i18n: '/iosBasicData/businessCenter/mkt&slot/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/iosBasicData/businessCenter/mkt&slot/index')
+  }]
 }
 ]

+ 878 - 0
src/views/iosBasicData/businessCenter/bookingCabin/detailsPage.vue

@@ -0,0 +1,878 @@
+<template>
+  <div>
+    <div class="customer-head">
+      <div class="customer-back">
+        <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
+          @click="goBack()">返回列表
+        </el-button>
+      </div>
+      <div class="add-customer-btn">
+        <!-- <el-button size="small" style="margin-right: 8px" :disabled="!form.id"
+                    @click="$refs.print.openDialog()">预 览
+                </el-button>
+                <el-button v-if="roleName.indexOf('admin') != -1" size="small" style="margin-right: 8px"
+                    :disabled="!form.id" @click="$refs.report.openDialog()">报表设计
+                </el-button> -->
+        <el-button class="el-button--small-yh" style="margin-left: 6px;" type="primary" size="small" v-if="editButton"
+          :disabled="showLock || !(roleName.indexOf('admin') != -1 || roleName.indexOf('允许修改他人业务') != -1 || saberUserInfo.user_id == form.createUser)"
+          @click="inEdit">编 辑
+        </el-button>
+        <el-button class="el-button--small-yh" v-else style="margin-left: 6px;" type="primary" size="small"
+          :disabled="isSaveBtn" @click="submit">保 存
+        </el-button>
+        <!-- <el-button v-if="form.id" class="el-button--small-yh" style="margin-left: 6px;" type="success"
+                    size="small" :disabled="form.status != '录入'" @click="application">单据请核
+                </el-button>
+                <el-button v-if="form.status == '审核提交'" class="el-button--small-yh" style="margin-left: 6px;"
+                    type="danger" size="small" @click="revokeApplication">撤销单据请核
+                </el-button>
+                <el-dropdown style="line-height: 0">
+                    <el-button class="el-button--small-yh" style="margin-left: 6px;" type="warning" :disabled="!form.id"
+                        size="small">
+                        审 批<i class="el-icon-arrow-down el-icon--right"></i>
+                    </el-button>
+                    <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item @click.native="checkScheduleDialog = true, checkId = form.id">审核进度
+                        </el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown> -->
+      </div>
+    </div>
+    <div style="margin-top: 50px">
+      <trade-card title="基础信息">
+        <avue-form :option="optionForm" v-model="form" ref="form">
+          <tempalte slot="branchName">
+            <dic-select v-model="form.branchName" placeholder="所属公司" key="id" label="deptName"
+              url="/blade-system/dept/top-list" :filterable="true" :remote="true" dataName="deptName"
+              @selectChange="dicChange('branchName', $event)" :default="true"
+              :disabled="editDisabled || roleName.includes('secondaryAdmin')"></dic-select>
+          </tempalte>
+          <dic-select v-model="form.operatorName" placeholder="OP" :key="form.branchId" label="realName"
+            :url="'/blade-user/userListAll?roleAlias=操作员&deptId=' + form.branchId" :filterable="true"
+            dataName="realName" @selectChange="dicChange('operatorName', $event)" :disabled="editDisabled"></dic-select>
+          <tempalte slot="polCnName">
+            <dic-select v-model="form.polCnName" placeholder="起运港" key="id" label="cnName" res="records"
+              url="/blade-los/bports/list?current=1&size=5" :filterable="true" :remote="true" dataName="cnName"
+              @selectChange="dicChange('polCnName', $event)" :disabled="editDisabled" :slotRight="true"
+              rightLabel="code"></dic-select>
+          </tempalte>
+          <tempalte slot="podCnName">
+            <dic-select v-model="form.podCnName" placeholder="目的港" key="id" label="cnName" res="records"
+              url="/blade-los/bports/list?current=1&size=5" :filterable="true" :remote="true" dataName="cnName"
+              @selectChange="dicChange('podCnName', $event)" :disabled="editDisabled" :slotRight="true"
+              rightLabel="code"></dic-select>
+          </tempalte>
+          <tempalte slot="lineCnName">
+            <dic-select v-model="form.lineCnName" placeholder="航线" key="id" label="cnName" res="records"
+              url="/blade-los/blines/list?status=0" :filterable="true" :remote="true" dataName="cnName"
+              @selectChange="dicChange('lineCnName', $event)" :disabled="editDisabled"></dic-select>
+          </tempalte>
+          <tempalte slot="carrierCnName">
+            <dic-select v-model="form.carrierCnName" placeholder="船公司" key="id" label="shortName" res="records"
+              url="/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=船公司" :filterable="true" :remote="true"
+              dataName="shortName" @selectChange="dicChange('carrierCnName', $event)" :disabled="editDisabled"
+              :slotRight="true" rightLabel="code"></dic-select>
+          </tempalte>
+          <tempalte slot="shippingCompanyCname">
+            <dic-select v-model="form.shippingCompanyCname" placeholder="承运人" key="id" label="shortName" res="records"
+              url="/blade-los/bcorps/selectList?current=1&size=5&corpTypeName=船公司" :filterable="true" :remote="true"
+              dataName="shortName" @selectChange="dicChange('shippingCompanyCname', $event)" :slotRight="true"
+              rightLabel="code" :disabled="editDisabled"></dic-select>
+          </tempalte>
+          <tempalte slot="hpaymode">
+            <dic-select v-model="form.hpaymode" placeholder="付款方式" key="dictKey" label="dictValue" keyValue="dictKey"
+              url="/blade-system/dict-biz/dictionary?code=payment_method_los" :filterable="true"
+              :disabled="editDisabled"></dic-select>
+          </tempalte>
+          <tempalte slot="transportationTerms">
+            <dic-select v-model="form.transportationTerms" placeholder="运输条款" key="id" label="cnName" res="records"
+              url="/blade-los/bserviceterms/list?status=0&current=1&size=20" :filterable="true" :remote="true"
+              dataName="cnName" @selectChange="dicChange('transportationTerms', $event)"
+              :disabled="editDisabled"></dic-select>
+          </tempalte>
+          <tempalte slot="packingUnit">
+            <dic-select v-model="form.packingUnit" placeholder="目的港" key="id" label="cnName" res="records"
+              url="/blade-los/bpackages/list?current=1&size=5&status=0&whetherDg=0" :filterable="true" :remote="true" dataName="cnName"
+              @selectChange="dicChange('packingUnit', $event)" :disabled="editDisabled" :slotRight="true"
+              rightLabel="code"></dic-select>
+          </tempalte>
+        </avue-form>
+      </trade-card>
+      <trade-card title="箱明细">
+        <avue-crud :option="option" :data="form.costItemList" id="out-table" ref="crud"
+          :header-cell-class-name="headerClassName" :row-style="{ height: '20px', padding: '0px' }"
+          :cell-style="{ height: '20px', padding: '0px' }" @selection-change="selectionChange" @select="selectHandle"
+          @row-update="rowUpdate" @resetColumn="resetColumn('crud', 'option', 'optionBack', 499)"
+          @saveColumn="saveColumn('crud', 'option', 'optionBack', 499)">
+          <template slot="menuLeft">
+            <el-button type="info" plain size="small" :disabled="editDisabled"
+              @click="allClick('一键保存')">一键保存</el-button>
+            <el-button type="info" plain size="small" :disabled="editDisabled"
+              @click="allClick('一键编辑')">一键编辑</el-button>
+            <el-button type="danger" plain size="small" :disabled="editDisabled || selectionList.length == 0"
+              @click="allClick('批量删除')">批量删除</el-button>
+          </template>
+          <template slot="indexHeader" slot-scope="{row,index}">
+            <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="editDisabled" circle @click="addRow()">
+            </el-button>
+          </template>
+          <template slot="index" slot-scope="{row,index}">
+            <span>{{ index + 1 }}</span>
+          </template>
+        </avue-crud>
+      </trade-card>
+      <trade-card title="操作记录">
+        <avue-form :option="optionForm2" v-model="form" ref="form2">
+        </avue-form>
+      </trade-card>
+    </div>
+    <reports :id="form.id" :assemblyForm="form" businessValue="MYDL" ref="report"></reports>
+    <!--审核弹窗-->
+    <el-dialog append-to-body title="审批进度" class="el-dialogDeep" :visible.sync="checkScheduleDialog" width="40%"
+      :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check-schedule :checkId="checkId" :batchNo="batchNo" @choceScheduleFun="choceScheduleFun"></check-schedule>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { submit, submitItemList, submitFeeList, getDetail, removeItem, feeRemove, checkAgent, revokeCheckAgent, copyAgent } from "@/api/iosBasicData/costcenter/coc";
+import { losbfeestemplateGetListTemplate } from "@/api/iosBasicData/bills";
+import { losbfeestemplateDetail } from "@/api/iosBasicData/losbfeestemplate";
+import dicSelect from "@/components/dicSelect/main";
+import checkSchedule from "@/components/checkH/checkSchedule.vue";
+import businessReports from "@/components/tradeAgency/businessReports.vue";
+import reports from "@/components/tradeAgency/reports.vue";
+import { bcurrencyGetExrate } from "@/api/iosBasicData/rateManagement";
+import { getDicinit } from "@/api/dicSelect/index";
+import { dateFormat } from "@/util/date";
+import _ from "lodash";
+import { Header } from "element-ui";
+export default {
+  name: "detailsPage",
+  data() {
+    return {
+      selectionTemplateList: [],
+      feeType: null,
+      treeOption: {
+        nodeKey: "id",
+        // lazy: true,
+        addBtn: false,
+        menu: false,
+        size: "small",
+        props: {
+          labelText: "标题",
+          label: "cnName",
+          value: "value",
+          children: "children"
+        }
+      },
+      templateData: [],
+      templateList: [],
+      templateOption: {
+        height: 500,
+        menu: false,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        viewBtn: false,
+        header: false,
+        index: true,
+        selection: true,
+        column: [
+          {
+            label: '费用',
+            prop: 'feeCnName',
+            overHidden: true,
+          },
+          {
+            label: '成本价',
+            prop: 'price',
+            overHidden: true,
+          },
+          {
+            label: '币别',
+            prop: 'curCode',
+            overHidden: true,
+          },
+          {
+            label: '汇率',
+            prop: 'curCode',
+            overHidden: true,
+          }
+        ]
+      },
+      templateDialog: false,
+      selectionList: [],
+      selectionPolList: [],
+      selectionPodList: [],
+      checkId: '', // 审核需要的id
+      batchNo: '',
+      checkScheduleDialog: false, // 审核弹窗
+      editButton: false,
+      editDisabled: false,
+      form: {
+        branchId: JSON.parse(localStorage.getItem('sysitemData')).deptId,
+        branchName: JSON.parse(localStorage.getItem('sysitemData')).deptName,
+        operatorName: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_name, // OP 默认登录人
+        operatorId: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_id,
+        costItemList: [],
+      },
+      polFeeList: [],
+      podFeeList: [],
+      oldForm: {},
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        disabled: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: '所属公司',
+            prop: "branchName",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: 'OP',
+            prop: "operatorName",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '承运人',
+            prop: "shippingCompanyCname",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '船公司',
+            prop: "carrierCnName",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '航线',
+            prop: "lineCnName",
+            disabled: false,
+          },
+          {
+            label: '起运港',
+            prop: "polCnName",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '卸货港',
+            prop: "podCnName",
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '订舱约号',
+            prop: "airlineCname",
+            disabled: false,
+          },
+          {
+            label: 'ETD',
+            prop: "etd",
+            disabled: false,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+          },
+          {
+            label: '付费方式',
+            prop: "hpaymode",
+            disabled: false,
+          },
+          {
+            label: '箱属',
+            prop: "boxBelongsTo",
+            disabled: false,
+          },
+          {
+            label: "运输条款",
+            prop: "transportationTerms",
+            width: "80",
+            overHidden: true,
+          },
+          {
+            label: '件数',
+            prop: "quantity",
+            disabled: false,
+          },
+          {
+            label: '包装',
+            prop: "packingUnit",
+            disabled: false,
+          },
+
+          {
+            label: '毛重(KGS)',
+            prop: "grossWeight",
+            disabled: false,
+          },
+          {
+            label: '尺码(CBM)',
+            prop: "measurement",
+            disabled: false,
+          },
+          {
+            label: '订舱备注',
+            prop: "remarks",
+            type: 'textarea',
+            disabled: false,
+            span: 12,
+            minRows: 2,
+          },
+        ]
+      },
+      optionForm2: {
+        menuBtn: false,
+        span: 6,
+        disabled: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: '系统号',
+            prop: "businessNo",
+            disabled: true,
+          },
+          {
+            label: '制单人',
+            prop: "createUserName",
+            disabled: true,
+          },
+          {
+            label: '制单日期',
+            prop: "createTime",
+            disabled: true,
+          },
+          {
+            label: '修改人',
+            prop: "updateUserName",
+            disabled: true,
+          },
+          {
+            label: '修改日期',
+            prop: "updateTime",
+            disabled: true,
+          }
+        ]
+      },
+      option: {},
+      optionBack: {
+        // height: 'auto',
+        calcHeight: 30,
+        menuWidth: 60,
+        tip: false,
+        border: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        refreshBtn: false,
+        selection: true,
+        align: 'center',
+        menu: false,
+        column: [
+          {
+            label: "index",
+            prop: "index",
+            width: "55",
+            headerslot: true,
+          },
+          {
+            label: "箱型",
+            prop: "cntrTypeCode",
+            overHidden: true,
+            cell: true,
+            rules: [
+              {
+                required: true,
+                message: '请选择箱型',
+                trigger: 'blur'
+              }
+            ]
+          },
+                {
+            label: "箱量",
+            prop: "quantity",
+            overHidden: true,
+            cell: true,
+            rules: [
+              {
+                required: true,
+                message: '请选择箱型',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: "备注",
+            prop: "remarks",
+            cell: true,
+            overHidden: true
+          }
+        ]
+      },
+      roleName: [],
+      saberUserInfo: null
+    }
+  },
+  components: {
+    dicSelect,
+    checkSchedule,
+    businessReports,
+    reports
+  },
+  props: {
+    detailData: Object
+  },
+  async created() {
+    this.saberUserInfo = JSON.parse(localStorage.getItem('saber-userInfo')).content
+    this.roleName = localStorage.getItem('roleName').split(',')
+    this.option = await this.getColumnData(this.getColumnName(499), this.optionBack);
+    this.saveLocalCurrency(JSON.parse(localStorage.getItem('sysitemData')).deptId)
+    if (this.detailData.id) {
+      // this.editButton = true
+      // this.editDisabled = true
+      // this.optionForm.disabled = true
+      this.getDetails(this.detailData.id)
+    }
+    if (this.$route.query.params) {
+      this.getDetails(this.$route.query.params)
+    }
+    if (this.detailData.copyId) {
+      this.getCopydate(this.detailData.copyId)
+    }
+  },
+  methods: {
+    async dicChange(name, row) {
+      if (name == 'branchName') {
+        if (row) {
+          this.form.branchId = row.id
+          this.saveLocalCurrency(row.id)
+        } else {
+          this.form.branchId = null
+          this.form.branchName = null
+        }
+      }
+      if (name == 'operatorName') {
+        if (row) {
+          this.form.operatorName = row.realName
+          this.form.operatorId = row.id
+        } else {
+          this.form.operatorName = null
+          this.form.operatorId = null
+        }
+      }
+      if (name == 'polCnName') {
+        if (row) {
+          this.form.polId = row.id
+          this.form.polCode = row.code
+          this.form.polEnName = row.enName
+        } else {
+          this.form.polId = null
+          this.form.polCode = null
+          this.form.polEnName = null
+          this.form.polCnName = null
+        }
+      }
+      if (name == 'podCnName') {
+        if (row) {
+          this.form.podId = row.id
+          this.form.podCode = row.code
+          this.form.podEnName = row.enName
+        } else {
+          this.form.podId = null
+          this.form.podCode = null
+          this.form.podEnName = null
+          this.form.podCnName = null
+        }
+      }
+      if (name == 'lineCnName') {
+        if (row) {
+          this.form.lineId = row.id
+          this.form.lineCode = row.code
+          this.form.lineEnName = row.enName
+        } else {
+          this.form.lineId = null
+          this.form.lineCode = null
+          this.form.lineEnName = null
+          this.form.lineCnName = null
+        }
+      }
+      if (name == 'carrierCnName') {
+        if (row) {
+          this.form.carrierId = row.id
+          this.form.carrierCode = row.code
+          this.form.carrierEname = row.enName
+          this.form.carrierShortName = row.shortName
+        } else {
+          this.form.carrierId = null
+          this.form.carrierCode = null
+          this.form.carrierEname = null
+          this.form.carrierCnName = null
+          this.form.carrierShortName = null
+        }
+      }
+      if (name == 'shippingCompanyCname') {
+        if (row) {
+          this.form.shippingCompanyId = row.id
+          this.form.shippingCompanyCode = row.code
+          this.form.shippingCompanyEname = row.enName
+          this.form.shippingCompanyAbbreviation = row.shortName
+        } else {
+          this.form.shippingCompanyId = null
+          this.form.shippingCompanyCode = null
+          this.form.shippingCompanyEname = null
+          this.form.shippingCompanyCname = null
+          this.form.shippingCompanyAbbreviation = null
+        }
+      }
+    },
+    rowEdit(row) {
+    },
+    addRow() {
+      if (!this.form.id) {
+        return this.$message.error("请保存数据");
+      }
+      this.form.costItemList.push({
+        pid: this.form.id,
+        $cellEdit: true
+      })
+    },
+    templateChange(list) {
+      this.selectionTemplateList = list;
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    getDetails(id) {
+      const loading = this.$loading({
+        lock: true,
+        text: '加载中',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255,255,255,0.7)'
+      });
+      getDetail({ id: id }).then(res => {
+        this.polFeeList = res.data.data.costFeeList.filter(item => item.busType == 'POL')
+        this.podFeeList = res.data.data.costFeeList.filter(item => item.busType == 'POD')
+        this.saveLocalCurrency(res.data.data.branchId)
+        this.form = res.data.data
+        if (res.data.data.status != '录入') {
+          this.editButton = true
+          this.editDisabled = true
+          this.optionForm.disabled = true
+        }
+      }).finally(() => {
+        loading.close()
+      })
+    },
+    getCopydate(id) {
+      const loading = this.$loading({
+        lock: true,
+        text: '加载中',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255,255,255,0.7)'
+      });
+      copyAgent({ id: id }).then(res => {
+        this.polFeeList = res.data.data.costFeeList.filter(item => item.busType == 'POL')
+        this.podFeeList = res.data.data.costFeeList.filter(item => item.busType == 'POD')
+        this.form = res.data.data
+      }).finally(() => {
+        loading.close()
+      })
+    },
+    inEdit() {
+      this.editButton = false
+      if (this.form.status == '录入') {
+        this.editDisabled = false
+        this.optionForm.disabled = false
+      }
+    },
+    allClick(name) {
+      if (name == '一键保存') {
+        if (!this.form.costItemList.length) {
+          return this.$message.error("请添加数据");
+        }
+        for (let row of this.form.costItemList) {
+          if (!row.cntrTypeCode || !row.quantity) {
+            this.$refs.crud.rowCell(row, row.$index)
+            return this.$message.error("请完善明细信息");
+          }
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        submitItemList(this.form.costItemList).then(res => {
+          this.$message.success("保存成功");
+          this.form.costItemList = res.data.data
+        }).finally(() => {
+          loading.close();
+        })
+      }
+      if (name == '一键编辑') {
+        for (let row of this.form.costItemList) {
+          this.$set(row, "$cellEdit", true);
+        }
+      }
+      if (name == '批量删除') {
+        let multiList = []
+        let arr = []
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          multiList = this.selectionList
+          arr = this.form.costItemList
+          // 获取有id 的数据
+          const itemsWithId = multiList.filter(item => item.id != null);
+          let arrIds = itemsWithId.map(item => item.id) // 获取id 数据
+          // 把选中的删除掉
+          multiList.forEach((item) => {
+            for (let index in arr) {
+              if (JSON.stringify(item) == JSON.stringify(arr[index])) {
+                arr.splice(Number(index), 1)
+              }
+            }
+          })
+          if (itemsWithId.length != 0) {
+            const loading = this.$loading({
+              lock: true,
+              text: '加载中',
+              spinner: 'el-icon-loading',
+              background: 'rgba(255,255,255,0.7)'
+            });
+            removeItem({ ids: arrIds.join(',') }).then(res => {
+              this.$message.success("删除成功");
+            }).finally(() => {
+              loading.close();
+            })
+          }
+        })
+      }
+    },
+    // 左侧选择
+    nodeClick(e) {
+      losbfeestemplateDetail(e.id).then(res => {
+        this.templateList = res.data.data.feesTemplateItemsList
+      })
+    },
+    submit(type) {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          for (let row of this.form.costItemList) {
+           if (!row.cntrTypeCode || !row.quantity) {
+              this.$refs.crud.rowCell(row, row.$index)
+              return this.$message.error("请完善明细信息");
+            }
+          }
+          for (let row of this.polFeeList) {
+            if (!row.type || !row.feeName || !row.curCode || !row.curCode || row.salesPrice == null || row.costPrice == null) {
+              this.$refs.crud2.rowCell(row, row.$index)
+              return this.$message.error("请完善POL杂费明细");
+            }
+          }
+          for (let row of this.podFeeList) {
+            if (!row.type || !row.feeName || !row.curCode || !row.curCode || row.salesPrice == null || row.costPrice == null) {
+              this.$refs.crud3.rowCell(row, row.$index)
+              return this.$message.error("请完善POD杂费明细");
+            }
+          }
+          this.form.costFeeList = [...this.polFeeList, ...this.podFeeList]
+
+          this.form.billNoFormat = 'COC'
+          this.form.businessTypeCode = 'COC'
+          const loading = this.$loading({
+            lock: true,
+            text: '加载中',
+            spinner: 'el-icon-loading',
+            background: 'rgba(255,255,255,0.7)'
+          });
+          submit(this.form).then(res => {
+            this.$message.success("保存成功");
+            this.getDetails(res.data.data.id)
+          }).finally(() => {
+            loading.close();
+          })
+
+        } else {
+          return false;
+        }
+      });
+    },
+    application() {
+      this.$confirm("确定请核数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        let obj = {}
+        obj = {
+          id: this.form.id,
+          url: '/iosBasicData/costcenter/coc/index',
+          pageStatus: '',
+          pageLabel: '航线成本(COC)',
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        checkAgent(obj).then(res => {
+          this.$message.success("请核成功");
+          this.getDetails(res.data.data.id)
+        }).finally(() => {
+          loading.close();
+        })
+      });
+    },
+    revokeApplication() {
+      this.$confirm("确定撤销请核?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        let obj = {}
+        obj = {
+          id: this.form.id,
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        revokeCheckAgent(obj).then(res => {
+          this.$message.success("撤销请核成功");
+          this.getDetails(res.data.data.id)
+          this.editDisabled = false
+          this.optionForm.disabled = false
+        }).finally(() => {
+          loading.close();
+        })
+      });
+    },
+    //请核关闭
+    choceScheduleFun() {
+      this.checkScheduleDialog = false
+    },
+    //自定义列保存
+    async saveColumn(ref, option, optionBack, code) {
+      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //自定义列重置
+    async resetColumn(ref, option, optionBack, code) {
+      this[option] = this[optionBack];
+      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    },
+    // 更改表格颜色
+    headerClassName(tab) {
+      //颜色间隔
+      let back = ""
+      if (tab.columnIndex >= 0 && tab.column.level === 1) {
+        if (tab.columnIndex % 2 === 0) {
+          back = "back-one"
+        } else if (tab.columnIndex % 2 === 1) {
+          back = "back-two"
+        }
+      }
+      return back;
+    },
+    goBack(type) {
+      this.$emit("goBack");
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-form-item {
+  margin-bottom: 8px !important;
+}
+
+::v-deep .el-table .cell {
+  padding: 0 2px !important;
+
+  .el-form-item {
+    margin-bottom: 0px !important;
+  }
+
+}
+
+::v-deep .avue-crud .el-table .el-form-item__label {
+  left: -1px;
+}
+
+// ::v-deep#out-table .back-one {
+//     background: #ecf5ff !important;
+// }
+
+// ::v-deep#out-table .back-two {
+//     background: #ecf5ff !important;
+// }
+
+::v-deep #out-table .back-one {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+
+::v-deep #out-table .back-two {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+
+
+::v-deep .el-table--small td,
+.el-table--small th {
+  padding: 2px !important;
+}
+
+::v-deep .el-card__body {
+  padding: 3px 10px;
+}
+</style>

+ 504 - 0
src/views/iosBasicData/businessCenter/bookingCabin/index.vue

@@ -0,0 +1,504 @@
+<template>
+    <div>
+        <basic-container v-if="isShow">
+            <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :search.sync="query"
+                v-model="form" id="out-table" :header-cell-class-name="headerClassName" ref="crud" @row-del="rowDel"
+                @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+                @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+                @resetColumn="resetColumn('crud', 'option', 'optionBack', 498)"
+                @saveColumn="saveColumn('crud', 'option', 'optionBack', 498)" @on-load="onLoad">
+                <template slot="menuLeft">
+                    <el-button type="primary" size="small" icon="el-icon-plus" @click="addButton">创建单据
+                    </el-button>
+                    <el-button type="success" size="small" :disabled="selectionList.length != 1"
+                        @click="copyButton">复制单据
+                    </el-button>
+                    <el-button type="warning" size="small" @click="outExport">导 出</el-button>
+                </template>
+                <template slot="menu" slot-scope="{ row, index }">
+                    <el-button size="small" icon="el-icon-edit" type="text" @click="rowEdit(row)">编辑</el-button>
+                    <el-button size="small" icon="el-icon-delete" type="text" @click="rowDel(row, index)"
+                        :disabled="row.status != '录入'">删 除</el-button>
+                </template>
+                <template slot="businessNo" slot-scope="{ row }">
+                    <span style="color: #1e9fff;cursor: pointer;" @click="rowEdit(row)">{{ row.businessNo }}</span>
+                </template>
+                <template slot="status" slot-scope="{ row }">
+                    <span v-if="row.status == '录入'"
+                        style="color: #fff;border-radius: 30px;padding: 2px 15px;background-color: #409EFF;">{{
+                            row.status }}</span>
+                    <span v-if="row.status != '录入'"
+                        style="color: #fff;border-radius: 30px;padding: 2px 15px;background-color: #67C23A;">{{
+                            row.status }}</span>
+                </template>
+            </avue-crud>
+        </basic-container>
+        <detailsPage v-if="!isShow" :detailData="detailData" @goBack="goBack"></detailsPage>
+    </div>
+</template>
+
+<script>
+import { getList, remove, checkBillsBatch, batchRevoke } from "@/api/iosBasicData/costcenter/coc";
+import { getWorkDicts } from "@/api/system/dictbiz";
+import detailsPage from "./detailsPage";
+import { getToken } from "@/util/auth";
+import { dateFormat } from "@/util/date";
+import _ from "lodash";
+export default {
+    data() {
+        return {
+            isShow: true,
+            form: {},
+            query: {
+                businessType: 'COC',
+                sort: 0,
+                effectiveStartDate: dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
+            },
+            loading: false,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0
+            },
+            selectionList: [],
+            option: {},
+            optionBack: {
+                height: 'auto',
+                calcHeight: 30,
+                menuWidth: 140,
+                tip: false,
+                searchShow: true,
+                searchMenuSpan: 12,
+                border: true,
+                index: true,
+                addBtn: false,
+                viewBtn: false,
+                editBtn: false,
+                delBtn: false,
+                selection: true,
+                searchIcon: true,
+                align: 'center',
+                searchIndex: 3,
+                summaryText: "合计",
+                showSummary: true,
+                sumColumnList: [
+                    {
+                        name: 'profit20',
+                        type: 'sum',
+                        decimals: 2
+                    },
+                    {
+                        name: 'profit40',
+                        type: 'sum',
+                        decimals: 2
+                    },
+                    {
+                        name: 'profitHc',
+                        type: 'sum',
+                        decimals: 2
+                    },
+                    {
+                        name: 'otherProfit',
+                        type: 'sum',
+                        decimals: 2
+                    }
+                ],
+                column: [
+                    {
+                        label: "系统号",
+                        prop: "businessNo",
+                        width: "120",
+                        overHidden: true,
+                    },
+                    {
+                        label: '所属公司',
+                        prop: "branchName",
+                        width: "120",
+                        overHidden: true,
+                    },
+                    {
+                        label: "起运港",
+                        prop: "podCname",
+                        width: "80",
+                        overHidden: true,
+                        search: true,
+                        type: 'select',
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bports/list?current=1&size=5&cnName={{key}}",
+                        props: {
+                            label: 'cnName',
+                            value: 'cnName',
+                            desc: 'code',
+                            res: 'data.records'
+                        },
+                    },
+                    {
+                        label: "目的港",
+                        prop: "destinationCname",
+                        width: "80",
+                        overHidden: true,
+                        search: true,
+                        type: 'select',
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bports/list?current=1&size=5&cnName={{key}}",
+                        props: {
+                            label: 'cnName',
+                            value: 'cnName',
+                            desc: 'code',
+                            res: 'data.records'
+                        },
+                    },
+                    {
+                        label: "船公司",
+                        prop: "shippingCompanyCname",
+                        width: "80",
+                        overHidden: true,
+                        search: true,
+                        type: 'select',
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bcorps/list?current=1&size=5&corpTypeName=船公司&cnName={{key}}",
+                        props: {
+                            label: 'shortName',
+                            value: 'shortName',
+                            desc: 'code',
+                            res: 'data.records'
+                        },
+                    },
+                    {
+                        label: "运输条款",
+                        prop: "transportationTerms",
+                        width: "80",
+                        overHidden: true,
+                    },
+                    {
+                        label: "状态",
+                        prop: "status",
+                        width: "100",
+                        overHidden: true
+                    },
+                    {
+                        label: "航线",
+                        prop: "airlineCname",
+                        width: "80",
+                        overHidden: true,
+                        search: true,
+                        searchOrder: 3,
+                        type: 'select',
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/blines/list?cnName={{key}}",
+                        props: {
+                            label: 'cnName',
+                            value: 'cnName',
+                            res: 'data.records'
+                        },
+                    },
+                    {
+                        label: "制单人",
+                        prop: "createUserName",
+                        width: "100",
+                        overHidden: true,
+                    },
+                    {
+                        label: "制单日期",
+                        prop: "createTime",
+                        width: "120",
+                        overHidden: true,
+                    },
+                    {
+                        label: "修改人",
+                        prop: "updateUserName",
+                        width: "100",
+                        overHidden: true
+                    },
+                    {
+                        label: "修改日期",
+                        prop: "updateTime",
+                        width: "120",
+                        overHidden: true,
+                    },
+                    {
+                        label: "备注",
+                        prop: "remarks",
+                        width: "100",
+                        overHidden: true
+                    },
+                ]
+            },
+            data: [],
+        };
+    },
+    components: {
+        detailsPage
+    },
+    async created() {
+        this.option = await this.getColumnData(this.getColumnName(498), this.optionBack);
+    },
+    activated() {
+        setTimeout(() => {
+            if (this.$route.query.home) {
+                this.addButton();
+            }
+        }, 100);
+    },
+    methods: {
+        checkBills() {
+            for (let item of this.selectionList) {
+                if (item.status != '录入') {
+                    return this.$message.error("单据已提交审核,请勿重复操作");
+                }
+            }
+            let ids = []
+            for (let item of this.selectionList) {
+                ids.push(item.id)
+            }
+            let obj = {
+                ids: ids.join(","),
+                url: '/iosBasicData/costcenter/coc/index',
+                pageStatus: "",
+                pageLabel: "航线成本(COC)",
+            }
+            this.$confirm('是否批量单据请核?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                const loading = this.$loading({
+                    lock: true,
+                    text: '加载中',
+                    spinner: 'el-icon-loading',
+                    background: 'rgba(255,255,255,0.7)'
+                });
+                checkBillsBatch(obj).then(res => {
+                    this.$message.success("操作成功!");
+                    this.onLoad(this.page, this.query);
+                }).finally(() => {
+                    loading.close();
+                })
+            })
+
+        },
+        batchRevoke() {
+            for (let item of this.selectionList) {
+                if (item.status == '录入') {
+                    return this.$message.error("单据未提交审核,请正确操作");
+                }
+            }
+            let ids = []
+            for (let item of this.selectionList) {
+                ids.push(item.id)
+            }
+            let obj = {
+                ids: ids.join(","),
+            }
+            this.$confirm('是否批量单据请核?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                const loading = this.$loading({
+                    lock: true,
+                    text: '加载中',
+                    spinner: 'el-icon-loading',
+                    background: 'rgba(255,255,255,0.7)'
+                });
+                batchRevoke(obj).then(res => {
+                    this.$message.success("操作成功!");
+                    this.onLoad(this.page, this.query);
+                }).finally(() => {
+                    loading.close();
+                })
+            })
+
+        },
+        swap() {
+            let obj = this.deepClone(this.query)
+            this.query.podCname = obj.destinationCname
+            this.query.destinationCname = obj.podCname
+        },
+        addButton() {
+            this.isShow = false
+        },
+        copyButton() {
+            this.isShow = false
+            this.detailData = {
+                copyId: this.selectionList[0].id
+            };
+        },
+        rowEdit(row) {
+            this.detailData = {
+                id: row.id
+            };
+            this.isShow = false
+        },
+        // 删除
+        rowDel(row, index) {
+            if (row.item == 1) {
+                return this.$message.error("存在明细不允许删除");
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                remove({ ids: row.id }).then(res => {
+                    this.onLoad(this.page, this.query);
+                    this.$message.success("成功删除");
+                })
+            })
+
+        },
+        searchReset() {
+            this.query = this.$options.data().query;
+            this.onLoad(this.page);
+        },
+        // 搜索按钮点击
+        searchChange(params, done) {
+            this.page.currentPage = 1;
+            this.onLoad(this.page, this.query);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            let obj = {}
+            obj = {
+                ...Object.assign(params, this.query),
+            }
+            this.loading = true;
+            getList(page.currentPage, page.pageSize, obj).then(res => {
+                this.data = res.data.data.records;
+                this.page.total = res.data.data.total;
+                this.$nextTick(() => {
+                    this.$refs.crud.doLayout();
+                    this.$refs.crud.dicInit();
+                });
+            }).finally(() => {
+                this.loading = false;
+            })
+        },
+        // 详情的返回列表
+        goBack() {
+            // 初始化数据
+            if (JSON.stringify(this.$route.query) != "{}") {
+                this.$router.$avueRouter.closeTag();
+                this.$router.push({
+                    path: "/iosBasicData/costcenter/coc/index"
+                });
+            }
+            this.detailData = {}
+            this.isShow = true;
+            this.onLoad(this.page, this.query);
+        },
+        outExport() {
+            let config = { params: { ...this.query } }
+            if (config.params) {
+                for (const propName of Object.keys(config.params)) {
+                    const value = config.params[propName];
+                    if (value !== null && typeof (value) !== "undefined") {
+                        if (value instanceof Array) {
+                            for (const key of Object.keys(value)) {
+                                let params = propName + '[' + key + ']';
+                                config.params[params] = value[key]
+                            }
+                            delete config.params[propName]
+                        }
+                    }
+                }
+            }
+            const routeData = this.$router.resolve({
+                path: '/api/blade-los/routecost/exportRouteCost',      //跳转目标窗口的地址
+                query: {
+                    ...config.params,    //括号内是要传递给新窗口的参数
+                    identification: this.url
+                }
+            })
+            window.open(routeData.href.slice(1, routeData.href.length) + '&' + `${this.website.tokenHeader}=${getToken()}`);
+        },
+        //自定义列保存
+        async saveColumn(ref, option, optionBack, code) {
+            /**
+             * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
+             * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
+             * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
+             */
+            const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+            if (inSave) {
+                this.$message.success("保存成功");
+                //关闭窗口
+                this.$refs[ref].$refs.dialogColumn.columnBox = false;
+                this.selectionList = []
+                this.searchReset()
+                this.$nextTick(() => {
+                    this.$refs.crud.refreshTable();
+                    this.$refs.crud.dicInit();
+                });
+            }
+        },
+        //自定义列重置
+        async resetColumn(ref, option, optionBack, code) {
+            this[option] = this[optionBack];
+            const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+            if (inSave) {
+                this.$message.success("重置成功");
+                this.$refs[ref].$refs.dialogColumn.columnBox = false;
+                this.selectionList = []
+                this.searchReset()
+                this.$nextTick(() => {
+                    this.$refs.crud.refreshTable();
+                    this.$refs.crud.dicInit();
+                });
+            }
+        },
+        // 更改表格颜色
+        headerClassName(tab) {
+            //颜色间隔
+            let back = ""
+            if (tab.columnIndex >= 0 && tab.column.level === 1) {
+                if (tab.columnIndex % 2 === 0) {
+                    back = "back-one"
+                } else if (tab.columnIndex % 2 === 1) {
+                    back = "back-two"
+                }
+            }
+            return back;
+        },
+
+    }
+}
+
+</script>
+
+<style lang="scss" scoped>
+::v-deep #out-table .back-one {
+    background: #ecf5ff !important;
+    text-align: center;
+}
+
+::v-deep #out-table .back-two {
+    background: #ecf5ff !important;
+    text-align: center;
+}
+
+.pointerClick {
+    cursor: pointer;
+    color: #1e9fff;
+}
+
+::v-deep .el-col-md-8 {
+    width: 24.33333%;
+}
+</style>

+ 1081 - 0
src/views/iosBasicData/businessCenter/mkt&slot/detailsPage.vue

@@ -0,0 +1,1081 @@
+<template>
+  <div>
+    <div class="customer-head">
+      <div class="customer-back">
+        <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
+          @click="goBack()">返回列表
+        </el-button>
+      </div>
+      <div class="add-customer-btn">
+        <el-button class="el-button--small-yh" style="margin-left: 6px;" type="primary" size="small" v-if="editButton"
+          :disabled="showLock || !(roleName.indexOf('admin') != -1 || roleName.indexOf('允许修改他人业务') != -1 || saberUserInfo.user_id == form.createUser)"
+          @click="inEdit">编 辑
+        </el-button>
+        <el-button class="el-button--small-yh" v-else style="margin-left: 6px;" type="primary" size="small"
+          :disabled="isSaveBtn || editDisabled" @click.stop="submit">保 存
+        </el-button>
+        <el-button v-if="form.id" class="el-button--small-yh" style="margin-left: 6px;" type="success" size="small"
+          :disabled="form.billStatus != '录入'" @click="allClick('提交')">提交
+        </el-button>
+        <el-button v-if="form.billStatus == '已提交'" class="el-button--small-yh" style="margin-left: 6px;" type="danger"
+          size="small" @click="allClick('撤销提交')">撤销提交
+        </el-button>
+        <!-- <el-button v-if="form.id" class="el-button--small-yh" style="margin-left: 6px;" type="success" size="small"
+          :disabled="form.status != '录入'" @click="application">单据请核
+        </el-button> -->
+        <!-- <el-button v-if="form.status == '审核提交'" class="el-button--small-yh" style="margin-left: 6px;" type="danger"
+          size="small" @click="revokeApplication">撤销单据请核
+        </el-button> -->
+        <!-- <el-dropdown style="line-height: 0">
+          <el-button class="el-button--small-yh" style="margin-left: 6px;" type="warning" :disabled="!form.id"
+            size="small">
+            审 批<i class="el-icon-arrow-down el-icon--right"></i>
+          </el-button>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item @click.native="checkScheduleDialog = true, checkId = form.id">审核进度
+            </el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown> -->
+      </div>
+    </div>
+    <div style="margin-top: 50px">
+      <trade-card title="基础信息">
+        <avue-form :option="optionForm" v-model="form" ref="form">
+          <tempalte slot="polCnName">
+            <dic-select v-model="form.polCnName" placeholder="港口" key="id" label="cnName" res="records"
+              :disabled="editDisabled" url="/blade-los/bports/list?status=0" :filterable="true" :remote="true"
+              dataName="cnName" @selectChange="dicChange('polCnName', $event)" :slotRight="true"
+              rightLabel="code"></dic-select>
+          </tempalte>
+          <tempalte slot="podCnName">
+            <dic-select v-model="form.podCnName" placeholder="港口" key="id" label="cnName" res="records"
+              :disabled="editDisabled" url="/blade-los/bports/list?status=0" :filterable="true" :remote="true"
+              dataName="cnName" @selectChange="dicChange('podCnName', $event)" :slotRight="true"
+              rightLabel="code"></dic-select>
+          </tempalte>
+          <tempalte slot="lineCnName">
+            <dic-select v-model="form.lineCnName" placeholder="航线" key="id" label="cnName" res="records"
+              url="/blade-los/blines/list?status=0" :filterable="true" :remote="true" dataName="cnName"
+              @selectChange="dicChange('lineCnName', $event)" :disabled="editDisabled"></dic-select>
+          </tempalte>
+        </avue-form>
+      </trade-card>
+      <trade-card title="成本价">
+        <avue-crud :option="option" :data="form.mktSlotItemList" id="out-table" class="xstable" ref="crud"
+          :header-cell-class-name="headerClassName" :row-style="{ height: '20px', padding: '0px' }"
+          :cell-style="{ height: '20px', padding: '0px' }" @selection-change="selectionChange"
+          @resetColumn="resetColumn('crud', 'option', 'optionBack', 496)"
+          @saveColumn="saveColumn('crud', 'option', 'optionBack', 496)" @row-click="handleRowClick">
+          <template slot="menuLeft">
+            <el-button type="danger" plain size="small" :disabled="editDisabled || selectionList.length == 0"
+              @click="allClick('批量删除')">批量删除</el-button>
+            <el-button type="success" size="small" :disabled="!form.id || form.mktSlotItemList.length"
+              @click="allClick('提取运价')">提取运价</el-button>
+            <el-button type="primary" size="small" @click="allClick('生成报价')"
+              :disabled="editDisabled || selectionList.length == 0">生成报价</el-button>
+            <el-button type="danger" size="small" @click="allClick('撤销报价')"
+              :disabled="editDisabled || selectionList.length == 0">撤销报价</el-button>
+            <el-button type="success" size="small" @click="allClick('查看报价')"
+              :disabled="editDisabled || selectionList.length == 0">查看报价</el-button>
+          </template>
+        </avue-crud>
+      </trade-card>
+      <trade-card title="销售价">
+        <avue-crud :option="option2" :data="mktSlotQuotationList" id="out-table" ref="crud2"
+          :header-cell-class-name="headerClassName" :row-style="{ height: '20px', padding: '0px' }"
+          :cell-style="{ height: '20px', padding: '0px' }" @selection-change="selectionChange2"
+          @resetColumn="resetColumn('crud2', 'option2', 'optionBack2', 497)"
+          @saveColumn="saveColumn('crud2', 'option2', 'optionBack2', 497)">
+          <template slot="menuLeft">
+            <el-button type="info" plain size="small" :disabled="editDisabled"
+              @click="allClick('一键保存')">一键保存</el-button>
+            <!-- <el-button type="info" plain size="small" :disabled="editDisabled"
+              @click="allClick('一键编辑')">一键编辑</el-button> -->
+            <el-button type="danger" plain size="small" :disabled="editDisabled || selectionList2.length == 0"
+              @click="allClick('批量删除2')">批量删除</el-button>
+          </template>
+          <!-- <template slot="indexHeader" slot-scope="{row,index}">
+            <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="editDisabled" circle @click="addRow()">
+            </el-button>
+          </template> -->
+          <!-- <template slot="index" slot-scope="{row,index}">
+            <span>{{ index + 1 }}</span>
+          </template> -->
+        </avue-crud>
+      </trade-card>
+      <trade-card title="操作记录">
+        <avue-form :option="optionForm2" v-model="form" ref="form2">
+        </avue-form>
+      </trade-card>
+    </div>
+    <reports :id="form.id" :assemblyForm="form" businessValue="MYDL" ref="report"></reports>
+    <!--审核弹窗-->
+    <el-dialog append-to-body title="审批进度" class="el-dialogDeep" :visible.sync="checkScheduleDialog" width="40%"
+      :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check-schedule :checkId="checkId" :batchNo="batchNo" @choceScheduleFun="choceScheduleFun"></check-schedule>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  detail,
+  submit,
+  pleaseCheck,
+  repealCancel,
+  itemRemove,
+  generateQuotation,
+  revokeQuotation,
+  MktSlotQuotation,
+  quotationRemove,
+  submitItemList,
+  submitMktSlot,
+  revokeMktSlot,
+  copyAgent
+} from "@/api/iosBasicData/businessCenter/mkt&slot.js";
+import dicSelect from "@/components/dicSelect/main";
+import checkSchedule from "@/components/checkH/checkSchedule.vue";
+import businessReports from "@/components/tradeAgency/businessReports.vue";
+import reports from "@/components/tradeAgency/reports.vue";
+import { getToken } from "@/util/auth";
+import _ from "lodash";
+import { Header } from "element-ui";
+export default {
+  name: "detailsPage",
+  data() {
+    return {
+      selectionList: [],
+      selectionList2: [],
+      checkId: '', // 审核需要的id
+      batchNo: '',
+      checkScheduleDialog: false, // 审核弹窗
+      editButton: false,
+      editDisabled: false,
+      form: {
+        mktSlotItemList: []
+      },
+      oldForm: {
+        mktSlotItemList: []
+      },
+      mktSlotQuotationList: [],
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        disabled: false,
+        // labelWidth: 120,
+        column: [
+          {
+            label: '起运港',
+            prop: 'polCnName',
+            disabled: false,
+            rules: [{
+              required: true,
+              message: " ",
+              trigger: "blur"
+            }]
+          },
+          {
+            label: '目的港',
+            prop: 'podCnName',
+            disabled: false,
+          },
+          {
+            label: '有效日期起',
+            prop: 'effectiveStartDate',
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            disabled: false
+          },
+          {
+            label: '有效日期止',
+            prop: 'effectiveEndDate',
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            disabled: false
+          },
+          {
+            label: '航线',
+            prop: "lineCnName",
+            disabled: false,
+          },
+          {
+            label: '备注',
+            prop: 'remarks',
+            type: 'textarea',
+            minRows: 2,
+            span: 18
+          }]
+      },
+      optionForm2: {
+        menuBtn: false,
+        span: 6,
+        disabled: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: '系统号',
+            prop: 'sysNo',
+            disabled: true
+          },
+          {
+            label: '制单人',
+            prop: "createUserName",
+            disabled: true,
+          },
+          {
+            label: '制单日期',
+            prop: "createTime",
+            disabled: true,
+          },
+          {
+            label: '修改人',
+            prop: "updateUserName",
+            disabled: true,
+          },
+          {
+            label: '修改日期',
+            prop: "updateTime",
+            disabled: true,
+          },
+        ]
+      },
+      option: {},
+      optionBack: {
+        height: '400px',
+        // calcHeight: 30,
+        menuWidth: 60,
+        tip: false,
+        border: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        refreshBtn: false,
+        selection: true,
+        align: 'center',
+        menu: false,
+        index: true,
+        column: [
+          {
+            label: '船公司',
+            prop: 'shippingCompanyCname',
+            overHidden: true,
+            width: 100
+          },
+          {
+            label: '承运人',
+            prop: 'actualShippingCompanyCname',
+            overHidden: true,
+            width: 100,
+          },
+          {
+            label: '20GP',
+            prop: 'gp20',
+            overHidden: true,
+            width: 60,
+          },
+          {
+            label: '40GP',
+            prop: 'gp40',
+            overHidden: true,
+            width: 60,
+          },
+          {
+            label: '40HC',
+            prop: 'hc40',
+            overHidden: true,
+            width: 60,
+          },
+          {
+            label: '重要指示',
+            prop: 'importantInstructions',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '有效期起',
+            prop: 'effectiveStartDate',
+            overHidden: true,
+            width: 100,
+          },
+          {
+            label: '有效期止',
+            prop: 'effectiveEndDate',
+            overHidden: true,
+            width: 100,
+          },
+          {
+            label: '币别',
+            prop: 'curCode',
+            overHidden: true,
+            width: 60,
+          },
+          {
+            label: '起运港',
+            prop: 'polCnName',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '目的港',
+            prop: 'podCnName',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '航线代码',
+            prop: 'lineCode',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '转船/直达',
+            prop: 'flightType',
+            overHidden: true,
+            width: 90,
+          },
+          {
+            label: '中转港',
+            prop: 'transitPortCname',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '舱位类型',
+            prop: 'cabinType',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '舱位数',
+            prop: 'shippingSpaceNumber',
+            overHidden: true,
+            width: 70,
+          },
+          {
+            label: '限重(吨)',
+            prop: 'weightLimit',
+            overHidden: true,
+            width: 70,
+          },
+          {
+            label: '是否合营',
+            prop: 'whetherJointVenture',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '合作伙伴',
+            prop: 'cooperativePartnerName',
+            overHidden: true,
+            width: 80,
+          },
+          {
+            label: '箱属',
+            prop: 'boxBelongsTo',
+            overHidden: true,
+            width: 100,
+          },
+          {
+            label: "制单人",
+            prop: "createUserName",
+            overHidden: true,
+            width: 100,
+          },
+          {
+            label: "制单日期",
+            prop: "createTime",
+            type: "date",
+            overHidden: true,
+            width: 120,
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss"
+          },
+          {
+            label: "修改人",
+            prop: "updateUserName",
+            overHidden: true,
+          },
+          {
+            label: "修改日期",
+            prop: "updateTime",
+            type: "date",
+            overHidden: true,
+            width: 120,
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss"
+          },
+          {
+            label: '备注',
+            prop: 'remarks',
+            cell: true,
+            width: 150,
+            overHidden: true,
+          }]
+      },
+      option2: {},
+      optionBack2: {
+        height: '200px',
+        // height: 'auto',
+        calcHeight: 30,
+        menuWidth: 60,
+        tip: false,
+        border: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        refreshBtn: false,
+        selection: true,
+        align: 'center',
+        menu: false,
+        index: true,
+        column: [
+          {
+            label: 'ETD',
+            prop: 'etd',
+            width: 100,
+            overHidden: true,
+          },
+          {
+            label: '星期',
+            prop: 'week',
+            width: 100,
+            overHidden: true,
+          },
+          {
+            label: '20GP',
+            prop: 'gp20',
+            width: 100,
+            cell: true,
+            overHidden: true,
+          },
+          {
+            label: '40GP',
+            prop: 'gp40',
+            width: 100,
+            cell: true,
+            overHidden: true,
+          },
+          {
+            label: '40HC',
+            prop: 'hc40',
+            width: 100,
+            cell: true,
+            overHidden: true,
+          },
+          {
+            label: '币别',
+            prop: 'curCode',
+            width: 100,
+            cell: true,
+            type: "select",
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            overHidden: true,
+          },
+          {
+            label: "制单人",
+            prop: "createUserName",
+            overHidden: true,
+          },
+          {
+            label: "制单日期",
+            prop: "createTime",
+            type: "date",
+            overHidden: true,
+            width: 120,
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss"
+          },
+          {
+            label: "修改人",
+            prop: "updateUserName",
+            overHidden: true,
+          },
+          {
+            label: "修改日期",
+            prop: "updateTime",
+            type: "date",
+            overHidden: true,
+            width: 120,
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd HH:mm:ss"
+          },
+          {
+            label: '备注',
+            prop: 'remarks',
+            cell: true,
+            width: 150,
+            overHidden: true,
+          }]
+      },
+      roleName: []
+    }
+  },
+  components: {
+    dicSelect,
+    checkSchedule,
+    businessReports,
+    reports
+  },
+  props: {
+    detailData: Object
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(496), this.optionBack);
+    this.option2 = await this.getColumnData(this.getColumnName(497), this.optionBack2);
+    this.roleName = localStorage.getItem('roleName').split(',')
+
+    if (this.detailData && this.detailData.id) {
+      // this.editButton = true
+      // this.editDisabled = true
+      // this.optionForm.disabled = true
+      this.getDetail(this.detailData.id)
+    }
+    if (this.$route.query.params) {
+      this.getDetail(this.$route.query.params)
+    }
+    if (this.detailData && this.detailData.copyId) {
+      this.getCopydate(this.detailData.copyId)
+    }
+  },
+  methods: {
+    dicChange(name, row) {
+      if (name == 'lineCnName') {
+        if (row) {
+          this.form.lineId = row.id
+          this.form.lineCode = row.code
+          this.form.lineEnName = row.enName
+        } else {
+          this.form.lineId = null
+          this.form.lineCode = null
+          this.form.lineEnName = null
+          this.form.lineCnName = null
+        }
+      }
+      if (name == 'polCnName') {
+        if (row) {
+          this.form.polId = row.id
+          this.form.polCode = row.code
+          this.form.polEnName = row.enName
+        } else {
+          this.form.polId = null
+          this.form.polCode = null
+          this.form.polEnName = null
+          this.form.polCnName = null
+        }
+      }
+      if (name == 'podCnName') {
+        if (row) {
+          this.form.podId = row.id
+          this.form.podCode = row.code
+          this.form.podEnName = row.enName
+        } else {
+          this.form.podId = null
+          this.form.podCode = null
+          this.form.podEnName = null
+          this.form.podCnName = null
+        }
+      }
+    },
+    handleRowClick(row) {
+      row.mktSlotQuotationList.forEach(row => {
+        row.$cellEdit = true
+      })
+      this.mktSlotQuotationList = row.mktSlotQuotationList
+      this.$refs.crud2.dicInit();
+    },
+    rowDicChange(name, row, el) { },
+    addRow() {
+      // if (!this.form.id) {
+      //   return this.$message.error("请保存数据");
+      // }
+      this.$refs.crud.dicInit();
+      this.form.mktSlotItemList.push({
+        pid: this.form.id,
+        boxEastId: this.form.boxEastId,
+        boxEastName: this.form.boxEastName,
+        boxBelongsTo: this.form.boxBelongsTo,
+        boxClass: this.form.boxClass,
+        boxStatus: '好',
+        boxCondition: this.form.boxCondition,
+        activationDate: this.form.purchaseDate,
+        $cellEdit: true
+      })
+
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionChange2(list) {
+      this.selectionList2 = list;
+    },
+    getDetail(id) {
+      const loading = this.$loading({
+        lock: true,
+        text: '加载中',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255,255,255,0.7)'
+      });
+      detail({ id: id }).then(res => {
+        if (res.data.data.billStatus == '已提交') {
+          // this.editButton = true
+          this.editDisabled = true
+          this.optionForm.disabled = true
+        } else {
+          this.editDisabled = false
+          this.optionForm.disabled = false
+        }
+        this.form = res.data.data
+      }).finally(() => {
+        loading.close()
+      })
+    },
+    getCopydate(id) {
+      const loading = this.$loading({
+        lock: true,
+        text: '加载中',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255,255,255,0.7)'
+      });
+      copyAgent({ id: id }).then(res => {
+        this.form = res.data.data
+      }).finally(() => {
+        loading.close()
+      })
+    },
+    inEdit() {
+      this.editButton = false
+      if (this.form.status == '录入') {
+        this.editDisabled = false
+        this.optionForm.disabled = false
+      }
+    },
+    rowDel(row, index) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          itemRemove({ ids: row.id }).then(res => {
+            this.form.mktSlotItemList.splice(index, 1);
+            this.$message.success("成功删除");
+          })
+        } else {
+          this.form.mktSlotItemList.splice(index, 1);
+        }
+      });
+    },
+    allClick(name) {
+      if (name == '提取运价') {
+        let obj = {
+          podId: this.form.polId,
+          destinationId: this.form.podId,
+          effectiveStartDate: this.form.effectiveStartDate,
+          effectiveEndDate: this.form.effectiveEndDate,
+          airlineId: this.form.lineId
+        }
+        MktSlotQuotation(obj).then(res => {
+          res.data.data.forEach(row => {
+            row.pid = this.form.id
+          })
+          this.form.mktSlotItemList = res.data.data
+          this.submit()
+        })
+      }
+      if (name == '生成报价') {
+        for (let item of this.selectionList) {
+          if (item.whetherQuotation == 1) {
+            return this.$message.error("已生成报价,请重新选择");
+          }
+        }
+        this.$confirm('是否生成报价?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          let obj = {
+            ...this.form,
+            mktSlotItemList: this.selectionList,
+          }
+          generateQuotation(obj).then(res => {
+            this.$message.success("操作成功");
+            this.mktSlotQuotationList = []
+            this.getDetail(this.form.id)
+          })
+        })
+      }
+      if (name == '撤销报价') {
+        for (let item of this.selectionList) {
+          if (item.whetherQuotation == 0) {
+            return this.$message.error("未生成报价,请重新选择");
+          }
+        }
+        this.$confirm('是否撤销报价?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          let obj = {
+            ...this.form,
+            mktSlotItemList: this.selectionList,
+          }
+          revokeQuotation(obj).then(res => {
+            this.$message.success("操作成功");
+            this.mktSlotQuotationList = []
+            this.getDetail(this.form.id)
+          })
+        })
+      }
+      if (name == '一键保存') {
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        submitItemList(this.mktSlotQuotationList).then(res => {
+          this.$message.success("保存成功");
+          this.mktSlotQuotationList = res.data.data
+        }).finally(() => {
+          loading.close();
+        })
+      }
+      if (name == '一键编辑') {
+        this.$refs.crud2.dicInit();
+        for (let row of this.mktSlotQuotationList) {
+          this.$set(row, "$cellEdit", true);
+        }
+      }
+      if (name == '批量删除') {
+        for (let item of this.selectionList) {
+          if (item.whetherQuotation == 1) {
+            return this.$message.error("已生成报价,请重新选择");
+          }
+        }
+        let multiList = []
+        let arr = []
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          multiList = this.selectionList
+          arr = this.form.mktSlotItemList
+          // 获取有id 的数据
+          const itemsWithId = multiList.filter(item => item.id != null);
+          let arrIds = itemsWithId.map(item => item.id) // 获取id 数据
+          // 把选中的删除掉
+          multiList.forEach((item) => {
+            for (let index in arr) {
+              if (JSON.stringify(item) == JSON.stringify(arr[index])) {
+                arr.splice(Number(index), 1)
+              }
+            }
+          })
+          if (itemsWithId.length != 0) {
+            const loading = this.$loading({
+              lock: true,
+              text: '加载中',
+              spinner: 'el-icon-loading',
+              background: 'rgba(255,255,255,0.7)'
+            });
+            itemRemove({ ids: arrIds.join(',') }).then(res => {
+              this.$message.success("删除成功");
+            }).finally(() => {
+              loading.close();
+            })
+          }
+        })
+      }
+      if (name == '批量删除2') {
+        let multiList = []
+        let arr = []
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          multiList = this.selectionList2
+          arr = this.mktSlotQuotationList
+          // 获取有id 的数据
+          const itemsWithId = multiList.filter(item => item.id != null);
+          let arrIds = itemsWithId.map(item => item.id) // 获取id 数据
+          // 把选中的删除掉
+          multiList.forEach((item) => {
+            for (let index in arr) {
+              if (JSON.stringify(item) == JSON.stringify(arr[index])) {
+                arr.splice(Number(index), 1)
+              }
+            }
+          })
+          if (itemsWithId.length != 0) {
+            const loading = this.$loading({
+              lock: true,
+              text: '加载中',
+              spinner: 'el-icon-loading',
+              background: 'rgba(255,255,255,0.7)'
+            });
+            quotationRemove({ ids: arrIds.join(',') }).then(res => {
+              this.$message.success("删除成功");
+            }).finally(() => {
+              loading.close();
+            })
+          }
+        })
+      }
+      if (name == '提交') {
+        if (this.form.mktSlotItemList.length == 0) {
+          return this.$message.success("成本价没有数据,请勿提交");
+        }
+        this.$confirm('是否提交?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          let obj = {
+            ids: this.form.id,
+          }
+          submitMktSlot(obj).then(res => {
+            this.$message.success("操作成功");
+            this.mktSlotQuotationList = []
+            this.getDetail(this.form.id)
+          })
+        })
+      }
+      if (name == '撤销提交') {
+        if (this.form.mktSlotItemList.length == 0) {
+          return this.$message.success("成本价没有数据,请勿撤销提交");
+        }
+        this.$confirm('是否撤销提交?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          let obj = {
+            ids: this.form.id,
+          }
+          revokeMktSlot(obj).then(res => {
+            this.$message.success("操作成功");
+            this.mktSlotQuotationList = []
+            this.getDetail(this.form.id)
+          })
+        })
+      }
+    },
+    submit(type) {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          const loading = this.$loading({
+            lock: true,
+            text: '加载中',
+            spinner: 'el-icon-loading',
+            background: 'rgba(255,255,255,0.7)'
+          });
+          submit(this.form).then(res => {
+            this.$message.success("保存成功");
+            this.getDetail(res.data.data.id)
+          }).finally(() => {
+            loading.close();
+          })
+
+        } else {
+          return false;
+        }
+      });
+    },
+    application() {
+      this.$confirm("确定请核数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        let obj = {}
+        obj = {
+          id: this.form.id,
+          url: '/iosBasicData/costcenter/coc/index',
+          pageStatus: '',
+          pageLabel: '航线成本(COC)',
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        pleaseCheck(obj).then(res => {
+          this.$message.success("请核成功");
+          this.getDetail(res.data.data.id)
+        }).finally(() => {
+          loading.close();
+        })
+      });
+    },
+    revokeApplication() {
+      this.$confirm("确定撤销请核?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        let obj = {}
+        obj = {
+          id: this.form.id,
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        repealCancel(obj).then(res => {
+          this.$message.success("撤销请核成功");
+          this.getDetail(res.data.data.id)
+          this.editDisabled = false
+          this.optionForm.disabled = false
+        }).finally(() => {
+          loading.close();
+        })
+      });
+    },
+    //请核关闭
+    choceScheduleFun() {
+      this.checkScheduleDialog = false
+    },
+    //自定义列保存
+    async saveColumn(ref, option, optionBack, code) {
+      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //自定义列重置
+    async resetColumn(ref, option, optionBack, code) {
+      this[option] = this[optionBack];
+      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    },
+    // 更改表格颜色
+    headerClassName(tab) {
+      //颜色间隔
+      let back = ""
+      if (tab.columnIndex >= 0 && tab.column.level === 1) {
+        if (tab.columnIndex % 2 === 0) {
+          back = "back-one"
+        } else if (tab.columnIndex % 2 === 1) {
+          back = "back-two"
+        }
+      }
+      return back;
+    },
+    goBack(type) {
+      this.$emit("goBack");
+    },
+  },
+  watch: {
+    // 监听业务类型 如果不是分单 可以编辑分单号
+    'form.mktSlotItemList': {
+      // 执行方法
+      handler(oldValue, newValue) {
+        if (this.form.mktSlotItemList.length > 0) {
+          this.optionForm.column.forEach(item => {
+            if (item.prop == 'containerNumber' || item.prop == 'boxCondition') {
+              item.disabled = true
+            }
+          })
+        } else {
+          this.optionForm.column.forEach(item => {
+            if (item.prop == 'containerNumber' || item.prop == 'boxCondition') {
+              item.disabled = false
+            }
+          })
+        }
+
+      },
+      deep: true, // 深度监听
+      immediate: true  // 第一次改变就执行
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-form-item__error {
+  display: none !important;
+}
+
+::v-deep .el-form-item {
+  margin-bottom: 8px !important;
+}
+
+::v-deep .el-table .cell {
+  padding: 0 2px !important;
+
+  .el-form-item {
+    margin-bottom: 0px !important;
+  }
+
+}
+
+::v-deep .avue-crud .el-table .el-form-item__label {
+  left: -1px;
+}
+
+// ::v-deep#out-table .back-one {
+//     background: #ecf5ff !important;
+// }
+
+// ::v-deep#out-table .back-two {
+//     background: #ecf5ff !important;
+// }
+
+::v-deep #out-table .back-one {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+
+::v-deep #out-table .back-two {
+  background: #ecf5ff !important;
+  text-align: center;
+  padding: 4px 0;
+}
+
+
+::v-deep .el-table--small td,
+.el-table--small th {
+  padding: 2px !important;
+}
+
+::v-deep .el-card__body {
+  padding: 3px 10px;
+}
+
+::v-deep .box-card .el-card__body {
+  padding: 4px !important;
+}
+::v-deep .xstable .el-table__body-wrapper{
+  height: 350px
+}
+.disabledBox {
+  display: flex;
+  align-items: center;
+}
+
+.meetSize {
+  font-size: 16px;
+  color: #54BCBD;
+}
+</style>

+ 374 - 0
src/views/iosBasicData/businessCenter/mkt&slot/index.vue

@@ -0,0 +1,374 @@
+<template>
+    <div>
+        <basic-container v-if="isShow">
+            <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :search.sync="query"
+                v-model="form" id="out-table" :header-cell-class-name="headerClassName" ref="crud" @row-del="rowDel"
+                @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+                @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+                @resetColumn="resetColumn('crud', 'option', 'optionBack', 495)"
+                @saveColumn="saveColumn('crud', 'option', 'optionBack', 495)" @on-load="onLoad">
+                <template slot="menuLeft">
+                    <el-button type="primary" size="small" icon="el-icon-plus" @click="addButton">创建报价
+                    </el-button>
+                    <!-- <el-button type="warning" size="small" @click="outExport">导 出
+                    </el-button> -->
+                    <el-button type="success" size="small" :disabled="selectionList.length != 1"
+                        @click="copyButton">复制报价
+                    </el-button>
+                </template>
+                <template slot="menu" slot-scope="{ row, index }">
+                    <el-button size="small" icon="el-icon-edit" type="text" @click="rowEdit(row)">编辑</el-button>
+                    <el-button size="small" icon="el-icon-delete" type="text" @click="rowDel(row, index)"
+                        :disabled="row.status != '录入'">删 除</el-button>
+                </template>
+                <template slot="polCnName" slot-scope="{ row }">
+                    <span style="color: #1e9fff;cursor: pointer;" @click="rowEdit(row)">{{ row.polCnName }}</span>
+                </template>
+                <template slot="podCnName" slot-scope="{ row }">
+                    <span style="color: #1e9fff;cursor: pointer;" @click="rowEdit(row)">{{ row.podCnName }}</span>
+                </template>
+            </avue-crud>
+        </basic-container>
+        <detailsPage v-if="!isShow" :detailData="detailData" @goBack="goBack"></detailsPage>
+    </div>
+</template>
+
+<script>
+import { getList, remove } from "@/api/iosBasicData/businessCenter/mkt&slot.js";
+import { getWorkDicts } from "@/api/system/dictbiz";
+import detailsPage from "./detailsPage";
+import { getToken } from "@/util/auth";
+import _ from "lodash";
+export default {
+    data() {
+        return {
+            isShow: true,
+            form: {},
+            query: {},
+            loading: false,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0
+            },
+            selectionList: [],
+            option: {},
+            optionBack: {
+                height: 'auto',
+                calcHeight: 30,
+                menuWidth: 140,
+                tip: false,
+                searchShow: true,
+                searchMenuSpan: 12,
+                border: true,
+                index: true,
+                addBtn: false,
+                viewBtn: false,
+                editBtn: false,
+                delBtn: false,
+                selection: true,
+                searchIcon: true,
+                align: 'center',
+                searchIndex: 3,
+                column: [
+                    {
+                        label: '起运港',
+                        prop: 'polCnName',
+                        overHidden: true,
+                        search: true,
+                        type: "select",
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bports/list?status=0&size=5&current=1&cnName={{key}}",
+                        props: {
+                            label: "cnName",
+                            value: "cnName",
+                            desc: 'code',
+                            res: "data.records"
+                        }
+                    },
+                    {
+                        label: '目的港',
+                        prop: 'podCnName',
+                        overHidden: true,
+                        search: true,
+                        type: "select",
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bports/list?status=0&size=5&current=1&cnName={{key}}",
+                        props: {
+                            label: "cnName",
+                            value: "cnName",
+                            desc: 'code',
+                            res: "data.records"
+                        }
+                    },
+                    {
+                        label: '有效日期起',
+                        prop: 'effectiveStartDate',
+                        type: "date",
+                        format: "yyyy-MM-dd",
+                        valueFormat: "yyyy-MM-dd HH:mm:ss",
+                        overHidden: true,
+                    },
+                    {
+                        label: '有效日期止',
+                        prop: 'effectiveEndDate',
+                        type: "date",
+                        format: "yyyy-MM-dd",
+                        valueFormat: "yyyy-MM-dd HH:mm:ss",
+                        overHidden: true,
+                    },
+                    {
+                        label: '有效日期',
+                        prop: 'effectiveDate',
+                        hide: true,
+                        showColumn: false,
+                        search: true,
+                        searchProp: 'effectiveDateList',
+                        overHidden: true,
+                        type: "date",
+                        searchRange: true,
+                        searchDefaultTime: ["00:00:00", "23:59:59"],
+                        format: "yyyy-MM-dd",
+                        valueFormat: "yyyy-MM-dd HH:mm:ss"
+                    },
+                    {
+                        label: '航线',
+                        prop: "lineCnName",
+                        search: true,
+                        type: "select",
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bports/list?status=0&size=5&current=1&cnName={{key}}",
+                        props: {
+                            label: "cnName",
+                            value: "cnName",
+                            desc: 'code',
+                            res: "data.records"
+                        },
+                        overHidden: true,
+                    },
+                    {
+                        label: "制单人",
+                        prop: "createUserName",
+                        overHidden: true,
+                        width: 80,
+                    },
+                    {
+                        label: "制单日期",
+                        prop: "createTime",
+                        type: "date",
+                        overHidden: true,
+                        width: 100,
+                        format: "yyyy-MM-dd",
+                        valueFormat: "yyyy-MM-dd HH:mm:ss"
+                    },
+                    {
+                        label: "修改人",
+                        prop: "updateUserName",
+                        overHidden: true,
+                        width: 80,
+                    },
+                    {
+                        label: "修改日期",
+                        prop: "updateTime",
+                        type: "date",
+                        overHidden: true,
+                        width: 100,
+                        format: "yyyy-MM-dd",
+                        valueFormat: "yyyy-MM-dd HH:mm:ss"
+                    }
+                ]
+            },
+            data: [],
+        };
+    },
+    components: {
+        detailsPage
+    },
+    async created() {
+        this.option = await this.getColumnData(this.getColumnName(495), this.optionBack);
+    },
+    activated() {
+        setTimeout(() => {
+        }, 100);
+    },
+    methods: {
+        addButton() {
+            this.isShow = false
+        },
+        copyButton() {
+            this.isShow = false
+            this.detailData = {
+                copyId: this.selectionList[0].id
+            };
+        },
+        rowEdit(row) {
+            this.detailData = {
+                id: row.id
+            };
+            this.isShow = false
+        },
+        // 删除
+        rowDel(row, index) {
+            if (row.item == 1) {
+                return this.$message.error("存在明细不允许删除");
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                remove({ ids: row.id }).then(res => {
+                    this.onLoad(this.page, this.query);
+                    this.$message.success("成功删除");
+                })
+            })
+
+        },
+        searchReset() {
+            this.query = this.$options.data().query;
+            this.onLoad(this.page);
+        },
+        // 搜索按钮点击
+        searchChange(params, done) {
+            this.page.currentPage = 1;
+            this.onLoad(this.page, this.query);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            let obj = {}
+            obj = {
+                ...Object.assign(params, this.query),
+            }
+            if (obj.effectiveDateList && obj.effectiveDateList.length > 0) {
+                obj.effectiveStartDate = obj.effectiveDateList[0]
+                obj.effectiveEndDate = obj.effectiveDateList[1]
+            }
+            this.loading = true;
+            getList(page.currentPage, page.pageSize, obj).then(res => {
+                this.data = res.data.data.records;
+                this.page.total = res.data.data.total;
+                this.$nextTick(() => {
+                    this.$refs.crud.doLayout();
+                    this.$refs.crud.dicInit();
+                });
+            }).finally(() => {
+                this.loading = false;
+            })
+        },
+        // 详情的返回列表
+        goBack() {
+            // 初始化数据
+            if (JSON.stringify(this.$route.query) != "{}") {
+                this.$router.$avueRouter.closeTag();
+                this.$router.push({
+                    path: "/boxManagement/containerNumber/index"
+                });
+            }
+            this.detailData = {}
+            this.isShow = true;
+            this.onLoad(this.page, this.query);
+        },
+        outExport() {
+            let config = { params: { ...this.query } }
+            if (config.params) {
+                for (const propName of Object.keys(config.params)) {
+                    const value = config.params[propName];
+                    if (value !== null && typeof (value) !== "undefined") {
+                        if (value instanceof Array) {
+                            for (const key of Object.keys(value)) {
+                                let params = propName + '[' + key + ']';
+                                config.params[params] = value[key]
+                            }
+                            delete config.params[propName]
+                        }
+                    }
+                }
+            }
+            const routeData = this.$router.resolve({
+                path: '/api/blade-los/routecost/exportRouteCost',      //跳转目标窗口的地址
+                query: {
+                    ...config.params,    //括号内是要传递给新窗口的参数
+                    identification: this.url
+                }
+            })
+            window.open(routeData.href.slice(1, routeData.href.length) + '&' + `${this.website.tokenHeader}=${getToken()}`);
+        },
+        //自定义列保存
+        async saveColumn(ref, option, optionBack, code) {
+            /**
+             * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
+             * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
+             * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
+             */
+            const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
+            if (inSave) {
+                this.$message.success("保存成功");
+                //关闭窗口
+                this.$refs[ref].$refs.dialogColumn.columnBox = false;
+                this.searchReset()
+            }
+        },
+        //自定义列重置
+        async resetColumn(ref, option, optionBack, code) {
+            this[option] = this[optionBack];
+            const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+            if (inSave) {
+                this.$message.success("重置成功");
+                this.$refs[ref].$refs.dialogColumn.columnBox = false;
+                this.searchReset()
+            }
+        },
+        // 更改表格颜色
+        headerClassName(tab) {
+            //颜色间隔
+            let back = ""
+            if (tab.columnIndex >= 0 && tab.column.level === 1) {
+                if (tab.columnIndex % 2 === 0) {
+                    back = "back-one"
+                } else if (tab.columnIndex % 2 === 1) {
+                    back = "back-two"
+                }
+            }
+            return back;
+        },
+
+    }
+}
+
+</script>
+
+<style lang="scss" scoped>
+::v-deep #out-table .back-one {
+    background: #ecf5ff !important;
+    text-align: center;
+}
+
+::v-deep #out-table .back-two {
+    background: #ecf5ff !important;
+    text-align: center;
+}
+
+.pointerClick {
+    cursor: pointer;
+    color: #1e9fff;
+}
+
+::v-deep .el-col-md-8 {
+    width: 24.33333%;
+}
+</style>

+ 69 - 57
src/views/iosBasicData/costcenter/coc/detailsPage.vue

@@ -46,7 +46,7 @@
                         <dic-select v-model="form.belongingCompanyName" placeholder="所属公司" key="id" label="deptName"
                             url="/blade-system/dept/top-list" :filterable="true" :remote="true" dataName="deptName"
                             @selectChange="dicChange('belongingCompanyName', $event)" :default="true"
-                            :disabled="editDisabled||roleName.includes('secondaryAdmin')"></dic-select>
+                            :disabled="editDisabled || roleName.includes('secondaryAdmin')"></dic-select>
                     </tempalte>
                     <tempalte slot="podCname">
                         <dic-select v-model="form.podCname" placeholder="起运港" key="id" label="cnName" res="records"
@@ -162,12 +162,13 @@
                     </template> -->
                     <template slot="oceanFreightForm" slot-scope="{ row }">
                         <el-input-number v-if="row.$cellEdit" v-model="row.oceanFreight" @change="countChange(row)"
-                            :controls="false" placeholder="请输入 海运费" size="small" style="width: 100%;"></el-input-number>
+                            @blur="blurChange(row)" :controls="false" placeholder="请输入 海运费" size="small"
+                            style="width: 100%;"></el-input-number>
                         <span v-else>{{ row.oceanFreight }}</span>
                     </template>
                 </avue-crud>
             </trade-card>
-<!--            <trade-card title="POL杂费"  >
+            <!--            <trade-card title="POL杂费"  >
                 <avue-crud :option="polOption" :data="polFeeList" id="out-table" ref="crud2"
                     :header-cell-class-name="headerClassName" :row-style="{ height: '20px' }"
                     :cell-style="{ padding: '0px' }" @selection-change="polChange" @select="selectHandle"
@@ -460,7 +461,7 @@ export default {
             editButton: false,
             editDisabled: false,
             form: {
-                 belongingCompanyId: JSON.parse(localStorage.getItem('sysitemData')).deptId,
+                belongingCompanyId: JSON.parse(localStorage.getItem('sysitemData')).deptId,
                 belongingCompanyName: JSON.parse(localStorage.getItem('sysitemData')).deptName,
                 transportationTerms: 'CY-CY',
                 businessType: 'COC',
@@ -546,11 +547,11 @@ export default {
                         prop: "navigateDay",
                         disabled: false,
                     },
-/*                    {
-                        label: '班次',
-                        prop: "classes",
-                        disabled: false,
-                    },*/
+                    /*                    {
+                                            label: '班次',
+                                            prop: "classes",
+                                            disabled: false,
+                                        },*/
                     {
                         label: '航班类型',
                         prop: "flightType",
@@ -720,40 +721,40 @@ export default {
                         formslot: true,
                     },
 
-/*                    {
-                        label: "POL杂费收入",
-                        prop: "polIncome",
-                        width: "100",
-                        overHidden: true,
-                    },
-                    {
-                        label: "POD杂费收入",
-                        prop: "podIncome",
-                        width: "100",
-                        overHidden: true,
-                    },*/
-  /*                  {
-                        label: "成本价",
-                        prop: "costPrice",
-                        width: "80",
-                        overHidden: true,
-                        // cell: true,
-                        // slot: true,
-                        // formslot: true,
-                        // rules: [
-                        //     {
-                        //         required: true,
-                        //         message: '请输入销售价',
-                        //         trigger: 'blur'
-                        //     }
-                        // ]
-                    },*/
-/*                    {
-                        label: "利润",
-                        prop: "totalProfit",
-                        width: "80",
-                        overHidden: true
-                    },*/
+                    /*                    {
+                                            label: "POL杂费收入",
+                                            prop: "polIncome",
+                                            width: "100",
+                                            overHidden: true,
+                                        },
+                                        {
+                                            label: "POD杂费收入",
+                                            prop: "podIncome",
+                                            width: "100",
+                                            overHidden: true,
+                                        },*/
+                    /*                  {
+                                          label: "成本价",
+                                          prop: "costPrice",
+                                          width: "80",
+                                          overHidden: true,
+                                          // cell: true,
+                                          // slot: true,
+                                          // formslot: true,
+                                          // rules: [
+                                          //     {
+                                          //         required: true,
+                                          //         message: '请输入销售价',
+                                          //         trigger: 'blur'
+                                          //     }
+                                          // ]
+                                      },*/
+                    /*                    {
+                                            label: "利润",
+                                            prop: "totalProfit",
+                                            width: "80",
+                                            overHidden: true
+                                        },*/
                     {
                         label: "海运费",
                         prop: "oceanFreight",
@@ -779,18 +780,18 @@ export default {
                             }
                         ]
                     },
-  /*                  {
-                        label: "POL杂费成本",
-                        prop: "polCost",
-                        width: "90",
-                        overHidden: true
-                    },
-                    {
-                        label: "POD杂费成本",
-                        prop: "podCost",
-                        width: "90",
-                        overHidden: true
-                    },*/
+                    /*                  {
+                                          label: "POL杂费成本",
+                                          prop: "polCost",
+                                          width: "90",
+                                          overHidden: true
+                                      },
+                                      {
+                                          label: "POD杂费成本",
+                                          prop: "podCost",
+                                          width: "90",
+                                          overHidden: true
+                                      },*/
                     {
                         label: "制单人",
                         prop: "createUserName",
@@ -1179,7 +1180,7 @@ export default {
                 ]
             },
             roleName: [],
-            saberUserInfo:null
+            saberUserInfo: null
         }
     },
     components: {
@@ -1197,7 +1198,7 @@ export default {
         this.option = await this.getColumnData(this.getColumnName(452), this.optionBack);
         this.polOption = await this.getColumnData(this.getColumnName(453), this.polOptionBack);
         this.podOption = await this.getColumnData(this.getColumnName(454), this.podOptionBack);
-       this.saveLocalCurrency(JSON.parse(localStorage.getItem('sysitemData')).deptId)
+        this.saveLocalCurrency(JSON.parse(localStorage.getItem('sysitemData')).deptId)
         if (this.detailData.id) {
             this.editButton = true
             this.editDisabled = true
@@ -1251,6 +1252,9 @@ export default {
                 item.profit = _.round(_.add(Number(item.totalProfit ? item.totalProfit : 0), Number(item.totalProfitTwo ? item.totalProfitTwo : 0)), 2)
             })
         },
+        blurChange(row) {
+            row.salesPrice = row.oceanFreight
+        },
         countChange(row) {
             this.form.costItemList.forEach(item => {
                 let polSUM = 0
@@ -1349,12 +1353,20 @@ export default {
                     this.form.shippingCompanyCode = row.code
                     this.form.shippingCompanyEname = row.enName
                     this.form.shippingCompanyAbbreviation = row.shortName
+                    this.form.actualShippingCompanyId = row.id
+                    this.form.actualShippingCompanyCode = row.code
+                    this.form.actualShippingCompanyEname = row.enName
+                    this.form.actualShippingCompanyCname = row.cnName
                 } else {
                     this.form.shippingCompanyId = null
                     this.form.shippingCompanyCode = null
                     this.form.shippingCompanyEname = null
                     this.form.shippingCompanyCname = null
                     this.form.shippingCompanyAbbreviation = null
+                    this.form.actualShippingCompanyId = null
+                    this.form.actualShippingCompanyCode = null
+                    this.form.actualShippingCompanyEname = null
+                    this.form.actualShippingCompanyCname = null
                 }
             }
             if (name == 'shipCname') {

+ 1 - 1
src/views/iosBasicData/losbfeestemplate/feesTemplateItems.vue

@@ -1126,7 +1126,7 @@ export default {
                 price: 1,
                 quantityRule: '按箱型',
                 curCode: 'CNY',
-                unitNo: '20GP',
+                unitNo: '箱量',
                 sonItemsList: [],
                 $cellEdit: true
             })

+ 1 - 0
src/views/iosBasicData/podTemplate/feesTemplateItems.vue

@@ -955,6 +955,7 @@ export default {
                 price: 1,
                 quantityRule: '按箱型',
                 curCode: 'CNY',
+                unitNo: '箱量',
                 sonItemsList: [],
                 $cellEdit: true
             })

+ 1 - 0
src/views/iosBasicData/polTemplate/feesTemplateItems.vue

@@ -980,6 +980,7 @@ export default {
                 price: 1,
                 quantityRule: '按箱型',
                 curCode: 'CNY',
+                unitNo: '箱量',
                 sonItemsList: [],
                 $cellEdit: true
             })