Преглед на файлове

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

wangzhuo преди 3 години
родител
ревизия
91eb059412

+ 561 - 0
src/components/oceanFreight/index.vue

@@ -0,0 +1,561 @@
+<template>
+  <span>
+      <avue-crud
+          :option="option"
+          :data="dataList"
+          v-model="form"
+          @row-save="rowSave"
+          ref="crud"
+          :key="key"
+          @selection-change="selectionChange"
+          @row-update="rowUpdate"
+          @resetColumn="resetColumn('crud','option','optionBack',codeValue)"
+          @saveColumn="saveColumn('crud','option','optionBack',codeValue)">
+        <template slot-scope="{type,size,row,index}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :type="type" :disabled="row.submitPay > 0"
+                     @click="$refs.crud.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :type="type" :disabled="row.submitPay > 0"
+                     @click="rowDel(row,index)">删除
+          </el-button>
+        </template>
+        <template slot="menuLeft">
+          <!--        <el-button-->
+          <!--            class="el-icon-download"-->
+          <!--            type="info"-->
+          <!--            size="small"-->
+          <!--            :disabled="!id || listData.length === 0"-->
+          <!--            @click="openReport">打印-->
+          <!--        </el-button>-->
+          <el-button
+              class="el-icon-download"
+              type="warning"
+              size="small"
+              :disabled="(selectionList.length === 0 || !(selectionList.findIndex(item => item.submitPay == '1') == -1))"
+              @click="generateBill">生成账单
+          </el-button>
+          <el-button
+              class="el-icon-download"
+              type="danger"
+              size="small"
+              :disabled="(selectionList.length === 0 || !(selectionList.findIndex(item => item.submitPay == '0') == -1))"
+              @click="revokeBill">撤销账单
+          </el-button>
+        </template>
+        <template slot="itemNameForm">
+          <breakdown-select v-model="form.itemId" @selectValue="selectValue"
+                            :configuration="breakConfiguration"></breakdown-select>
+        </template>
+        <template slot="corpNameForm">
+          <crop-select v-model="form.corpId" @getCorpData="getGSDataTwo" corpType="KH"/>
+        </template>
+      </avue-crud>
+      <report-dialog
+          :switchDialog="switchDialog"
+          :reportId="id"
+          :reportName="reportName"
+          @onClose="onClose()"
+      />
+  </span>
+</template>
+
+<script>
+
+import {tradingBoxFees} from "@/api/boxManagement";
+import reportDialog from "@/components/report-dialog/main.vue";
+import {generateBill,revokeBill} from "@/api/oceanShipping/maritimeExport";
+export default {
+  name: "index",
+  components: {reportDialog},
+  data() {
+    return {
+      code: '',
+      switchDialog: false,
+      reportName:'',
+      option: {},
+      optionBack: {
+        align: 'center',
+        index: true,
+        height: 500,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        addBtn: true,
+        selection: true,
+        span: 6,
+        dialogTop: "25%",
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogDrag: true,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'quantity',
+          type: 'sum',
+          decimals: 0
+        }, {
+          name: 'amount',
+          type: 'sum',
+          decimals: 2
+        }, {
+          name: 'settlementAmount',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '收款对象',
+          prop: 'corpName',
+          overHidden: true,
+          width: 160
+        }, {
+          label: '费用名称',
+          prop: 'itemName',
+          overHidden: true,
+          width: 120
+        }, {
+          label: '币别',
+          prop: 'currency',
+          width: 100,
+          overHidden: true,
+          filterable: true,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+        }, {
+          label: '汇率',
+          prop: 'exchangeRate',
+          width: 100,
+          type: 'number',
+          disabled: true,
+          overHidden: true,
+          controls: false,
+          precision: 4
+        }, {
+          label: '单价',
+          prop: 'price',
+          type: 'number',
+          overHidden: true,
+          precision: 2,
+          controls: false,
+          width: 140
+        }, {
+          label: '数量',
+          prop: 'quantity',
+          type: 'number',
+          precision: 0,
+          value: 1,
+          controls: false,
+          overHidden: true,
+          width: 100
+        }, {
+          label: '金额',
+          prop: 'amount',
+          type: 'number',
+          precision: 2,
+          disabled: true,
+          controls: false,
+          overHidden: true,
+          width: 140
+        }, {
+          label: '日期起',
+          prop: 'rentStartDate',
+          width: 100,
+          overHidden: true,
+          type: "date",
+          disabled: true,
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss"
+        }, {
+          label: '日期止',
+          prop: 'rentEndDate',
+          width: 100,
+          disabled: true,
+          overHidden: true,
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss"
+        }, {
+          label: '结算金额',
+          prop: 'settlementAmount',
+          type: 'number',
+          precision: 2,
+          disabled: true,
+          controls: false,
+          overHidden: true,
+          width: 140
+        }, {
+          label: '结算时间',
+          prop: 'settlementDate',
+          width: 100,
+          disabled: true,
+          overHidden: true,
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss"
+        }, {
+          label: '业务类型',
+          prop: 'billType',
+          display:false,
+          width: 100
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          type: 'textarea',
+          overHidden: true,
+          minRows: 3,
+          span: 24,
+          width: 200
+        }]
+      },
+      selectionList: [],
+      dataList: [],
+      form: {},
+      key: 0,
+      data_one: [],
+      data_two: [],
+      breakConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        clearable: true,
+        placeholder: "请点击右边按钮选择",
+        dicData: []
+      },
+      activeNameTwo: "first"
+    }
+  },
+  watch: {
+    listData(newVla, oldVal) {
+      this.data_one = newVla.filter(item => item.feesType === 1); //应收
+      this.data_two = newVla.filter(item => item.feesType === 2); //应付
+      if (this.activeNameTwo === "first") {
+        this.dataList = this.data_one;
+      } else {
+        this.dataList = this.data_two;
+      }
+      this.key++
+    },
+    "option.menu":{
+      handler(newVla,oldVal) {
+        if (newVla !== oldVal) {
+          this.key++
+        }
+      },
+    },
+    code(newVla, oldVal) {
+      if (this.code){
+        this.findObject(this.option.column, "code").dicUrl = `/api/blade-box-tube/archives/selectArchivesByCodeList?code=${this.code}`
+      }
+      this.key++
+    },
+    activeNameTwo(newVla, oldVal) {
+      if (newVla !== oldVal) {
+        if (newVla === "first") {
+          this.data_two = this.dataList;
+          this.dataList = this.data_one;
+        } else {
+          this.data_one = this.dataList;
+          this.dataList = this.data_two;
+        }
+      }
+    }
+  },
+  model: {
+    prop: "listData",
+    event: "callBack"
+  },
+  props: {
+    listData: {
+      type: Array,
+      default: function () {
+        return [];
+      }
+    },
+    codeValue: {
+      type: String
+    },
+    type: {
+      type: String
+    },
+    url: {
+      type: String
+    },
+    oceanFreight: {
+      type: Boolean//切换默认费用和展开费用
+    },
+    // 1.显示全部 2.收费 3.付费
+    tabShow: {
+      type: Number,
+      default: 1
+    },
+    activeName: {
+      type: String,
+      default: 'first'
+    },
+    id: {
+      type: String
+    }
+  },
+  async created() {
+    if (!this.codeValue) this.codeValue = 235.2
+    // 判断activeNameTwo默认的显示
+    this.activeNameTwo = this.activeName
+    this.option = await this.getColumnData(this.getColumnName(this.codeValue), this.optionBack);
+    if (this.activeNameTwo === "first") {
+      this.findObject(this.option.column, "corpName").label = "收款对象"
+    } else {
+      this.findObject(this.option.column, "corpName").label = "付款对象"
+    }
+    // this.$set(this.option,"selectable",(row,index)=>{
+    //   return row.isCheck === 0;
+    // })
+    this.findObject(this.option.column, "price").change = ({value, column}) => {
+      if (value && this.form.quantity) {
+        if (this.form.exchangeRate) {
+          this.form.amount = value * this.form.quantity * this.form.exchangeRate
+        } else {
+          this.form.amount = value * this.form.quantity
+        }
+      }
+    }
+    this.findObject(this.option.column, "currency").change = ({value, column}) => {
+      for (let item of this.$refs.crud.DIC.currency) {
+        if (item.dictKey == value) {
+          this.form.exchangeRate = item.remark
+          if (this.form.price && this.form.quantity) {
+            this.form.amount = this.form.price * this.form.quantity * item.remark
+          }
+        }
+      }
+    }
+    this.findObject(this.option.column, "quantity").change = ({value, column}) => {
+      if (this.form.price && value) {
+        if (this.form.exchangeRate) {
+          this.form.amount = this.form.price * value * this.form.exchangeRate
+        } else {
+          this.form.amount = this.form.price * value
+        }
+      }
+    }
+    this.key++
+  },
+  methods: {
+    openReport() {
+      for (let item of this.listData) {
+        if (!item.id) {
+          this.$confirm("有未保存的费用,是否继续打印?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            if (this.type === "CK" || this.type === "JK"){
+              if (this.activeNameTwo === "first"){
+                this.reportName = "收款费用详情(进出口)"
+              }else {
+                this.reportName = "付款费用详情(进出口)"
+              }
+            }else {
+              if (this.activeNameTwo === "first"){
+                this.reportName = "收款费用详情(箱管)"
+              }else {
+                this.reportName = "付款费用详情(箱管)"
+              }
+            }
+            this.switchDialog = true
+          })
+        }
+      }
+      this.switchDialog = true
+    },
+    // 报表关闭
+    onClose(val) {
+      this.switchDialog = val;
+    },
+    handleClick(tab, event) {
+      this.activeNameTwo = tab.name
+      if (tab.name === "first") {
+        this.findObject(this.option.column, "corpName").label = "收款对象"
+      } else {
+        this.findObject(this.option.column, "corpName").label = "付款对象"
+      }
+    },
+    selectionChange(list){
+      this.selectionList = list
+    },
+    //生成账单
+    generateBill(){
+      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)'
+        });
+        const data = {
+          id: this.id,
+          shippingFeesList:this.selectionList
+        }
+        generateBill(data).then(rest => {
+          loading.close();
+          this.$message.success('生成成功')
+          this.$emit("generateBill")
+        }).catch(() => {
+          loading.close();
+        })
+      })
+    },
+    //撤销账单
+    revokeBill(){
+      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)'
+        });
+        const data = {
+          id: this.id,
+          shippingFeesList:this.selectionList
+        }
+        revokeBill(data).then(rest => {
+          loading.close();
+          this.$message.success('撤销成功')
+          this.$emit("generateBill")
+        }).catch(() => {
+          loading.close();
+        })
+      })
+    },
+    rowSave(form, done, loading) {
+      done({
+        ...form,
+        feesType: this.activeNameTwo === "first" ? 1 : 2,
+        sort: this.dataList.length
+      })
+      if (this.activeNameTwo === "first") {
+        this.dataList = this.dataList.concat(this.data_two)
+        this.$emit("callBack", this.dataList);
+      } else {
+        this.dataList = this.dataList.concat(this.data_one)
+        this.$emit("callBack", this.dataList);
+      }
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+      if (this.activeNameTwo === "first") {
+        this.$emit("callBack", this.dataList.concat(this.data_two));
+      } else {
+        this.$emit("callBack", this.data_one.concat(this.dataList));
+      }
+    },
+    // 明细删除
+    rowDel(row, index) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          tradingBoxFees(row.id, this.url ? this.url : "/api/blade-box-tube/tradingBoxFees/remove").then(res => {
+            if (res.data.success) {
+              this.dataList.splice(index, 1);
+              this.$message.success("操作成功!");
+              if (this.activeNameTwo === "first") {
+                this.$emit("callBack", this.dataList.concat(this.data_two));
+              } else {
+                this.$emit("callBack", this.data_one.concat(this.dataList));
+              }
+            }
+          });
+        } else {
+          this.dataList.splice(index, 1);
+          this.$message.success("操作成功!");
+          if (this.activeNameTwo === "first") {
+            this.$emit("callBack", this.dataList.concat(this.data_two));
+          } else {
+            this.$emit("callBack", this.data_one.concat(this.dataList));
+          }
+        }
+      });
+    },
+    //选择费用名称
+    selectValue(value) {
+      this.form.itemName = value.cname
+    },
+    getGSDataTwo(row) {
+      this.form.corpName = row.cname
+    },
+    //自定义列保存
+    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;
+      }
+    },
+    //自定义列重置
+    async resetColumn(ref, option, optionBack, code) {
+      this[option] = this[optionBack];
+      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
+      this.$emit("resetTrigger")
+      if (inSave) {
+
+        this.findObject(this.option.column, "price").change = ({value, column}) => {
+          if (value && this.form.quantity) {
+            if (this.form.exchangeRate) {
+              this.form.amount = value * this.form.quantity * this.form.exchangeRate
+            } else {
+              this.form.amount = value * this.form.quantity
+            }
+          }
+        }
+        this.findObject(this.option.column, "currency").change = ({value, column}) => {
+          for (let item of this.$refs.crud.DIC.currency) {
+            if (item.dictValue == value) {
+              this.form.exchangeRate = item.remark
+              if (this.form.price && this.form.quantity) {
+                this.form.amount = this.form.price * this.form.quantity * item.remark
+              }
+            }
+          }
+        }
+        this.findObject(this.option.column, "quantity").change = ({value, column}) => {
+          if (this.form.price && value) {
+            if (this.form.exchangeRate) {
+              this.form.amount = this.form.price * value * this.form.exchangeRate
+            } else {
+              this.form.amount = this.form.price * value
+            }
+          }
+        }
+        this.$message.success("重置成功");
+        this.$refs[ref].$refs.dialogColumn.columnBox = false;
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+</style>

+ 3 - 0
src/main.js

@@ -65,6 +65,8 @@ import eCropJump from '@/components/e-crop-jump/index';
 import boxCost from '@/components/boxCost/index';
 //海运进出口费用组件
 import seaCost from '@/components/seaCost/index';
+//海运进出口费用组件2
+import oceanFreight from '@/components/oceanFreight/index';
 // 箱信息组件
 import boxInformation from '@/components/boxInformation/index';
 //枚举列设置名称管理
@@ -93,6 +95,7 @@ import Fingerprint2 from 'fingerprintjs2'
 Vue.component('trackPlayback', trackPlayback);
 Vue.component('boxCost', boxCost);
 Vue.component('seaCost', seaCost);
+Vue.component('oceanFreight', oceanFreight);
 Vue.component('boxInformation', boxInformation);
 Vue.component('selectComponent', selectComponent);
 Vue.component('warehouseSelect', warehouseSelect);

+ 29 - 0
src/views/oceanShipping/maritimeExport/components/appendix.vue

@@ -0,0 +1,29 @@
+<template>
+  <div>
+    <trade-card title="附件管理">
+      <c-upload
+          basic
+          :data="shippingFileList"
+          :disabled="disabled"
+          deleteUrl="/api/blade-box-tube/shippingfile/remove"
+          :enumerationValue="254.4"
+          display
+      />
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "appendix",
+  data(){
+    return{
+      shippingFileList:[]
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 669 - 0
src/views/oceanShipping/maritimeExport/components/bookingInformation.vue

@@ -0,0 +1,669 @@
+<template>
+  <div>
+    <trade-card title="基础信息">
+      <avue-form :option="optionForm" v-model="form" ref="form">
+        <template slot="corpId" slot-scope="scope">
+          <crop-select v-model="form.corpId" corpType="KH" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.corpName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="shippingCompanyId" slot-scope="scope">
+          <crop-select v-model="form.shippingCompanyId" corpType="GS" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.shippingCompanyName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="loadingPortName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.loadingPortId" type="id"
+                     @balabalaTow="(val)=>{form.loadingPortName = val.name || ''}"/>
+        </template>
+        <template slot="destinationName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.destinationId" type="id"
+                     @balabalaTow="(val)=>{form.destinationName = val.name || ''}"/>
+        </template>
+        <template slot="deliverGoodsAddressName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.deliverGoodsAddressId" type="id"
+                     @balabalaTow="(val)=>{form.deliverGoodsAddressName = val.name || ''}"/>
+        </template>
+        <template slot="deliveryAddressName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.deliveryAddressId" type="id"
+                     @balabalaTow="(val)=>{form.deliveryAddressName = val.name || ''}"/>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="form.shippingMatchBoxList"
+                 @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="发货信息">
+      <avue-form :option="optionFormFour" v-model="form" ref="formFour">
+        <template slot="consignorId" slot-scope="{disabled}">
+          <crop-select v-model="form.consignorId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.consignorName = val.cname || '';form.consignorDetails = val.details}"></crop-select>
+        </template>
+        <template slot="consigneeId" slot-scope="{disabled}">
+          <crop-select v-model="form.consigneeId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.consigneeName = val.cname || '';form.consigneeDetails = val.details}"></crop-select>
+        </template>
+        <template slot="notifierId" slot-scope="{disabled}">
+          <crop-select v-model="form.notifierId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.notifierName = val.cname || '';form.notifierDetails = val.details}"></crop-select>
+        </template>
+        <template slot="secondNotifierId" slot-scope="{disabled}">
+          <crop-select v-model="form.secondNotifierId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.secondNotifierName = val.cname || ''}"></crop-select>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="默认数据">
+      <avue-form :option="optionFormTwo" v-model="form" ref="formTwo"></avue-form>
+    </trade-card>
+    <trade-card title="附件管理">
+      <c-upload
+          basic
+          :data="form.shippingFileList"
+          :disabled="disabled"
+          deleteUrl="/api/blade-box-tube/shippingfile/remove"
+          :enumerationValue="254.4"
+          display
+      />
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "bookingInformation",
+  data() {
+    return {
+      form: {
+        shippingMatchBoxList: [],
+        shippingFileList: []
+      },
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '客户名称',
+          span: 12,
+          prop: 'corpId'
+        }, {
+          label: '客户电话',
+          prop: 'telephone'
+        }, {
+          label: '邮箱',
+          prop: 'postbox'
+        }, {
+          label: '船公司',
+          span: 12,
+          prop: 'shippingCompanyId'
+        }, {
+          label: '船期',
+          prop: 'sailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '订舱代理',
+          prop: 'bookingAgentId',
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName=订舱代理",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '船名',
+          prop: 'shipId',
+          type: "select",
+          span: 12,
+          cascader: ['voyageNumberId'],
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAll",
+          props: {
+            label: "name",
+            value: "id",
+          }
+        }, {
+          label: '航次',
+          prop: 'voyageNumberId',
+          type: "select",
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAllByVoyage?pid={{key}}",
+          props: {
+            label: "no",
+            value: "id",
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.form.DIC.voyageNumberId || []) {
+                if (data.value === item.id) {
+                  this.form.route = item.lane
+                }
+              }
+            }
+          }
+        }, {
+          label: '提单号',
+          prop: 'mainBillNo'
+        }, {
+          label: '起运港',
+          prop: 'loadingPortName'
+        }, {
+          label: '目的港',
+          prop: 'destinationName'
+        }, {
+          label: '起运地',
+          prop: 'deliverGoodsAddressName'
+        }, {
+          label: '目的地',
+          prop: 'deliveryAddressName'
+        }, {
+          label: '服务条款',
+          prop: 'serviceClause',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_service_clause",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true,
+        }, {
+          label: '签单方式',
+          prop: 'signingMethod',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_signing_method",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '提单份数',
+          prop: 'billCopies'
+        }, {
+          label: '副本',
+          prop: 'billCopiesCopy'
+        }, {
+          label: '实际开船',
+          prop: 'actualSailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '截单日期',
+          prop: 'deadline',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '截港日期',
+          prop: 'closingDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '场站',
+          prop: 'station'
+        }, {
+          label: '件数',
+          prop: 'number'
+        }, {
+          label: '包装',
+          prop: 'packing',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_packing",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '重量',
+          prop: 'weight'
+        }, {
+          label: '尺码',
+          prop: 'size'
+        }, {
+          label: '货物',
+          prop: 'goodsId',
+          type: "select",
+          span: 12,
+          dicUrl: "/api/blade-client/goodsdesc/descListAll",
+          props: {
+            label: "cname",
+            value: "id"
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.formTwo.DIC.goodsId || []) {
+                if (data.value === item.id) {
+                  this.form.goodsDetails = item.nameDescription
+                  this.form.hsCode = item.hsCode
+                }
+              }
+            }
+          },
+          overHidden: true
+        }, {
+          label: 'HS代码',
+          span: 12,
+          prop: 'hsCode'
+        }, {
+          label: '货物类型',
+          prop: 'goodsType',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_goods_type",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true,
+          change: (data) => {
+            if (data.value) {
+              if (data.value === "冻柜") {
+                this.findObject(this.optionForm.column, "temperature").display = true
+                this.findObject(this.optionForm.column, "ventilationCapacity").display = true
+                this.findObject(this.optionForm.column, "classA").display = false
+                this.findObject(this.optionForm.column, "unNo").display = false
+                this.findObject(this.optionForm.column, "longs").display = false
+                this.findObject(this.optionForm.column, "wide").display = false
+                this.findObject(this.optionForm.column, "high").display = false
+              } else if (data.value === "危险品") {
+                this.findObject(this.optionForm.column, "temperature").display = false
+                this.findObject(this.optionForm.column, "ventilationCapacity").display = false
+                this.findObject(this.optionForm.column, "classA").display = true
+                this.findObject(this.optionForm.column, "unNo").display = true
+                this.findObject(this.optionForm.column, "longs").display = false
+                this.findObject(this.optionForm.column, "wide").display = false
+                this.findObject(this.optionForm.column, "high").display = false
+              } else if (data.value === "特种箱") {
+                this.findObject(this.optionForm.column, "temperature").display = false
+                this.findObject(this.optionForm.column, "ventilationCapacity").display = false
+                this.findObject(this.optionForm.column, "classA").display = false
+                this.findObject(this.optionForm.column, "unNo").display = false
+                this.findObject(this.optionForm.column, "longs").display = true
+                this.findObject(this.optionForm.column, "wide").display = true
+                this.findObject(this.optionForm.column, "high").display = true
+              } else {
+                this.findObject(this.optionForm.column, "temperature").display = false
+                this.findObject(this.optionForm.column, "ventilationCapacity").display = false
+                this.findObject(this.optionForm.column, "classA").display = false
+                this.findObject(this.optionForm.column, "unNo").display = false
+                this.findObject(this.optionForm.column, "longs").display = false
+                this.findObject(this.optionForm.column, "wide").display = false
+                this.findObject(this.optionForm.column, "high").display = false
+              }
+            }
+          }
+        }, {
+          label: '温度(°C)',
+          prop: 'temperature',
+          display: false
+        }, {
+          label: '通风',
+          prop: 'ventilationCapacity',
+          display: false
+        }, {
+          label: 'CLASS',
+          prop: 'classA',
+          display: false
+        }, {
+          label: 'UN NO.',
+          prop: 'unNo',
+          display: false
+        }, {
+          label: '长',
+          prop: 'longs',
+          display: false
+        }, {
+          label: '宽',
+          prop: 'wide',
+          display: false
+        }, {
+          label: '高',
+          prop: 'high',
+          display: false
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          type: 'textarea',
+          span: 24,
+          minRows: 2,
+        }]
+      },
+      formBox: {},
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      optionFormFour: {
+        menuBtn: false,
+        span: 8,
+        column: [{
+          label: '发货人',
+          prop: 'consignorId',
+        }, {
+          label: '发货人详情',
+          prop: 'consignorDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '收货人',
+          prop: 'consigneeId'
+        }, {
+          label: '收货人详情',
+          prop: 'consigneeDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '通知人',
+          prop: 'notifierId'
+        }, {
+          label: '通知人详情',
+          prop: 'notifierDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '第二通知人',
+          prop: 'secondNotifierId',
+          row: true,
+        }, {
+          label: '唛头',
+          prop: 'shippingMark',
+          type: 'textarea',
+          minRows: 1,
+        }, {
+          label: '货描',
+          prop: 'goodsDetails',
+          type: 'textarea',
+          minRows: 1
+        }]
+      },
+      optionFormTwo: {
+        menuBtn: false,
+        span: 6,
+        column: [
+          {
+            label: '系统编号',
+            prop: 'sysNo',
+            disabled: true
+          }, {
+            label: '部门',
+            prop: 'deptId',
+            type: 'tree',
+            props: {
+              label: 'title',
+              value: 'value'
+            },
+            dicUrl: '/api/blade-system/dept/tree'
+          }, {
+            label: '单据类型',
+            prop: 'documentType'
+          }, {
+            label: '业务类型',
+            prop: 'businessType',
+            overHidden: true,
+            filterable: true,
+            type: 'select',
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_type",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            }
+          }, {
+            label: '业务来源',
+            prop: 'businessSource',
+            overHidden: true,
+            filterable: true,
+            type: 'select',
+            cascader: ['sourceId'],
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_source",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            }
+          }, {
+            label: '来源',
+            prop: 'sourceId',
+            overHidden: true,
+            filterable: true,
+            span: 12,
+            type: 'select',
+            dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName={{key}}",
+            props: {
+              label: "cname",
+              value: "id"
+            }
+          }, {
+            label: '货物类型',
+            prop: 'goodsType',
+            type: "select",
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_goods_type",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            overHidden: true
+          }, {
+            label: '操作员',
+            prop: 'operatorId',
+            filterable: true,
+            remote: true,
+            type: "select",
+            dicUrl: "/api/blade-user/page?size=20&current=1&account={{key}}",
+            props: {
+              label: "account",
+              value: "id",
+              res: 'data.records'
+            },
+            change: (data) => {
+              if (data.value) {
+                for (let item of this.$refs.formTwo.DIC.operatorId || []) {
+                  if (data.value === item.id) {
+                    this.form.accountingDeptId = item.deptId
+                  }
+                }
+              }
+            }
+          }, {
+            label: '客服员',
+            prop: 'customerServiceId',
+            span: 12,
+            filterable: true,
+            remote: true,
+            type: "select",
+            dicUrl: "/api/blade-user/page?size=20&current=1&account={{key}}",
+            props: {
+              label: "account",
+              value: "id",
+              res: 'data.records'
+            },
+            change: (data) => {
+              if (data.value) {
+                for (let item of this.$refs.formTwo.DIC.customerServiceId || []) {
+                  if (data.value === item.id) {
+                    this.form.customerServiceName = item.account
+                  }
+                }
+              }
+            }
+          }, {
+            label: '装运方式',
+            prop: 'shipmentMode',
+            overHidden: true,
+            filterable: true,
+            type: 'select',
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_shipment_mode",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            }
+          }
+        ]
+      },
+      formCreate: false
+    }
+  }, model: {
+    prop: "value",
+    event: "callBack"
+  },
+  props: {
+    value: {
+      type: Object,
+      required: true,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (this.formCreate) {
+          this.form = Object.assign(this.value, {});
+        } else {
+          this.form = Object.assign(this.value, val || {});
+        }
+      },
+      deep: true,
+      immediate: true
+    },
+    form: {
+      handler(val) {
+        if (this.formCreate) this.setVal();
+      },
+      deep: true
+    }
+  },
+  async created() {
+    this.$nextTick(() => {
+      this.formCreate = true;
+    })
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+  },
+  methods: {
+    setVal() {
+      this.$emit("callBack", this.form);
+    },
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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;
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 357 - 0
src/views/oceanShipping/maritimeExport/components/businessBill.vue

@@ -0,0 +1,357 @@
+<template>
+  <div>
+    <trade-card title="基础信息">
+      <avue-form :option="optionForm" v-model="form" ref="form">
+        <template slot="corpId" slot-scope="scope">
+          <crop-select v-model="form.corpId" corpType="KH" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.corpName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="shippingCompanyId" slot-scope="scope">
+          <crop-select v-model="form.shippingCompanyId" corpType="GS" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.shippingCompanyName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="loadingPortName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.loadingPortId" type="id"
+                     @balabalaTow="(val)=>{form.loadingPortName = val.name || ''}"/>
+        </template>
+        <template slot="destinationName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.destinationId" type="id"
+                     @balabalaTow="(val)=>{form.destinationName = val.name || ''}"/>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="form.shippingMatchBoxList" @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="应收明细">
+      <ocean-freight v-model="form.shippingFeesList" :id="form.id" :codeValue="254.3" type="CK"
+                     activeName="first"></ocean-freight>
+    </trade-card>
+    <trade-card title="应收明细">
+      <ocean-freight v-model="form.shippingFeesList" :id="form.id" :codeValue="254.3" type="CK"
+                     activeName="second"></ocean-freight>
+    </trade-card>
+    <trade-card title="财务统计">
+      <avue-form :option="optionFormTwo" v-model="form" ref="formTwo"></avue-form>
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "entrustmentInformation",
+  data(){
+    return{
+      form: {
+        shippingMatchBoxList:[],
+        shippingFeesList:[]
+      },
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '客户名称',
+          span: 12,
+          prop: 'corpId'
+        }, {
+          label: '客户电话',
+          prop: 'telephone'
+        }, {
+          label: '邮箱',
+          prop: 'postbox'
+        }, {
+          label: '船公司',
+          span: 12,
+          prop: 'shippingCompanyId'
+        }, {
+          label: '船期',
+          prop: 'sailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '订舱代理',
+          prop: 'bookingAgentId',
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName=订舱代理",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '船名',
+          prop: 'shipId',
+          type: "select",
+          span:12,
+          cascader: ['voyageNumberId'],
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAll",
+          props: {
+            label: "name",
+            value: "id",
+          }
+        }, {
+          label: '航次',
+          prop: 'voyageNumberId',
+          type: "select",
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAllByVoyage?pid={{key}}",
+          props: {
+            label: "no",
+            value: "id",
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.form.DIC.voyageNumberId || []) {
+                if (data.value === item.id) {
+                  this.form.route = item.lane
+                }
+              }
+            }
+          }
+        },{
+          label: '提单号',
+          prop: 'mainBillNo'
+        }, {
+          label: '起运港',
+          prop: 'loadingPortName'
+        }, {
+          label: '目的港',
+          prop: 'destinationName'
+        },{
+          label: '起运地',
+          prop: 'deliverGoodsAddressName'
+        }, {
+          label: '目的地',
+          prop: 'deliveryAddressName'
+        }, {
+          label: '签单方式',
+          prop: 'signingMethod',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_signing_method",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '提单份数',
+          prop: 'billCopies'
+        }, {
+          label: '副本',
+          prop: 'billCopiesCopy'
+        }, {
+          label: '账期日期',
+          prop: 'acountingPeriodDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }]
+      },
+      formBox:{},
+      shippingMatchBoxList:[],
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      optionFormTwo: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '应收外币',
+          prop: 'receivableUSD',
+          disabled: true
+        }, {
+          label: '应收RMB',
+          prop: 'receivableRMB',
+          disabled: true
+        }, {
+          label: '应付外币',
+          prop: 'payUSD',
+          disabled: true
+        }, {
+          label: '应付RMB',
+          prop: 'payUSD',
+          disabled: true
+        }, {
+          label: '利润外币',
+          prop: 'profitUSD',
+          disabled: true
+        }, {
+          label: '利润RMB',
+          prop: 'profitRMB',
+          disabled: true
+        }, {
+          label: '利润合计',
+          prop: 'profitTotal',
+          disabled: true
+        }
+        ]
+      },
+      formCreate:false
+    }
+  },
+  model: {
+    prop: "value",
+    event: "callBack"
+  },
+  props: {
+    value: {
+      type: Object,
+      required: true,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (this.formCreate) {
+          this.form = Object.assign(this.value, {});
+        } else {
+          this.form = Object.assign(this.value, val || {});
+        }
+      },
+      deep: true,
+      immediate: true
+    },
+    form: {
+      handler(val) {
+        if (this.formCreate) this.setVal();
+      },
+      deep: true
+    }
+  },
+  async created() {
+    this.$nextTick(() => {
+      this.formCreate = true;
+    })
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+  },
+  methods:{
+    setVal() {
+      this.$emit("callBack", this.form);
+    },
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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.limit()
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 416 - 0
src/views/oceanShipping/maritimeExport/components/entrustmentInformation.vue

@@ -0,0 +1,416 @@
+<template>
+  <div>
+    <trade-card title="基础信息">
+      <avue-form :option="optionForm" v-model="form" ref="form">
+        <template slot="corpId" slot-scope="scope">
+          <crop-select v-model="form.corpId" corpType="KH" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.corpName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="shippingCompanyId" slot-scope="scope">
+          <crop-select v-model="form.shippingCompanyId" corpType="GS" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.shippingCompanyName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="loadingPortName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.loadingPortId" type="id"
+                     @balabalaTow="(val)=>{form.loadingPortName = val.name || ''}"/>
+        </template>
+        <template slot="destinationName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.destinationId" type="id"
+                     @balabalaTow="(val)=>{form.destinationName = val.name || ''}"/>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="form.shippingMatchBoxList"
+                 @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="应收明细">
+      <ocean-freight v-model="form.shippingFeesList" :id="form.id" :codeValue="254.3" type="CK"
+                     activeName="first"></ocean-freight>
+    </trade-card>
+    <trade-card title="应收明细">
+      <ocean-freight v-model="form.shippingFeesList" :id="form.id" :codeValue="254.3" type="CK"
+                     activeName="second"></ocean-freight>
+    </trade-card>
+    <trade-card title="默认数据">
+      <avue-form :option="optionFormTwo" v-model="form" ref="formTwo"></avue-form>
+    </trade-card>
+    <trade-card title="附件管理">
+      <c-upload
+          basic
+          :data="form.shippingFileList"
+          :disabled="disabled"
+          deleteUrl="/api/blade-box-tube/shippingfile/remove"
+          :enumerationValue="254.4"
+          display
+      />
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "entrustmentInformation",
+  data() {
+    return {
+      form: {
+        shippingFeesList: [],
+        shippingFileList: [],
+        shippingMatchBoxList:[]
+      },
+      formBox:{},
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      formCreate: false,
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '客户名称',
+          span: 12,
+          prop: 'corpId',
+          rules: [{
+            required: true,
+            message: " ",
+            trigger: "blur"
+          }]
+        }, {
+          label: '客户电话',
+          prop: 'telephone'
+        }, {
+          label: '邮箱',
+          prop: 'postbox'
+        }, {
+          label: '船公司',
+          span: 12,
+          prop: 'shippingCompanyId'
+        }, {
+          label: '船期',
+          prop: 'sailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '订舱代理',
+          prop: 'bookingAgentId',
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName=订舱代理",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '起运港',
+          prop: 'loadingPortName'
+        }, {
+          label: '目的港',
+          prop: 'destinationName'
+        }, {
+          label: '航线',
+          prop: 'route',
+          type: "select",
+          slot: true,
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_route",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '订舱状态',
+          prop: 'bookingStatus',
+          type: "select",
+          slot: true,
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=booking_space_status",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          type: 'textarea',
+          span: 24,
+          minRows: 2,
+        }]
+      },
+      optionFormTwo: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '系统编号',
+          prop: 'sysNo',
+          disabled: true,
+        }, {
+          label: '部门',
+          prop: 'deptId',
+          type: 'tree',
+          props: {
+            label: 'title',
+            value: 'value'
+          },
+          dicUrl: '/api/blade-system/dept/tree'
+        }, {
+          label: '单据类型',
+          prop: 'documentType'
+        }, {
+          label: '业务类型',
+          prop: 'businessType',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_type",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '业务来源',
+          prop: 'businessSource',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          cascader: ['sourceId'],
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_source",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '来源',
+          prop: 'sourceId',
+          span: 12,
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName={{key}}",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '货物类型',
+          prop: 'goodsType',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_goods_type",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '操作员',
+          prop: 'operatorId',
+          filterable: true,
+          remote: true,
+          type: "select",
+          dicUrl: "/api/blade-user/page?size=20&current=1&account={{key}}",
+          props: {
+            label: "account",
+            value: "id",
+            res: 'data.records'
+          }
+        }, {
+          label: '客服员',
+          prop: 'customerServiceId',
+          span: 12,
+          filterable: true,
+          remote: true,
+          type: "select",
+          dicUrl: "/api/blade-user/page?size=20&current=1&account={{key}}",
+          props: {
+            label: "account",
+            value: "id",
+            res: 'data.records'
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.formTwo.DIC.customerServiceId || []) {
+                if (data.value === item.id) {
+                  this.form.customerServiceName = item.account
+                }
+              }
+            }
+          }
+        }, {
+          label: '装运方式',
+          prop: 'shipmentMode',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_shipment_mode",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }]
+      }
+    }
+  },
+  model: {
+    prop: "value",
+    event: "callBack"
+  },
+  props: {
+    value: {
+      type: Object,
+      required: true,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (this.formCreate) {
+          this.form = Object.assign(this.value, {});
+        }else {
+          this.form = Object.assign(this.value, val || {});
+        }
+      },
+      deep: true,
+      immediate: true
+    },
+    form: {
+      handler (val) {
+        if (this.formCreate) this.setVal();
+      },
+      deep: true
+    }
+  },
+  async created() {
+    this.$nextTick(() => {
+      this.formCreate = true;
+    })
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+  },
+  methods:{
+    setVal(){
+      this.$emit("callBack", this.form);
+    },
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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;
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 150 - 0
src/views/oceanShipping/maritimeExport/components/packingDetails.vue

@@ -0,0 +1,150 @@
+<template>
+  <div>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="shippingMatchBoxFollowList" @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+        <template slot="menuLeft">
+          <el-button type="primary" size="small">生成分票</el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "bookingInformation",
+  data() {
+    return {
+      formBox:{},
+      shippingMatchBoxFollowList: [],
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      }
+    }
+  },
+  async created() {
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+  },
+  methods:{
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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.limit()
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 300 - 0
src/views/oceanShipping/maritimeExport/components/splitContent.vue

@@ -0,0 +1,300 @@
+<template>
+  <div>
+    <trade-card title="基础信息">
+      <avue-form :option="optionForm" v-model="form.shippingBillDetails" ref="form">
+      </avue-form>
+    </trade-card>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="form.shippingMatchBoxList" @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="发货信息">
+      <avue-form :option="optionFormFour" v-model="form.shippingBillDetails" ref="formFour">
+        <template slot="consignorId" slot-scope="{disabled}">
+          <crop-select v-model="form.shippingBillDetails.consignorId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.shippingBillDetails.consignorName = val.cname || '';form.shippingBillDetails.consignorDetails = val.details}"></crop-select>
+        </template>
+        <template slot="consigneeId" slot-scope="{disabled}">
+          <crop-select v-model="form.shippingBillDetails.consigneeId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.shippingBillDetails.consigneeName = val.cname || '';form.shippingBillDetails.consigneeDetails = val.details}"></crop-select>
+        </template>
+        <template slot="notifierId" slot-scope="{disabled}">
+          <crop-select v-model="form.shippingBillDetails.notifierId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.shippingBillDetails.notifierName = val.cname || '';form.shippingBillDetails.notifierDetails = val.details}"></crop-select>
+        </template>
+        <template slot="secondNotifierId" slot-scope="{disabled}">
+          <crop-select v-model="form.shippingBillDetails.secondNotifierId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.shippingBillDetails.secondNotifierName = val.cname || ''}"></crop-select>
+        </template>
+      </avue-form>
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "bookingInformation",
+  data() {
+    return {
+      form:{
+        shippingMatchBoxList:[],
+        shippingBillDetails:{}
+      },
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '提单号',
+          prop: 'mainBillNo'
+        },{
+          label: '分单单号',
+          prop: 'branchBillNo'
+        }, {
+          label: '签单方式',
+          prop: 'signingMethod',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_signing_method",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '件数',
+          prop: 'number'
+        }, {
+          label: '包装',
+          prop: 'packing',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_packing",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '重量',
+          prop: 'weight'
+        }, {
+          label: '尺码',
+          prop: 'size'
+        }]
+      },
+      formBox:{},
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      optionFormFour: {
+        menuBtn: false,
+        span: 8,
+        column: [{
+          label: '发货人',
+          prop: 'consignorId',
+        }, {
+          label: '发货人详情',
+          prop: 'consignorDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '收货人',
+          prop: 'consigneeId'
+        }, {
+          label: '收货人详情',
+          prop: 'consigneeDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '通知人',
+          prop: 'notifierId'
+        }, {
+          label: '通知人详情',
+          prop: 'notifierDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '第二通知人',
+          prop: 'secondNotifierId',
+          row:true,
+        }, {
+          label: '唛头',
+          prop: 'shippingMark',
+          type: 'textarea',
+          minRows: 1,
+        }, {
+          label: '货描',
+          prop: 'goodsDetails',
+          type: 'textarea',
+          minRows: 1
+        }]
+      },
+      formCreate:false
+    }
+  },
+  model: {
+    prop: "value",
+    event: "callBack"
+  },
+  props: {
+    value: {
+      type: Object,
+      required: true,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (this.formCreate) {
+          this.form = Object.assign(this.value, {});
+        } else {
+          this.form = Object.assign(this.value, val || {});
+        }
+      },
+      deep: true,
+      immediate: true
+    },
+    form: {
+      handler(val) {
+        if (this.formCreate) this.setVal();
+      },
+      deep: true
+    }
+  },
+  async created() {
+    this.$nextTick(() => {
+      this.formCreate = true;
+    })
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+  },
+  methods:{
+    setVal() {
+      this.$emit("callBack", this.form);
+    },
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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.limit()
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 163 - 0
src/views/oceanShipping/maritimeExport/components/ticketDistribution.vue

@@ -0,0 +1,163 @@
+<template>
+  <div>
+    <trade-card title="分票信息">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="shippingBillList" @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.5)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.5)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">查看
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "ticketDistribution",
+  data() {
+    return {
+      formBox: {},
+      shippingBillList: [],
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: false,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '提单号',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '分单号',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '签单方式',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '服务条款',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '件数',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '重量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '尺码',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '起运港',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '目的港',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '船名',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '航次',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '开船日期',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '唛头',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        },{
+          label: '货描',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }]
+      }
+    }
+  },
+  async created() {
+    this.optionBox = await this.getColumnData(this.getColumnName(254.5), this.optionBoxBack);
+  },
+  methods: {
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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.limit()
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 207 - 741
src/views/oceanShipping/maritimeExport/detailsPage.vue


+ 1121 - 0
src/views/oceanShipping/maritimeExport/detailsPage1.vue

@@ -0,0 +1,1121 @@
+<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="backToList(0)">返回列表
+        </el-button>
+      </div>
+      <div class="add-customer-btn">
+        <el-button class="el-button--small-yh" style="margin-right: 10px" type="primary" size="small" v-if="!editButton"
+                   @click="confirmEditing">编辑
+        </el-button>
+        <el-dropdown style="margin-right: 10px">
+          <el-button type="primary" size="small">
+            审核处理<i class="el-icon-arrow-down el-icon--right"></i>
+          </el-button>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item @click.native="pleaseCheck(1)" :disabled="form.status>0">请核数据</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status"
+                              v-if="!detailData.id">撤销请核
+            </el-dropdown-item>
+            <el-dropdown-item @click.native="checkDialog = true,checkData = detailData.check;" v-if="detailData.id">审批
+            </el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+        <el-button class="el-button--small-yh" type="primary" size="small"
+                   @click="editCustomer">
+          保存数据
+        </el-button>
+      </div>
+    </div>
+    <trade-card title="基础资料">
+      <avue-form :option="optionForm" v-model="form" ref="form">
+        <template slot="affiliatedCompanyId" slot-scope="scope">
+          <crop-select v-model="form.affiliatedCompanyId" corpType="GS" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.affiliatedCompanyName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="corpId" slot-scope="scope">
+          <crop-select v-model="form.corpId" corpType="KH" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.corpName = val.cname || ''}"></crop-select>
+        </template>
+        <template slot="shippingCompanyId" slot-scope="scope">
+          <crop-select v-model="form.shippingCompanyId" corpType="GS" :disabled="scope.disabled"
+                       @getCorpData="(val)=>{form.shippingCompanyName = val.cname || ''}"></crop-select>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="提单信息">
+      <avue-form :option="optionFormTwo" v-model="shippingBillDetails" ref="formTwo">
+        <template slot="branchPayPlaceId" slot-scope="scope">
+          <e-crop-select
+              v-model="shippingBillDetails.branchPayPlaceId"
+              corp-type="DD-ID"
+              :disabled="scope.disabled"
+              :name.sync="shippingBillDetails.branchPayPlaceId"
+              @getCropId="(val)=>{shippingBillDetails.branchPayPlaceName = val.name}"
+          />
+        </template>
+        <template slot="mainPayPlaceId" slot-scope="scope">
+          <e-crop-select
+              v-model="shippingBillDetails.mainPayPlaceId"
+              corp-type="DD-ID"
+              :disabled="scope.disabled"
+              :name.sync="shippingBillDetails.mainPayPlaceId"
+              @getCropId="(val)=>{shippingBillDetails.mainPayPlaceName = val.name}"
+          />
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="箱型箱量">
+      <avue-crud :option="optionBox" v-model="formBox" ref="formBox" :data="shippingBoxTypeList" @row-save="rowSave"
+                 @row-update="rowUpdate"
+                 @resetColumn="resetColumnTwo('formBox','optionBox','optionBoxBack',254.1)"
+                 @saveColumn="saveColumnTwo('formBox','optionBox','optionBoxBack',254.1)">>
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBox.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBox(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="地点信息">
+      <avue-form :option="optionFormAdd" v-model="form" ref="formAdd">
+        <template slot="deliverGoodsAddressName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.deliverGoodsAddressId" type="id"
+                     @balabalaTow="(val)=>{form.deliverGoodsAddressName = val.name || ''}"/>
+        </template>
+        <template slot="loadingPortName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.loadingPortId" type="id"
+                     @balabalaTow="(val)=>{form.loadingPortName = val.name || ''}"/>
+        </template>
+        <template slot="dischargeCargoHarborName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.dischargeCargoHarborId" type="id"
+                     @balabalaTow="(val)=>{form.dischargeCargoHarborName = val.name || ''}"/>
+        </template>
+        <template slot="destinationName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.destinationId" type="id"
+                     @balabalaTow="(val)=>{form.destinationName = val.name || ''}"/>
+        </template>
+        <template slot="deliveryAddressName" slot-scope="scope">
+          <port-info :disabled="scope.disabled" v-model="form.deliveryAddressId" type="id"
+                     @balabalaTow="(val)=>{form.deliveryAddressName = val.name || ''}"/>
+        </template>
+      </avue-form>
+    </trade-card>
+    <trade-card title="配箱信息">
+      <avue-crud :option="optionBoxTwo" v-model="formBoxTwo" ref="formBoxTwo" :data="shippingMatchBoxList"
+                 @row-save="rowSaveTwo" @row-update="rowUpdateTwo"
+                 @resetColumn="resetColumnTwo('formBoxTwo','optionBoxTwo','optionBoxTwoBack',254.2)"
+                 @saveColumn="saveColumnTwo('formBoxTwo','optionBoxTwo','optionBoxTwoBack',254.2)">
+        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
+                     @click="$refs.formBoxTwo.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
+                     @click="rowDelBoxTwo(row,index)">删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </trade-card>
+    <trade-card title="服务项目">
+      <avue-form :option="optionFormThree" v-model="form" ref="formThree"></avue-form>
+    </trade-card>
+    <trade-card title="发货信息">
+      <avue-form :option="optionFormFour" v-model="form" ref="formFour">
+        <template slot="consignorId" slot-scope="{disabled}">
+          <crop-select v-model="form.consignorId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.consignorName = val.cname || '';form.consignorDetails = val.details}"></crop-select>
+        </template>
+        <template slot="consigneeId" slot-scope="{disabled}">
+          <crop-select v-model="form.consigneeId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.consigneeName = val.cname || '';form.consigneeDetails = val.details}"></crop-select>
+        </template>
+        <template slot="notifierId" slot-scope="{disabled}">
+          <crop-select v-model="form.notifierId" corpType="KH" :disabled="disabled"
+                       @getCorpData="(val)=>{form.notifierName = val.cname || '';form.notifierDetails = val.details}"></crop-select>
+        </template>
+      </avue-form>
+    </trade-card>
+    <!--    费用信息组件-->
+    <sea-cost v-model="shippingFeesList" :id="form.id" :codeValue="254.3" type="CK" activeName="first" ref="boxCost"
+              url="/api/blade-box-tube/shippingfees/remove" @generateBill="refresh(form.id)"></sea-cost>
+    <trade-card title="附件管理">
+      <c-upload
+          basic
+          :data="shippingFileList"
+          :disabled="disabled"
+          deleteUrl="/api/blade-box-tube/shippingfile/remove"
+          :enumerationValue="254.4"
+          display
+      />
+    </trade-card>
+    <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>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  tradingBox,
+  tradingBoxItem,
+  detail,
+  submit,
+  pleaseCheck,
+  repealCancel
+} from "@/api/oceanShipping/maritimeExport/index.js";
+import checkSchedule from "@/components/check/checkSchedule.vue";
+import check from "@/components/check/check.vue";
+
+export default {
+  name: "detailsPage",
+  props: {
+    onLoad: Object,
+    detailData: Object
+  },
+  components: {
+    checkSchedule, check
+  },
+  data() {
+    return {
+      activeName:'',
+      editButton: false,
+      checkId: '',
+      batchNo: '',
+      checkData: {},
+      checkScheduleDialog: false,
+      checkDialog: false,
+      shippingFeesList: [],
+      shippingFileList: [],
+      disabled: false,
+      form: {},
+      shippingBillDetails: {},
+      optionForm: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '系统号',
+          prop: 'sysNo',
+          disabled: true
+        }, {
+          label: '部门',
+          prop: 'deptId',
+          type: 'tree',
+          props: {
+            label: 'title',
+            value: 'value'
+          },
+          dicUrl: '/api/blade-system/dept/tree',
+          rules: [{
+            required: true,
+            message: "请选择部门",
+            trigger: "blur"
+          }],
+        }, {
+          label: '单据类型',
+          prop: 'documentType'
+        }, {
+          label: '业务类型',
+          prop: 'businessType',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_type",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '所属公司',
+          prop: 'affiliatedCompanyId'
+        }, {
+          label: '客户',
+          prop: 'corpId'
+        }, {
+          label: '客户联系人',
+          prop: 'contacts'
+        }, {
+          label: '客户电话',
+          prop: 'telephone'
+        }, {
+          label: '业务来源',
+          prop: 'businessSource',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          cascader: ['sourceId'],
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_business_source",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '来源',
+          prop: 'sourceId',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName={{key}}",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '船公司',
+          prop: 'shippingCompanyId'
+        }, {
+          label: '订舱代理',
+          prop: 'bookingAgentId',
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-client/corpsdesc/oceanCorpsList?corpsTypeName=订舱代理",
+          props: {
+            label: "cname",
+            value: "id"
+          }
+        }, {
+          label: '场站',
+          prop: 'station'
+        }, {
+          label: '场站联系人',
+          prop: 'stationContacts'
+        }, {
+          label: '场站电话',
+          prop: 'stationTelephone'
+        }, {
+          label: '航线',
+          prop: 'route',
+          type: "select",
+          slot: true,
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_route",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          type: 'textarea',
+          span: 24,
+          minRows: 2,
+        }]
+      },
+      optionFormTwo: {
+        menuBtn: false,
+        span: 6,
+        column: [{
+          label: '主提单号',
+          prop: 'mainBillNo'
+        }, {
+          label: '主单条款',
+          prop: 'mainClause',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_main_clause",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '主单付费地点',
+          prop: 'mainPayPlaceId'
+        }, {
+          label: '分提单号',
+          prop: 'branchBillNo'
+        }, {
+          label: '分单条款',
+          prop: 'branchClause',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_branch_clause",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '分单付费地点',
+          prop: 'branchPayPlaceId'
+        }, {
+          label: '装运方式',
+          prop: 'shipmentMode',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_shipment_mode",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '签单方式',
+          prop: 'signingMethod',
+          overHidden: true,
+          filterable: true,
+          type: 'select',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_signing_method",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          }
+        }, {
+          label: '提单份数',
+          prop: 'billCopies'
+        }, {
+          label: '操作员',
+          prop: 'operatorId',
+          filterable: true,
+          remote: true,
+          type: "select",
+          dicUrl: "/api/blade-user/page?size=20&current=1&account={{key}}",
+          props: {
+            label: "account",
+            value: "id",
+            res: 'data.records'
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.formTwo.DIC.operatorId || []) {
+                if (data.value === item.id) {
+                  this.shippingBillDetails.accountingDeptId = item.deptId
+                }
+              }
+            }
+          }
+        }, {
+          label: '核算部门',
+          prop: 'accountingDeptId',
+          type: "tree",
+          multiple: true,
+          tags: true,
+          dicUrl: "/api/blade-system/dept/tree?tenantId=" + JSON.parse(localStorage.getItem("saber-userInfo")).content.tenant_id,
+          props: {
+            label: "title"
+          },
+          checkStrictly: true,
+        }, {
+          label: '合同号',
+          prop: 'contractNo'
+        }, {
+          label: '提单状态',
+          prop: 'billStatus',
+          type: "select",
+          slot: true,
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_bill_status",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '船名',
+          prop: 'shipId',
+          type: "select",
+          cascader: ['voyageNumberId'],
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAll",
+          props: {
+            label: "name",
+            value: "id",
+          }
+        }, {
+          label: '航次',
+          prop: 'voyageNumberId',
+          type: "select",
+          dicUrl: "/api/blade-box-tube/shippingvessel/listAllByVoyage?pid={{key}}",
+          props: {
+            label: "no",
+            value: "id",
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.formTwo.DIC.voyageNumberId || []) {
+                if (data.value === item.id) {
+                  this.form.route = item.lane
+                  this.shippingBillDetails.sailDate = item.estimateSailDate
+                  this.shippingBillDetails.actualSailDate = item.sailDate
+                  this.shippingBillDetails.deadline = item.ducomentrayoffDate
+                  this.shippingBillDetails.closingDate = item.cutoffDate
+                }
+              }
+            }
+          }
+        }, {
+          label: '开船日期',
+          prop: 'sailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '实际开船',
+          prop: 'actualSailDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '截单日期',
+          prop: 'deadline',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '截港日期',
+          prop: 'closingDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '订舱日期',
+          prop: 'bookingDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '账期截止',
+          prop: 'accountingPeriodEndDate',
+          type: "date",
+          format: "yyyy-MM-dd",
+          valueFormat: "yyyy-MM-dd HH:mm:ss",
+        }, {
+          label: '服务条款',
+          prop: 'serviceClause',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_service_clause",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '贸易条款',
+          prop: 'tradeTerms',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_trade_terms",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '件数',
+          prop: 'number'
+        }, {
+          label: '包装',
+          prop: 'packing',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_packing",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '包装描述',
+          prop: 'packingDescribe'
+        }, {
+          label: '重量',
+          prop: 'weight'
+        }, {
+          label: '尺码',
+          prop: 'size'
+        }, {
+          label: '货物类型',
+          prop: 'goodsType',
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_goods_type",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '货物',
+          prop: 'goodsId',
+          type: "select",
+          dicUrl: "/api/blade-client/goodsdesc/descListAll",
+          props: {
+            label: "cname",
+            value: "id"
+          },
+          change: (data) => {
+            if (data.value) {
+              for (let item of this.$refs.formTwo.DIC.goodsId || []) {
+                if (data.value === item.id) {
+                  this.shippingBillDetails.goodsDetails = item.nameDescription
+                  this.shippingBillDetails.hsCode = item.hsCode
+                }
+              }
+            }
+          },
+          overHidden: true
+        }, {
+          label: 'HS代码',
+          prop: 'hsCode'
+        }, {
+          label: '货物详情',
+          prop: 'goodsDetails',
+          type: 'textarea',
+          span: 12,
+          minRows: 2,
+        }, {
+          label: '唛头',
+          prop: 'remarks',
+          type: 'textarea',
+          span: 12,
+          minRows: 2,
+        }]
+      },
+      formBox: {},
+      shippingBoxTypeList: [],
+      optionBox: {},
+      optionBoxBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱量',
+          prop: 'boxQuantity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'SOC箱',
+          prop: 'socBox',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度',
+          prop: 'temperature',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '温度单位',
+          prop: 'temperatureUnit',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_temperature_unit",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '通风量',
+          prop: 'ventilationCapacity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '湿度',
+          prop: 'humidity',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      formBoxTwo: {},
+      shippingMatchBoxList: [],
+      optionBoxTwo: {},
+      optionBoxTwoBack: {
+        align: 'center',
+        index: true,
+        addBtnText: "录入明细",
+        refreshBtn: false,
+        dialogDrag: true,
+        addBtn: true,
+        span: 8,
+        height: 600,
+        selection: true,
+        addRowBtn: false,
+        cellBtn: false,
+        editBtn: false,
+        delBtn: false,
+        menuWidth: 140,
+        dialogTop: 25,
+        dialogWidth: "80%",
+        showSummary: true,
+        sumColumnList: [{
+          name: 'emptyWeight',
+          type: 'sum',
+          decimals: 2
+        }],
+        column: [{
+          label: '箱型',
+          prop: 'boxType',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_box_ype",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '箱号',
+          prop: 'boxNo',
+          width: 100,
+          overHidden: true
+        }, {
+          label: 'HS代码',
+          prop: 'hsCode',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '货物明细',
+          prop: 'goodsDetails',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '件数',
+          prop: 'number',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '包装',
+          prop: 'packing',
+          width: 100,
+          type: "select",
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_packing",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '重量',
+          prop: 'weight',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '尺码',
+          prop: 'size',
+          width: 100,
+          overHidden: true
+        }, {
+          label: '备注',
+          prop: 'remarks',
+          overHidden: true
+        }]
+      },
+      optionFormThree: {
+        menuBtn: false,
+        span: 12,
+        column: [{
+          label: '服务项目',
+          prop: 'serviceItems',
+          type: 'checkbox',
+          dicUrl: "/api/blade-system/dict-biz/dictionary?code=ocean_service_items",
+          props: {
+            label: "dictValue",
+            value: "dictKey"
+          },
+          overHidden: true
+        }, {
+          label: '其他服务',
+          prop: 'serviceItemsDetails',
+          disabled: false,
+          type: 'textarea',
+          minRows: 1,
+        }]
+      },
+      optionFormAdd: {
+        menuBtn: false,
+        span: 8,
+        column: [{
+          label: '发货地',
+          prop: 'deliverGoodsAddressName'
+        }, {
+          label: '装货港',
+          prop: 'loadingPortName'
+        }, {
+          label: '卸货港',
+          prop: 'dischargeCargoHarborName'
+        }, {
+          label: '目的地',
+          prop: 'destinationName'
+        }, {
+          label: '交货地',
+          prop: 'deliveryAddressName'
+        }]
+      },
+      optionFormFour: {
+        menuBtn: false,
+        span: 8,
+        column: [{
+          label: '发货人',
+          prop: 'consignorId',
+        }, {
+          label: '发货人详情',
+          prop: 'consignorDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '收货人',
+          prop: 'consigneeId'
+        }, {
+          label: '收货人详情',
+          prop: 'consigneeDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }, {
+          label: '通知人',
+          prop: 'notifierId'
+        }, {
+          label: '通知人详情',
+          prop: 'notifierDetails',
+          type: 'textarea',
+          span: 16,
+          minRows: 1,
+        }]
+      }
+    }
+  },
+  async created() {
+    this.optionBox = await this.getColumnData(this.getColumnName(254.1), this.optionBoxBack);
+    this.optionBoxTwo = await this.getColumnData(this.getColumnName(254.2), this.optionBoxTwoBack);
+    // this.key++
+    if (this.onLoad.id && this.detailData.id) {
+      this.refresh(this.onLoad.id, true)
+    } else if (this.onLoad.id) {
+      this.refresh(this.onLoad.id, true)
+    }
+  },
+  methods: {
+    //审核进度关闭
+    choceScheduleFun() {
+      this.checkScheduleDialog = false
+    },
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+      this.$store.commit("DOMXS_CLOSE_EXPORT_DETAIL");
+      this.$router.$avueRouter.closeTag(window.location.hash.slice(1));
+    },
+    //刷新数据
+    refresh(id, type) {
+      const loading = this.$loading({
+        lock: true,
+        text: '加载中',
+        spinner: 'el-icon-loading',
+        background: 'rgba(255,255,255,0.7)'
+      })
+      detail({id: id}).then(res => {
+        this.form = res.data.data
+        this.shippingBoxTypeList = this.form.shippingBoxTypeList
+        this.shippingMatchBoxList = this.form.shippingMatchBoxList
+        this.shippingFeesList = this.form.shippingFeesList
+        this.shippingFileList = this.form.shippingFileList
+        this.form.serviceItems = this.form.serviceItems.split(',')
+        this.shippingBillDetails = this.form.shippingBillDetails
+        delete this.form.shippingBoxTypeList
+        delete this.form.shippingMatchBoxList
+        delete this.form.shippingFeesList
+        delete this.form.shippingFileList
+        delete this.form.shippingBillDetails
+        loading.close();
+        this.limit(type)
+      }).catch(() => {
+        loading.close();
+      })
+    },
+    confirmEditing() {
+      this.editButton = true
+      this.limit()
+    },
+    limit(type) {
+      type = !this.editButton;
+      if (type || this.form.status > 0) {
+        this.$set(this.optionForm, "disabled", true)
+        this.$set(this.optionFormTwo, "disabled", true)
+        //箱型箱量
+        this.$set(this.optionBox, "disabled", true)
+        this.$set(this.optionBox, "menu", false)
+        this.$set(this.optionBox, "addBtn", false)
+        //地点信息
+        this.$set(this.optionFormAdd, "disabled", true)
+        //配箱信息
+        this.$set(this.optionBoxTwo, "disabled", true)
+        this.$set(this.optionBoxTwo, "menu", false)
+        this.$set(this.optionBoxTwo, "addBtn", false)
+        //服务项目
+        this.$set(this.optionFormThree, "disabled", true)
+        //发货信息
+        this.$set(this.optionFormFour, "disabled", true)
+        //附件明细
+        this.disabled = true
+      } else {
+        this.$set(this.optionForm, "disabled", false)
+        this.$set(this.optionFormTwo, "disabled", false)
+        //箱型箱量
+        this.$set(this.optionBox, "disabled", false)
+        this.$set(this.optionBox, "menu", true)
+        this.$set(this.optionBox, "addBtn", true)
+        //地点信息
+        this.$set(this.optionFormAdd, "disabled", false)
+        //配箱信息
+        this.$set(this.optionBoxTwo, "disabled", false)
+        this.$set(this.optionBoxTwo, "menu", true)
+        this.$set(this.optionBoxTwo, "addBtn", true)
+        //服务项目
+        this.$set(this.optionFormThree, "disabled", false)
+        //发货信息
+        this.$set(this.optionFormFour, "disabled", false)
+        //附件明细
+        this.disabled = false
+      }
+    },
+    rowSave(form, done, loading) {
+      done(form)
+    },
+    rowUpdate(form, index, done, loading) {
+      done(form)
+    },
+    rowSaveTwo(form, done, loading) {
+      done(form)
+    },
+    rowUpdateTwo(form, index, done, loading) {
+      done(form)
+    },
+    rowDelBox(row, index) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+            if (row.id) {
+              tradingBox(row.id).then(res => {
+                this.shippingBoxTypeList.splice(index, 1);
+                this.$message.success("操作成功!");
+              });
+            } else {
+              this.shippingBoxTypeList.splice(index, 1);
+              this.$message.success("操作成功!");
+            }
+          }
+      )
+      ;
+    },
+    rowDelBoxTwo(row, index) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          tradingBoxItem(row.id).then(res => {
+            this.shippingMatchBoxList.splice(index, 1);
+            this.$message.success("操作成功!");
+          });
+        } else {
+          this.shippingMatchBoxList.splice(index, 1);
+          this.$message.success("操作成功!");
+        }
+      })
+    },
+    //保存数据
+    editCustomer() {
+      this.$refs["form"].validate((valid, done) => {
+        done()
+        if (valid) {
+          this.$refs["formTwo"].validate((valid, done) => {
+            done()
+            if (valid) {
+              let form = {
+                ...this.form,
+                shippingBillDetails: this.shippingBillDetails,
+                shippingBoxTypeList: this.shippingBoxTypeList,
+                shippingMatchBoxList: this.shippingMatchBoxList,
+                shippingFeesList: this.shippingFeesList,
+                shippingFileList: this.shippingFileList,
+                serviceItems: this.form.serviceItems.join(','),
+                billType: "HYCK",
+                tradeType: "HY"
+              }
+              const loading = this.$loading({
+                lock: true,
+                text: '加载中',
+                spinner: 'el-icon-loading',
+                background: 'rgba(255,255,255,0.7)'
+              });
+              submit(form).then(res => {
+                this.$message.success("保存成功")
+                loading.close()
+                this.refresh(res.data.data.id)
+              }).catch(() => {
+                loading.close()
+              })
+            }
+          })
+        }
+      })
+    },
+    //撤销
+    repealCancel() {
+      this.$confirm("您确定撤回此次申请吗?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        const data = {
+          id: this.form.id,
+          pageLabel: "买箱",
+          approvalType: 1,
+          checkFlag: 1,
+        }
+        const loading = this.$loading({
+          lock: true,
+          text: '加载中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
+        repealCancel(data).then(res => {
+          loading.close();
+          this.$message.success('撤回成功')
+          this.refresh(this.form.id)
+        }).catch(() => {
+          loading.close();
+        })
+      })
+    },
+    pleaseCheck(type) {
+      this.$confirm("您确定提交请核申请吗?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.$refs["form"].validate((valid, done) => {
+          done()
+          if (valid) {
+            let form = {
+              ...this.form,
+              shippingBillDetails: this.shippingBillDetails,
+              shippingBoxTypeList: this.shippingBoxTypeList,
+              shippingMatchBoxList: this.shippingMatchBoxList,
+              shippingFeesList: this.shippingFeesList,
+              shippingFileList: this.shippingFileList,
+              serviceItems: this.form.serviceItems.join(','),
+              billType: "HYCK",
+              tradeType: "HY"
+            }
+            const loading = this.$loading({
+              lock: true,
+              text: '加载中',
+              spinner: 'el-icon-loading',
+              background: 'rgba(255,255,255,0.7)'
+            });
+            submit(form).then(res => {
+              const data = {
+                id: res.data.data.id,
+                url: '/oceanShipping/maritimeExport/index',
+                pageStatus: "this.$store.getters.maritimeExport",
+                approvalType: type,
+                pageLabel: "海运出口",
+                checkFlag: 1,
+                billType: "HYCK"
+              }
+              pleaseCheck(data).then(rest => {
+                loading.close();
+                this.$message.success('请核成功')
+                this.refresh(res.data.data.id)
+              }).catch(() => {
+                loading.close();
+              })
+            }).catch(() => {
+              loading.close()
+            })
+          }
+        });
+      })
+    },
+    //自定义列保存
+    async saveColumnTwo(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;
+      }
+    },
+    //自定义列重置
+    async resetColumnTwo(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.limit()
+      }
+    },
+    backToList(type) {
+      this.$emit("backToList", type);
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 3 - 2
src/views/oceanShipping/maritimeExport/index.vue

@@ -16,9 +16,9 @@
           @resetColumn="resetColumnTwo('crud','option','optionList',254)"
           @saveColumn="saveColumnTwo('crud','option','optionList',254)"
           :page.sync="page">
-        <template slot-scope="{type,size,row,$index}" slot="menu">
+        <template slot-scope="{type,size,row,index}" slot="menu">
           <el-button icon="el-icon-view" :size="size" :type="type" @click="check(row)">查看</el-button>
-          <el-button icon="el-icon-delete" :size="size" :type="type" @click="$refs.crud.rowDel(row,$index)">删除
+          <el-button icon="el-icon-delete" :size="size" :type="type" @click="$refs.crud.rowDel(row,index)">删除
           </el-button>
         </template>
         <template slot="corpNameSearch">
@@ -460,6 +460,7 @@ export default {
             message: '删除成功!'
           });
           this.dataList.splice(index, 1);
+          this.onLoad(this.page)
         })
       }).catch(() => {
       });

Някои файлове не бяха показани, защото твърде много файлове са промени