workFrame.vue 8.94 KB
<template>
  <div class="container">
    <!-- 顶部内容框 -->
    <div class="topButton">
      <!-- 左侧业务功能按钮 -->
      <ul>
        <li
          @click="operation(index, item)"
          v-for="(item, index) in leftButtonList"
          :key="index"
        >
          <svg-icon :icon-class="item.icon" />
          <span class="iconName">{{ item.name }}</span>
        </li>
      </ul>
      <!-- 右侧流程按钮 -->
      <ul>
        <li
          @click="operation(index, item)"
          v-for="(item, index) in rightButtonList"
          :key="index"
        >
          <svg-icon class="icon" :icon-class="item.icon" />
          <span class="iconName">{{ item.name }}</span>
        </li>
      </ul>
    </div>
    <!-- 内容框架 -->
    <div id="ContainerFrame">
      <!-- 左侧菜单栏 -->
      <div id="leftmenu">
        <div class="title">申请单元列表({{ unitData.length }})</div>
        <el-menu default-active="0" @select="unitClick">
          <el-menu-item
            v-for="(item, index) in unitData"
            :index="index.toString()"
            :key="index"
          >
            <i>
              <p>{{ item.bdcdyh }}</p>
              <p>{{ item.zl }}</p>
            </i>
          </el-menu-item>
        </el-menu>
      </div>
      <!-- 分屏左侧预览 -->
      <div v-if="splitScreen" class="splitScreen-con">
        <component :is="clxxForm" v-bind="currentSelectProps" :key="fresh" />
      </div>
      <!-- 表单内容区域 -->
      <div id="rightContainer">
        <div class="tabDiv">
          <el-tabs v-model="tabName" @tab-click="tabClick">
            <el-tab-pane
              :label="item.name"
              :name="item.value"
              v-for="(item, index) in tabList"
              :key="index"
            >
            </el-tab-pane>
            <component
              :key="fresh"
              :is="componentTag"
              v-bind="currentSelectProps"
            />
          </el-tabs>
        </div>
      </div>
    </div>

    <!-- <zslqDialog ref="zslqDialog" v-model="zslqDialog" /> -->
  </div>
</template>

<style scoped lang='scss'>
@import "~@/styles/mixin.scss";
@import "./workFrame.scss";
</style>

