import { getUUID } from "../query-actions/util/lib";
import SelectApprovers from '../components-control/select-approvers.vue'
export default {
  execute: function (bill, param) {
    if (bill) {
      let taskId = bill.getGlobalParam('reviewParam').taskId;
      let selectedApprovers = []
      window.GMS.$http.get(`/bpm/bill/selectApprover/ApproverList/${taskId}`).then((res) => {
        if (res.data.code != 200) {
          this.executeApproval(bill, param)
          return
        }
        const nodeData = res.data.ApproverVo
        const optionList = [...nodeData.approvers]
        GMS.$hideContainer.$Modal.confirm({
          width: 700,
          render: (h) => {
            return h(
              SelectApprovers,
              {
                props: {
                  optionList,
                },
                on: {
                  'on-change': (val) => {
                    selectedApprovers = val
                  }
                }
              }
            )
          },
          onOk: () => {
            window.GMS.$http.post(
              '/bpm/bill/selectApprover/addApprovers',
              {
                ...nodeData,
                approvers: selectedApprovers,
              }
            ).then(() => {
              this.executeApproval(bill, param)
            }).catch(() => {
              GMS.$hideContainer.$Message.error('选择审批人发生错误')
            })
          },
          onCancel: () => {
          }
        });
      }).catch(() => {
        GMS.$hideContainer.$message.error('获取审批人列表失败');
      })
    } else {
      alert('缺少参数');
    }
  },
  executeApproval: function(bill, param) {
    if (param.param.isNeedSave) {
      let saveParam = {
        actions: "bill.Basic.save",
        afterAction: "",
        confirmTitle: "",
        customSaveAction: "",
        noCheckCardDepressPeriod: true,
        noCheckSubTable: true,
        viewName: ""
      }
      bill.executeServerAction(saveParam, function (code, data) {
        if (code === 200) {
          this.approval(bill, param);
          bill.setControlsSate(param["_control_name_"], "loading", false)
        } else {
          bill.setControlsSate(param["_control_name_"], "loading", false)
          GMS.$hideContainer.$message.error("操作异常请联系管理员");
        }
      }.bind(this));
    } else {
      this.approval(bill, param);
    }
  },
  approval: function (bill, param) {
    let billId = bill.getMasterData().getValue('id');
    let taskId = bill.getGlobalParam('reviewParam').taskId;
    let comments = bill.getGlobalParam('reviewParam').suggestions ? bill.getGlobalParam('reviewParam').suggestions : "";
    GMS.$http.post('/gms/workflow/task/completed/' + taskId + '?result=1&comments=' + comments).then(
      function (response) {
        if (response.status == 200 || response.statusText == 'OK') {
          // console.log('审批成功');
          bill.setControlsSate(param["_control_name_"], "loading", false)
          GMS.$hideContainer.$Message.success('审批成功!')
          
          if (
            window.osConfig.appOpenMode &&
            window.osConfig.appOpenMode == "apploader"
          ) {
            GMS.$hideContainer.$portalAPI.emit('nros-tag-close')
            GMS.$hideContainer.$portalAPI.emit(
              "open-new-page", //打开一个新的页签
              getUUID(),
              "runner-bill-form",
              {
                templateName: param.param.viewName,
                id: billId,
                state:'readOnly'
              },
              {
                openWay: "FUNCTAB",
                title: "单据详情",
              }
            );
          }
          else {
            GMS.$hideContainer.$router.push({
              path: "/showInnerBillForm/" + param.param.viewName + "/" + billId
            })
          }
        }
      }.bind(this)
    )
      .catch(
        function (error) {
          bill.setControlsSate(param["_control_name_"], "loading", false)
        }.bind(this)
      );
  }
}