<template>
  <div class="formwrapper" id="formwrapper" v-loading="loading">
    <div ref="actBox" class="formcontent" id="obpm-custom-formcontent"
      v-if="(formdata.stateId && isRouterAlive) || (isShowFormActivity)">
      <!-- 2021.9.9涔嬪墠v-if="(formdata.formTemplate && formdata.formTemplate.template != false) -->
      <div class="act-btns" v-if="formdata.activities">
        <activity v-for="(activity, index) in formdata.activities" :key="index" :info="activity"
          :isBlockClick="isBlockClick" @action="onAction" />
      </div>
      <div class="approvers">
        <approvers style="min-width: 250px; display: inline-block;" v-if="formdata.stateId && isRouterAlive"
          :approversData="formdata.approvers" :stateId="formdata.stateId" :openParams="openParams" :flowinfo="{
            docid: this.formdata.docId,
            approvers: formdata.approvers,
            stateId: formdata.stateId
          }" />
      </div>
    </div>
    <div class="formTable-wrap custom-scrollbar" :id="'formTemplate_' + formTemplateDocid"
      :style="{ 'height': formTableWrapHeight ? formTableWrapHeight : '' }">
      <span class="formTable_signs">
        <span :id="'formTemplate_' + formTemplateDocid + '_1'"></span>
      </span>
      <!--鐩栫珷鍒楄〃-->
      <form_signlist v-if="formdata.sign" :signList="formdata.sign" />
      <!--鐩栫珷-->
      <form_stamp v-if="currentCustomSign.showSign" :visible.sync="currentCustomSign.showSign"
        :signData="currentCustomSign.data" :openParams="openParams" :formTemplateDocid="formTemplateDocid"
        @event="confirmSignature" />
      <!--鍗扮珷绠$悊-->
      <form_signature v-if="formSignatureData.showFormSignature" :options="formSignatureData.list"
        :openParams="openParams" :visible.sync="formSignatureData.showFormSignature" @event="getCustomSignatureData" />
      <component v-if="hackReset" name="formTemplate" :is="template" :ref="'inputChild_' + formTemplateDocid">
      </component>
      <el-dialog :title="$t('view.noselect_approver')" v-if="showDialog == 1" :close-on-click-modal="false"
        :visible.sync="dialogVisible" top="10px" :lock-scroll="true" width="67%" :before-close="handleClose">
        <div class="print-content">
          <div class="content-wrap" ref="print">
            <!--startprint-->
            <div id="print">
              <form_print :printParams="printParams" :printData="printData" />
            </div>
            <!--endprint-->
          </div>
        </div>
        <span slot="footer" class="dialog-footer">
          <el-button type="primary" @click="printPage">
            {{ $t('report.print') }}
          </el-button>
        </span>
      </el-dialog>
      <!--鏂扮増娴佺▼鎻愪氦闈㈡澘-->
      <!-- <flowDialog
        v-if="flowDialogVisible" 
        :visible.sync="flowDialogVisible"
        :type="flowProcessAct?flowProcessAct.type:''"
      >
        <form_flowpanel
          @click.stop.prevent
          slot="body"
          :stateId="formdata.stateId" 
          :act="flowProcessAct"
          :openParams = "openParams"
          :buildFormData="buildFormData()"
          :approverName = "approverName"
          :submitTo = "submitTo"
          :nextUserId = "nextUserId"
          :approvers = "formdata.approvers?formdata.approvers:''" 
          :subFlowApproverData = "subFlowApproverData"
          :subFlowGroup = "subFlowGroup"
          :newHostOrCohostList = "newHostOrCohostList"
          :cCname = "cCname"
          :subFlowGroupNum = "subFlowGroupNum"
          v-if="flowProcessAct.type == 5 || 
            flowProcessAct.type == 33 ||
            flowProcessAct.type == 47 ||
            flowProcessAct.type == 48 ||
            flowProcessAct.type == 52 ||
            flowProcessAct.type == 55 ||
            flowProcessAct.type == 56 ||
            flowProcessAct.type == 57 ||
            flowProcessAct.type == 58"
          @action="designatedApprover"
          @closePopup="closeThePopup"
          @showSubFlow="showSubFlowDialog"
          @setProcessHosting="getProcessHosting"
        />
      </flowDialog> -->

      <!--鏂扮増娴佺▼鎻愪氦闈㈡澘2.0-->
      <el-dialog class="flow-submission-dialog" v-if="flowDialogVisible" :close-on-click-modal="false"
        :visible.sync="flowDialogVisible" :append-to-body="true" :lock-scroll="true" width="41%" center>
        <div slot="title" class="dialog-title">
          <i class="fa fa-paper-plane-o icon"></i>
          <span class="title-text">..</span>
        </div>
        <div class="flow-new-panel-wrap">
          <form_new_flowpanel @click.stop.prevent slot="body" :stateId="formdata.stateId" :act="flowProcessAct"
            :openParams="openParams" :buildFormData="buildFormData()" :approverName="approverName" :submitTo="submitTo"
            :nextUserId="nextUserId" :approvers="formdata.approvers ? formdata.approvers : ''"
            :subFlowApproverData="subFlowApproverData" :subFlowGroup="subFlowGroup"
            :newHostOrCohostList="newHostOrCohostList" :cCname="cCname" :subFlowGroupNum="subFlowGroupNum"
            :isShowHandSign="isShowHandSign" :isShowKeyboard="isShowKeyboard" v-if="
              flowDialogVisible &&
              (flowProcessAct.type == 5 ||
                flowProcessAct.type == 33 ||
                flowProcessAct.type == 47 ||
                flowProcessAct.type == 48 ||
                flowProcessAct.type == 52 ||
                flowProcessAct.type == 55 ||
                flowProcessAct.type == 56 ||
                flowProcessAct.type == 57 ||
                flowProcessAct.type == 58)" @action="designatedApprover" @closePopup="closeThePopup"
            @showSubFlow="showSubFlowDialog" @setProcessHosting="getProcessHosting" />
        </div>
      </el-dialog>

      <!--娴佺▼鎸囧畾瀹℃壒浜哄脊绐�-->
      <div class="user-dialog">
        <comm-dialog :title="isAppentCirculator ? $t('view.cc') : $t('view.point_approver')" v-show="approverVisible"
          :visible.sync="approverVisible" :setClass="commDialog.userDialog" :appendToBody="true">
          <form_selectApprover_flowpanel slot="body" :act="flowProcessAct" :openParams="openParams"
            :buildFormData="buildFormData()" :approversObj="approversObj" :submitTo="submitTo" :flowId="flowId"
            :isFreeFlow="isFreeFlow" :saveApproverStatus="saveApproverStatus" :approverNumType="approverNumType"
            :isAppentCirculator="isAppentCirculator" :subFlowToApprover="subFlowToApprover" :groupNum="groupNum"
            :isSubFlow="isSubFlow" :allowEditApprover="allowEditApprover"
            :approvers="formdata.approvers ? formdata.approvers : ''" :processHostingList="processHostingList"
            v-if="approverVisible" @action="selectApprover" @closeApproverDialog="closeApproverDialog"
            @event="subflowDataTopanel" @selectHostOrCohost="selectHostOrCohost" />
        </comm-dialog>
      </div>

      <!--缁堟娴佺▼-->
      <comm-dialog :title="$t('view.stop_flow')" v-show="terminationVisible" :visible.sync="terminationVisible">
        <!--缁堟娴佺▼-->
        <form_termination_flowpanel slot="body" :stateId="formdata.stateId" :act="flowProcessAct" :openParams="openParams"
          :buildFormData="buildFormData()" v-if="flowProcessAct.type == 52" @action="terminationWorkflow"
          @handleCancel="handleCancel" />
      </comm-dialog>

      <!--鍙戦€侀偖浠舵垨鎵嬫満鐭俊-->
      <comm-dialog title="閫氳繃閭欢鎴栫煭淇¢€氱煡" v-show="sendMailVisible" :visible.sync="sendMailVisible" width="40%">
        <form_sendMailOrSms_flowpanel slot="body" :buildFormData="buildFormData()" :act="flowProcessAct"
          :openParams="openParams" v-if="flowProcessAct.type == 37" @event="openUserDialg" @closePopup="closeThePopup" />
      </comm-dialog>

      <!--璺宠浆鎸夐挳_寮圭獥鎵撳紑-->
      <el-dialog class="common-dialog" v-if="jumpPopup" :close-on-click-modal="false" :append-to-body="true"
        :visible.sync="jumpPopup" top="10px" :lock-scroll="true"
        :width="jumpPopupStyle.dialogWidth ? jumpPopupStyle.dialogWidth : '90%'" :before-close="handleClose" center>
        <!--琛ㄥ崟-->
        <div :style="{ height: jumpPopupStyle.dialogHeight ? jumpPopupStyle.dialogHeight : screenHeight }"
          v-if="isJumpForm" class="normal-form custom-form" :id="'dialog_normalform_' + openParams.actionContent">
          <el-scrollbar class="scrollbar">
            <form_normalform :openParams="jumpParams" @action="closeDialog" />
          </el-scrollbar>
        </div>
        <!--瑙嗗浘-->
        <div v-if="isJumpView" class="dialog-listview"
          :style="{ height: jumpPopupStyle.dialogHeight ? jumpPopupStyle.dialogHeight : screenHeight }">
          <el-scrollbar class="scrollbar" v-if="popupLayerType == 'VIEW'">
            <div>
              <view_delegate :openParams="jumpParams" @popupOpenType="setPopupOpenType">
              </view_delegate>
            </div>
          </el-scrollbar>
          <el-scrollbar class="scrollbar" v-else>
            <form_normalform :openParams="jumpParamsForm" @popupOpenType="setPopupOpenType" />
          </el-scrollbar>
        </div>
        <!--澶栭儴閾炬帴-->
        <div v-if="isExternalLink" class="normal-form"
          :style="{ height: jumpPopupStyle.dialogHeight ? jumpPopupStyle.dialogHeight : screenHeight }">
          <common_linkcontent :openParams="jumpParams">
          </common_linkcontent>
        </div>
      </el-dialog>

      <!---->
      <el-dialog class="common-dialog" :close-on-click-modal="false" title="..." v-if="customMessagePopup"
        :visible.sync="customMessagePopup" top="10px" :lock-scroll="true" width="90%">
        <div v-if="newOpenParams" class="normal-form">
          <el-scrollbar class="scrollbar">
            <form_template :openParams="newOpenParams" @event="closeCustomMessagePopup" />
          </el-scrollbar>
        </div>
      </el-dialog>
    </div>
  </div>
</template>
<script>
import Constant from "@/Constant.js";
import API from "@/api.js";
import activity from "@/components/activity.vue";
import approvers from "@/components/approvers.vue";
import form_flowpanel from "@/components/form_flowpanel.vue";
import form_new_flowpanel from "@/components/form_new_flowpanel.vue";
import form_print from "@/components/form_print";
import flowDialog from "@/components/flow_dialog.vue";
// import { Loading } from 'element-ui';
import form_selectApprover_flowpanel from "@/components/form_selectApprover_flowpanel.vue";
import form_termination_flowpanel from "@/components/form_termination_flowpanel.vue";
import Watermark from "@/assets/js/watermark"; //璺緞涓嶈鍐欓敊
import form_sendMailOrSms_flowpanel from "@/components/form_sendMailOrSms_flowpanel.vue";
import form_template from "@/expandedComponents/form_template.vue";
import common_linkcontent from "@/components/common_linkcontent.vue";
import form_signature from "@/expandedComponents/form_signature.vue";
import form_stamp from "@/expandedComponents/form_stamp.vue";
import form_signlist from "@/expandedComponents/form_sign_list.vue";

