index.js 6.66 KB
import Api from '~/service/Api';
import commonFunctions from '~/mixin/commonFunctions.js';
import buildFn from './buildCommons.js';
import setmod from '~/components/business/setmod/event';
import glentry from '~/components/business/glentry/event';
import engp from '~/components/business/engp/event';
import docpan from '~/components/business/docpan/event';
import ccvpan from '~/components/business/ccvpan/event';
import limitbody from '~/components/business/limitbody/event';
import doctre from '~/components/business/doctre/event';
import Utils from "~/utils"

export default {
  mixins: [commonFunctions],
  methods: {
    ...setmod,
    ...glentry,
    ...engp,
    ...docpan,
    ...ccvpan,
    ...limitbody,
    ...doctre,
    async init () {

      const params = {
        spt: JSON.parse(localStorage.getItem('row_' + this.trnName)),
        trninr: this.$route.query.trninr,
      }
      const res = await Api.post('/service/bctrad/init', {
        ...params,
        transName: this.trnName,
        userId: window.sessionStorage.userId || 'ZL',
        bcdgrp:{
          rec:{
            inr: this.$route.query.inr
          }
        },
      });
      if (!res.data) {
        return
      }
      this.copyValueFromVoData(this.model, res.data)
      this.copyValueFromVoData(this.model.setmod.setfeg, res.data.setfeg)
      this.copyValueFromVoData(this.model.setmod.setfog, res.data.setfog)
      this.copyValueFromVoData(this.model.setmod.setglg, res.data.setglg)
    },
    // 兼容处理在前端model中定义了字段,后端返回的数据中不存在字段的问题
    copyValueFromVoData (model, data) {
      let keysList = Object.keys(model)
      keysList.map((key) => {
        if (data[key]) {
          if (Utils.typeOf(model[key]) === 'Object') {
            this.copyValueFromVoData(model[key], data[key])
          } else {
            this.$set(model, key, data[key])
          }
        }
      })
    },
    async tabClick(tab) {
      if (this.isInDisplay) {
        return;
      }
      let name = tab.name;
      switch (name) {
        case 'ccvpan':
          let ccvpanRequest = buildFn.buildCcvpan(this.model, this.trnName);
          this.processLiaccv(ccvpanRequest);
          break;
        case 'engp':
          let engpRequest = buildFn.buildEngp(this.model, this.trnName);
          this.processLiaall(engpRequest);
          break;
        case 'setmod':
          let setfegRequest = buildFn.buildSetfeg(this.model, this.trnName);
          // 此处利用回调是为了等setfeg的接口调用完成后才去获取setglg参数,由于setglg参数依赖于setfeg函数的返回值
          this.processSetpan(setfegRequest, () => {
            return buildFn.buildSetglg(this.model, this.trnName);
          });
          break;
        case 'docpan':
          let docpanRequest = buildFn.buildDocpan(this.model, this.trnName);
          this.processTrndoc(docpanRequest);
          break;
        case 'glepan':
          let glentryRequest = buildFn.buildGlentry(this.model, this.trnName);
          this.processGlentry(glentryRequest);
          break;
        case 'limitbody':
          let limitbodyRequest = buildFn.buildLimitbody(this.model, this.trnName);
          this.processLimitbody(limitbodyRequest);
          break;
        case 'doctre':
          let doctreRequest = buildFn.buildDoctre(this.model, this.trnName);
          this.processDoctre(doctreRequest);
          break;
        default:
          return;
      }
    },
    // 点击获取按钮拉取当前key字段下的表单数据
    queryFormData(key) {
      console.log(key);
    },
    // 业务信息=》基本信息=》编号-----获取编号
    async queryOwnref() {
      let params = {
        ptainr: this.model.bcdgrp.dre.pts.ptainr,
        businessType: 'IC',
        tbl: 'IC',
      };
      const loading = this.loading();
      let res = await Api.post('/service/bctrad/getOwnRef', params);
      if (res.respCode == SUCCESS) {
        loading.close();
        this.model.bcdgrp.rec.ownref = res.data;
      }
    },

    // 获取弹框表格数据
    async queryGridEtyPromptDialogData(type, ptytyp) {
      let params = {
        userId: window.sessionStorage.userId || 'ZL',
        ptytyp: ptytyp,
        extkey: this.model.bcdgrp[type.toLowerCase()].pts.extkey,
      };
      let res = await Api.post('/service/ptspta/list', params);
      if (res.respCode == SUCCESS) {
        this.root.$refs['etyDialog'].show = true;
        this.root.promptData.data = res.data.ptaInfos;
        this.root.promptData.type = type;
      }
    },
    // 选中弹框表格的行数据
    async selectGridEtyPromptData(row) {
      let params = {
        ...row,
      };
      let res = await Api.post('/service/ptspta/fetch', params);
      if (res.respCode == SUCCESS) {
        this.$set(this.model.bcdgrp, row.role.toLowerCase(), res.data);
      }
    },
    // 业务信息=》基本信息=》支出目的
    purposChange(key, value) {
      this.handleChangeForm(key, value);
    },
    // 初始化保函开立类型码表下拉列表
    async queryHndtypCodeTableList(trnName) {
      let params = {
        botp: {
          swiftflg: this.model.botp.swiftflg,
        },
        bcdgrp: {
          rec: {
            purpos: this.model.bcdgrp.rec.purpos,
          },
        },
        transName: trnName.toUpperCase(),
      };
      let res = await Api.post('/service/bctrad/initHndtyp', params);
      if (res.respCode == SUCCESS) {
        this.$set(this.codes, 'voHndtyp', res.data);
      }
    },
    // 是否SWIFT格式修改--联动保函开立类型
    handleChangeSwiftflg() {
      this.queryHndtypCodeTableList(this.root.trnName);
    },
    // 支出目的修改--联动保函开立类型
    handleChangePurpos() {
      this.queryHndtypCodeTableList(this.root.trnName);
    },
    buildLiaccv () {
      let params = {
        ...buildFn.buildCommonData(this.model, this.trnName),
        liaccvg: this.model.liaccv.liaccvg,
        oldamt: this.model.liaccv.oldamt,
        chgamt: this.model.liaccv.chgamt,
        concur: this.model.liaccv.concur,
      };
      
      return params
    },
    // 公共组件setmod处理方式改变触发联动
    changeSetmodModel (emitParams) {
      let reqParams = {}
      switch (emitParams.code) {
        case 'processMethods':
          reqParams = buildFn.buildSetglg(this.model, this.trnName);
          this.calcPayDetail(reqParams)
          break
        case 'changeDsp':
          let index = emitParams.index;
          let setglgRequest = buildFn.buildSetglg(this.model, this.trnName);
          setglgRequest.setglg = {setgll:  emitParams.list};
          this.setgllAccts(setglgRequest, index);
          break
          default:
          return
      }
    }
  },
};