import errorMessageUtil from "./util/errorMessageUtil";
export default {
  execute: function (bill, param) {
    if (bill) {
      bill.runFormulaCheckData(param, (msg) => {
        if (msg.length == 0) {
          bill.setControlsSate(param["_control_name_"], "enable", false);
          this.saveData(bill, param);
        } else {
          GMS.vbus.$Modal.warning({
            title: "信息错误",
            content: msg,
          });
        }
      });
    }
  },
  saveData(bill, param) {
    let that = this;
    let buidData = bill.getBuillData();
    console.log("buidData:", buidData);
    let controlArr = bill.action.filter((v) => v.execute == "searchBillAction");
    let detailData = [];
    let arrApi1 = [];
    if (
      controlArr.length > 0 &&
      controlArr[0].param.field &&
      controlArr[0].param.field.length > 0
    ) {
      let tableList = controlArr[0].param.field.map((v) => v.targetTableName);
      tableList = Array.from(new Set(tableList));
      tableList.forEach((v) => {
        if (buidData.hasOwnProperty(v)) {
          for (let i = 0; i < bill.getSubData(v).length; i++) {
            let rowDataObject = bill.getSubDataRow(v, i);
            let obj = rowDataObject.getValue("currentRowData");
            if (obj && obj.BILLDETAILOBJ) {
              let billId = obj.BILLID;
              let billName = obj.BILLNAME;
              let billDefine = billName
                .replace(/_E/gi, "")
                .replace(/_R/gi, "")
                .replace(/_A/gi, "");
              arrApi1.push(
                that.searchBillObj(billDefine, billId, obj.BILLDETAILOBJ)
              );
            } else {
              let billId = rowDataObject.getData().BILLID.value;
              let billName = rowDataObject.getData().BILLNAME.value;
              let billDefine = billName
                .replace(/_E/gi, "")
                .replace(/_R/gi, "")
                .replace(/_A/gi, "");
              arrApi1.push(that.searchBillObj(billDefine, billId));
            }
          }
        }
      });
    }
    if (arrApi1.length > 0) {
      Promise.all(arrApi1).then((list) => {
        detailData = list;
        that.saveAsync(buidData, detailData, param, bill);
      });
    } else {
      that.saveAsync(buidData, detailData, param, bill);
    }
  },
  searchBillObj(billDefine, billId, BILLDETAILOBJ) {
    return new Promise((resolve, reject) => {
      GMS.$http.get(`/gms/bill/${billDefine}/${billId}?withSubs=true`)
        .then((data) => {
          let obj = BILLDETAILOBJ;
          if (data.status == 200 && data.data.code == 0) {
            if (!BILLDETAILOBJ) {
              obj = data.data.content;
            }
            obj.recver = data.data.content && data.data.content.recver;
          }
          obj.billDefine = billDefine;
          resolve(obj);
        })
        .catch((error) => {
          reject(error);
        });
    });
  },
  saveAsync(buidData, detailData, param, bill) {
    let postData = {
      data: buidData,
      detailData: detailData,
    };
    //executed/bill.CCSPD/bill.Basic.save?transmission=total
    let url = `/rbc/bill/action/rbcbillsave/${param.define}/bill.Basic.save?transmission=total`;
    GMS.$http
      .post(url, JSON.stringify(postData), {
        headers: {
          post: {
            "Content-Type": "application/json",
          },
        },
      })
      .then(function (response) {
        bill.setControlsSate(param["_control_name_"], "enable", true);
        if (response.data.code == 0) {
          //存储返回回来的创建时间、修改时间
          bill.getMasterData().setValue("createTime", response.data.content.billData.createTime);
          bill.getMasterData().setValue("modifyTime", response.data.content.billData.modifyTime);
          bill.getMasterData().setValue("recver", response.data.content.billData.recver);
          bill.getMasterData().setValue("billCode", response.data.content.billData.billCode);
          const id = response.data.content.billData.id;
          //处理上张下张
          if(GMS.queryObject.index==-1){
            GMS.queryObject.index=0;
          }
          GMS.vbus.$Message.success("保存成功");
          if (param.param && param.param.isApprove) {
            GMS.vbus.$emit('change-form-state', { state: ''})
          } else {
            GMS.vbus.$emit('change-form-state', { state: 'readOnly', billId: id})
          }
          // GMS.vbus.$emit("saveSuccess", buidData, param);
        } else {
          response.data.message && GMS.vbus.$Message.error({
            content: errorMessageUtil.saveAction.getErrorMessage(response.data.message),
            duration: 3
          });
        }
      })
      .catch((error) => {
        console.log(error)
        bill.setControlsSate(param["_control_name_"], "enable", true);
        GMS.vbus.$Message.error({
          content: errorMessageUtil.saveAction.getCommonMessage(),
          duration: 3
        });
      });
  },
}