08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiBirt / App.vue
<script>
// import HcPage from "./components/Birt/Page";
// import { BirtModelFactory } from "./templates/BirtModelFactory";
import cmps from 'zhc-birt-cmps'
import { LoadUtil } from "./funclib/LoadUtil";
import { getToken } from "./utils/auth";
// import { Tool } from "./funclib/Tool";
import { projectName, requestUrl } from "@birt/config";
// import 'echarts-liquidfill/src/liquidFill.js'
export default {
  extends: cmps.BirtPage,
  data() {
    return {
      birtModel: {},
      VUE_APP_BASE_API: requestUrl,
      pn: projectName || "birt",
    };
  },
  watch: {
    // $route() {
    //   this.loadBirtModel(this.$route.path);
    // },
  },
  methods: {
    // 动态加载报表模型方法
    birtModelMethod(routePath, birtModelMethod, scope) {
      return new Promise((resolve, reject) => {
        let me = this;
        let token = getToken();
        // let token = '3d3fe30c-3d99-41e8-9aea-addd8528aa07'
        // let vId = this.getQueryVariable('viewItemId')
        let vId = window.scpRequestData && window.scpRequestData.__viewItemId
        LoadUtil.loadJsBirtModel({
          loadModelUrl: this.$HI.birtModel,
          routePath: routePath,
          token: token,
          pn: this.pn,
          vId: vId
        })
          .then(() => {
            try {
              if(!window.getBirtModel){
                me.$message.warning("model1接口未响应,请稍等")
                return
              }
              let birtModel = cmps.BirtModelFactory.buildModel(
                getBirtModel(scope || me, cmps.Tool),scope || me
              );
              if(birtModel.css){
                let css = birtModel.css
                if(Array.isArray(css) && css.length > 0){
                  css.forEach(c =>{
                    LoadUtil.loadCss(c)
                  })
                }
                if(typeof css == 'string'){
                  LoadUtil.loadCss(css)
                }
              }
              birtModel.token = token;
              birtModel.birtModelMethod = birtModelMethod;
              resolve(birtModel);
            } catch (e) {
              console.error(e);
            }
          })
          .catch(() => {
            reject();
          });
      });
    },
    loadBirtModel(routePath) {
      return new Promise((resolve, reject) => {
        let me = this;
        this.birtModelMethod(routePath, this.birtModelMethod)
          .then((birtModel) => {
            me.birtModel = birtModel;
            /**
             *网络环境比较差的情况下,打开查找定义model1接口未响应时,
             再次打开查找定义弹框,会应用已加载的getBirtModel,
             导致打开的弹框显示的是上个model1加载的页面,故这边删去挂载在window的getBirtModel方法
             *   */ 
            me.$nextTick(() =>{
              if(window.getBirtModel){
                window.getBirtModel = undefined
              }
            })
            me.applyRouteParam();
            me.setWorkBookParam();
            resolve();
          })
          .catch(() => {
            reject();
          });
      });
    },
    // 获取地址栏参数
    getQueryVariable(variable) {
      var query = window.location.search.substring(1);
      var vars = query.split("&");
      for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
          return pair[1];
        }
      }
      return false;
    },
    _needsDecodeURI(str) {  
      // 使用正则表达式检查字符串是否包含%字符  
      return /%[0-9A-F]{2}/i.test(str);  
    },
  },
  mounted() {
    var path = window.location.pathname;
    // 编译后多e5
    if (window.HIVUI_SETTING) {
      var serverName = window.HIVUI_SETTING.serverName;
      if (serverName && path.startsWith(serverName)) {
        path = path.substring(serverName.length);
      }
    }
    var __push = window && window.scpRequestData && window.scpRequestData.__push
    if(__push){
      if (this._needsDecodeURI(__push)) {
        __push = decodeURI(__push);
      }
      this.param["__push"] = JSON.parse(__push);
    }
    //     var _push = window.scpRequestData
    // var path = '/platf/user-info/func/query.func'
    this.loadBirtModel(path).then(() => {
      // if (path == "/platf/permission/func/assign.func") this.getOrgData(-1);
      // else if (path == "/platf/permission/func/modify.func")
      //   this.getOrgDataM(-1);
    });
  },
};
</script>
<style>
html,body{
  height: 100%;
}
</style>