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,
    // 获取gitopn弹框表格数据
    // async init () {
    //   const params = {
    //     spt: JSON.parse(localStorage.getItem('row_' + this.trnName))
    //   }
    //   const res = await Api.post('/service/gitame/init', {
    //     ...params,
    //     transName: this.trnName,
    //     userId: window.sessionStorage.userId || 'ZL',
    //   });
    //   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)
    // },
    async init () {
      const res = await Api.post('/service/gitame/init', {
        transName: this.trnName,
        userId: window.sessionStorage.userId || 'ZL',
        gidInr: this.$route.query.inr
        // gidInr:'00000661',
      });
      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 'setpan':
          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.gidgrp.apl.pts.ptainr,
        businessType: 'LG',
        tbl: 'LG',
      };
      const loading = this.loading();
      let res = await Api.post('/service/gitame/getOwnRef', params);
      if (res.respCode == SUCCESS) {
        loading.close();
        this.model.gidgrp.rec.ownref = res.data;
      }
    },
    async queryGridEtyPromptDialogData(type, ptytyp) {
      let params = {
        userId: window.sessionStorage.userId || 'ZL',
        ptytyp: ptytyp,
        extkey: this.model.gidgrp[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;
      }
    },
    // 选中gitame弹框表格的行数据
    async selectGridEtyPromptData(row) {
      let params = {
        ...row,
      };
      let res = await Api.post('/service/ptspta/fetch', params);
      if (res.respCode == SUCCESS) {
        this.$set(this.model.gidgrp, row.role.toLowerCase(), 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
        }
      }
  }
}