import axios from 'axios'
export default {
    execute(context, param) {
        let subTable = param.subTable||'BXMXZB';
        let directGeneration = param.directGeneration||false;
        if (!param.billId || !param.billDefine) {
            context.dom.$Message.info("请配置查询单据参数");
            return;
        }
        if(context.selects.length==0){
            context.dom.$Message.info("请勾择需要生成的数据");
            return;
        }
        let that = this;
        let billDefine = param.billDefine.replace(/_E/ig, "").replace(/_R/ig, "").replace(/_A/ig, "");
        let arrApi1 = [];
        context.selects.forEach(v=>{
            arrApi1.push(that.searchBillObj(billDefine,v[param.billId]))
        })
        let arr = [];
        let arrApi = [];
        Promise.all(arrApi1).then((list) => {
            list.forEach((v,i)=>{
                let res = v;
                if(res && res[subTable]){
                    res[subTable].forEach(v=>{
                        let billDefine = v.BILLNAME && v.BILLNAME.replace(/_E/ig, "").replace(/_R/ig, "").replace(/_A/ig, "");
                        arrApi.push(that.searchBillObj(billDefine,v.BILLID,i))
                    })
                }
                arr.push({//直接生成
                    index:i,
                    data:res
                }) 
            })
            if(!directGeneration){//间接生成
                Promise.all(arrApi).then((subList) => {
                    arr.forEach(v=>{
                        v.detailData=[];
                        subList.forEach(f=>{
                            if(v.index==f.index){
                                v.detailData.push(f); 
                            }
                        })
                    })
                    that.generateVoucher(arr,context);
                }) 
            }else{
                that.generateVoucher(arr,context);//直接生成
            }
        })   
    },
    generateVoucher(list,context){
        axios({
              method: 'POST',
              url:GMS.url+'/v1/reimbursePort/singleCreateVchr',
              headers: {
                  Authorization:GMS.token,
              },
              data:list
            }).then(res => {
              if (res.status === 200) {
                if(res.data.data.showVoucher){//展示凭证
                    GMS.vbus.$emit('previewVoucher',res.data.data);
                }else{
                    if(res.data.data.successVchrs && res.data.data.successVchrs.length > 0){
                        GMS.vbus.$emit('custom-query-refresh');
                        GMS.vbus.$emit('tab-count-refresh');
                    }
                    context.dom.$Modal.warning({
                        title: '信息提示',
                        content: res.data.data.processMsg,
                        onOk: () => {},
                    });
                }
              }
            })
    },
    searchBillObj(billDefine, billId, index) {
        return new Promise((resolve, reject) => {
            GMS.$http.get(
                `/gms/bill/${billDefine}/${billId}?withSubs=true`
            ).then((data) => {
                if (data.status == 200 && data.data.code == 0) {
                    let obj = data.data.content
                    obj.billDefine = billDefine;
                    obj.index = index
                    resolve(obj);
                }
            }).catch((error)=>{
                reject(error)
            })
        })
    }
}