<template>
  <div v-loading="loading" class="market-container">
    <iframe id="companyIframe" class="market-iframe" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" width="100%" :src="src" />
  </div>
</template>

<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
import { encodeStr } from "@/assets/js/common";
import MaxPageSizeTip from "@/views/components/MaxPageSizeTip.vue";
import { getUipIdByCid } from '@/api/macro/macro';
export default {
  name: 'Enterprise',
  components: {
    MaxPageSizeTip
  },
  data() {
    return {
      encodeStr,
      loading: false, // 是否加载完成-当前页控制
      iframeTimer: '',  // 是否加载中定时器-当前页控制
      footHeight: 0,  //底部高度，若为0（页面内部嵌套或者没有底部板块）
      iframeHight: `${window.innerHeight}px`, // iframe高度-当前页控制
      navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 },  // iframe之外页面顶部对象，ifFixed:是否浮动；fixedHeight：浮动对象高度；totalHeight：顶部整体高度
      src: '',  //iframe嵌套页面地址
      domain: 'https://plug.jiansheku.com', // 插件地址
      // domain: 'https://pre-plug.jiansheku.com', // 插件地址测试
      // domain: 'http://192.168.60.104:3400',
      ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId
      timelongs: 7200,//刷新token时间
      tokentimer: null,
      showMaxPageTip: false,
      iframeIns: null,
    };
  },
  created() {
    this.domain = process.env.VUE_APP_SUB_SYSTEM_ADDRESS;
    this.gettokens();
    this.iframeObserver();
    let that = this;
    window.addEventListener("message", this.pagecapListener, { passive: true });
    window.addEventListener('message', this.linkListener, false);
  },
  mounted() {
    this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制
    // steerScroll('companyIframe', this.navigation, this.footHeight, true); // iframeId: iframe的id；navigation:页面排除iframe后剩下的顶部高度；footHeight: 页面排除iframe后剩下的底部高度；state:监听or移除监听；parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例（可忽略）
  },
  beforeDestroy() {
    clearInterval(this.iframeTimer); // -当前页控制
    steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id；navigation:页面排除iframe后剩下的顶部高度；footHeight: 页面排除iframe后剩下的底部高度；state:监听or移除监听；parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例（可忽略）
    clearInterval(this.tokentimer);
    window.removeEventListener("message", this.pagecapListener, { passive: true });
    window.removeEventListener("message", this.linkListener);
    // 移除layout样式
    this.iframeIns?.contentWindow ? this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, }) : null;
  },
  methods: {
    linkListener(event) {
      let { data, origin } = event;
      if (origin != this.domain) return;
      if (data.id) {
        getUipIdByCid([data.id]).then(res => {
          if (res.code == 200) {
            if (res.data && res.data.length > 0 && res.data[0].uipId) {
              this.$router.push({ path: '/enterprise/' + this.encodeStr(data.id) });
            } else {
              this.$tab.openPage(data.title, '/company/' + this.encodeStr(data.id));
            }

          }
        }).catch(error => {

        });
      } else {
        if (data.url) {
          this.$tab.openPage(data.title, data.url);
        }
      }
    },
    async iframeObserver() {
      try {
        await this.$nextTick();
        this.iframeIns = document.querySelector(".market-iframe");
      } catch (error) {
        console.log(error);
      }
    },
    // 列表翻页上限
    pagecapListener(e) {
      const { origin, data } = e;
      if (origin != this.domain) return;
      if (data == "pageCurrentMaxSize") {
        this.$maxTip("您可通过筛选工具来查询数据～若有更多需求请联系客服 0262798729！").then(({ done, uid }) => {
          done();
        });
      }
    },
    gettokens() {
      dskAccessToken().then(res => {
        if (res.code == 200) {
          this.timelongs = res.data.expire;
          this.ak = res.data.accessToken;
          this.src = `${this.domain}/search/market?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`;
          this.refreshtoken();
        } else {
          clearTimeout(this.tokentimer);
        }
      });
    },
    refreshtoken() {
      this.tokentimer = setTimeout(() => {
        dskAccessToken().then(res => {
          if (res.code == 200) {
            this.timelongs = res.data.expire;
            this.ak = res.data.accessToken;
            let ifam = document.getElementById('companyIframe');	//iframe的id
            let akObj = res.data.expire;	//accessToken接口的返回值
            let initTime = new Date().getTime(); 	//accessToken接口返回后的当前时间戳
            ifam.contentWindow.postMessage({ 'accessToken': akObj.accessToken, 'initTime': initTime }, '*');
          } else {
            clearTimeout(this.tokentimer);
          }
        });
      }, this.timelongs * 1000);
    },
    //判断iframe页面是否加载完成-当前页控制
    iframeLoading() {
      let iframeHeight = document.getElementById("companyIframe").clientHeight, number = 0;
      this.iframeTimer = setInterval(() => {
        number++;
        if (document.getElementById("companyIframe").clientHeight != iframeHeight || number == 5000) {
          this.loading = false;
          clearInterval(this.iframeTimer);
        }
      });
    }
  }
};
</script>

<style lang="scss" scoped>
.market-container {
  width: 100%;
  height: 100%;
  padding: 16px 24px;
  padding-right: 15px;
  box-sizing: border-box;
  position: absolute;
  left: 0;
  top: 0;

  .market-iframe {
    width: 100%;
    height: 100%;
  }
}
</style>