<script>
import {
  leftMenu,
  stepExpandInfo,
  record,
  getNextLinkInfo,
  completeTask,
} from "@/api/fqsq.js";
import { getForm } from "./flowform.js";
import axios from "axios";
// import zc from "./components/zc.vue";
// import thDialog from "./components/th.vue";
// import zsylDialog from "./components/zsyl";
// import zslqDialog from "./components/zslq";
export default {
  // components: { zc, thDialog, zsylDialog, comMsg,zslqDialog},
  data() {
    return {
      //受理申请标识码
      bsmSlsq: this.$route.query.bsmSlsq,
      //当前流程所在环节
      bestepid: this.$route.query.bestepid,
      //顶部左侧按钮集合
      leftButtonList: [],
      //顶部右侧按钮集合
      rightButtonList: [],
      //左侧菜单数据集合
      unitData: [],
      //设置那个表单选中
      tabName: "",
      //表单集合
      tabList: [],
      //选择加载哪一个组件
      componentTag: "",
      //设置表单组件是否刷选值
      fresh: 10,
      //设置表单传递数据
      currentSelectProps: {},
      //是否开启材料分屏
      splitScreen: false,
      //材料分屏表单
      clxxForm: "",
      //材料信息选择卡索引
      clxxIndex: "",
      //材料信息选项卡对象
      clxxTab: {},
    };
  },
  mounted() {
    this.loadBdcdylist();
    this.flowInitParam();
  },
  methods: {
    //加载流程初始参数
    flowInitParam() {
      var formdata = new FormData();
      formdata.append("bsmSlsq", this.bsmSlsq);
      formdata.append("bestepid", this.bestepid);
      stepExpandInfo(formdata).then((res) => {
        if (res.code === 200) {
          this.leftButtonList = res.result.button;
          this.rightButtonList = res.result.operation;
          this.tabList = res.result.form;
          //默认选择第一个选项卡内容
          this.tabName = res.result.form[0].value;
          let that = this;
          this.tabList.forEach(function (item, index) {
            if (item.value == "clxx") {
              that.clxxIndex = index;
              that.clxxForm = getForm(item.value);
              that.clxxTab = item;
            }
          });
          //默认加载第一个选项卡的组件内容
          this.getFromRouter(res.result.form[0].value);
        }
      });
    },
    //流程环节操作按钮
    operation(index, item) {
      let that = this;
      switch (item.value) {
        case "zsyl":
          this.zsylFlag = true;
          break;
        case "clfp": //材料分屏按钮
          this.splitScreen = this.splitScreen ? false : true;
          if (this.splitScreen) {
            //如果当前选项卡为材料信息内容,递减到上一个选项卡内容
            if (this.tabName == this.clxxTab.value) {
              this.tabName = this.tabList[this.clxxIndex - 1].value;
              this.getFromRouter(this.tabList[this.clxxIndex - 1].value);
            }
            this.tabList.splice(this.clxxIndex, 1);
          } else {
            this.tabList.splice(this.clxxIndex, 1, this.clxxTab);
          }
          break;
        case "th": //退回按钮
          // this.thflag = true;
          // this.$nextTick(() => {
          //   this.$refs.thdialogRef.tablelistFn();
          // });
          break;
        case "zc": //转件按钮
          getNextLinkInfo({
            bsmSlsq: this.bsmSlsq,
            bestepid: this.bestepid,
          }).then((res) => {
            if (res.code === 200) {
              this.send(res.result);
            }
          });
          //  this.$alert(res.result);

          break;
        case "tc":
          window.close();
          break;
        case "db":
          var formdata = new FormData();
          formdata.append("bsmSlsq", this.bsmSlsq);
          formdata.append("bestepid", this.bestepid);
          // comMsg;
          this.$confirm("请确认是否登簿", "提示", {
            iconClass: "el-icon-question", //自定义图标样式
            confirmButtonText: "确认", //确认按钮文字更换
            cancelButtonText: "取消", //取消按钮文字更换
            showClose: true, //是否显示右上角关闭按钮
            type: "warning", //提示类型  success/info/warning/error
          }).then(function () {
            record(formdata).then((res) => {
              if (res.code === 200 || res.code === 2002) {
                that.$alert(res.message);
              }
            });
          });
          break;
      }
    },
    //读取申请单元信息
    loadBdcdylist() {
      var formdata = new FormData();
      formdata.append("bsmSlsq", this.bsmSlsq);
      formdata.append("bestepid", this.bestepid);
      leftMenu(formdata).then((res) => {
        if (res.code === 200) {
          this.unitData = res.result;
          this.currentSelectProps = res.result[0];
        }
      });
    },
    //申请单元点击事件
    unitClick(index) {
      if (this.currentSelectProps.bsmSldy != this.unitData[index].bsmSldy) {
        this.currentSelectProps = this.unitData[index];
        this.fresh += 1;
      }
    },
    //表单选项卡事件
    tabClick(tab, event) {
      //this.$alert(tab.name);
      this.getFromRouter(tab.name);
    },
    //切换选项卡内容组件
    getFromRouter(tabname) {
      this.componentTag = getForm(tabname);
    },
    //发送下一个环节
    send(obj) {
      const h = this.$createElement;
      this.$msgbox({
        title: "您确定转出吗?",
        message: h("div",  { style: "margin: auto" }, [
          h("span", null, "下个环节名称:"),
          h("i", { style: "color: teal" }, obj.taskName),
          h("div", null, ""),
          h("span", null, "下个环节经办人: "),
          h("i", { style: "color: teal" }, obj.usernames.join(",")),
        ]),
        showCancelButton: true,
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        beforeClose: (action, instance, done) => {
          if (action === "confirm") {
            instance.confirmButtonLoading = true;
            instance.confirmButtonText = "执行中...";
            completeTask({
            bsmSlsq: this.bsmSlsq,
            shyj: "this.bestepid",
          }).then((res) => {            
              if (res.code === 200) {
                instance.confirmButtonLoading = false;
                this.$message.success("转件成功");
                setTimeout(() => {
                  window.opener = null;
                  window.open("about:blank", "_self");
                  window.close();
                  this.$emit("input", false);
                }, 1000);
              }
            });
          } else {
            done();
          }
        },
      }).then((action) => {
        this.$message({
          type: "info",
          message: "action: " + action,
        });
      });
    },
  },
};
</script>