import Api from '~/service/Api';
import commonFunctions from '~/mixin/commonFunctions.js';
import Utils from "~/utils"
import moment from 'moment'
export default {
	mixins: [commonFunctions],
	methods: {
    isHeadCenter(){
      let roleName = JSON.parse(window.sessionStorage.curRole).name;
      let roleId=JSON.parse(window.sessionStorage.curRole).id;
      if ("-单证中心-总行业务管理员-".indexOf(roleName)>0 || roleName==="押汇中心经办" ||roleName==="押汇中心复核"){
              return true;
      }
       if ("-10253-10255-10256-10245-".indexOf(roleId)>0 ){
              return true;
      }
      return false;
    },
		//重置
		handleReset() {
			this.model.bchcon = '';
			this.model.trncorco.ownref = '';
            this.model.usrcon = '';
            this.model.relflg = [];
            this.model.minamt='';
            this.model.maxamt='';
			this.model.atp.cod = '';
			this.model.trncorco.dflg = [];
			this.model.atptxt = '';
      this.model.searchAllUsers = false;
      this.model.codeLev = "01";
      this.sortObj={};
		},
		// 机构列表
		async getBranchList() {
			const loading = this.loading();
			let res = await Api.post('/public/quesel/getActBranchList');
			if (res.respCode == SUCCESS) {
				this.bchtypList = res.data.list;
			}
			loading.close();
		},

		//经办柜员列表
		async getUserList() {
      const loading = this.loading();
      let param={};
      if(this.model.bchcon){
        param.bchcon=this.model.bchcon
      }
      let res = await Api.post("/public/quesel/getActUserList",param);
      if (res.respCode == SUCCESS) {
        this.userList = res.data.list;
      }
      loading.close();
    },
    
    sortChange(obj) {
      let order = "";
      let prop = "";
      let column = "";
      if(obj && obj.order){
        order=obj.order === 'descending' ? 'desc' : 'asc';
        prop=obj.prop;
      }
      let rolebool=this.isHeadCenter();
      if(rolebool){
        switch (prop) {
          case 'inifrm':
            column = "q.frm";
            break;
          case 'inifrmName':
            column = "q.frm";
            break;
          case 'ownref':
            column = "q.objref";
            break;
          case 'relflgName':
            column = "dealRelflg";
            break;
          case 'reloricur':
            column = "q.relcur";
            break;
          case 'reloriamt':
            column = "q.relamt";
            break;
          case 'inidattim':
            column = "q.tardattim";
            break;
          case 'iniusr':
            column = "q.usrcon";
            break;
          case 'relusr3':
              column = "q.usr";
              break;
          case 'objnam':
            column = "q.objnam";
            break;
          case 'bchname':
            column = "q.bchkeyinr";
            break;
          case 'relreqCom':
            column = "relreqCom";
            break;
          case 'relresCom':
            column = "relresCom";
            break;
        }
      }else{
        switch (prop) {
          case 'inifrm':
            column = "t.inifrm";
            break;
          case 'inifrmName':
            column = "stb.txt";
            break;
          case 'ownref':
            column = "t.ownref";
            break;
          case 'relflgName':
            column = "t.relflg";
            break;
          case 'reloricur':
            column = "t.reloricur";
            break;
          case 'reloriamt':
            column = "t.reloriamt";
            break;
          case 'inidattim':
            column = "t.inidattim";
            break;
          case 'iniusr':
            column = "t.iniusr";
            break;
          case 'relusr3':
              column = "t.relusr3";
              break;
          case 'objnam':
            column = "t.objnam";
            break;
          case 'bchname':
            column = "t.bchkeyinr";
            break;
          case 'relreqCom':
            column = "relreqCom";
            break;
          case 'relresCom':
            column = "relresCom";
            break;
        }
      }
      let orderObj = {
        order: order,
        column: column
      }
      this.sortObj=orderObj;
			this.handleSearch(orderObj);
    },

    getTrninr(row){
        let trninr=row.objtyp==='TRN'?row.objinr:row.inr;
        if(row.creobjtyp==='TRN' && '-assigned-new-correct-pending-'.indexOf(row.status)>0){
          trninr=row.creobjinr;
      }
      return trninr;
    },

        selectableFn(row) {
            return true;
        },

        async handleSelectionChange(val) {
            this.multipleSelection = val.map((item) => {
                return item.inr
            })
            this.multipleSelectionObj = val.map((item) => {
                return item
            })
            this.multipleSelectionRow = val.map((item) => {
                return item
            })[0]
        },

        async reBackMethod() {
            if(this.multipleSelectionObj && this.multipleSelectionObj.length>10){
                this.$notify.error({title: '错误', message: '请勿批量选中业务行数超过10条!'});
                return;
            }
            this.$confirm('您确定批量退回选中的业务交易?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }).then(async () => {
                this.batchflg = "Y";
                let array = this.multipleSelectionObj;
                for (let i = 0; i < array.length; i++) {
                    this.onReturn(i + 1, array[i]);
                }
            });
        },

    handleSearch(orderObj){
      if(this.searchModel==="OWN"){
         this.handleSearchOwn(orderObj);
      }else{
        this.handleSearchAll(orderObj);
      }
    },
		//查询列表
		async handleSearchOwn(orderObj) {
          this.model.tranType=["02"];
          this.searchLoading=true;
          this.searchModel="OWN";
			let inidatfro = this.model.trncorco.inidatfro;
			if (!inidatfro) {
				this.$notify.error({title: '错误', message: '查询开始日期必输!'});
                this.searchLoadingAll=false;
                this.searchLoading=false;
				return;
			}
			let inidattil = this.model.trncorco.inidattil;
			if (!inidattil) {
				this.$notify.error({title: '错误', message: '查询结束日期必输!'});
                this.searchLoadingAll=false;
                this.searchLoading=false;
				return;
			}
            if (Number(this.model.minamt)>Number(this.model.maxamt)) {
                this.$notify.error({title: '错误', message: '业务金额区间错误!'});
                return;
            }
    let params = {
        ownref: this.model.trncorco.ownref?this.model.trncorco.ownref.trim():this.model.trncorco.ownref,
        inidatfro: moment(inidatfro).format('YYYY-MM-DD') + ' 00:00:00',
        inidattil: moment(inidattil).format('YYYY-MM-DD') + ' 23:59:59',
        usrcon: this.model.usrcon,
        bchcon: this.model.bchcon,
        inifrm: this.model.atp.cod,
        minamt: this.model.minamt,
        maxamt: this.model.maxamt,
        bustypList: this.model.trncorco.dflg,
        relflgList: this.model.relflg,
        pageNum: this.pagination.pageIndex,
        pageSize: this.pagination.pageSize,
        codeLev: this.model.codeLev,
        searchModel:this.searchModel,
      };
      if (orderObj) {
				params.orderStr = orderObj.order;
				params.columnStr = orderObj.column
      }
      if(this.roleTypeName==="单证中心" && this.model.tranTypeStr){
          params.tranTypeStr=this.model.tranTypeStr;
      }
      const loading = this.loading();
      let rolebool=this.isHeadCenter();
      if(rolebool){
        const res = await Api.post('/public/quesel/listIncomplete', params);
        if (res.respCode === SUCCESS) {
          this.stmData.data = res.data.list;
          this.pagination.total = Number(res.data.total);
        }
      }else{
        const res = await Api.post('/public/trnrel/getUnDataList', params);
        if (res.respCode === SUCCESS) {
          this.stmData.data = res.data.list;
          this.pagination.total = Number(res.data.total);
        }
      }
      this.searchLoading=false;
			loading.close();
    },

    async handleSearchAll(orderObj) {
      this.searchLoadingAll=true;
      this.searchModel="ALL";
        let inidatfro = this.model.trncorco.inidatfro;
        if (!inidatfro) {
            this.$notify.error({title: '错误', message: '查询开始日期必输!'});
            this.searchLoadingAll=false;
            this.searchLoading=false;
            return;
        }
        let inidattil = this.model.trncorco.inidattil;
        if (!inidattil) {
            this.$notify.error({title: '错误', message: '查询结束日期必输!'});
            this.searchLoadingAll=false;
            this.searchLoading=false;
            return;
        }
        if (Number(this.model.minamt)>Number(this.model.maxamt)) {
            this.$notify.error({title: '错误', message: '业务金额区间错误!'});
            return;
        }
        let params = {
            ownref: this.model.trncorco.ownref?this.model.trncorco.ownref.trim():this.model.trncorco.ownref,
            inidatfro: moment(inidatfro).format('YYYY-MM-DD') + ' 00:00:00',
            inidattil: moment(inidattil).format('YYYY-MM-DD') + ' 23:59:59',
            usrcon: this.model.usrcon,
            bchcon: this.model.bchcon,
            inifrm: this.model.atp.cod,
            minamt: this.model.minamt,
            maxamt: this.model.maxamt,
            bustypList: this.model.trncorco.dflg,
            relflgList: this.model.relflg,
            pageNum: this.pagination.pageIndex,
            pageSize: this.pagination.pageSize,
            codeLev: this.model.codeLev,
            searchModel:this.searchModel,
      };
      if (orderObj) {
				params.orderStr = orderObj.order;
				params.columnStr = orderObj.column
      }
      if(this.roleTypeName==="单证中心" && this.model.tranTypeStr){
          params.tranTypeStr=this.model.tranTypeStr;
      }
      const loading = this.loading();
      let rolebool=this.isHeadCenter();
      if(rolebool){
        const res = await Api.post('/public/quesel/listIncomplete', params);
        if (res.respCode === SUCCESS) {
          this.stmData.data = res.data.list;
          this.pagination.total = Number(res.data.total);
        }
      }else{
        const res = await Api.post('/public/trnrel/getUnDataList', params);
        if (res.respCode === SUCCESS) {
          this.stmData.data = res.data.list;
          this.pagination.total = Number(res.data.total);
        }
      }
      this.searchLoadingAll=false;
			loading.close();
    },

    handleToggleSearch: function () {
      this.searchToggle = !this.searchToggle
      this.$emit('search-toggle', this.searchToggle)
    },

    async exportExcel(){
      let inidatfro = this.model.trncorco.inidatfro;
			if (!inidatfro) {
				this.$notify.error({
					title: '错误',
					message: '查询开始日期必输!'
				});
				return;
			}
			let inidattil = this.model.trncorco.inidattil;
			if (!inidattil) {
				this.$notify.error({
					title: '错误',
					message: '查询结束日期必输!'
				});
				return;
      }
      const loading = this.loading();
      let params = {
                ownref: this.model.trncorco.ownref?this.model.trncorco.ownref.trim():this.model.trncorco.ownref,
				inidatfro: moment(inidatfro).format('YYYY-MM-DD') + ' 00:00:00',
				inidattil: moment(inidattil).format('YYYY-MM-DD') + ' 23:59:59',
				usrcon: this.model.usrcon,
				bchcon: this.model.bchcon,
				inifrm: this.model.atp.cod,
                minamt: this.model.minamt,
                maxamt: this.model.maxamt,
                bustypList: this.model.trncorco.dflg,
                relflgList: this.model.relflg,
				pageNum: this.pagination.pageIndex,
        pageSize: this.pagination.pageSize,
        codeLev: this.model.codeLev,
        searchModel:this.searchModel,
      };
      let res ={};
      let rolebool=this.isHeadCenter();
      if(rolebool){
        res=await Api.post('/public/quesel/exportUnFinishExcel',params);
      }else{
        res=await Api.post('/public/trnrel/exportUnFinishExcel',params);
      }
      if (res.respCode == SUCCESS) {
        res.data.forEach((arr,index)=>{
          if(index == 0) return
          let num = parseFloat(arr[4])
          if(isNaN(num)) num = 0
          arr[4] = {
            v: num,
            t:'n',
            z:'#,##0.00'
          }
        })
        let name=moment(new Date()).format('yyyy-MM-DD HH:mm:ss') ;
        Utils.exportToExcel (res.data, "未完成列表_"+name+".xlsx", "未完成列表") ;
      }
      loading.close();
    },

		//交易代码
		async onSeainf() {
			this.dialogTitle = `交易列表`;
			this.dialogTableVisible = true;
			// 分层取值
			this.loadingFlag = true;
			this.tableList = [];
			this.currentPage = 1;
			this.pageSize = 10000;
			this.total = 0;
			// 获取table的表格数据
			let params = {
				cod: this.model.atp.cod,
				pageNo: this.currentPage,
				pageSize: this.pageSize
			};
			const res = await Api.post('/public/quesel/getFrameList', params);
			if (res.respCode === SUCCESS) {
				if (res.data && res.data.list) {
					this.total = res.data.total;
					res.data.list.forEach((item, i) => {
						item.index = i + 1;
					});
					this.tableList = res.data.list;
				}
			}
			this.loadingFlag = false; //接口调完变成false
		},

		currentChange(num) {
			this.currentPage = num;
			this.getTableData();
		},

		async dbClickRow(row, column, event) {
			// 此处为了回填数据时回调
			this.$emit('handleChange')
			// 回填数据
			this.model.atp.cod = row.cod;
			this.dialogTableVisible = false;
		},
		beforeClose(done) {
			this.dialogTableVisible = false;
			this.currentPage = 1;
			done();
    },
      async onReturnOne(ind,row){
          this.batchflg = "N";
          this.onReturn(ind, row);
      },
    

    async onReturn(ind, row) {
      //云平台退回
      //单证中心退回
      let objtyp=row.objtyp;
      let objinr=row.objinr;
      if(objtyp!=='TRN' && this.currentOrg!=='1000'){
          objtyp='TRN';
          objinr=row.inr;
      }
      let rtnmsg = await Api.post("/business/lock/getSptAccessible", { objInr: objinr, objType: objtyp, trnName: row.inifrm.toUpperCase() })
      if (rtnmsg.respCode===SUCCESS && rtnmsg.data && rtnmsg.data.usrId) {
        let msg = '该笔待办数据已被锁定!' + "锁定人为" + rtnmsg.data.usrId + ",锁定交易为[" + rtnmsg.data.trnLabel+"]"
        this.$notify.error({ title: '错误', message: msg });
        return
      }
      let trninr=this.getTrninr(row);
      if(row.relflg.indexOf("W")>=0 ){
            if (this.batchflg!=='Y') {
              this.$confirm('您确定退回该笔交易?', '提示', {
                  confirmButtonText: '确定',
                  cancelButtonText: '取消',
                  type: 'warning',
              }).then(async () => {
                  let params = {
                      trninr: trninr,
                      remark: ''
                  }
                  let res = await Api.post("/public/trnrel/reprow", params);
                  if (res.respCode == SUCCESS) {
                      this.$notify({
                          title: '成功',
                          message: '退回成功',
                          type: 'success',
                      });
                      this.handleSearch();
                  } else {
                      this.$notify({title: "错误", message: res.respMsg, type: "error",});
                  }
              })
          }else{
                let params = {
                    trninr: trninr,
                    remark: ''
                }
                let res = await Api.post("/public/trnrel/reprow", params);
                if (res.respCode == SUCCESS) {
                    this.$notify({
                        title: '成功',
                        message: '退回成功',
                        type: 'success',
                    });
                    this.handleSearch();
                } else {
                    this.$notify({title: "错误", message: res.respMsg, type: "error",});
                }
            }
      }else{
          this.$notify({title: "错误",message: "请选择正确的数据退回!",type: "error",});
      }
    },
  

		//详情
		async onWaitDetail(idx, row) {
      let trninr=this.getTrninr(row);
      let res = await Api.post("/public/trnrel/getFinTrnInfo", {trninr:trninr});
			if (res.respCode == SUCCESS) {
        let inifrm=row.inifrm;
        if(res.data.finTrninr){
          trninr = res.data.finTrninr;
          inifrm = res.data.finInifrm;
        }
        this.routerPush({
          path: '/business/trnselDetail',
          query: {
            inr: trninr,
            inifrm: inifrm.toLocaleLowerCase(),
            businessType: row['objtyp']
          }
        });
      }
		},
		//快照
		async onHandle(idx, row) {
      let trninr=this.getTrninr(row);
      let res = await Api.post("/public/trnrel/getFinTrnInfo", {trninr:trninr});
			if (res.respCode == SUCCESS) {
        let inifrm=row.inifrm;
        if(res.data.finTrninr){
          trninr = res.data.finTrninr;
          inifrm = res.data.finInifrm;
        }
        inifrm=inifrm.toLocaleLowerCase();
        this.routerPush({
          path: `/review/review-${inifrm}`,
          query: {
            businessInr: trninr,
            businessType: "TRN",
            type: 'view'
          }
        });
      }
			
		},

		// pageSize改变
		handleSizeChange(val) {
			this.pagination.pageIndex = 1;
			this.pagination.pageSize = val;
			this.handleSearch(this.sortObj);
		},
		// 页码改变
		handleCurrentChange(val) {
			this.pagination.pageIndex = val;
			this.handleSearch(this.sortObj);
		},
	},
};