//import { constants } from 'crypto';
import authority from "@/components/authority.vue";
import Signature from "@/assets/kinggrid/signature.all.min.js";
import escapeHTML from "@/assets/js/escapeHTML.js";
export default {
  inject: ["refreshForm", "addTab", "openNewpage"],
  name: "form-normalform",
  props: [
    "openParams",
    "callback",
    "originalFormDocid",
    "emptyParams",
    "openType", //琛ㄥ崟鎵撳紑绫诲瀷锛�277寮瑰嚭灞�
  ],

  provide() {
    return {
      setListViewDocIds: this.setListViewDocIds,
      findField: this.findField,
      buildFormData: this.buildFormData,
    };
  },

  components: {
    activity,
    approvers,
    form_flowpanel,
    form_new_flowpanel,
    form_print,
    flowDialog,
    form_selectApprover_flowpanel,
    form_termination_flowpanel,
    authority,
    form_sendMailOrSms_flowpanel,
    form_template,
    common_linkcontent,
    form_signature,
    form_stamp,
    form_signlist,
  },

  // created
  created: function () {
    let op = this.openParams;
    this.initForm({
      appId: op.appId,
      formId: op.actionContent,
      //docId: this.openParams.docId  (9/03鏀�)
      docId: op._select,
    });
    this.initSigns();
  },

  data: function () {
    return {
      isBlockClick: false, // 闃绘鎸夐挳鐐瑰嚮
      formTableWrapHeight: "",
      formdata: {},
      printData: "",
      isActive: false,
      hidden: true,
      inputId: "",
      inputVal: "",
      inputCurrentInfo: "",
      inputCurrentVal: "",
      copyFormData: "",
      dialogVisible: false,
      isRouterAlive: true,
      showDialog: "",
      divId: "",
      loading: true,
      hackReset: true,
      parameterObj: {}, //鍔犵涓诲姙鎴栬€呭崗鍔炴柊娣诲姞鐨勬暟鎹紝鐢卞瓙缁勪欢form_selectHostOrCohost寰楀埌
      printParams: {},
      flowDialogVisible: false,

      flowProcessAct: {}, //娴佺▼澶勭悊鎸夐挳
      approverVisible: false,
      approverName: "",
      isFreeFlow: "", //鍒ゆ柇鏄惁鏄嚜鐢辨祦绋�
      nextUserId: "", //鑷敱娴佺▼鐨勪笅涓€鑺傜偣浜�
      submitTo: {},
      isAppentCirculator: "",
      approversObj: {}, //鎸囧畾瀹℃壒浜哄弬鏁�
      saveApproverStatus: "",
      approverNumType: "", //鍒ゆ柇鎸囧畾瀹℃壒浜虹殑鐢ㄦ埛閫夋嫨妗嗘槸鍗曢€夎繕鏄閫夈€�
      terminationVisible: false, //缁堟娴佺▼寮瑰嚭绐�
      sendMailVisible: false, //閫氳繃閭欢鎴栬€呮墜鏈虹煭淇″垎浜脊绐�
      groupNum: "",
      subFlowToApprover: [], //鎻愪氦闈㈡澘鐨勫瓙娴佺▼-骞惰娴佺▼鏁版嵁淇濆瓨鍒癴orm_selectApprover_flowpanel
      isSubFlow: "",
      subFlowApproverData: "", //瀛愭祦绋嬮€夋嫨鐨勬暟鎹彁浜ゅ埌娴佺▼闈㈡澘
      subFlowGroup: "", //瀛愭祦绋�-骞惰娴佺▼鏁版嵁淇濆瓨鍒版祦绋嬮潰鏉�
      subFlowGroupNum: "",
      newHostOrCohostList: [], //鍔犵涓诲姙鎴栬€呭崗鍔炴柊娣诲姞鐨勬暟鎹紝鐢卞瓙缁勪欢form_selectHostOrCohost寰楀埌
      formTemplateDocid: "",
      cCname: "", //鎶勯€佷汉濮撳悕
      allowEditApprover: false,
      popupLayerType: "", //寮瑰嚭灞傛墦寮€瑙嗗浘鐒跺悗鏂板缓鎴栬€呮墦寮€瑙嗗浘鏃讹紝鍒ゆ柇鎵撳紑绫诲瀷
      jumpParams: "", //璺宠浆鎸夐挳鍙傛暟
      jumpParamsForm: "", //寮瑰嚭灞傛墦寮€鐨勮鍥捐繘鍏ヨ〃鍗曠殑鍙傛暟
      jumpPopup: false, //璺宠浆鎸夐挳寮瑰嚭绐�
      isJumpForm: "", //璺宠浆鎸夐挳鍙傛暟
      isJumpView: "", //璺宠浆鎸夐挳鍙傛暟
      isExternalLink: "", //鍒ゆ柇鏄惁鏄閮ㄩ摼鎺�
      customMessagePopup: false, //鎸夐挳锛岃嚜瀹氫箟鍙戦€佹秷鎭殑寮圭獥
      newOpenParams: "",
      oldBuildFormData: "", //鏁版嵁淇濆瓨鍚庡悗鍙拌繑鍥炵殑琛ㄥ崟鏁版嵁锛岀敤鎴锋柊寤哄甫鏃ф暟鎹瓑
      commDialog: {
        //寮瑰嚭绐楁牱閫夋嫨
        userDialog: "user-dialog",
      },
      processHostingList: [], //鍔犵鍗忓姙鍜屽姞绛句富鍔炲垪琛�
      isClickGoBackBtn: false, //鍒ゆ柇杩斿洖鎸夐挳鏄惁鐐瑰嚮杩�
      isShowHandSign: true, //鏄惁鏄剧ず鎵嬬鎸夐挳锛堣ˉ绛惧拰鐐硅瘎鏃朵笉闇€瑕佹墜绛撅級
      isShowKeyboard: true, //娴佺▼鍚姩鏃朵笉闇€瑕佹樉绀鸿緭鍏ユ剰瑙�
      formSignatureData: {
        showFormSignature: false,
        list: [],
      },
      currentCustomSign: {
        data: "",
        showSign: false,
      }, //褰撳墠鐩栫珷鐨勬暟鎹紙闈為噾鏍肩绔狅級
      subSelects: [], //鍖呭惈鍏冪礌鎴栬€卼ab椤碉紝鑾峰彇docIds
      isShowFormActivity: true, //鏄惁鏄剧ず琛ㄥ崟鎸夐挳
      isDialogOpenExternalLink: false, //寮圭獥鎵撳紑澶栭摼鍒ゆ柇鏄惁鍒锋柊
      jumpPopupStyle: {}, //璺宠浆鎸夐挳鎴栬€呰绠楄剼鏈墦寮€寮圭獥鏃惰缃脊绐楀楂�
      screenHeight: document.documentElement.clientHeight - 120 + "px",
      haveViewGridview: false, //琛ㄥ崟鏈夌綉鏍艰鍥�
      timeIds: [],
      handleIncludeControlBugImpl: null
    };
  },

  computed: {
    template() {
      // debugger
      let data = this.formdata;
      if (data && data.fields) {
        // input 缂栬緫鐘舵€佷笅闇€瑕佽ˉ鏍峰紡
        data.fields.map((item) => {
          if (!item.customStyle && data.style && data.style.content) {
            // 缂栬緫鏃舵牱寮忔棤鏁�
            // item.customStyle = {
            //   content: data.style.content ? data.style.content : ''
            // }
          } else if (
            !item.customStyle &&
            item.type == "tabfield" &&
            item.tabs &&
            item.tabs.length > 0
          ) {
            // 閫夐」鍗℃牱寮忎笉鐢熸晥
            // item.tabs.forEach(tab => {
            //   if(tab.fields && tab.fields.length > 0) {
            //     tab.fields.map(item2 => {
            //       if(!item2.customStyle && tab.style && tab.style.content){
            //         item2.customStyle = {content: tab.style.content}
            //       }
            //     })
            //   }
            // })
          }
        });

        if (!data.formTemplate.template) {
          this.isShowFormActivity = false;
          return {
            components: { authority },
            template: "<div><authority /></div>",
          };
        } else {
          //555
          return {
            methods: {
              findField: this.findField,
              refresh: this.refresh,
              checkData: this.checkData,
              getAllFields: this.getAllFields,
              addTabs: this.addTabs,
              scriptJump: this.scriptJump,
            },
            template:
              "<div class='formHtml' >" + data.formTemplate.template + "</div>",
          };
        }
      } else if (data.formTemplate && data.formTemplate.template) {
        return {
          template:
            "<div class='formHtml' >" + data.formTemplate.template + "</div>",
        };
      } else {
        return {
          template: "<div></div>",
        };
      }
    },
  },
  watch: {
    template(nval) {//瀹炴椂鍝嶅簲template妯℃澘
      // 鍐呭祵鍏冪礌 鏃犻檺鎵╁ぇ 鍔ㄦ€佽绠椾粬鐨勫搴�
      // debugger
      if (nval) {
        this.handleIncludeControlBug()
        // onResize 閲嶆柊瑙﹀彂璁$畻
        /**
         * apply锛宑all锛宐ind涓夎€呯殑鍖哄埆--闈㈠悜瀵硅薄缂栫▼锛堜笉鏄嚱鏁扮紪绋嬶級
          鈼� 涓夎€呴兘鍙互鏀瑰彉鍑芥暟鐨則his瀵硅薄鎸囧悜銆�
          鈼� 涓夎€呯涓€涓弬鏁伴兘鏄痶his瑕佹寚鍚戠殑瀵硅薄锛屽鏋滄病鏈夎繖涓弬鏁版垨鍙傛暟涓簎ndefined鎴杗ull锛屽垯榛樿鎸囧悜鍏ㄥ眬window銆�
          鈼� 涓夎€呴兘鍙互浼犲弬锛屼絾鏄痑pply鏄暟缁勶紝鑰宑all鏄弬鏁板垪琛紝涓攁pply鍜宑all鏄竴娆℃€т紶鍏ュ弬鏁帮紝鑰宐ind鍙互鍒嗕负澶氭浼犲叆銆�
          鈼� bind 鏄繑鍥炵粦瀹歵his涔嬪悗鐨勫嚱鏁帮紝渚夸簬绋嶅悗璋冪敤锛沘pply 銆乧all 鍒欐槸绔嬪嵆鎵ц 
         */
        //this.handleIncludeControlBugImpl 杩欐槸鏄幏鍙栧綋鍓嶉〉闈㈢殑鍏冪礌锛屽彧鏈夌洃鍚埌resize灞忓箷鍝嶅簲缂╂斁鎵嶆墽琛�==>this.handleIncludeControlBug.bind(this) 绛夊悓浜� this.handleIncludeControlBug;
        this.handleIncludeControlBugImpl = this.handleIncludeControlBug.bind(this)//.bind(this) 鏌噷鍖栵紙鎴戜滑缁欎竴涓嚱鏁颁紶鍏ヤ竴閮ㄥ垎鍙傛暟锛屾鏃跺氨浼氳繑鍥炰竴涓嚱鏁版潵鎺ユ敹鍓╀綑鐨勫弬鏁帮級 缁戝畾this鎵ц涓簍his.handleIncludeControlBug璇ュ璞bject锛岃€屼笉鏄痺indow瀵硅薄
        window.addEventListener('resize', this.handleIncludeControlBugImpl)
      }
    }
  },
  mounted(){
    let that=this;
    window.addEventListener('message',function(e){//鐩戝惉寮圭獥鍏抽棴-bcx
      console.log('e',e)
      if(e.data){
         that.jumpPopup=false
      }      
    })
  },
  beforeDestroy() {
    this.timeIds.forEach(id => {
      clearInterval(id)
    })
    window.removeEventListener('resize', this.handleIncludeControlBugImpl)//鐢熷懡鍛ㄦ湡閿€姣佸墠锛岀Щ闄ょ洃鍚瑀esize灞忓箷鍝嶅簲缂╂斁
  },
  methods: {
    // 澶勭悊include-control 鑷姩澧炲ぇ閫昏緫
    handleIncludeControlBug() {
      console.log('瑙﹀彂浜�')
      this.timeIds.forEach(id => {
        clearInterval(id)
      })
      this.$nextTick(() => {
        let formwrappers = document.querySelectorAll('#formwrapper')
        formwrappers.forEach(item => {
          let includeControls = item.querySelectorAll('.include-control')
          let tabControls = item.querySelectorAll('.tab-control')
          this.handleIncludeControlRefresh(includeControls, () => this.handleIncludeControlComputed(includeControls))
          this.handleIncludeControlRefresh(tabControls, () => this.handleIncludeControlComputed(tabControls))
        })
      })
    },
    handleIncludeControlRefresh(controls, cb) {
      console.log('controls', controls)
      // resize 璁$畻浼氳蛋杩欓噷
      // include鍙兘鍘熸湰灏辫闅愯棌 杩欓噷瑕侀泦鍚�
      let affectedIncludeControls = []
      controls.forEach(itm => {
        if (itm.style.display !== 'none') {
          itm.style.display = "none"
          affectedIncludeControls.push(itm)
        }
      })
      console.log('affectedIncludeControls鑾峰彇Dom瀵硅薄', affectedIncludeControls)
      this.$nextTick(() => {
        cb() //杩欎釜鎵ц鐨勬槸handleIncludeControlComputed(controls)();
        affectedIncludeControls.forEach(itm => {
          itm.style.display = "block"
        })
      })
    },
    handleIncludeControlComputed(controls) {
      controls.forEach(item => {
        console.log('item.parentNode', item.parentNode)
        let pw = item.parentNode.clientWidth - (parseFloat(getComputedStyle(item.parentNode).paddingLeft) + parseFloat(getComputedStyle(item.parentNode).paddingRight))
        console.log('pw', pw)
        if (pw > 0) {
          item.style.width = pw + 'px'  //澧炲姞鐖跺厓绱犲浐瀹氬搴�'.include-control' 涓� '.tab-control'
        } else {
          let id = setTimeout(() => {
            console.log(111)
            // resize 璁$畻浼氳蛋杩欓噷
            // include鍙兘鍘熸湰灏辫闅愯棌 杩欓噷瑕侀泦鍚�
            if (item.style.display !== 'none') {
              item.style.display = "none"
              this.$nextTick(()=>{
                item.style.display = "block"              
              })
            }
            this.$nextTick(() => {
              console.log('bb', parseFloat(getComputedStyle(item.parentNode).paddingLeft));
              let pw = item.parentNode.clientWidth - (parseFloat(getComputedStyle(item.parentNode).paddingLeft) + parseFloat(getComputedStyle(item.parentNode).paddingRight))
              if (pw > 0) {
                console.log('item.parentNode', item.parentNode)
                item.style.width = pw + 'px' //澧炲姞鐖跺厓绱犲浐瀹氬搴�'.include-control' 涓� '.tab-control'
                item.style.display = "block"
                clearInterval(id)
              }
            })
          }, 200)
          this.timeIds.push(id)
        }
      })
    },
    //濡傛灉鏄寘鍚厓绱犳垨鑰卼ab椤碉紝鑾峰彇docIds
    setListViewDocIds(docIds) {
      this.subSelects = docIds;
    },
    //鍙栨秷
    handleCancel(val) {
      this.terminationVisible = val;
    },
    //鏂拌〃鍗曠殑data.formTemplate.template浼氳繑鍥瀘verflow锛歨idden锛涘鑷村脊鍑哄眰娌℃湁婊氬姩鏉�
    dialogShowScrollbar() {
      let containerDom = document.getElementsByName("瀹瑰櫒1")[0];
      containerDom.style.overflow = "unset";
    },
    //纭畾绛剧珷
    confirmSignature(data) {
      let op = this.openParams;
      let appId = op.appId;
      let formData = this.buildFormData();
      let documentId = formData.id;
      formData.docId = formData.id;
      let versions = "";
      let templateForm = "";
      if (op.realformId) {
        //濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm
        formData.formId = op.realformId;
        formData.document.formId = op.realformId;
        templateForm = op.actionContent;
      }
      let signArr = [];
      signArr.push(data);
      let document = {
        applicationId: appId,
        formId: formData.formId,
        id: documentId,
        items: formData.items,
        parentId: formData.parentId,
        sign: JSON.stringify(signArr),
        versions: versions,
        exparams: {},
        templateForm,
      };
      delete formData.items;

      formData.document = document;
      formData.viewId = "";
      this.$api.confirmSignature(appId, formData.docId, formData, {
        onSucess: (res) => {
          if (res.data.errcode == 0) {
            this.$notify({
              title: "鎴愬姛",
              message: res.data.data,
              type: "success",
            });
            this.currentCustomSign.showSign = false;
            this.formSignatureData.showFormSignature = false;
            let op = this.openParams;
            this.initForm({
              appId: op.appId,
              formId: op.actionContent,
              //docId: this.openParams.docId  (9/03鏀�)
              docId: formData.docId,
            });
            // this.refreshForm()
          }
        },
      });
    },

    //鑾峰彇褰撳墠闇€瑕佺洊绔犵殑鏁版嵁
    getCustomSignatureData(data) {
      let cs = this.currentCustomSign;
      cs.data = data;
      cs.showSign = true;
    },

    //鑷畾涔夌绔犲垵濮嬪寲
    initSigns() {
      this.$api.getSigns({
        onSucess: (res) => {
          this.formSignatureData.list = res.data.data;
        },
      });
    },

    delCB(signatureid, signatureData) {
      for (var key in Signature.list) {
        if (
          signatureid == key &&
          Signature.list[signatureid].keysn == signatureData.keysn
        ) {
          var signatureCreator = Signature.create();
          signatureCreator.removeSignature(
            signatureData.documentid,
            signatureid,
            function (data) {
              console.log(data);
            }
          );
          break;
        }
      }
      return true;
    },

    hiddenCustomizeVisible() {
      this.hackReset = false;
      this.$nextTick(() => {
        this.hackReset = true;
      });
    },

    mousewheel(e) {
      if (this.flowDialogVisible) {
        e.preventDefault();
      }
    },

    closeCustomMessagePopup() {
      this.customMessagePopup = false;
    },

    addTabs(params) {
      if (typeof params == "string") {
        params = JSON.parse(params);
      }
      this.$emit("add-tab", params);
    },

    getDocId() {
      return this.formdata.docId;
    },
    getformId() {
      return this.formdata.formId;
    },
    getAppId() {
      return this.openParams.appId;
    },
    getAllFields() {
      return this.formdata.fields;
    },

    onAction(act) {
      let actId = act.id;
      let activityType = act.type;
      switch (act.type) {
        case 1: //杞藉叆瑙嗗浘
          break;
        case 4: //淇濆瓨骞跺惎鍔ㄦ祦绋�
          this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 5: //娴佺▼澶勭悊
          this.flowHandle(act);
          break;
        case 10: //
          // this.goBack(act);
          this.v3ActionSubmit(actId, "", "", activityType, "", act); //bcx鏇挎崲鍚堝苟涓€涓帴鍙�
          // this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 11: //鎻愪氦55 --鏅€氳〃鍗曟彁浜cx -----娴嬭瘯娌℃晥鏋滆寰楀垹闄�
          this.v3ActionSubmit(actId, "", "", activityType, "", act); //bcx鏇挎崲鍚堝苟涓€涓帴鍙�   
          // this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 13: //鑷畾涔夋寜閽�55--bcx   
          this.v3ActionSubmit(actId, "", "", activityType, "", act); //bcx鏇挎崲鍚堝苟涓€涓帴鍙�   
          // this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 14: //缃戦〉鎵撳嵃
        case 16: //瀵煎嚭excel
        case 21: //淇濆瓨骞跺鍒�
        case 25: //瀵煎嚭pdf
          this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 26: //鏂囦欢涓嬭浇
          this.runBeforeAction(actId, "", "", activityType);
          break;
        case 28: //鑷畾涔夋寜閽�
          this.runBeforeAction(actId, "", "", activityType, act);
          break;
        case 30: //鑷畾涔夋墦鍗�
          this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 33: //娴佺▼鍚姩
          this.flowHandle(act); //涓嶆敮鎸佹祦绋嬪惎鍔ㄥ姛鑳�
          break;
        case 34: //淇濆瓨
          // this.runBeforeAction(actId, "", "", activityType, "", act);
          this.v3ActionSubmit(actId, "", "", activityType, "", act); //bcx鏇挎崲鍚堝苟涓€涓帴鍙�
          break;
        case 37: //娴佺▼鍚姩
          this.flowHandle(act);
          //this.sendMailOrSms()
          break;
        case 42: //淇濆瓨骞舵柊寤�
          this.runBeforeAction(actId, "", "", activityType, act.withOld, act);
          break;
        case 43: //璺宠浆
        case 46: //绛剧珷
          this.runBeforeAction(actId, "", "", activityType, "", act);
          break;
        case 47: //鍥為€€娴佺▼
          this.flowHandle(act);
          break;
        case 48: //娴佺▼鍌姙
          this.flowHandle(act);
          break;
        case 49: //娴佺▼鎸傝捣
          this.suspendWorkflow(act);
          break;
        case 50: //娴佺▼鎭㈠
          this.recoveryWorkflow();
          break;
        case 51: //鍥炴挙娴佺▼
          this.runBeforeAction(actId, "", "", activityType, "", act);
          this.retracementWorkflow(actId, act);
          break;
        case 52: //缁堟娴佺▼
        case 53: //缂栬緫娴佺▼瀹℃壒浜�
        case 55: //鐐硅瘎
        case 56: //琛ョ
        case 57: //鍔犵涓诲姙
        case 58: //鍔犵鍗忓姙
          this.flowHandle(act);
          break;
        default:
          break;
      }
    },

    findField(id) {
      if (id) {
        let data = this.formdata;
        for (let i = 0; i < data.fields.length; i++) {
          let fld = data.fields[i];
          if (id == fld.id) {
            return fld;
          } else if (fld.tabs && fld.tabs.length > 0) {
            for (let z = 0; z < fld.tabs.length; z++) {
              if (fld.tabs[z].fields && fld.tabs[z].fields.length > 0) {
                for (let h = 0; h < fld.tabs[z].fields.length; h++) {
                  if (id == fld.tabs[z].fields[h].id) {
                    return fld.tabs[z].fields[h];
                  }
                }
              }
            }
          }
        }
        //TODO:涓存椂澶勭悊闅愯棌瀛楁--Jarod
        return {
          id: id,
          displayType: Constant.PermissionType_HIDDEN,
          hiddenValue: "",
        };
      } else {
        return this.formdata;
      }
    },

    initForm({ appId, formId, docId }) {
      let openParams = this.openParams;
      console.log(docId);
      if (openParams.appId) {
        this.$root.appid = openParams.appId; //濡傛灉鏈夊涓蒋浠讹紝褰撲粠棣栭〉杩涘叆琛ㄥ崟锛岄渶瑕佹妸褰撳墠椤靛綋鍓嶆暟鎹殑appId璧嬪€肩粰鍏ㄥ眬鍙橀噺锛屽惁鍒欐湁鍙兘瀵艰嚧杞欢鐨刟ppId鎷块敊
      }
      if (docId && docId != "") {
        let obj = {
          _: new Date().getTime(),
        };
        if (
          openParams.includeDisplayType &&
          (openParams.includeDisplayType == 1 ||
            openParams.includeDisplayType == 4)
        ) {
          //1, 4涓轰笉鍙敤
          obj.isReadonly = true;
        }
        if (openParams.exparams) {
          obj = this.setParams(openParams.exparams, obj);
        }
        if (openParams.formParams) {
          obj = this.setParams(openParams.formParams, obj);
        }
        if (openParams.urlParams) {
          obj = this.setParams(openParams.urlParams, obj);
        }
        console.log("鑾峰彇琛ㄥ崟銆傘€傘€�");
        API.getForm(
          appId,
          formId,
          docId,
          obj,
          // {},
          {
            onSucess: (response) => {
              this.formTemplateDocid = docId.replace(/_/g, "");
              this.loading = false;
              let fd = response.data.data;
              fd.fields.forEach((val) => {
                if (val.value) {
                  val.value = val.value.replace(/&#37;/g, "%");
                }
                if (val.tabs) {
                  //閫夐」鍗¢噷濂楃潃鏍囩椤�
                  val.tabs.forEach((item) => {
                    if (item.fields) {
                      item.fields.forEach((items) => {
                        if (items.value) {
                          items.value = items.value.replace(/&#37;/g, "%");
                        }
                      });
                    }
                  });
                }
              });

              let data = fd;
              let formType = data.formTemplate.showType; //鏂拌〃鍗曡繕鏄棫琛ㄥ崟
              let openComment = data.openComment;
              let commentFlag = data.commentFlag;
              const loopOpe = (fields) => {
                for (let i = 0; i < fields.length; i++) {
                  if (fields[i].value) {
                    fields[i].value = fields[i].value;
                  }
                  if (!fields[i].isComment) {
                    fields[i].formShowType = formType;
                    fields[i].appId = appId;
                    if (fields[i].formField == "IncludeField") {
                      fields[i].isRefresh = "false";
                      if (fields[i].openType == 288) {
                        //缃戞牸瑙嗗浘
                        this.haveViewGridview = true;
                      }
                    }
                    if (fields[i].tabs && fields[i].tabs.length > 0) {
                      for (let j = 0; j < fields[i].tabs.length; j++) {
                        if (fields[i].tabs[j].openComment) {
                          //tab涓嬫湁璇勮
                          let cf = fields[i].tabs[j].commentFlag;
                          let commentField = {
                            id: new Date().getTime() + "_璇勮",
                            appId,
                            docId: cf ? cf : docId,
                            isComment: true,
                          };
                          fields[i].tabs[j].fields.push(commentField);
                          let dom = `<div>
                                      <o-comment v-bind="$attrs" v-on="$listeners" id='${commentField.id}'>
                                      </o-comment>
                                    </div>`;
                          fields[i].tabs[j].template += dom;
                        }
                        if (
                          fields[i].tabs[j].fields &&
                          fields[i].tabs[j].fields.length > 0
                        ) {
                          loopOpe(fields[i].tabs[j].fields);
                        }
                      }
                    }
                  }
                }
              };
              if (data.fields && data.fields.length > 0) {
                loopOpe(data.fields);
              }

              fd.formId = formId;
              fd.docId = docId;
              if (openComment) {
                //鏈夎瘎璁�
                let commentField = {
                  id: new Date().getTime() + "_璇勮",
                  appId,
                  docId: commentFlag ? commentFlag : docId,
                  isComment: true,
                };
                data.fields.push(commentField);
                let dom = `<div><o-comment v-bind="$attrs"
                v-on="$listeners" id='${commentField.id}'></o-comment></div>`;
                data.formTemplate.template += dom;
              }

              this.formdata = fd;
              if (fd.style && fd.style.content) {
                //鑷畾涔夋牱寮�
                let formCss =
                  "#formTemplate_" +
                  this.formTemplateDocid +
                  " " +
                  fd.style.content;
                let css = formCss,
                  // let css = fd.style.content,
                  head =
                    document.head || document.getElementsByTagName("head")[0],
                  style = document.createElement("style");
                head.appendChild(style);
                style.type = "text/css";
                style.appendChild(document.createTextNode(css));
              }

              if (response.data.data.waterMarkText) {
                this.$nextTick(() => {
                  let str = docId.replace(/_/g, "");
                  let id = "formTemplate_" + str;
                  Watermark.set(response.data.data.waterMarkText, id);
                });
              }

              this.$nextTick(() => {
                Signature.init({
                  //鍒濆鍖栧睘鎬�
                  keysn: "T001",
                  delCallBack: function delCB(signatureid, signatureData) {
                    for (var key in Signature.list) {
                      if (
                        signatureid == key &&
                        Signature.list[signatureid].keysn == signatureData.keysn
                      ) {
                        var signatureCreator = Signature.create();
                        signatureCreator.removeSignature(
                          signatureData.documentid,
                          signatureid,
                          function (data) {
                            console.log(data);
                          }
                        );
                        break;
                      }
                    }
                    return true;
                  },
                  imgtag: 0, //绛剧珷绫诲瀷锛�0锛氭棤; 1:鍏珷; 2:绉佺珷; 3:娉曚汉绔�; 4:娉曚汉绛惧悕; 5:鎵嬪啓绛惧悕
                  certType: "server", //璁剧疆璇佷功鍦ㄧ绔犳湇鍔″櫒
                  sealType: "server", //璁剧疆鍗扮珷浠庣绔犳湇鍔″櫒鍙�
                  serverUrl: "http://171.34.78.70:8899/iSignatureHTML5/html5", //H5瀹樼綉婕旂ず鍦板潃
                  documentid: this.openParams._select
                    ? this.openParams._select
                    : "", //璁剧疆鏂囨。ID
                  documentname: this.openParams._select
                    ? this.openParams._select
                    : "", //璁剧疆鏂囨。鍚嶇О
                  //pw_enc_save : true,//瀵嗙爜鏄惁鍔犲瘑淇濆瓨
                  //pw_server_timeout:true,
                  pw_timeout: "s1800", //s锛氱锛沨:灏忔椂锛沝:澶�
                  scaleImage: 1, //绛剧珷鍥剧墖鐨勭缉鏀炬瘮渚�
                  showProtectedBtn: true, //璁剧疆鏄惁鏄剧ず淇濇姢椤规寜閽�
                });

                this.$api.getHTMLsignature(this.$root.appid, docId, {
                  onSucess: (res) => {
                    if (res.data) {
                      let signature = {};
                      for (let j = 0; j < res.data.data.length; j++) {
                        signature[res.data.data[j].signatureId] = true;
                      }
                      var signatureCreator = Signature.create();
                      signatureCreator.getSaveSignatures(
                        docId,
                        function (signs) {
                          var signdata = new Array();
                          var jsonList = eval("(" + signs + ")");
                          for (var i = 0; i < jsonList.length; i++) {
                            var map = {};
                            map.signatureid = jsonList[i]["signatureId"];
                            map.signatureData = jsonList[i]["signature"];
                            if (signature[map.signatureid]) {
                              signdata.push(map);
                            }
                            //signdata.push(map);
                          }
                          Signature.loadSignatures(signdata);
                        }
                      );
                    }
                  },
                });
              });
              let showLog = false; //鏂拌〃鍗昮ormTemplate.template杩斿洖overflow锛歨idden浼氬奖鍝嶆搷浣滄棩蹇楃殑鏄剧ず
              if (formType == "new") {
                for (let i = 0; i < data.fields.length; i++) {
                  if (data.fields[i].isModified) {
                    console.log("111", showLog);
                    showLog = true;
                    break;
                  }
                }
              }
              this.$nextTick(() => {
                let actBtnHeight = this.$refs.actBox.offsetHeight;
                this.formTableWrapHeight =
                  "calc(100% - " + actBtnHeight + "px" + " )";
                if (
                  (formType == "new" && openParams.type == 277) ||
                  showLog == true
                ) {
                  this.dialogShowScrollbar(); //鏂拌〃鍗曞脊鍑哄眰鏈塪ocId鏃舵樉绀烘粴鍔ㄦ潯
                }
              });

              this.$emit("event", fd.formTemplate.formName);
            },
          }
        );
      } else {
        let queryStr = "";
        if (openParams.queryString) {
          //鍙傛暟
          queryStr = JSON.parse(openParams.queryString);
        }
        let obj = {
          appId: openParams.appId,
          formId: openParams.actionContent,
          _: new Date().getTime(),
        };
        if (openParams.isRelate === true || openParams.isRelate === "true") {
          //鍖呭惈鍘熺礌鎴栬€呮爣绛句篃鏂板缓鍙兘浼氭惡甯sRelate鍜宲arentId锛岄渶瑕佷紶鍒板悗鍙�
          obj.isRelate = "true";
        } else {
          obj.isRelate = openParams.isRelate;
        }
        if (openParams.parentId) {
          obj.parentId = openParams.parentId;
        }

        if (queryStr && queryStr.length > 0) {
          for (let i = 0; i < queryStr.length; i++) {
            obj[queryStr[i].paramKey] = queryStr[i].paramValue;
          }
        }
        let emptyParams = this.emptyParams;
        if (emptyParams && emptyParams.length > 0) {
          //瑙嗗浘鍒楀甫鍙傛暟璺宠浆
          for (let i = 0; i < emptyParams.length; i++) {
            for (let key in emptyParams[i]) {
              obj[key] = emptyParams[i][key];
            }
          }
        }
        if (openParams.exparams) {
          obj = this.setParams(openParams.exparams, obj);
        }
        if (openParams.formParams) {
          obj = this.setParams(openParams.formParams, obj);
        }
        if (openParams.urlParams) {
          obj = this.setParams(openParams.urlParams, obj);
        }
        if (openParams.realformId) {
          //濡傛灉鏄ā鏉胯〃鍗�
          obj.formId = openParams.realformId;
          formId = openParams.realformId;
        }

        API.getDocumentEmpty(appId, formId, obj, {
          onSucess: (response) => {
            if (response.data.errcode == 0) {
              if (openParams.isNewCreate) {
                //瑙嗗浘鏂板缓鍚庢墽琛岃剼鏈�
                if (openParams.isOpenNewWindow) {
                  //濡傛灉鏄柊绐楀彛鎵撳紑
                  let _rp = JSON.parse(openParams.runAfterParams);
                  _rp.docId = response.data.data.id;
                  this.viewCreateRunAfterAction(_rp).then(() => {
                    if (response.data.data) {
                      this.loading = false;
                      let docId = this.originalFormDocid
                        ? this.originalFormDocid
                        : response.data.data.id; //鍒ゆ柇鏄笉鏄繚瀛樺苟鏂板缓_甯︽棫鏁版嵁鐨刣ocid
                      this.currentFormDocId = docId;
                      this.formTemplateDocid = response.data.data.id.replace(
                        /_/g,
                        ""
                      );
                      this.getForm(
                        appId,
                        formId,
                        docId,
                        {},
                        response.data.data.id
                      );
                    } else {
                      this.loading = false;
                    }
                  });
                } else {
                  if (openParams.runAfterParams) {
                    openParams.runAfterParams.docId = response.data.data.id;
                    let treedocid = openParams.treedocid;
                    // this.viewCreateRunAfterAction(openParams.runAfterParams, treedocid); //濡傛灉鏄爲褰㈣鍥炬柊寤鸿繖涓墽琛岄『搴忎竴瀹氳鍦╡mpty涔嬪悗鎵嶄細鐢熸晥
                    this.viewCreateRunAfterAction(
                      openParams.runAfterParams,
                      treedocid,
                      response.data.data.id
                    ).then(() => {
                      if (response.data.data) {
                        this.loading = false;
                        let docId = this.originalFormDocid
                          ? this.originalFormDocid
                          : response.data.data.id; //鍒ゆ柇鏄笉鏄繚瀛樺苟鏂板缓_甯︽棫鏁版嵁鐨刣ocid
                        this.currentFormDocId = docId;
                        this.formTemplateDocid = response.data.data.id.replace(
                          /_/g,
                          ""
                        );
                        this.getForm(
                          appId,
                          formId,
                          docId,
                          {},
                          response.data.data.id
                        );
                      } else {
                        this.loading = false;
                      }
                    });
                  } else {
                    this.currentFormDocId = response.data.data.id;
                    this.getForm(
                      appId,
                      formId,
                      response.data.data.id,
                      {},
                      response.data.data.id
                    );
                    this.loading = false;
                  }
                }
              } else {
                if (response.data.data) {
                  this.loading = false;
                  let docId = this.originalFormDocid
                    ? this.originalFormDocid
                    : response.data.data.id; //鍒ゆ柇鏄笉鏄繚瀛樺苟鏂板缓_甯︽棫鏁版嵁鐨刣ocid
                  this.currentFormDocId = docId;
                  this.formTemplateDocid = response.data.data.id.replace(
                    /_/g,
                    ""
                  );
                  this.getForm(appId, formId, docId, {}, response.data.data.id);
                } else {
                  this.loading = false;
                }
              }
            }
          },
        });
      }
    },

    getForm(appId, formId, docId, params, currentResDocId) {
      // debugger
      let op = this.openParams;
      if (op.exparams) {
        params = this.setParams(op.exparams, params);
      }
      if (op.formParams) {
        params = this.setParams(op.formParams, params);
      }
      if (op.urlParams) {
        params = this.setParams(op.urlParams, params);
      } else if (this.$route.query) {
        //鑾峰彇url鑷畾涔夊弬鏁癰cx
        params = { ...params, ...this.$route.query };
      }
      console.log(params);
      API.getForm(appId, formId, docId, params, {
        onSucess: (res) => {
          let fd = res.data.data;
          this.formTemplateDocid = docId.replace(/_/g, "");
          if (!fd.activities) {
            this.isShowFormActivity = false;
          }
          if (fd.style) {
            fd.fields.forEach((val) => {
              val.customStyle = fd.style;
            });
          }
          // this.formdata = fd;//res.data.data;
          if (fd.fields) {
            fd.fields.forEach((val) => {
              if (val.value) {
                val.value = val.value.replace(/&#37;/g, "%");
              }
            });
          }

          let data = fd;
          let formType = data.formTemplate.showType; //鏂拌〃鍗曡繕鏄棫琛ㄥ崟
          let openComment = data.openComment;
          let commentFlag = data.commentFlag;
          const loopOpe = (fields) => {
            for (let i = 0; i < fields.length; i++) {
              if (fields[i].value) {
                fields[i].value = fields[i].value;
              }
              if (!fields[i].isComment) {
                fields[i].appId = appId;
                fields[i].formShowType = formType;
                if (fields[i].formField == "IncludeField") {
                  fields[i].isRefresh = new Date().getTime();
                  if (fields[i].openType == 288) {
                    //缃戞牸瑙嗗浘
                    this.haveViewGridview = true;
                  }
                  if (op.type && op.type == 277) {
                    fields[i].isOpenDialog = true;
                    fields[i].dialogId = op.dialogId
                      ? op.dialogId
                      : op.jumpDialogId; //op.jumpDialogId瑙e喅褰撹鍥惧垪璺宠浆鎸夐挳浠ュ脊鍑哄眰鎵撳紑琛ㄥ崟鏃讹紝鍖呭惈鍏冪礌鏃犳硶鏄剧ず
                  }
                } else if (fields[i].formField == "InputField") {
                  fields[i].isRefresh =
                    parseInt(Math.random() * 100 + 1) + new Date().getTime();
                } else if (fields[i].formField == "CalctextField") {
                  if (op.isWidgetLink) {
                    fields[i].isWidgetLink = true;
                  }
                }
                if (fields[i].type == "tabfield") {
                  //琛ㄥ崟宓屽tab鍒ゆ柇浼犻€掑弬鏁�
                  fields[i].exparams = op.exparams;
                  console.log(fields[i].exparams);
                }
                if (fields[i].tabs && fields[i].tabs.length > 0) {
                  for (let j = 0; j < fields[i].tabs.length; j++) {
                    if (
                      fields[i].tabs[j].openComment ||
                      fields[i].tabs[j].commentFlag
                    ) {
                      //tab涓嬫湁璇勮
                      let cf = fields[i].tabs[j].commentFlag;
                      let commentField = {
                        id: new Date().getTime() + "_璇勮",
                        appId,
                        docId: cf ? cf : docId,
                        isComment: true,
                      };
                      fields[i].tabs[j].fields.push(commentField);
                      let dom = `<div>
                                    <o-comment v-bind="$attrs" v-on="$listeners" id='${commentField.id}'>
                                    </o-comment>
                                  </div>`;
                      fields[i].tabs[j].template += dom;
                    }
                    if (
                      fields[i].tabs[j].fields &&
                      fields[i].tabs[j].fields.length > 0
                    ) {
                      loopOpe(fields[i].tabs[j].fields);
                    }
                  }
                }
              }
            }
          };

          if (data.fields && data.fields.length > 0) {
            loopOpe(data.fields);
          }

          fd.formId = formId;
          fd.docId = currentResDocId; //docId,涓€鐩存嬁鏂伴〉闈㈢殑docId;
          if (openComment) {
            //鏈夎瘎璁�
            let commentField = {
              id: new Date().getTime() + "_璇勮",
              appId,
              docId: commentFlag ? commentFlag : docId,
              isComment: true,
            };
            data.fields.push(commentField);
            let dom = `<div><o-comment v-bind="$attrs"
              v-on="$listeners" id='${commentField.id}'></o-comment></div>`;
            data.formTemplate.template += dom;
          }

          // if(fd.style && fd.style.content) { //鑷畾涔夋牱寮�
          //   debugger
          //   let css = fd.style.content,
          //   head = document.head || document.getElementsByTagName('head')[0],
          //   style = document.createElement('style');
          //   head.appendChild(style);
          //   style.type = 'text/css';
          //   style.appendChild(document.createTextNode(css));
          // }

          this.formdata = fd; //res.data.data;
          if (fd.style && fd.style.content) {
            //鑷畾涔夋牱寮�
            let formCss =
              "#formTemplate_" +
              this.formTemplateDocid +
              " " +
              fd.style.content;
            let css = formCss,
              head = document.head || document.getElementsByTagName("head")[0],
              style = document.createElement("style");
            head.appendChild(style);
            style.type = "text/css";
            style.appendChild(document.createTextNode(css));
          }
          if (res.data.data.waterMarkText) {
            //琛ㄥ崟姘村嵃
            this.$nextTick(() => {
              let str = docId.replace(/_/g, "");
              let id = "formTemplate_" + str;
              Watermark.set(res.data.data.waterMarkText, id);
            });
          }

          if (this.oldBuildFormData) {
            //浠ヤ笅涓哄垽鏂綋淇濆瓨骞舵柊寤哄悗甯︽棫鏁版嵁鏃讹紝鎶婃棫鏁版嵁璧嬪€肩粰鏂拌〃鍗�
            let oldBuildFormData = this.oldBuildFormData;
            for (let key in oldBuildFormData) {
              for (let i = 0; i < fd.fields.length; i++) {
                if (key === fd.fields[i].name) {
                  fd.fields[i].value = oldBuildFormData[key];
                }
              }
            }
          }
          this.$nextTick(() => {
            let actBtnHeight = this.$refs.actBox.offsetHeight;
            this.formTableWrapHeight =
              "calc(100% - " + actBtnHeight + "px" + " )";
            if (formType == "new" && op.type == 277) {
              this.dialogShowScrollbar(); //鏂拌〃鍗曞脊鍑哄眰鏃燿ocId鏃舵樉绀烘粴鍔ㄦ潯
            }
          });
          this.$emit("event", fd.formTemplate.formName);
        },
      });
    },

    setParams(params, obj) {
      params = params.replace(/^(\s|&)+|(\s|&)+$/g, "");
      let list = params.split("&");
      for (let i = 0; i < list.length; i++) {
        let p = list[i].split("=");
        let isJson = this.isJSON(p[1]);
        if (isJson) {
          obj[p[0]] = encodeURI(p[1]); //encodeURIComponent(p[1])
        } else {
          obj[p[0]] = p[1] ? p[1] : "";
        }
      }
      return obj;
    },

    isJSON(str) {
      //鍒ゆ柇鏄痡son瀛楃涓�
      if (typeof str == "string") {
        try {
          let obj = JSON.parse(str);
          if (typeof obj == "object" && obj) {
            return true;
          } else {
            return false;
          }
        } catch (e) {
          return false;
        }
      }
    },

    //瑙嗗浘鏂板缓鍚庢墽琛岃剼鏈�
    viewCreateRunAfterAction(params, treedocid, docId) {
      if (docId) {
        params.formData.docId = docId;
      }
      return new Promise((resolve) => {
        this.$api.runAfterActionScript(
          params.appId,
          params.divId,
          docId,
          params.actionContent,
          params.relatedForm,
          params._templateForm,
          params.parentId,
          params._,
          params.formData,
          "",
          treedocid ? treedocid : "",
          {
            onSucess: (response) => {
              if (response.data.data) {
                let returnData = response.data.data;
                if (returnData.changedField) {
                  this.$notify.success({
                    title: returnData.content,
                    message: "",
                  });
                } else {
                  let errmsg = response.data.data.content;
                  if (returnData.type && returnData.type == "message") {
                    if (errmsg.type == 16 || errmsg.type == 1) {
                      this.$notify.success({
                        title: errmsg.content,
                        message: "",
                      });
                    }
                  } else if (returnData.type && returnData.type == "1") {
                    this.$notify.success({
                      title: errmsg,
                      message: "",
                    });
                  } else {
                    this.$notify.error({
                      title: errmsg,
                      message: "",
                    });
                  }
                  resolve();
                }
              } else if (response.data.errcode == 0) {
                resolve();
              }
            },
          }
        );
      });
    },

    refresh(fId) {
      let op = this.openParams;
      let fieldId = "";
      if (fId.id) {
        fieldId = fId.id;
      } else {
        fieldId = fId;
      }
      //鍒锋柊鏂规硶
      let fd = this.buildFormData();
      let data = {
        document: fd,
        formId: op.actionContent,
        docId: fd.id,
        parentId: "",
        templateForm: "",
        viewId: "",
        applicationId: fd.applicationId,
        id: fd.id,
      };
      fieldId = fieldId.replace(/"/g, "");

      API.refreshForm(fieldId, data, {
        onSucess: (response) => {
          let fields = response.data.data;
          let keys = Object.keys(fields);
          let formdata = this.formdata;
          keys.forEach((key) => {
            let field = fields[key];
            const loopOpe = (fields) => {
              fields.forEach((f, i) => {
                if (field.id == f.id) {
                  console.log(fields[i].type);
                  fields[i].value = field.value; //鍙兘鏇存柊value锛岃€屼笉鑳界畝鍗曞仛瀵硅薄鏇挎崲锛宖ield.value缁戝畾鍦ㄧ粍浠秜-model涓婏紝濡傛灉鐩存帴鏇挎崲鍙槸鏁扮粍鍐呭瓨鎸囬拡绠€鍗曞彉鏇�
                  fields[i].options = field.options;
                  fields[i].tabs = field.tabs;
                  //濡傛灉涓洪€夋嫨绫诲瀷field锛屽垯options涔熻鍦ㄨ繖閲屾浛鎹�.....
                  fields[i].displayType = field.displayType;
                  fields[i].data = field.data;
                  fields[i].activity = field.activity;
                  if (field.formField == "DepartmentField") {
                    //杩欎釜浼氭妸閮ㄩ棬閫夋嫨妗嗙殑鍊煎幓闄ゆ帀锛屽悗鏋滄湭鐭ワ紝鍏堣繖鏍�
                    if (fields[i].value && fields[i].options.length <= 0) {
                      fields[i].value = "";
                    }
                  } else if (field.formField == "IncludeField") {
                    fields[i].isRefresh = new Date().getTime();
                  } else if (field.formField == "InputField") {
                    fields[i].addInTtems = true; //濡傛灉鍒锋柊閲嶈绠楁湁杩斿洖鎺т欢锛屽氨绠楁帶浠跺€兼槸闅愯棌鐨勶紝涔熻浼犲埌鍚庡彴锛屽湪buildForamData涓鐞�
                    // fields[i].isRefresh = parseInt(Math.random()*100+1)+new Date().getTime();
                  }
                  // if(fields[i].type=='tabfield'){ //琛ㄥ崟宓屽tab鍒ゆ柇浼犻€掑弬鏁�
                  //   fields[i].exparams=op.exparams
                  //   console.log(fields[i].exparams)
                  // }
                }
                if (f.tabs && f.tabs.length > 0) {
                  for (let j = 0; j < f.tabs.length; j++) {
                    if (f.tabs[j].fields && f.tabs[j].fields.length > 0) {
                      loopOpe(f.tabs[j].fields);
                    }
                  }
                }
              });
            };
            loopOpe(formdata.fields);
          });
          this.formdata = formdata;
        },
      });
    },

    handleClose(done) {
      console.log('done',done)
      done();
      if (this.isDialogOpenExternalLink) {
        let appId = this.openParams.appId;
        let bf = this.buildFormData();
        let formId = bf.formId;
        let docId = bf.id;
        this.initForm({
          appId,
          formId,
          docId,
        });
      }
    },

    setPopupOpenType(type, params) {
      //褰撹鍥炬槸寮瑰嚭灞傛墦寮€锛屾柊寤烘垨鎵撳紑瑙嗗浘鍒楄〃
      if (type == "FORM") {
        params.isPopupLayerDisplay = true;
        this.jumpParamsForm = params;
        this.popupLayerType = type;
      } else if (type == "VIEW") {
        this.popupLayerType = type;
      }
    },

    checkData(value) {
      if (value) {
        let data = this.buildFormData();
        return data;
      }
    },

    //鎸夐挳浜嬩欢鎵ц鍓�
    /* actId锛氬弬鏁板€间负act.id;
     * isOrRefresh锛氬埛鏂伴噸璁$畻
     * id锛�
     * activityType锛氬弬鏁板€间负act.type.
     * withOld锛氬垽鏂槸鍚︽槸淇濆瓨骞舵柊寤�,
     * act锛氬綋鍓嶇偣鍑荤殑鎸夐挳鐨勫叏閮ㄥ弬鏁�
     */
    runBeforeAction(actId, isOrRefresh, id, activityType, withOld, act) {
      this.isBlockClick = true;
      let op = this.openParams;
      let appId = op.appId;
      let formData = "";
      let documentId = "";
      if (this.copyFormData) {
        //澶嶅埗鏂囨。鏃跺瓨鍦�
        let cf = this.copyFormData;
        formData = this.buildFormData(); //褰撳鍒舵椂鏁版嵁涓嶅彉锛屽彧鏀瑰彉id鍊�
        formData.docId = cf.id;
        formData.id = cf.id;
        documentId = cf.id;
      } else {
        let bf = this.buildFormData();
        formData = bf;
        formData.docId = bf.id;
        documentId = bf.id;
      }
      let subDocuments = [];
      let versions = "";
      let templateForm = "";
      let subDoc = this.$store.state.subDocuments;

      let haveViewGridview = this.haveViewGridview;
      let time = 0;
      if (haveViewGridview) {
        //濡傛灉鏈夌綉鏍艰鍥�
        this.$store.commit("SET_SAVESUBDOCMENTS", {
          randomId: new Date().getTime(),
          docId: formData.docId,
        });
        time = 100;
      }
      setTimeout(() => {
        let subDocData = this.$store.state.subDocumentsData;
        if (subDoc && subDoc.length > 0) {
          //鍒ゆ柇鏄惁鏄寘鍚厓绱犵綉鏍艰鍥�
          subDocuments = subDoc;
          versions = formData.versions;
          delete formData.subDocuments;
          delete formData.versions;
          delete formData.templateForm;
        } else if (subDocData && haveViewGridview) {
          //缃戞牸瑙嗗浘锛岀湅store.js
          subDocuments = this.setAllSubDocmentsData(subDocData);
        } else {
          subDocuments = formData.subDocuments;
          versions = formData.versions;
        }
        let document = {
          applicationId: op.appId,
          formId: formData.formId,
          id: documentId,
          items: formData.items,
          parentId: formData.parentId,
          sign: formData.sign,
          subDocuments: subDocuments,
          versions: versions,
          exparams: {},
          templateForm: templateForm,
        };
        delete formData.items;
        let subSelects = this.subSelects;
        if (subSelects.length > 0) {
          formData.subSelects = subSelects;
        }
        if (op.parentId) {
          if (op.isRelate === true || op.isRelate === "true") {
            document.isRelate = "true";
          } else {
            document.isRelate = op.isRelate;
          }
          document.parentId = op.parentId;
          formData.parentId = op.parentId;
        }
        formData.document = document;

        formData.viewId = "";
        formData.templateForm = "";
        if (op.realformId) {
          //濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm
          formData.formId = op.realformId;
          formData.document.formId = op.realformId;
          formData.templateForm = op.actionContent;
        }
        this.parameterObj = formData;

        delete this.$route.query.id; //url鍘绘帀id涓嶈瑕嗙洊鍘熸潵鐨刬d
        formData = { ...formData, ...this.$route.query };

        API.runBeforeActionScript(
          appId,
          actId,
          formData,
          activityType,
          "", //treedocid
          "", //flowType
          {
            onSucess: (response) => {
              if (response.data.data) {
                //濡傛灉鏈夋暟鎹繑鍥烇紝缁撴潫涓嬩竴姝�
                let resData = response.data.data;
                let errmsg = response.data.data.content;
                if (!resData.type) {
                  //娌℃湁type鍊硷紝浣嗘槸鏈夎繑鍥炴暟鎹紝鎶婃暟鎹斁杩沝ocument
                  this.isBlockClick = false;
                  if (resData.changedField) {
                    let items = this.formdata.fields; //formData.document.items;
                    let resDataItem = resData.changedField;
                    if (resDataItem) {
                      for (let j = 0; j < items.length; j++) {
                        for (let i = 0; i < resDataItem.length; i++) {
                          for (let el in resDataItem[i]) {
                            if (items[j].name == el) {
                              formData.document.items[el] = resDataItem[i][el];
                              items[j].value = resDataItem[i][el];
                            }
                          }
                        }
                      }
                    }
                    switch (activityType) {
                      case 4: //淇濆瓨骞跺惎鍔ㄦ祦绋�
                        this.saveStartWorkFlow(activityType, actId, act);
                        break;
                      case 8: //鍏抽棴绐楀彛
                        this.goBack();
                        this.runAfterAction(actId, activityType, "", "", act);
                        break;
                      case 10: //杩斿洖
                        this.goBack(activityType, actId, "", act);
                        break;
                      case 11: //淇濆瓨骞惰繑鍥�
                        this.doSave(activityType, actId, "", subDoc, act);
                        break;
                      case 13:
                        // this.execute(appId, actId, formData, act);
                        this.execute({ actId, formData, act });
                        break;
                      case 14: //缃戦〉鎵撳嵃
                        this.printForm(act);
                        this.runAfterAction(actId, activityType, "", "", act);
                        break;
                      case 15: //缃戦〉鎵撳嵃_鍖呭惈娴佺▼鎵撳嵃
                        this.printForm(act);
                        break;
                      case 19: //淇濆瓨鑽夌ǹ
                        this.saveDraft(activityType, actId, act);
                        break;
                      case 21: //淇濆瓨骞跺鍒�
                        this.doSave(activityType, actId, "", "", act);
                        break;
                      case 25: //PDF瀵煎嚭
                        this.leadingOut();
                        break;
                      case 26: //鏂囦欢涓嬭浇
                        this.fileDownload(actId);
                        break;
                      case 30: //鑷畾涔夋墦鍗�
                        this.printForm(act);
                        this.runAfterAction(actId, activityType, "", "", act);
                        break;
                      case 34: //淇濆瓨锛堟牎楠岋級鏁版嵁
                        this.doSave(activityType, actId, "", subDoc, act);
                        break;
                      case 37: //閫氳繃閭欢鎴栫煭淇¢€氱煡
                        this.showSendMailOrSmsFlowpanel(act);
                        break;
                      case 42: //淇濆瓨骞舵柊寤�
                        this.doSave(activityType, actId, withOld, "", act);
                        break;
                      case 43: //璺宠浆
                        this.jumpType(act);
                        break;
                      case 45: //褰掓。
                        this.placeOnFile();
                        break;
                      case 46: //绛剧珷
                        this.isBlockClick = false;
                        this.formSignatureData.showFormSignature = true;
                        break;
                      default:
                        break;
                    }
                  }
                } else if (resData.type == 1) {
                  this.$notify.success({
                    title: errmsg,
                    message: "",
                  });
                  this.isBlockClick = false;
                } else if (resData.type == 16) {
                  this.$notify({
                    title: errmsg,
                    message: "",
                    type: "warning",
                  });
                  this.isBlockClick = false;
                } else if (resData.type == 32) {
                  this.$confirm(`${errmsg}`, this.$t("tip"), {
                    confirmButtonText: this.$t("msg.confirm"),
                    cancelButtonText: this.$t("btns.cancel"),
                    type: "warning",
                  })
                    .then(() => {
                      switch (activityType) {
                        case 4: //淇濆瓨骞跺惎鍔ㄦ祦绋�
                          this.saveStartWorkFlow(activityType, actId, act);
                          break;
                        case 8: //鍏抽棴绐楀彛
                          this.goBack(activityType, actId);
                          this.runAfterAction(actId, activityType, "", "", act);
                          break;
                        case 10: //杩斿洖
                          this.goBack(activityType, actId, "", act);
                          break;
                        case 11: //淇濆瓨骞惰繑鍥�
                          this.doSave(activityType, actId, "", subDoc, act);
                          break;
                        case 13:
                          // this.execute(appId, actId, formData, act);
                          this.execute({ actId, formData, act });
                          break;
                        case 14: //缃戦〉鎵撳嵃
                          this.printForm(act);
                          this.runAfterAction(actId, activityType, "", "", act);
                          break;
                        case 15: //缃戦〉鎵撳嵃_鍖呭惈娴佺▼鎵撳嵃
                          this.printForm(act);
                          break;
                        case 19: //淇濆瓨鑽夌ǹ
                          this.saveDraft(activityType, actId, act);
                          break;
                        case 21: //淇濆瓨骞跺鍒�
                          this.doSave(activityType, actId, "", "", act);
                          break;
                        case 25: //PDF瀵煎嚭
                          this.leadingOut();
                          break;
                        case 26: //鏂囦欢涓嬭浇
                          this.fileDownload(actId);
                          break;
                        case 28: //鐢靛瓙绛剧珷
                          this.isBlockClick = false;
                          this.doSignature(act);
                          break;
                        case 30: //鑷畾涔夋墦鍗�
                          this.printForm(act);
                          this.runAfterAction(actId, activityType, "", "", act);
                          break;
                        case 34: //淇濆瓨锛堟牎楠岋級鏁版嵁
                          this.doSave(activityType, actId, "", subDoc, act);
                          break;
                        case 37: //閫氳繃閭欢鎴栫煭淇¢€氱煡
                          this.showSendMailOrSmsFlowpanel(act);
                          break;
                        case 42: //淇濆瓨骞舵柊寤�
                          this.doSave(activityType, actId, withOld, "", act);
                          break;
                        case 43: //璺宠浆
                          this.jumpType(act);
                          break;
                        case 45: //褰掓。
                          this.placeOnFile();
                          break;
                        case 46: //绛剧珷
                          break;
                        default:
                          break;
                      }
                    })
                    .catch(() => { });
                }
              } else {
                switch (activityType) {
                  case 4: //淇濆瓨骞跺惎鍔ㄦ祦绋�
                    this.saveStartWorkFlow(activityType, actId, act);
                    break;
                  case 8: //鍏抽棴绐楀彛
                    this.goBack(activityType, actId);
                    this.runAfterAction(actId, activityType, "", "", act);
                    break;
                  case 10: //杩斿洖
                    this.goBack(activityType, actId, "", act);
                    break;
                  case 11: //淇濆瓨骞惰繑鍥�
                    this.doSave(activityType, actId, "", subDoc, act);
                    break;
                  case 13:
                    // this.execute(appId, actId, formData, act);
                    this.execute({ actId, formData, act });
                    break;
                  case 14: //缃戦〉鎵撳嵃
                    this.printForm(act);
                    this.runAfterAction(actId, activityType, "", "", act);
                    break;
                  case 15: //缃戦〉鎵撳嵃_鍖呭惈娴佺▼鎵撳嵃
                    this.printForm(act);
                    break;
                  case 19: //淇濆瓨鑽夌ǹ
                    this.saveDraft(activityType, actId, act);
                    break;
                  case 21: //淇濆瓨骞跺鍒�
                    this.doSave(activityType, actId, "", "", act);
                    break;
                  case 25: //PDF瀵煎嚭
                    this.leadingOut();
                    break;
                  case 26: //鏂囦欢涓嬭浇
                    this.fileDownload(actId);
                    break;
                  case 28: //鐢靛瓙绛剧珷
                    this.isBlockClick = false;
                    this.doSignature(act);
                    break;
                  case 30: //鑷畾涔夋墦鍗�
                    this.printForm(act);
                    this.runAfterAction(actId, activityType, "", "", act);
                    break;
                  case 34: //淇濆瓨锛堟牎楠岋級鏁版嵁
                    this.doSave(activityType, actId, "", subDoc, act);
                    break;
                  case 37: //閫氳繃閭欢鎴栫煭淇¢€氱煡
                    this.showSendMailOrSmsFlowpanel(act);
                    break;
                  case 42: //淇濆瓨骞舵柊寤�
                    this.doSave(activityType, actId, withOld, "", act);
                    break;
                  case 43: //璺宠浆
                    this.jumpType(act);
                    break;
                  case 45: //褰掓。
                    this.placeOnFile();
                    break;
                  case 46: //绛剧珷
                    this.formSignatureData.showFormSignature = true;
                    break;
                  default:
                    break;
                }
                if (isOrRefresh) {
                  this.refresh(id);
                }
              }
            },
          }
        );
      }, time);
    },

    //鎵ц鑴氭湰鍚�
    runAfterAction(actId, num, withOld, subDoc, act) {
      let op = this.openParams;
      let that = this;
      let appId = op.appId;
      let formData = this.parameterObj;
      let docId = "";
      let bf = this.buildFormData();
      if (this.copyFormData) {
        //澶嶅埗鏃跺瓨鍦�
        docId = this.copyFormData.id;
      } else {
        docId = bf.id;
      }
      let _bfd = bf;
      let formId = _bfd.formId;
      let viewId = "";
      let _templateForm = "";
      if (formData.templateForm) {
        _templateForm = formData.templateForm;
      }
      let _ = new Date().getTime();
      let parentId = _bfd.parentId;

      delete this.$route.query.id;
      formData = { ...formData, ...this.$route.query }; //鑾峰彇url鍙傛暟锛屽幓鎺塽rl鐨刬d涓嶈瑕嗙洊鍘熸潵鐨刬d
      API.runAfterActionScript(
        appId,
        actId,
        docId,
        viewId,
        formId,
        _templateForm,
        parentId,
        _,
        formData,
        act.type,
        "", //treedocid
        {
          onSucess: (response) => {
            this.isBlockClick = false;
            if (response.data.errcode == 0) {
              if (response.data.data) {
                let resData = response.data.data;
                let errmsg = response.data.data.content;
                if (errmsg.content) {
                  if (errmsg.type == 1) {
                    this.$notify.success({
                      title: errmsg.content,
                      message: "",
                    });
                    if (num == 34) {
                      this.initForm({
                        //淇濆瓨鍚庨噸鏂板姞杞介〉闈㈡暟鎹紝鍏朵粬鎸夐挳涔熻鎵ц璇ユ搷浣�
                        appId,
                        formId,
                        docId,
                      });
                    }
                  }
                } else {
                  if (!resData.type) {
                    //娌℃湁type鍊硷紝浣嗘槸鏈夎繑鍥炴暟鎹紝鎶婃暟鎹斁杩沝ocument
                    if (resData.changedField) {
                      let items = this.formdata.fields; //formData.document.items;
                      let resDataItem = resData.changedField;
                      if (resDataItem) {
                        for (let j = 0; j < items.length; j++) {
                          for (let i = 0; i < resDataItem.length; i++) {
                            for (let el in resDataItem[i]) {
                              if (items[j].name == el) {
                                formData.document.items[el] =
                                  resDataItem[i][el];
                                items[j].value = resDataItem[i][el];
                              }
                            }
                          }
                        }
                      }
                    }
                  } else if (resData.type == 1) {
                    this.$notify.success({
                      title: errmsg,
                      message: "",
                    });
                    if (num == 34) {
                      this.initForm({
                        //淇濆瓨鍚庨噸鏂板姞杞介〉闈㈡暟鎹紝鍏朵粬鎸夐挳涔熻鎵ц璇ユ搷浣�
                        appId,
                        formId,
                        docId,
                      });
                    }
                  } else {
                    this.$notify.success({
                      title: errmsg,
                      message: "",
                    });
                  }
                }
              } else {
                if (num == 4) {
                  this.initForm({
                    appId,
                    formId,
                    docId,
                  });
                } else if (num == 11) {
                  //鍏抽棴褰撳墠椤�
                  setTimeout(function () {
                    that.goBack();
                  }, 500);
                } else if (num == 21) {
                  //淇濆瓨骞跺鍒�
                  this.copyDoc();
                } else if (num == 42) {
                  //淇濆瓨骞堕噸寤�
                  setTimeout(() => {
                    if (withOld) {
                      //淇濈暀鏃ф暟鎹�
                      that.$parent.reloading(docId);
                    } else {
                      this.initForm({
                        appId,
                        formId,
                        docId: "",
                      });
                    }
                  }, 500);
                } else if (num == 34) {
                  let openParams = this.openParams;
                  let isSave = "";
                  isSave = true;
                  if (
                    openParams.isIncludeCreate &&
                    openParams.isIncludeCreate == "include"
                  ) {
                    this.$emit("action", isSave);
                  } else if (
                    (openParams.isTabCreate &&
                      openParams.isTabCreate == "tab") ||
                    openParams.showtype == "tab"
                  ) {
                    //閫夐」鍗�
                    this.$emit("action", isSave);
                  }

                  if (
                    openParams.homeWidgetType &&
                    openParams.homeWidgetType == "system_workflow"
                  ) {
                    this.$store.dispatch("getPendingListWithWidget"); //淇濆瓨瀹屾瘯鍚庨椤垫祦绋嬪鐞唚idget鏁版嵁閲嶆柊鍒锋柊
                    this.$store.dispatch("getProcessedListWithWidget");
                  }
                  if (openParams.type == 277) {
                    that.goBack(num);
                  }

                  let isIncludeViewRefresh =
                    this.$store.state.isIncludeViewRefresh;
                  if (isIncludeViewRefresh && subDoc && subDoc.length > 0) {
                    //鏄寘鍚厓绱犵綉鏍艰鍥惧苟瑕佸埛鏂�
                    that.$parent.reloading();
                    let obj = {
                      data: [],
                      isRefresh: false,
                    };
                    this.$store.commit("saveSubDocuments", obj); //淇濆瓨鎴愬姛鍚庨噸鏂版妸鍖呭惈鍏冪礌缃戞牸瑙嗗浘鐨勬暟鎹竻绌�
                  }
                  this.initForm({
                    //淇濆瓨鍚庨噸鏂板姞杞介〉闈㈡暟鎹紝鍏朵粬鎸夐挳涔熻鎵ц璇ユ搷浣�
                    appId,
                    formId,
                    docId,
                  });

                  let list = this.formdata.fields;
                  for (let i = 0; i < list.length; i++) {
                    if (list[i].isModified) {
                      let data = {
                        fieldName: list[i].name,
                        _: new Date().getTime(),
                      };
                      let docId = list[i].docId;
                      this.$store.dispatch("getOperationLog", {
                        appId,
                        docId,
                        data,
                      });
                    }
                  }

                  this.$store.commit("SET_SUBDOCUMENTS_DATA", {
                    //淇濆瓨鍚庢竻绌簊tore閲岀殑缃戞牸瑙嗗浘鐨勬暟鎹�
                    op: "",
                    view: "",
                    _afd: "",
                    _dl: "",
                  });
                  this.$store.commit("saveSubDocuments", {
                    data: [],
                    isRefresh: false,
                  });
                }
              }
              if (num == 13) {
                //鑷畾涔夋寜閽�
                this.customBtnOperation(act.actionType, appId, formId, docId);
              }
            }
          },
        }
      );
    },

    //閲嶆瀯鑷畾涔夈€佹櫘閫氭寜閽殑鍔熻兘
    //鏅€氭寜閽�(type=11: 姣斿: 鑰冭瘯鐢虫姤->璧勬牸璇佹姤鍚嶇鐞�->鎶ュ悕浜哄憳->鎶ュ悕->鎻愪氦鎸夐挳),
    //鑷畾涔夋寜閽�(type=13: 姣斿: 鎶ュ悕瀹℃牳 ->瀛﹀憳绠$悊->鏉愭枡瀹℃牳->鎻愪氦瀹℃牳)
    v3ActionSubmit(actId, isOrRefresh, id, activityType, withOld, act) {
      this.isBlockClick = false;
      let op = this.openParams;
      let appId = op.appId;
      let formData = "";
      let documentId = "";
      if (this.copyFormData) {
        //澶嶅埗鏂囨。鏃跺瓨鍦�
        let cf = this.copyFormData;
        formData = this.buildFormData(); //褰撳鍒舵椂鏁版嵁涓嶅彉锛屽彧鏀瑰彉id鍊�
        formData.docId = cf.id;
        formData.id = cf.id;
        documentId = cf.id;
      } else {
        let bf = this.buildFormData();
        formData = bf;
        formData.docId = bf.id;
        documentId = bf.id;
      }
      let subDocuments = [];
      let versions = "";
      let templateForm = "";
      let subDoc = this.$store.state.subDocuments;

      let haveViewGridview = this.haveViewGridview;
      let time = 0;
      if (haveViewGridview) {
        //濡傛灉鏈夌綉鏍艰鍥�
        this.$store.commit("SET_SAVESUBDOCMENTS", {
          randomId: new Date().getTime(),
          docId: formData.docId,
        });
        time = 100;
      }
      setTimeout(() => {
        let subDocData = this.$store.state.subDocumentsData;
        if (subDoc && subDoc.length > 0) {
          //鍒ゆ柇鏄惁鏄寘鍚厓绱犵綉鏍艰鍥�
          subDocuments = subDoc;
          versions = formData.versions;
          delete formData.subDocuments;
          delete formData.versions;
          delete formData.templateForm;
        } else if (subDocData && haveViewGridview) {
          //缃戞牸瑙嗗浘锛岀湅store.js
          subDocuments = this.setAllSubDocmentsData(subDocData);
        } else {
          subDocuments = formData.subDocuments;
          versions = formData.versions;
        }
        let document = {
          applicationId: op.appId,
          formId: formData.formId,
          id: documentId,
          items: formData.items,
          parentId: formData.parentId,
          sign: formData.sign,
          subDocuments: subDocuments,
          versions: versions,
          exparams: {},
          templateForm: templateForm,
        };
        delete formData.items;
        let subSelects = this.subSelects;
        if (subSelects.length > 0) {
          formData.subSelects = subSelects;
        }
        if (op.parentId) {
          if (op.isRelate === true || op.isRelate === "true") {
            document.isRelate = "true";
          } else {
            document.isRelate = op.isRelate;
          }
          document.parentId = op.parentId;
          formData.parentId = op.parentId;
        }
        formData.document = document;

        formData.viewId = "";
        formData.templateForm = "";
        if (op.realformId) {
          //濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm
          formData.formId = op.realformId;
          formData.document.formId = op.realformId;
          formData.templateForm = op.actionContent;
        }
        this.parameterObj = formData;

        //閲嶆瀯start
        let treedocid = "";
        let flowType = "";
        let step = "BeforeAction";
        let req = {
          step,
          appId,
          actId,
          formData,
          activityType,
          treedocid,
          flowType,
        };
        this.v3Activities(
          step,
          appId,
          actId,
          formData,
          activityType,
          treedocid,
          flowType,
          act
        ); //閲嶆瀯鎵ц鍓嶄唬鐮�
        //閲嶆瀯end
      }, time);
    },

    v3Activities(
      step,
      appId,
      actId,
      formData,
      activityType,
      treedocid,
      flowType,
      act
    ) {
      this.isBlockClick = true;
      
      API.v3ActivitiesApi(
        step,
        appId,
        actId,
        formData,
        activityType,
        treedocid,
        flowType,
        {
          onSucess: (response) => {
            let errcode = response.data.errcode;
            let errmsg = response.data.errmsg;
            let errorsList = response.data.errors;
            this.isBlockClick = false;

            if (errcode == 4001) {
              this.isBlockClick = false;
              let promptData = "";
              if (errorsList && errorsList.length > 0) {
                errorsList.forEach((item) => {
                  promptData += item.errmsg + "\n";
                });
              }
              this.promptBox(errcode, errmsg, promptData); //閿欒鎻愮ず锛屽涓枃瀛楀惊鐜垽鏂�-鎹㈣
              return;
            }
            //  alert(response.data.errcode)
            // console.log(response.data.errcode)
            // if(response.data.data&&response.data.data.type==32){//鎵ц鍓嶈繘鍏ユ墽琛屽悗
            //     this.$confirm(`${errmsg}`, this.$t('tip'), {
            //       confirmButtonText: this.$t('msg.confirm'),
            //       cancelButtonText: this.$t('btns.cancel'),
            //       type: "warning",
            //     }).then(() => {
            //         let step=response.data.data.next-step
            //         this.v3Activities(step,appId,actId,formData,activityType,treedocid,flowType) //閲嶆瀯鎵ц鍓嶄唬鐮�                   
            //     }).catch((error)=>{})   
            //     return
            // }else if(response.data.errcode==0){//55--鑷畾涔夋寜閽�13杩斿洖 
            //    this.goBack();             
            //    return
            // }

            if (response.data.data) {
              //濡傛灉鏈夋暟鎹繑鍥烇紝缁撴潫涓嬩竴姝�
              let resData = response.data.data;
              let errmsg = response.data.data.content;
              if (!resData.type) {
                //娌℃湁type鍊硷紝浣嗘槸鏈夎繑鍥炴暟鎹紝鎶婃暟鎹斁杩沝ocument
                this.isBlockClick = false;
                if (resData.changedField) {
                  let items = this.formdata.fields; //formData.document.items;
                  let resDataItem = resData.changedField;
                  if (resDataItem) {
                    for (let j = 0; j < items.length; j++) {
                      for (let i = 0; i < resDataItem.length; i++) {
                        for (let el in resDataItem[i]) {
                          if (items[j].name == el) {
                            formData.document.items[el] = resDataItem[i][el];
                            items[j].value = resDataItem[i][el];
                          }
                        }
                      }
                    }
                  }
                  switch (activityType) {
                    case 4: //淇濆瓨骞跺惎鍔ㄦ祦绋�
                      this.saveStartWorkFlow(activityType, actId, act);
                      break;
                    case 8: //鍏抽棴绐楀彛
                      this.goBack();
                      this.runAfterAction(actId, activityType, "", "", act);
                      break;
                    case 10: //杩斿洖
                      this.goBack(activityType, actId, "", act);
                      break;
                    case 11: //淇濆瓨骞惰繑鍥�
                      this.doSave(activityType, actId, "", subDoc, act);
                      break;
                    case 13:
                      // this.execute(appId, actId, formData, act);
                      this.execute({ actId, formData, act });
                      break;
                    case 14: //缃戦〉鎵撳嵃
                      this.printForm(act);
                      this.runAfterAction(actId, activityType, "", "", act);
                      break;
                    case 15: //缃戦〉鎵撳嵃_鍖呭惈娴佺▼鎵撳嵃
                      this.printForm(act);
                      break;
                    case 19: //淇濆瓨鑽夌ǹ
                      this.saveDraft(activityType, actId, act);
                      break;
                    case 21: //淇濆瓨骞跺鍒�
                      this.doSave(activityType, actId, "", "", act);
                      break;
                    case 25: //PDF瀵煎嚭
                      this.leadingOut();
                      break;
                    case 26: //鏂囦欢涓嬭浇
                      this.fileDownload(actId);
                      break;
                    case 30: //鑷畾涔夋墦鍗�
                      this.printForm(act);
                      this.runAfterAction(actId, activityType, "", "", act);
                      break;
                    case 34: //淇濆瓨锛堟牎楠岋級鏁版嵁
                      this.doSave(activityType, actId, "", subDoc, act);
                      break;
                    case 37: //閫氳繃閭欢鎴栫煭淇¢€氱煡
                      this.showSendMailOrSmsFlowpanel(act);
                      break;
                    case 42: //淇濆瓨骞舵柊寤�
                      this.doSave(activityType, actId, withOld, "", act);
                      break;
                    case 43: //璺宠浆
                      this.jumpType(act);
                      break;
                    case 45: //褰掓。
                      this.placeOnFile();
                      break;
                    case 46: //绛剧珷
                      this.isBlockClick = false;
                      this.formSignatureData.showFormSignature = true;
                      break;
                    default:
                      break;
                  }
                }
              } else if (resData.type == 1) {
                this.$notify({
                  title: errmsg,
                  message: "",
                  type:'warning'
                });
                this.isBlockClick = false;
              } else if (resData.type == 16) {
                this.$notify({
                  title: errmsg,
                  message: "",
                  type: "warning",
                });
                this.isBlockClick = false;
              } else if (resData.type == 32) {
                this.$confirm(`${errmsg}`, this.$t("tip"), {
                  confirmButtonText: this.$t("msg.confirm"),
                  cancelButtonText: this.$t("btns.cancel"),
                  closeOnClickModal: false,
                  type: "warning",
                }).then(() => {
                  let step = response.data.data["next-step"]
                  this.v3Activities(step, appId, actId, formData, activityType, treedocid, flowType) //閲嶆瀯鎵ц鍓嶄唬鐮�                   
                }).catch(() => { 
                  this.isBlockClick = false;
                 });
              }
            } else if (response.data.errcode == 0) {//璇锋眰鎴愬姛杩斿洖
              console.log('response.data', response.data)
              console.log('activityType', activityType)
              if (response.data.actionStep === 'AfterAction' && activityType == 34) {//activityType=34鎵嶆彁绀�
                this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' })
              }
              if (response.data.actionStep === 'AfterAction' && activityType == 13) {//activityType=13鎵嶆彁绀�
                this.$message({ type: 'success', message: '鎿嶄綔鎴愬姛' })
              }
              this.goBack();
              return
            }
          },
        }
      );
    },

    setSubDocmentsData(data) {
      let _afd = data._afd;
      let _dl = data._dl;
      if (_afd && _afd.length > 0) {
        for (let i = 0; i < _afd.length; i++) {
          for (let j = 0; j < _dl.length; j++) {
            if (_afd[i].docId == _dl[j].id) {
              let fields = _afd[i].data.fields;
              let items = _dl[j].items;
              for (let key in items) {
                for (let z = 0; z < fields.length; z++) {
                  if (items[key].id == fields[z].id) {
                    items[key].value = fields[z].value;
                  }
                }
              }
            }
          }
        }
      }
      let arr = [];
      let dataList = data._dl;
      let view = data.view;
      let op = data.op;
      for (let i = 0; i < dataList.length; i++) {
        let obj = JSON.parse(JSON.stringify(dataList[i]));
        if (op.parentId) {
          obj.parentId = op.parentId;
        }
        if (op.isRelate === true || op.isRelate === "true") {
          obj.isRelate = "true";
        } else {
          obj.isRelate = op.isRelate;
        }
        obj.items = {};
        for (let j = 0; j < view.columns.length; j++) {
          for (let key in dataList[i].items) {
            if (key == view.columns[j].id) {
              obj.items[dataList[i].items[key].name] =
                dataList[i].items[key].value;
              if (dataList[i].edit) {
                obj.edit = true;
              } else {
                //鏆傛椂娌℃兂鍒板叾浠栧ソ鏂规硶锛屽彧鑳藉叏閮ㄩ兘缁檈dit淇濆瓨浜�
                obj.edit = true;
              }
            }
          }
        }
        arr.push(obj);
      }
      return arr;
    },

    setAllSubDocmentsData(data) {
      let docId = this.formdata.docId;
      let subDoc = data[docId];
      let arr = [];
      if (Object.values(data).length > 0) {
        for (let key in subDoc) {
          // arr.push(subDoc[key])
          arr = arr.concat(subDoc[key]);
        }
      }
      return arr;
    },

    //鐢靛瓙绛剧珷
    doSignature() {
      let that = this;
      let posid = "formTemplate_" + this.formTemplateDocid + "_1";
      let signatureCreator = Signature.create();
      signatureCreator.run({
        protectedItems: [], //璁剧疆瀹氫綅椤甸潰DOM鐨刬d锛岃嚜鍔ㄦ煡鎵綢D锛岃嚜鍔ㄨ幏鍙栦繚鎶OM鐨刱g-desc灞炴€т綔涓轰繚鎶ら」鎻忚堪锛寁alue灞炴€т负淇濇姢鏁版嵁銆備笉璁剧疆锛岃〃绀轰笉淇濇姢鏁版嵁锛岀绔犳案杩滄湁鏁堛€�
        position: posid, //璁剧疆鐩栫珷瀹氫綅dom鐨処D锛屽繀椤昏缃�
        okCall: function (fn, image) {
          //鐐瑰嚮纭畾鍚庣殑鍥炶皟鏂规硶锛宼his涓虹绔犲璞� ,绛剧珷鏁版嵁鎾ら攢鏃讹紝灏嗗洖璋冩鏂规硶锛岄渶瑕佸疄鐜扮绔犳暟鎹寔涔呭寲锛堜繚瀛樻暟鎹埌鍚庡彴鏁版嵁搴擄級,淇濆瓨鎴愬姛鍚庡繀椤诲洖璋僨n(true/false)娓叉煋绛剧珷鍒伴〉闈笂
          // console.log("鐩栫珷ID锛�"+this.getSignatureid());
          // console.log("鐩栫珷鏁版嵁锛�"+this.getSignatureData());
          // var result = {"data":{}};
          var json = {};
          var docId = that.buildFormData().id;
          var signatureData = Signature.verifySignByList([this])[0]; //杩斿洖绛剧珷淇℃伅
          (signatureData.documentid = docId),
            (signatureData.documentname = docId),
            (signatureData.position = posid);
          var imgData = image.imgdata; //杩斿洖绛剧珷鍥剧墖base64鏁版嵁
          json.signatureData = signatureData;
          json.imgData = imgData;
          (json.userId = that.$root.user.id), //that.$store.state.userId; //user鍐欐浜�
            (json.nodeId = "");
          json.stateLabel = "";
          fn(true);

          var signatureCreator = Signature.create();
          var list = Signature.list;

          json.signatureId = this.signatureid;
          that.$api.saveHTMLsignature(that.$root.appid, docId, json, {
            onSucess: (res) => {
              if (res.data.errcode === 4001) {
                Signature.hide(); //闅愯棌绛剧珷
                Toast({
                  message: res.data.errmsg,
                  iconClass: "fa fa-close fa-2x",
                });
                return;
              } else {
                for (var key in list) {
                  signatureCreator.saveSignature(
                    docId,
                    key,
                    list[key].getSignatureData()
                  );
                }
              }
            },
          });
        },
        cancelCall: function () {
          //鐐瑰嚮鍙栨秷鍚庣殑鍥炶皟鏂规硶
        },
      });
    },

    //鑷畾涔夋寜閽搷浣�
    customBtnOperation(actionType, appId, formId, docId) {
      switch (actionType) {
        case 0:
          this.initForm({
            //淇濆瓨鍚庨噸鏂板姞杞介〉闈㈡暟鎹紝鍏朵粬鎸夐挳涔熻鎵ц璇ユ搷浣�
            appId,
            formId,
            docId,
          });
          let list = this.formdata.fields;
          for (let i = 0; i < list.length; i++) {
            if (list[i].isModified) {
              let data = {
                fieldName: list[i].name,
                _: new Date().getTime(),
              };
              let docId = list[i].docId;
              this.$store.dispatch("getOperationLog", { appId, docId, data });
            }
          }
          break;
        case 1:
          this.goBack();
          break;
        case 2:
          this.goBack();
          break;
        case 3:
          break;
        default:
          break;
      }
    },

    //淇濆瓨锛堟牎楠岋級鏁版嵁
    doSave(num, actId, withOld, subDoc, act) {
      // debugger
      console.log(777);
      let openParams = this.openParams;
      let that = this;
      let transferrData = "";
      let id = "";
      let formId = "";
      if (this.copyFormData) {
        //澶嶅埗鏃跺瓨鍦�
        transferrData = this.buildFormData(); //this.copyFormData
        id = this.copyFormData.id;
        transferrData.id = id;
      } else {
        let bf = this.buildFormData();
        transferrData = bf;
        id = bf.id;
      }
      if (openParams.parentId) {
        transferrData.parentId = openParams.parentId;
      } else {
        transferrData.parentId = "";
      }
      if (openParams.isRelate === true || openParams.isRelate === "true") {
        transferrData.isRelate = "true";
      } else {
        transferrData.isRelate = "";
      }
      let subDocData = this.$store.state.subDocumentsData;
      if (subDoc && subDoc.length > 0) {
        //鍖呭惈鍏冪礌缃戞牸瑙嗗浘
        transferrData.subDocuments = subDoc;
      } else if (subDocData && this.haveViewGridview) {
        //缃戞牸瑙嗗浘锛岀湅store.js
        transferrData.subDocuments = this.setAllSubDocmentsData(subDocData);
      }
      if (openParams.realformId) {
        //濡傛灉鏄ā鏉胯〃鍗曪紝realformId鏄湡瀹瀎ormID锛岃€屼笉鏄痶emplateForm
        transferrData.templateForm = openParams.actionContent;
        transferrData.formId = openParams.realformId;
        formId = openParams.realformId;
      } else {
        formId = this.formdata.formId;
      }

      delete this.$route.query.id;
      transferrData = { ...transferrData, ...this.$route.query }; //鑾峰彇url鍙傛暟锛屽幓鎺塱d涓嶈瑕嗙洊鍘熸潵鐨刬d

      API.saveDocument(openParams.appId, formId, id, transferrData, {
        onSucess: (response) => {
          let errcode = response.data.errcode;
          let errmsg = response.data.errmsg;
          let errorsList = response.data.errors;
          if (errcode == 4001) {
            this.isBlockClick = false;
            let promptData = "";
            if (errorsList && errorsList.length > 0) {
              errorsList.forEach((item) => {
                promptData += item.errmsg + "\n";
              });
            }
            this.promptBox(errcode, errmsg, promptData); //閿欒鎻愮ず锛屽涓枃瀛楀惊鐜垽鏂�-鎹㈣
          } else if (errcode == 0) {
            that.promptBox(errcode, errmsg).then(() => {
              this.runAfterAction(actId, num, withOld, subDoc, act);
            });
            if (num == 42) {
              //淇濆瓨鍚庨噸寤�
              if (
                openParams.isIncludeCreate &&
                openParams.isIncludeCreate == "include"
              ) {
                this.$emit("action");
              } else if (openParams.type && openParams.type == 277) {
                this.$emit("action", true);
              }
            }
            if (response.data.data.items && num != 42) {
              this.oldBuildFormData = response.data.data.items;
            }

            // debugger
            // if(!openParams.isFlowCenterCreate) { //娴佺▼涓績澶勫彂璧锋柊寤猴紝淇濆瓨鍚庝細閲嶆柊鍔犺浇鏁翠釜琛ㄥ崟椤甸潰锛屼负浜嗕笉鍒锋柊椤甸潰锛屽垽鏂潪娴佺▼涓績鎵嶆墽琛屼笅涓€姝�(m 蹇樹簡鏄笉鏄垜鍐欑殑锛屼絾鏄繖閲屽鑷存櫘閫氳〃鍗曚繚瀛樺悗锛屾柊寤轰簡)
            //   this.$parent.$parent.refreshView(openParams); //鏅€氳鍥句繚瀛樻垚鍔熷悗鍒锋柊瑙嗗浘椤甸潰
            // }
          }
        },
      });
    },

    //澶嶅埗鏂囨。
    copyDoc() {
      let appId = this.openParams.appId;
      let docId = "";
      let doc = {};
      let formData = "";
      let bf = this.buildFormData();
      if (this.copyFormData) {
        //澶嶅埗鏃跺瓨鍦�
        formData = bf;
        formData.id = this.copyFormData.id;
        docId = this.copyFormData.id;
        doc.document = formData;
      } else {
        formData = bf;
        docId = bf.id;
        doc.document = formData;
      }
      delete doc.document.items.button_act;
      delete doc.document.items.null;
      delete doc.document.items.undefined;
      API.copeDocument(appId, docId, doc, {
        onSucess: (response) => {
          this.copyFormData = this.buildFormData();
          this.copyFormData.id = response.data.data.id;
        },
      });
    },

    //淇濆瓨鑽夌ǹ(19)
    saveDraft(num, actId, act) {
      let that = this;
      let formData = "";
      if (this.copyFormData) {
        //澶嶅埗鏃跺瓨鍦�
        formData = this.buildFormData();
        formData.id = this.copyFormData.id;
      } else {
        formData = this.buildFormData();
      }
      delete formData.items.button_act;
      delete formData.items.null;
      delete formData.items.undefined;
      API.saveWithoutValidDocument(
        this.openParams.appId,
        formData.id,
        formData,
        {
          onSucess: (response) => {
            if (response.data.errcode == 0) {
              let errcode = response.data.errcode;
              let errmsg = response.data.errmsg;
              this.promptBox(errcode, errmsg).then((data) => {
                that.runAfterAction(actId, num, "", "", act);
              });
            }
          },
        }
      );
    },

    //杩斿洖
    /**
     * num涓烘寜閽被鍨媡ype
    */
    goBack(num, actId, isFlowPanel, act) {
      // debugger
      let params = this.openParams;
      if (params.isOpenNewWindow) {
        //濡傛灉鏄柊绐楀彛鎵撳紑 //|| (top == window 瀵艰嚧淇濆瓨骞惰繑鍥烇紝鎻愪氦娴佺▼绛夊叧闂〉绛炬棤娉曟墽琛�)
        window.close();
      } else if (params.isExternalLink) {
        //澶栭摼,鎵撳紑鐨勬槸opener缁勪欢
        if (params.isOpenDialog) {
          //寮圭獥鎵撳紑
          window.parent.handleClose();
        } else {
          this.$emit("onAction", "", true);
        }
      } else if (
        params.isIncludeCreate &&
        params.isIncludeCreate == "include" &&
        !(params.openType && params.openType == 293)
      ) {
        //鍖呭惈鍏冪礌
        this.$emit("action");
      } else if (params.isTabCreate && params.isTabCreate == "tab") {
        //閫夐」鍗�
        this.$emit("action");
      } else if (params.type && params.type == 277) {
        let isSave = "";
        if (num && num == 34) {
          isSave = true;
        }
        this.$emit("action", isSave);
      } else if (isFlowPanel) { //鎵撳紑浜嗘彁浜ら潰鏉匡紝鎻愪氦娴佺▼鍚庡叧闂〃鍗曟爣绛撅紝浣嗘槸绗竴涓猧f宸茬粡鍒ゆ柇浜嗭紝杩欓噷鏆傛椂鍚庣画鍐嶇湅锛屽厛涓嶅垹闄�
        let tab = params;
        this.$parent.doBack();
        // let havePar = false;
        // let par  = '';
        // while(!havePar) {
        //   par = par + '.$parent';
        //   let url = 'this' + par + '.onCloseBtnClick';
        //   if(eval(url)) {
        //     let path = url + '(' + JSON.stringify(tab) +')';
        //     eval(path);
        //     break
        //   }
        // }
        // let tab = this.openParams;
        // this.$parent.$parent.onCloseBtnClick(tab);
      } else if (params.isPopupLayerDisplay) {
        //濡傛灉鏄脊鍑哄眰鎵撳紑鐨勮鍥炬墦寮€鐨勮〃鍗�
        this.$emit("popupOpenType", "VIEW");
        this.$emit("action");
      } else {
        if (num && num == 8) {
          if (this.isClickGoBackBtn) {
            return;
          }
        }
        let tab = params;
        this.isClickGoBackBtn = true;
        if (params.allowOpenDoc && params.allowOpenDoc == true) {
          this.$parent.$parent.handleDocumentClose(); //瑙嗗浘閫夋嫨妗嗗厑璁告煡鐪嬫枃妗g偣鍑昏繑鍥炴寜閽脊妗唂alse
        } else {
          // this.$parent.$parent.onCloseBtnClick(tab);
          this.$parent.doBack();
        }
      }
      if (num && num == 10) {
        //杩斿洖鎸夐挳鎵ц鎵ц鍚庤剼鏈�
        this.runAfterAction(actId, num, "", "", act);
      }
    },

    printPage() {
      let newWindow = window.open("_blank"); //  鎵撳紑鏂扮獥鍙�
      let codestr = document.getElementById("print").innerHTML; //  鑾峰彇闇€瑕佺敓鎴恜df椤甸潰鐨刣iv浠g爜
      newWindow.document.write(codestr); //  鍚戞枃妗e啓鍏TML琛ㄨ揪寮忔垨鑰匤avaScript浠g爜
      newWindow.document.close(); //  鍏抽棴document鐨勮緭鍑烘祦, 鏄剧ず閫夊畾鐨勬暟鎹�
      setTimeout(() => {
        newWindow.print();
      }, 100);
    },

    //鎵撳嵃鏁版嵁
    printForm(act) {
      this.isBlockClick = false;
      if (act.type == 14) {
        this.printParams.formId = this.formdata.formId;
        this.printParams.docId = this.formdata.docId;
        let routeData = this.$router.resolve({
          name: "formPrint",
          query: {
            appId: this.openParams.appId,
            formId: this.formdata.formId,
            docId: this.formdata.docId,
            printType: act.type,
          },
        });
        window.open(routeData.href, "_blank");
      } else if (act.type == 30) {
        this.printParams.formId = this.formdata.formId;
        this.printParams.docId = this.formdata.docId;
        let routeData = this.$router.resolve({
          name: "formPrint",
          query: {
            appId: this.openParams.appId,
            onActionPrint: act.onActionPrint,
            docId: this.formdata.docId,
            printType: act.type,
          },
        });
        window.open(routeData.href, "_blank");
      }
    },

    //褰掓。
    placeOnFile() {
      let appId = this.openParams.appId;
      let docId = this.buildFormData().id;
      API.Archive(appId, docId, {
        onSucess: () => {
          this.isBlockClick = false;
        },
      });
    },

    //鏂囦欢涓嬭浇
    fileDownload(actId) {
      let appId = this.openParams.appId;
      let docId = this.buildFormData().id;
      API.documentDownload(appId, docId, actId, {
        onSucess: (res) => {
          this.isBlockClick = false;
          let path = res.data.data;
          if (
            path &&
            (path.indexOf("https://") > -1 || path.indexOf("http://") > -1)
          ) {
            window.open(encodeURI(path));
            return false;
          }
          let url = obpmConfig.obpmFilePath + path;
          // window.open(url);
          const elink = document.createElement("a");
          let arr = path.split("/");
          elink.download = arr[arr.length - 1];
          elink.style.display = "none";
          elink.href = url;
          document.body.appendChild(elink);
          elink.click();
          URL.revokeObjectURL(elink.href);
          document.body.removeChild(elink);

          // let fileName = "";
          // let type = response.headers['content-type'];
          // if(response.headers['content-disposition']) {
          //   fileName = decodeURIComponent(response.headers['content-disposition'].split("=")[1]);
          // }else {
          //   fileName="涓嬭浇";
          // }
          // if(response.data.size >0){
          //   this.download(response, type, fileName);
          // }else {
          //   this.$notify({
          //     title: this.$t('form.warning'),
          //     message: '鏂囦欢涓嶅瓨鍦�',
          //     type: 'warning'
          //   });
          // }
        },
        onError: () => {
          this.isBlockClick = false;
          this.$notify({
            title: this.$t("form.warning"),
            message: this.$t("view.nofile"),
            type: "warning",
          });
        },
      });
    },

    setHtmlReadnoly(isRead) {
      let data = this.formdata;
      const loopOpe = (fields) => {
        for (let i = 0; i < fields.length; i++) {
          if (isRead) {
            if (fields[i].displayType == Constant.PermissionType_MODIFY) {
              fields[i].originalDisplayType = Constant.PermissionType_MODIFY;
              fields[i].displayType = Constant.PermissionType_READONLY;
            }
          } else {
            if (fields[i].originalDisplayType) {
              fields[i].displayType = fields[i].originalDisplayType;
            }
          }
          if (!fields[i].isComment) {
            if (fields[i].tabs && fields[i].tabs.length > 0) {
              for (let j = 0; j < fields[i].tabs.length; j++) {
                if (
                  fields[i].tabs[j].fields &&
                  fields[i].tabs[j].fields.length > 0
                ) {
                  loopOpe(fields[i].tabs[j].fields);
                }
              }
            }
          }
        }
      };
      if (data.fields && data.fields.length > 0) {
        loopOpe(data.fields);
      }
      this.formdata = data;
    },

    //PDF瀵煎嚭
    leadingOut() {
      let appId = this.openParams.appId;
      let _bf = this.buildFormData();
      let docId = _bf.id; //__HIyNvkSUkqN1PsZOicZ
      let formId = _bf.formId;
      this.setHtmlReadnoly(true);
      setTimeout(() => {
        let domId = "formTemplate_" + docId.replace(/_/g, ""); //formTemplate_HIyNvkSUkqN1PsZOicZ
        let htmlBody = document.getElementById(domId).innerHTML;
        let linkCss = "<link rel='stylesheet' href='pdf.css'></link>";
        htmlBody += linkCss;
        let params = {
          htmlBody,
        };
        let statiContextPath = obpmConfig.statiContextPath;
        this.setHtmlReadnoly(false);
        if (statiContextPath) {
          //5.0 trunk
          API.trunkPDFExport(appId, formId, docId, params, {
            onSucess: (res) => {
              this.isBlockClick = false;
              let url = obpmConfig.obpmFilePath + res.data.data;
              window.open(url);
            },
          });
        } else {
          //4.4 stable
          API.stablePDFExport(appId, formId, docId, {
            onSucess: (response) => {
              this.isBlockClick = false;
              // 鑾峰彇鍦╮esponse headers涓繑鍥炵殑涓嬭浇鏂囦欢绫诲瀷
              let type = response.headers["content-type"];
              /*鑾峰彇鍦╮esponse headers涓繑鍥炵殑涓嬭浇鏂囦欢鍚�
                  鍥犱负杩斿洖鏂囦欢鍚嶆槸閫氳繃encodeURIComponent()鍑芥暟杩涜浜嗙紪鐮侊紝鍥犳闇€瑕侀€氳繃decodeURIComponent()鍑芥暟瑙g爜
                */
              let fileName = decodeURIComponent(
                response.headers["content-disposition"].split("=")[1]
              );
              // 璋冪敤灏佽濂界殑涓嬭浇鍑芥暟
              this.download(response, type, fileName);
            },
          });
        }
      }, 100);
    },

    download(res, type, filename) {
      const blob = new Blob([res.data], {
        // 濡傛灉鍚庣娌¤繑鍥炰笅杞芥枃浠剁被鍨嬶紝鍒欓渶瑕佹墜鍔ㄨ缃細type: 'application/pdf;chartset=UTF-8' 琛ㄧず涓嬭浇鏂囨。涓簆df锛屽鏋滄槸word鍒欒缃负msword锛宔xcel涓篹xcel
        type: type,
      });
      const a = document.createElement("a");
      const herf = window.URL.createObjectURL(blob);
      // 涓嬭浇閾炬帴
      a.href = herf;
      // 涓嬭浇鏂囦欢鍚�,濡傛灉鍚庣娌℃湁杩斿洖锛屽彲浠ヨ嚜宸卞啓a.download = '鏂囦欢.pdf'
      a.download = filename;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      window.URL.revokeObjectURL(herf);
    },

    //鍏抽棴璺宠浆鎸夐挳鎵撳紑鐨勭獥鍙�
    closeDialog() {
      this.jumpPopup = false;
      if (this.isDialogOpenExternalLink) {
        let appId = this.openParams.appId;
        let bf = this.buildFormData();
        let formId = bf.formId;
        let docId = bf.id;
        this.initForm({
          appId,
          formId,
          docId,
        });
      }
    },

    //璁$畻鑴氭湰a鏍囩璺宠浆
    scriptJump(openType, params, jumpType, styleParams) {
      let newparams = JSON.parse(params)[0];
      newparams.name = this.formdata.formTemplate.formName;
      if (jumpType === "opendocument") {
        if (openType == "open-eject" || openType == "dialog") {
          if (styleParams) {
            styleParams = JSON.parse(styleParams);
          }
          let screen = document.documentElement.clientHeight;
          let dialogHeight = styleParams.dialogHeight;
          if (dialogHeight) {
            let dh = dialogHeight.split("px")[0];
            if (dh > screen) {
              styleParams.dialogHeight = screen - 80 + "px";
            } else {
              styleParams.dialogHeight = dh - 80 + "px";
            }
          }

          this.isJumpForm = true;
          newparams.dialogId =
            "dialog_normalform_" + this.openParams.actionContent; //鐢ㄤ簬寮圭獥鎵撳紑琛ㄥ崟鏈夊寘鍚厓绱犳椂锛岃绠楀寘鍚厓绱犲搴�
          this.jumpParams = newparams;
          this.jumpPopupStyle = styleParams;
          this.jumpPopup = true;
        } else if (openType == "open-present") {
          newparams.isCurrentPageOpen = true;
          this.$emit("openNewpage", newparams);
        } else if (openType == "open-blank") {
          let routeData = this.$router.resolve({
            name: "open",
            query: newparams,
          });
          window.open(routeData.href, "_blank");
        } else {
          //榛樿鐢╰ab鏂瑰紡鎵撳紑
          this.$emit("add-tab", newparams);
        }
      } else if (jumpType === "openview") {
        if (openType == "open-eject" || openType == "dialog") {
          this.isJumpView = true;
          this.jumpParams = newparams;
          this.jumpPopup = true;
          this.popupLayerType = "VIEW";
        } else if (openType == "open-present") {
          newparams.isCurrentPageOpen = true;
          this.$emit("openNewpage", newparams);
        } else if (openType == "open-blank") {
          let routeData = this.$router.resolve({
            name: "view_blank",
            query: newparams,
          });
          window.open(routeData.href, "_blank");
        } else {
          //榛樿鐢╰ab鏂瑰紡鎵撳紑
          this.$emit("add-tab", newparams);
        }
      } else if (jumpType === "jumpto") {
        // let routeData = this.$router.resolve({
        //   name: "open",
        //   query: newparams,
        // });
        // window.open(routeData.href, "_blank");
        window.open(newparams.actionContent);
      }
    },

    //璺宠浆
    jumpType(act) {
      let _op = this.openParams;
      let name = act.name;
      if (act.jumpMode === 0) {
        let actId = act.targetList.split("|")[0];
        let params = {
          linkType: "00",
          appId: this.openParams.appId,
          actionContent: actId,
          _select: "",
          name,
        };
        if (_op.isOpenNewWindow == "true") {
          params.isCurrentPageOpen = true;
        }
        let isExternalLink = false;
        switch (act.jumpActOpenType) {
          case 0:
            if (!isExternalLink) {
              params.isCurrentPageOpen = true;
              // this.openNewpage(params)
              this.$emit("openNewpage", params);
              this.runAfterAction(act.id, act.type, "", "", act);
            }
            break;
          case 1:
            this.isJumpForm = true;
            if (!isExternalLink) {
              params.isPopupLayerDisplay = true;
              this.jumpParams = params;
              this.jumpPopup = true;
              this.popupLayerType = "VIEW";
              this.runAfterAction(act.id, act.type, "", "", act);
            } else {
              this.jumpParams = params;
              this.jumpPopup = true;
            }
            break;
          case 2:
            if (!isExternalLink) {
              this.$emit("add-tab", params);
              this.runAfterAction(act.id, act.type, "", "", act);
            }
            break;
          case 3:
            if (!isExternalLink) {
              params.isOpenNewWindow = true; //鍒ゆ柇鏄柊绐楀彛鎵撳紑
              let routeData = this.$router.resolve({
                // name: "form_blank",
                name: "open",
                query: params,
              });
              window.open(routeData.href, "_blank");
              this.runAfterAction(act.id, act.type, "", "", act);
            }
            break;
          case 4:
            break;
          default:
            break;
        }
      } else if (act.jumpMode === 1) {
        let subSelects = this.subSelects;
        let subSelectId = "";
        if (subSelects && subSelects.length > 0) {
          subSelectId = subSelects.join(";");
        }
        this.$api.runScript(
          this.openParams.appId,
          act.id,
          this.buildFormData().id,
          "dispatcherUrl",
          "",
          subSelectId,
          {
            onSucess: (res) => {
              if (res.data.errcode === 0) {
                this.isBlockClick = false;
                let url = res.data.data;
                let urlParams = "";
                if (url.indexOf("?") > -1) {
                  urlParams = url.split("?")[1];
                }
                let isForm = url.search("form.html") != -1;
                let isView = url.search("view.html") != -1;
                let isOpenCurrentSoftwareData = url.search("open?") != -1;

                let urlArrayF = url.split("?");
                let urlArray = "";
                if (urlArrayF[1]) {
                  urlArray = urlArrayF[1].split("&");
                }

                this.isJumpForm = isForm;
                this.isJumpView = isView;
                let type = "";
                let isExternalLink = false;

                if (isForm) {
                  type = "00";
                } else if (isView) {
                  type = "01";
                } else if (!isForm && !isView && !isOpenCurrentSoftwareData) {
                  isExternalLink = true;
                  this.isExternalLink = true; //鍒ゆ柇鏄惁鏄閮ㄩ摼鎺�
                }
                let params = {
                  linkType: type,
                  appId: this.openParams.appId,
                  actionContent: "",
                  name: act.name,
                  _select: "",
                  viewId: "",
                };
                if (_op.isOpenNewWindow == "true") {
                  params.isCurrentPageOpen = true;
                }
                let obj = {};
                if (urlArray && urlArray.length > 0) {
                  for (let i = 0; i < urlArray.length; i++) {
                    let val = urlArray[i].split("=");
                    obj[val[0]] = val[1];
                  }
                }
                switch (act.jumpActOpenType) {
                  case 0: //褰撳墠椤垫墦寮€
                    if (!isExternalLink) {
                      if (isOpenCurrentSoftwareData) {
                        //濡傛灉澶栭摼褰㈠紡杩樻槸鎵撳紑浜у搧鐨勬帶浠讹紝閭d箞涓嶇敤iframe鐨勬柟娉曞祵濂�
                        if (_op.exparams) {
                          obj.exparams = _op.exparams;
                        }

                        obj.name = act.name;
                        obj.isCurrentPageOpen = true;
                        // this.$emit("openNewpage",obj)
                        this.openNewpage(obj);
                      } else {
                        params = {
                          linkType: type,
                          appId: this.openParams.appId,
                          actionContent: obj.viewId ? obj.viewId : obj.formId,
                          name: act.name,
                          _select: obj.docid ? obj.docid : "",
                          viewId: "",
                          clearTemp: obj.clearTemp ? obj.clearTemp : "",
                          isCurrentPageOpen: true,
                        };
                        if (urlParams) {
                          params.urlParams = urlParams;
                        }
                        // this.$emit("openNewpage",params)
                        this.openNewpage(obj);
                      }
                    } else {
                      params = {
                        linkType: "103",
                        appId: this.openParams.appId,
                        actionContent: url,
                      };
                      this.$emit("openNewpage", params);
                      this.runAfterAction(act.id, act.type, "", "", act);
                    }
                    break;
                  case 1: //寮瑰嚭绐楁墦寮€
                    if (!isExternalLink) {
                      if (isOpenCurrentSoftwareData) {
                        let formParams = "";
                        for (let key in obj) {
                          if (
                            key != "name" &&
                            key != "actionContent" &&
                            key != "searchData" &&
                            key != "showtype" &&
                            key != "realformId" &&
                            key != "templateForm" &&
                            key != "urlParams" &&
                            key != "exparams" &&
                            key != "runAfterParams" &&
                            key != "queryString" &&
                            key != "isOpenDialog"
                          ) {
                            if (obj[key]) {
                              formParams += "&" + key + "=" + obj[key];
                            }
                          }
                        }
                        if (_op.exparams) {
                          if (formParams) {
                            formParams = formParams + "" + _op.exparams;
                          } else {
                            formParams = _op.exparams;
                          }
                        }
                        if (formParams) {
                          obj.formParams = formParams;
                        }
                        obj.name = act.name;
                        obj.isPopupLayerDisplay = true;
                        if (obj.linkType == "00") {
                          //琛ㄥ崟
                          this.isJumpForm = true;
                        } else if (obj.linkType == "01") {
                          //瑙嗗浘
                          this.isJumpView = true;
                          this.popupLayerType = "VIEW";
                        }
                        if (obj.isRefresh && obj.isRefresh == "true") {
                          this.isDialogOpenExternalLink = true;
                        }
                        this.jumpParams = obj;
                      } else {
                        params = {
                          linkType: type,
                          appId: this.openParams.appId,
                          actionContent: obj.viewId ? obj.viewId : obj.formId,
                          name: act.name,
                          _select: obj.docid ? obj.docid : "",
                          viewId: "",
                          clearTemp: obj.clearTemp ? obj.clearTemp : "",
                          isPopupLayerDisplay: true, //寮瑰嚭灞傛墦寮€
                        };
                        if (urlParams) {
                          params.urlParams = urlParams;
                        }
                        this.jumpParams = params;
                        this.popupLayerType = "VIEW";
                      }
                      this.jumpPopup = true;
                    } else {
                      params = {
                        linkType: "103",
                        appId: this.openParams.appId,
                        actionContent: url,
                        name: act.name,
                        _select: obj.docid ? obj.docid : "",
                        viewId: "",
                        clearTemp: obj.clearTemp ? obj.clearTemp : "",
                      };
                      if (obj.isRefresh && obj.isRefresh == "true") {
                        this.isDialogOpenExternalLink = true;
                      }
                      this.jumpParams = params;
                      this.jumpPopup = true;
                      this.runAfterAction(act.id, act.type, "", "", act);
                    }
                    break;
                  case 2: //椤电鎵撳紑
                    if (!isExternalLink) {
                      if (isOpenCurrentSoftwareData) {
                        if (_op.exparams) {
                          obj.exparams = _op.exparams;
                        }
                        obj.name = act.name;
                        this.addTab(obj);
                      } else {
                        params = {
                          linkType: type,
                          appId: this.openParams.appId,
                          actionContent: obj.viewId ? obj.viewId : obj.formId,
                          name: act.name,
                          _select: obj.docid ? obj.docid : "",
                          viewId: "",
                          clearTemp: obj.clearTemp ? obj.clearTemp : "",
                        };
                        if (urlParams) {
                          params.urlParams = urlParams;
                        }
                        // this.$emit("add-tab", params);
                        this.addTab(params);
                      }
                    } else {
                      params = {
                        linkType: "103",
                        appId: _op.appId,
                        actionContent: url,
                        name: act.name,
                        isExternalLink: true, //url鏄墦寮€opener缁勪欢锛屽垽鏂槸澶栭摼銆�
                        refreshId: _op.id, //鍒ゆ柇鏄惁寰楀埛鏂�
                      };
                      this.$emit("add-tab", params);
                      this.runAfterAction(act.id, act.type, "", "", act);
                    }
                    break;
                  case 3: //鏂扮獥鍙f墦寮€
                    if (!isExternalLink) {
                      params = {
                        linkType: type,
                        appId: this.openParams.appId,
                        actionContent: obj.viewId ? obj.viewId : obj.formId,
                        name: act.name,
                        _select: obj.docid ? obj.docid : "",
                        viewId: "",
                        clearTemp: obj.clearTemp ? obj.clearTemp : "",
                      };
                      if (urlParams) {
                        params.urlParams = urlParams;
                      }
                      if (isForm) {
                        let routeData = this.$router.resolve({
                          // name: "form_blank",
                          name: "open",
                          query: params,
                        });
                        window.open(routeData.href, "_blank");
                      } else if (isView) {
                        let routeData = this.$router.resolve({
                          name: "view_blank",
                          query: params,
                        });
                        window.open(routeData.href, "_blank");
                      } else if (isOpenCurrentSoftwareData) {
                        url += "&isOpenNewWindow=true";
                        window.open(url);
                      }
                    } else {
                      window.open(url, "_blank");
                      this.runAfterAction(act.id, act.type, "", "", act);
                    }
                    break;
                  case 4:
                    break;
                  default:
                    break;
                }
              }
            },
          }
        );
      }
    },

    //鎵ц鍓嶈剼鏈繑鍥炴垚鍔熷悗锛屾墽琛�
    execute({ actId, formData, act }) {
      if (act.actionSelection === 0) {
        let params = {
          docId: formData.docId,
          viewId: formData.viewId ? formData.viewId : "",
          formId: formData.formId,
          _templateForm: formData.templateForm ? formData.templateForm : "",
          parentId: formData.parentId ? formData.parentId : "",
        };
        let obj = JSON.parse(JSON.stringify(formData));
        obj.document.exparams = {};
        delete obj.subDocuments;
        delete obj.versions;
        delete obj.sign;
        let appId = this.openParams.appId;
        API.executeCustom(appId, actId, obj, params, {
          onSucess: (res) => {
            console.log(res);
            let errcode = res.data.errcode;
            if (errcode == 0) {
              let errmsg = act.name + this.$t("success");
              this.promptBox(errcode, errmsg);
              let obj = {
                docId: "",
                appId: this.openParams.appId,
                viewId: act.parentForm,
                opentarget: "",
                containTitle: this.formdata.formTemplate.formName,
                field: "",
                isRelate: undefined,
                parentId: "",
              };
              this.$api.getAxecuteAddress(this.openParams.appId, act.id, obj, {
                onSucess: (res) => {
                  if (res.data.errcode === 0) {
                    let resData = res.data.data;
                    if (resData && resData.type == 16) {
                      let isOpenCurrentSoftwareData =
                        resData.content.search("open?") != -1;
                      if (isOpenCurrentSoftwareData) {
                        let urlArrayF = resData.content.split("?");
                        let urlArray = "";
                        if (urlArrayF[1]) {
                          urlArray = urlArrayF[1].split("&");
                        }
                        let obj = {};
                        if (urlArray && urlArray.length > 0) {
                          for (let i = 0; i < urlArray.length; i++) {
                            let val = urlArray[i].split("=");
                            obj[val[0]] = val[1];
                          }
                        }
                        obj.name = act.name;
                        this.$emit("add-tab", obj);
                      } else {
                        let params = {
                          linkType: "103",
                          appId: this.openParams.appId,
                          actionContent: resData.content,
                          name: act.name,
                          _select: "",
                          viewId: "",
                        };
                        this.$emit("add-tab", params);
                      }
                    }
                    // if(resData.content&&resData.content.indexOf('processHtmlTem.html')>-1){
                    //       API.softwareApplication(appId,{
                    //           onSucess:res=>{
                    //               console.log("11111111")
                    //               console.log(res)
                    //               let errcode = res.data.errcode;
                    //                 if(errcode == 0) {
                    //                     let software=JSON.stringify(res.data.data)
                    //                     console.log('缂栬緫娴佺▼end')
                    //                     sessionStorage.setItem('appId',this.openParams.appId)
                    //                     sessionStorage.setItem('software',software)

                    //                 }
                    //           }
                    //       })
                    // }

                    this.runAfterAction(actId, act.type, "", "", act);
                  }
                },
              });
            } else {
              let errmsg = response.data.errmsg;
              this.promptBox(errcode, errmsg);
            }
          },
        });
      } else if (act.actionSelection === 1) {
        let obj = {
          appId: this.openParams.appId,
          actionContent: this.openParams.actionContent,
          _select: "",
          relatedFormId: act.relatedFormId,
          opentarget: "detail",
        };
        this.newOpenParams = obj;
        this.customMessagePopup = true;
      }

      // API.executeCustom(
      //   appId,
      //   divId,
      //   formData,
      //   {
      //     onSucess: response => {
      //       let errcode = response.data.errcode;
      //       if(errcode == 0) {
      //         if(act.actionSelection == 0) {
      //           let obj = {
      //             docId: '',
      //             appId: this.openParams.appId,
      //             viewId: act.parentForm,
      //             opentarget: '',
      //             containTitle: this.formdata.formTemplate.formName,
      //             field:'',
      //             isRelate: undefined,
      //             parentId:'',
      //           };
      //           this.$api.getAxecuteAddress(
      //             this.openParams.appId,
      //             act.id,
      //             obj,
      //             {
      //               onSucess: res => {
      //                 if(res.data.errcode === 0) {
      //                   let resData = res.data.data;
      //                   if(resData.type == 16) {
      //                     let params = {
      //                       linkType: '103',
      //                       appId: this.openParams.appId,
      //                       actionContent: resData.content,
      //                       name: act.name,
      //                       _select: '',
      //                       viewId: '',
      //                     };
      //                     this.$emit("add-tab", params);
      //                   }

      //                 }
      //               }
      //             }
      //           )
      //         }else {
      //           let errmsg = "鎴愬姛锛�";
      //           this.promptBox(errcode, errmsg);
      //         }
      //       }else {
      //         let errmsg = response.data.errmsg
      //         this.promptBox(errcode, errmsg);
      //       }
      //     }
      //   }
      // )

      // if(act.actionSelection === 0) {
      // }else if(act.actionSelection === 1) {
      //   let obj = {
      //     appId: this.openParams.appId,
      //     actionContent: this.openParams.actionContent,
      //     _select: '',
      //     relatedFormId: act.relatedFormId,
      //     opentarget: "detail"
      //   }
      //   this.newOpenParams = obj;
      //   this.customMessagePopup = true;
      // }else {

      // }
    },

    //杩斿洖鎴愬姛鎴栧け璐ユ椂鐨勬彁绀烘
    promptBox(errcode, errmsg, title) {
      let that = this;
      var p = new Promise(function (resolve) {
        if (errcode == 4001) {
          that.$notify({
            title: title,
            message: "",
            type: "warning",
          });
        } else if (errcode == 0) {
          that.$notify({
            title: errmsg,
            message: "",
            type: "success",
          });
          resolve("鎴愬姛");
        }
      });
      return p;
    },

    buildFormData() {
      let items = {};
      // 鍒ゆ柇濡傛灉娌℃湁鍊煎氨涓嶆墽琛�
      if (this.formdata.fields) {
        const loopOpe = (fields) => {
          for (let i = 0; i < fields.length; i++) {
            let fld = fields[i];
            if (fld.formField == "AttachmentUploadField") {
              let attachmentUploadVale = fld.value;
              let isJSON = this.isJSON(attachmentUploadVale);
              if (isJSON) {
                attachmentUploadVale = JSON.parse(attachmentUploadVale);
              }
              if (attachmentUploadVale) {
                attachmentUploadVale.forEach((item) => {
                  item.isEdit = false;
                });
              }
            }
            if (
              fld.name &&
              fld.value != undefined &&
              fld.formField != "ButtonField" &&
              fld.displayType != undefined
            ) {
              if (fld.textType == "hidden" && fld.value) {
                items[fld.name] = fld.value;
              } else if (fld.textType != "hidden") {
                items[fld.name] = fld.value;
              }
              if (fld.textType == "hidden" && !fld.value) {
                if (fld.isUpdatedValue) {
                  //杩欓噷閽堝瑙嗗浘閫夋嫨妗� 闅愯棌骞朵笖娌″€兼椂锛屼絾鏈夐€夎繃鍊硷紝涔熻鎶婅繖涓睘鎬т紶鍒板悗鍙�
                  items[fld.name] = "";
                }
              }
            }
            if (fld.addInTtems) {
              items[fld.name] = fld.value;
            }
            if (fld.tabs && fld.tabs.length > 0) {
              fld.tabs.forEach((tab) => {
                if (tab.fields) {
                  loopOpe(tab.fields);
                }
                if (tab.type == "view" && tab.openType == 288) {
                  //閫夐」鍗℃墦寮€缃戞牸瑙嗗浘
                  this.haveViewGridview = true;
                }
              });
            }
          }
        };
        loopOpe(this.formdata.fields);
      }
      return {
        applicationId: this.openParams.appId,
        formId: this.formdata.formId,
        id: this.formdata.docId,
        items: items,
        parentId: "",
        sign: "",
        subDocuments: [],
        versions: "0",
      };
    },

    showSendMailOrSmsFlowpanel(act) {
      this.isBlockClick = false;
      this.flowProcessAct = act;
      this.sendMailVisible = true;
    },

    flowHandle(act) {
      if (this.flowDialogVisible) {
        this.flowDialogVisible = false;
        return;
      }
      if (act.type == 5) {
        this.flowProcessAct = act;
        this.flowDialogVisible = true;
      } else if (
        act.type == 47 || //鍥為€€娴佺▼
        act.type == 33 || //娴佺▼鍚姩
        act.type == 48 || //娴佺▼鍌姙
        act.type == 55 || //鐐硅瘎
        act.type == 56 || //琛ョ
        act.type == 57 || //鍔犵涓诲姙
        act.type == 58 //鍔犵涓诲姙
      ) {
        if (act) {
          this.flowProcessAct = act;
        }
        this.flowDialogVisible = true;
        if (act.type == 56 || act.type == 55 || act.type == 33) {
          //琛ョ鍜岀偣璇勫拰娴佺▼鍚姩
          this.isShowHandSign = false;
          this.isShowKeyboard = false;
        }
        if (act.type == 47) {
          act.flowType = "81";
        }
      } else if (act.type == 37) {
        //鍙戦€侀偖浠舵垨鑰呯煭淇�
        this.flowProcessAct = act;
        this.sendMailVisible = true;
      } else if (act.type == 52) {
        //缁堟娴佺▼
        if (act) {
          this.flowProcessAct = act;
        }
        if (act.workFlowType == 1) {
          //鑷敱娴佺▼
          this.flowDialogVisible = true;
        } else {
          this.terminationVisible = true;
        }
      } else if (act.type == 53) {
        //缂栬緫娴佺▼瀹℃壒浜�
        if (act) {
          this.flowProcessAct = act;
        }
        this.allowEditApprover = true;
        this.approverVisible = true;
      }
    },

    //鎻愪氦鎴愬姛鎴栬€呭け璐ュ悗鍏抽棴娴佺▼鎻愪氦闈㈡澘鎴栬€呮祦绋嬮€€鍥為潰鏉�
    closeThePopup(status, isClose) {
      const isFlowPanel = true;
      if (isClose) {
        this.flowDialogVisible = false; //娴佺▼鎻愪氦闈㈡澘
        this.goBack();
      } else if (status == "SUCCESS" && !isClose) {
        let _op = this.openParams;
        if (_op.isOpenNewWindow == "true") {
          //鏂扮獥鍙f墦寮€锛屽欢杩熶竴涓嬫樉绀烘彁绀哄啀鍏抽棴
          setTimeout(() => {
            this.flowDialogVisible = false; //娴佺▼鎻愪氦闈㈡澘
            this.goBack("", "", isFlowPanel);
          }, 800);
        } else {
          this.flowDialogVisible = false; //娴佺▼鎻愪氦闈㈡澘
          this.isShowKeyboard = true;
          this.goBack("", "", isFlowPanel);
        }
      } else if (status == "ERROR" && !isClose) {
        this.flowDialogVisible = false;
      } else {
        this.flowDialogVisible = false; //娴佺▼鎻愪氦闈㈡澘
        this.sendMailVisible = false;
        this.isShowHandSign = true;
        this.isShowKeyboard = true;
        setTimeout(() => {
            this.flowDialogVisible = false; //娴佺▼鎻愪氦闈㈡澘
            this.goBack("", "", isFlowPanel);
          }, 800);
       
      }
    },

    //鎸囧畾瀹℃壒浜烘椂鏄剧ず鐢ㄦ埛鏄剧ず鐢ㄦ埛閫夋嫨妗�
    designatedApprover(
      approversObj,
      flowId,
      isFreeFlow,
      saveApprover,
      approverNumType,
      isAppentCirculator
    ) {
      this.isAppentCirculator = isAppentCirculator; //鏄惁鐭ラ亾娴佺▼鎶勯€佷汉
      this.approversObj = approversObj;
      this.flowId = flowId;
      this.isFreeFlow = isFreeFlow; //鍒ゆ柇鏄惁鏄嚜鐢辨祦绋�
      this.saveApproverStatus = saveApprover;
      this.approverNumType = approverNumType;
      this.approverVisible = true;
      this.isSubFlow = false;
    },

    // 鍔犵涓诲姙鎴栬€呭姞绛惧崗鍔炴湁鏁版嵁锛屾樉绀哄湪鐢ㄦ埛閫夋嫨妗�
    getProcessHosting(list) {
      this.processHostingList = list;
      this.approverVisible = true;
    },

    //鎸囧畾瀹℃壒浜哄悗鏄剧ず鍦ㄦ祦绋嬪鐞嗛潰鏉夸笂
    selectApprover(approverName, submitTo, nextUserId, isAppentCirculator) {
      if (!isAppentCirculator) {
        this.approverName = approverName;
      } else {
        this.cCname = approverName;
      }

      this.nextUserId = nextUserId;
      this.submitTo = submitTo;
      this.approverVisible = false;
    },

    closeApproverDialog(isRefresh) {
      if (isRefresh) {
        //
        // this.isRouterAlive= false;
        // this.$nextTick(() => (this.isRouterAlive= true));
        this.$parent.updateData();
      }
      this.approverVisible = false;
    },
    reloadApprover(act) {
      if (act.type == "51") {
        this.isRouterAlive = false;
        this.$nextTick(() => {
          this.isRouterAlive = true;
        });
      }
    },

    //鍥炴挙娴佺▼
    retracementWorkflow(actId, act) {
      let openParams = this.openParams;
      let appId = openParams.appId;
      let docId = openParams._select;
      this.$api.retracementWorkflow(appId, docId, {
        onSucess: (response) => {
          let errcode = "";
          let errmsg = "";
          if (response.data.data) {
            errcode = response.data.errcode;
            errmsg = response.data.data;
            this.runAfterAction(actId, "", "", "", act);
            this.$notify({
              title: this.$t("success"),
              message: errmsg,
              type: "success",
            });
            this.initForm({
              appId: openParams.appId,
              formId: openParams.actionContent,
              docId: openParams._select,
            });
            setTimeout(() => {
              this.reloadApprover(act); //鍥炴挙瑕侀噸鏂板姞杞芥祦绋嬬姸鎬�
            }, 500);
          } else {
            errcode = response.data.errcode;
            errmsg = response.data.errors[0].errmsg;
            if (errcode == 4001) {
              this.$notify({
                title: this.$t("msg.failure"),
                message: errmsg,
                position: "top-left",
              });
              // this.promptBox(errcode, errmsg, response.data.errors[0].errmsg);
            } else if (errcode == 0) {
              // this.promptBox(errcode, errmsg);
              this.$notify({
                title: this.$t("success"),
                message: errmsg,
                type: "success",
              });
              this.goBack();
            }
          }
        },
      });
    },

    //缁堟娴佺▼
    terminationWorkflow(act) {
      let errcode = "";
      let errmsg = "";
      if (act.data) {
        errcode = act.errcode;
        errmsg = act.data;
        this.promptBox(errcode, errmsg);
        this.goBack();
      } else {
        errcode = act.errcode;
        errmsg = act.errors[0].errmsg;
        if (errcode == 4001) {
          // this.promptBox(errcode, errmsg, act.errors[0].errmsg);
          this.$notify({
            title: this.$t("msg.failure"),
            message: errmsg,
            position: "top-left",
          });
        } else if (errcode == 0) {
          // this.promptBox(errcode, errmsg);
          this.$notify({
            title: this.$t("success"),
            message: errmsg,
            type: "success",
          });
          this.goBack();
        }
      }
    },

    //娴佺▼鎸傝捣
    suspendWorkflow() {
      let appId = this.openParams.appId;
      let docId = this.openParams._select;
      this.$api.suspendWorkflow(appId, docId, {
        onSucess: (response) => {
          let errcode = "";
          let errmsg = "";
          if (response.data.data) {
            errcode = response.data.errcode;
            errmsg = response.data.data;
            //this.promptBox(errcode, errmsg);
            this.$notify({
              title: this.$t("success"),
              message: errmsg,
              type: "success",
            });
            this.goBack();
          } else {
            errcode = response.data.errcode;
            errmsg = response.data.errors[0].errmsg;
            if (errcode == 4001) {
              //this.promptBox(errcode, errmsg, response.data.errors[0].errmsg);
              this.$notify({
                title: this.$t("msg.failure"),
                message: errmsg,
                position: "top-left",
              });
            } else if (errcode == 0) {
              //this.promptBox(errcode, errmsg);
              this.$notify({
                title: this.$t("success"),
                message: errmsg,
                type: "success",
              });
              this.goBack();
            }
          }
        },
      });
    },

    //瀛愭祦绋�-骞惰娴佺▼(鐢ㄦ埛閫夋嫨妗嗙殑寮圭獥)
    showSubFlowDialog(
      approversObj,
      flowId,
      isFreeFlow,
      saveApprover,
      approverNumType,
      isAppentCirculator,
      groupNum,
      subFlowGroup,
      isSubFlow
    ) {
      this.approversObj = approversObj;
      this.flowId = flowId;
      this.isFreeFlow = isFreeFlow; //鍒ゆ柇鏄惁鏄嚜鐢辨祦绋�
      this.saveApproverStatus = saveApprover;
      this.approverNumType = approverNumType;
      this.groupNum = groupNum; //瀛愭祦绋嬪皬缁勬暟閲�
      this.subFlowToApprover = subFlowGroup;
      this.isSubFlow = isSubFlow;
      this.approverVisible = true;
    },

    //瀛愭祦绋�-骞惰娴佺▼(鐢ㄦ埛閫夋嫨妗嗙殑寮圭獥)缁勪欢閫夋嫨鐨勭敤鎴锋彁浜ゅ埌娴佺▼闈㈡澘
    subflowDataTopanel(name, subObj, currentGroup, groupNum) {
      this.approverName = name;
      this.subFlowApproverData = subObj;
      this.subFlowGroup = currentGroup; //鏁版嵁淇濆瓨鍦ㄦ祦绋嬮潰鏉夸腑
      this.subFlowGroupNum = groupNum;
      this.approverVisible = false;
    },

    //娴佺▼鎭㈠
    recoveryWorkflow() {
      let appId = this.openParams.appId;
      let docId = this.openParams._select;
      this.$api.recoveryWorkflow(appId, docId, {
        onSucess: (response) => {
          let errcode = "";
          let errmsg = "";
          if (response.data.data) {
            errcode = response.data.errcode;
            errmsg = response.data.data;
            this.$notify({
              title: errmsg,
              message: "",
              type: "success",
            });
            this.goBack();
          } else {
            errcode = response.data.errcode;
            errmsg = response.data.errors[0].errmsg;
            if (errcode == 4001) {
              this.$notify({
                title: errmsg,
                message: "",
                position: "top-left",
              });
            } else if (errcode == 0) {
              this.$notify({
                title: errmsg,
                message: "",
                type: "success",
              });
              this.goBack();
            }
          }
        },
      });
    },

    //鍔犵娣诲姞瑙掕壊纭畾鍚�(瀛愮粍浠惰皟鐢�)
    selectHostOrCohost(data, obj) {
      this.newHostOrCohostList = data;
      this.saveApproverStatus = obj;
      this.approverVisible = false;
    },

    //淇濆瓨骞跺惎鍔ㄦ祦绋�
    saveStartWorkFlow(num, actId, act) {
      let appId = this.openParams.appId;
      let formData = {};
      formData.document = this.buildFormData();
      if (this.openParams.parentId) {
        formData.document.parentId = this.openParams.parentId;
      }
      this.$api.saveStartWorkFlow(appId, formData, {
        onSucess: (response) => {
          let errcode = "";
          let errmsg = "";
          if (response.data.data) {
            this.runAfterAction(actId, num, "", "", act);
            this.$notify({
              title: this.$t("success"),
              message: "",
              type: "success",
            });
          } else {
            errcode = response.data.errcode;
            errmsg = response.data.errors[0].errmsg;
            if (errcode == 4001) {
              this.$notify({
                title: errmsg,
                message: "",
                type: "error",
              });
            } else if (errcode == 0) {
              this.runAfterAction(actId, num, "", "", act);
              this.$notify({
                title: errmsg,
                message: "",
                type: "success",
              });
            }
          }
        },
      });
    },

    //閭欢鎴栫煭淇¢€氱煡锛屾墦寮€鐢ㄦ埛閫夋嫨妗�
    openUserDialg() { },
  },
};
</script>
<style lang="scss">
@import "../assets/kinggrid/dialog/kgDialog/ui-dialog.css";
@import "../assets/kinggrid/core/kinggrid.plus.css";
@import "../assets/kinggrid/core/kinggrid.plus.mobile.css";

.myapps-iframe {
  overflow: auto;
}

.el-notification {
  //this.$notify鎹㈣鏍峰紡
  white-space: pre-wrap !important;
}

// .active{
//   display: none;
// }

// table {
//   width:100%;
// }
</style>