<template>
  <view class="container industry-content" id="industry-content">
    <view v-if="haveData">
      <view class="content-top">
        <view class="top-bg">
          <!-- 详情封面图 -->
          <image :src="industryVideo.DetailImgUrl" class="industry-video-poster" v-show="industryVideo.Id && industryVideo.DetailImgUrl && !havePlayed" @click="handelVideoPlay"></image>
          <!-- 视频 -->
          <video :src="industryVideo.ResourceUrl" class="industry-video" id="industry-video" v-show="industryVideo.ResourceUrl && (havePlayed || !industryVideo.DetailImgUrl)" controls></video>
          <view class="top-bg-title" :style="{ height: industryVideo.Id ? '70rpx' : '99rpx', 'background-color': industryVideo.Id ? 'white' : '#d1ebff' }">产业赛道布局于{{ layoutTime }}</view>
        </view>
        <!-- industryVideo.ResourceUrl -- 视频url -->
        <view class="top-box" :style="{ top: industryVideo.Id ? '418rpx' : '99rpx' }">
          <view class="top-tab-cont">
            <view class="tab-cont">
              <scroll-view scroll-x="true" scroll-with-animation class="scroll-tab" :scroll-into-view="'_' + tabIndex">
                <block v-for="(item, index) in tabBars" :key="item.CategoryId">
                  <view :id="'_' + index" class="scroll-tab-item" :class="{ active: tabAct_id == item.CategoryId }" @click.stop="toggleTab(item, index)">
                    {{ item.MatchTypeName }}
                    <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/border_act.png" mode="" class="border_act" v-if="tabAct_id == item.CategoryId"></image>
                    <text class="reg-hint" v-if="item.IsRed"></text>
                  </view>
                </block>
              </scroll-view>
            </view>
            <view class="lucency" v-if="tabBars.length > 6"></view>
          </view>
        </view>
      </view>
      <view class="collect-ul" :style="{ 'padding-top': industryVideo.ResourceUrl ? '528rpx' : '210rpx' }">
        <!-- 其他tab -->
        <block v-show="tabAct_id !== 99999">
          <view class="collect-ltem" v-for="(item, index) in collectList" :key="index" @click="goDetail(item, index)">
            <view class="item-left">
              <text class="title text_twoLine"
                >{{ item.Title }}
                <text class="reg-text" v-if="item.IsRed"></text>
              </text>
              <text class="text_twoLine desc">{{ item.PublishDate }}</text>
            </view>
            <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
          </view>
          <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1 && tabAct_id !== 99999" />
        </block>
        <!-- 时间线 -->
        <block v-if="tabAct_id === 99999">
          <view class="time-line">
            <view class="line-item" v-for="(item, index) in timeLine" :key="index" @click="goDetailFromTimeLine(item, index)">
              <view class="time">{{ item.date }}</view>
              <view class="content" v-if="item.Content.length">
                <text class="content-reg" v-if="item.IsRed"></text>
                <rich-text class="rich-text" :style="{ height: item.isExpand ? 'auto' : richTextHeight + 'px' }" :data-index="index" :class="{ expand: item.isExpand }" :nodes="item.Content">
                </rich-text>
                <view class="expan-btn" :class="{ pos: !item.isExpand }" @click="handleExpand(item, index)" v-if="item.isShowBtn">{{ item.isExpand ? "收起" : "展开" }}</view>
              </view>
              <view class="title" v-else>{{ item.Title }}</view>
            </view>
            <view v-show="loadTimeLine" class="loadTimeLine"></view>
            <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1 && tabAct_id === 99999" />
          </view>
        </block>
      </view>
    </view>
    <view class="nodata" v-else>
      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
      <text>暂时没有报告的内容</text>
    </view>
    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
    <!-- 权限弹窗 -->
    <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
  </view>
</template>

<script>
import { Mine, Home } from "@/config/api.js";
import { Reports } from "@/config/api.js";
import { Throttle } from "@/config/util.js";
import freeCharge from "@/components/freeCharge";
import modalDialog from "@/components/modalDialog.vue";
let app = getApp({ allowDefault: true });
export default {
  data() {
    return {
      tabAct_id: "",
      tabBars: [],
      industrialManagementId: "",
      layoutTime: "",
      refresh: false, //正在下拉
      page_no: 1,
      pageSize: 10,
      categoryId: "",
      collectList: [],
      isShow: false,
      haveData: true,
      status: "loadmore",
      loadText: {
        loadmore: "上拉加载更多",
        loading: "加载中",
        nomore: "已经到底了",
      },
      totalPage: "",
      toggleTabIndex: 0,
      titleReport: "",
      pcTabActive: "",
      industryVideo: {},
      authInfo: {},
      havePlayed: false,
      isShowhasPermission: false, //  联系销售的提交申请
      applyForIsShow: false, // 提交申请
      jurisdictionList: {},
      hasPermission: "", //权限
      timeLine: [], //时间线数据
      mockTimeLine: [
        {
          date: "不重要",
          Content: "<p>hello,world</p><p>hello,world</p><p>hello,world</p>",
        }, //第一项是为了获取当前手机下,三行是多少相对高度
      ],
      loadTimeLine: false, //时间线的遮罩
      richTextHeight: 1000, //晨会富文本最大高度
    };
  },
  onLoad(option) {
    this.industrialManagementId = option.id;
    this.tabAct_id = option.tab;
    this.toArticleCategoryList();
  },
  onShow() {
    this.$store.dispatch("statistics", { PageType: "IndustryList", IndustrialManagementId: this.industrialManagementId });
  },
  components: {
    freeCharge,
    modalDialog,
  },
  watch: {
    //监听tabs的变化
    tabAct_id: {
      handler(newVal) {
        this.tabBars.forEach((item) => {
          if (item.CategoryId == newVal) {
            this.$store.commit("setRouterReport", item.MatchTypeName);
          }
        });
        if (newVal) {
          this.page_no = 1;
          this.collectList = [];
          this.getCollectList();
        }
      },
      immediate: true,
    },
  },
  methods: {
    //tabs切换事件
    toggleTab(item, index) {
      this.toggleTabIndex = index;
      if (this.tabAct_id !== item.CategoryId) {
        this.tabAct_id = item.CategoryId;
        this.pageNum = 1;
        this.timeLine = [];
        this.totalPage = "";
        uni.pageScrollTo({
          scrollTop: 0,
          duration: 0,
        });
      }
    },
    toArticleCategoryList() {
      Reports.toArticleCategoryList({
        IndustrialManagementId: this.industrialManagementId,
        ShowTimeLine: 1,
      }).then((res) => {
        if (res.Ret == 200) {
          uni.setNavigationBarTitle({
            title: res.Data.IndustryName,
          });
          this.titleReport = res.Data.IndustryName;
          this.layoutTime = res.Data.LayoutTime;
          this.industryVideo = res.Data.IndustryVideo;
          this.authInfo = res.Data.AuthInfo;
          if (res.Data.List) {
            this.tabAct_id = res.Data.List[0].CategoryId;
            this.tabBars = res.Data.List;
          }
        }
      });
    },
    /* 获取列表 */
    getCollectList() {
      //just for test
      if (this.tabAct_id === 99999) {
        Reports.getArticleList({
          PageSize: this.pageSize,
          CurrentIndex: this.page_no,
          CategoryId: 99999,
          IndustrialManagementId: this.industrialManagementId,
        }).then((res) => {
          if (res.Ret === 200) {
            this.loadTimeLine = true;
            this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
            this.totalPage = res.Data.Paging.Pages;
            let list = res.Data.List || [];
            list = list.map((item) => {
              let temp = item;
              temp.date = item.PublishTime.split(" ")[0];
              if (item.Content.length) {
                temp.isExpand = true;
                temp.isShowBtn = true;
              }
              return temp;
            });
            if (this.page_no === 1) {
              this.timeLine = list;
              this.haveData = this.timeLine.length ? true : false;
              if (this.refresh) {
                uni.stopPullDownRefresh();
                this.refresh = false;
              }
            } else {
              this.timeLine = this.timeLine.concat(list);
            }
          }
          this.timeLine.unshift(this.mockTimeLine[0]);
          //在获取高度前把所有的晨会展开,收起的话无法获取正确高度
          this.timeLine.forEach((item) => {
            if (item.Content.length) {
              item.isExpand = true;
              item.isShowBtn = true;
            }
          });
          setTimeout(() => {
            this.getConentsHeight();
          }, 0);
        });
        return;
      }
      Reports.getArticleList({
        PageSize: this.pageSize,
        CurrentIndex: this.page_no,
        CategoryId: this.tabAct_id,
        IndustrialManagementId: this.industrialManagementId,
      }).then((res) => {
        if (res.Ret === 200) {
          this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
          this.totalPage = res.Data.Paging.Pages; //总页数
          if (this.page_no === 1) {
            this.pcTabActive = res.Data.ChartPermissionId;
            this.collectList = res.Data.List || [];
            this.haveData = this.collectList.length ? true : false;
            if (this.refresh) {
              uni.stopPullDownRefresh();
              this.refresh = false;
            }
          } else {
            this.collectList = this.collectList.concat(res.Data.List);
          }
        }
      });
    },
    async goDetail(item, index) {
      /* 无需授权且已绑定 检验是或否有权限 */
      await this.$store.dispatch("checkHandle");
      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
        // 已授权已绑定
        if (item.SubCategoryName === "路演精华") {
          //跳转路演精华
          uni.navigateTo({
            url: "/reportPages/roadEssence/roadEssence?id=" + item.ArticleId,
          });
        } else {
          uni.navigateTo({
            url: "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId,
          });
        }
      }
    },
    // 视频播放权限判断
    handelVideoPlay() {
      this.$store.commit("setRouterReport", "资源包详情页");
      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
        if (this.authInfo.HasPermission == 1) {
          this.playVideo();
        } else {
          this.hasPermission = this.authInfo.HasPermission;
          this.jurisdictionList.ActivityId = this.industryVideo.Id;
          this.jurisdictionList.isAudioVideo = 3;
          if (this.hasPermission == 2) {
            this.jurisdictionList.SellerMobile = this.authInfo.SellerMobile;
            this.jurisdictionList.SellerName = this.authInfo.SellerName;
            this.jurisdictionList.PopupMsg = this.authInfo.PopupMsg;
            this.isShowhasPermission = true;
          } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
            this.jurisdictionList.PopupMsg = this.authInfo.PopupMsg;
            this.applyForIsShow = true;
          }
        }
      } else {
        this.$store.dispatch("checkHandle");
      }
    },
    // 播放视频
    playVideo() {
      const query = uni.createSelectorQuery().in(this);
      query
        .select("#industry-video")
        .context((data) => {
          data.context.play();
          this.handelVideoBindplay();
          setTimeout(() => {
            this.havePlayed = true;
          }, 10);
        })
        .exec();
    },
    //
    async handelVideoBindplay() {
      const res = await Home.microAideoHistoryAdd({ VideoId: this.industryVideo.Id, SourceType: 1, PageRouter: this.$store.state.pageRouterReport });
    },
    //展开收起晨会内容
    handleExpand(item, index) {
      item.isExpand = !item.isExpand;
      this.timeLine.splice(index, 1, item);
    },
    //获取所有晨会内容的高度并决定是否显示展开收起按钮
    getConentsHeight() {
      const query = wx.createSelectorQuery();
      query.selectAll(".rich-text").boundingClientRect();
      query.exec((res) => {
        //根据timeLine的第一项确定当前手机三行文字的高度
        const standardHeight = res[0][0].height;
        this.richTextHeight = standardHeight;
        res[0].forEach((item) => {
          let temp = this.timeLine[item.dataset.index];
          //超过这个高度的,需要显示展开/收起按钮
          if (item.height > standardHeight) {
            temp.isExpand = false;
            temp.isShowBtn = true;
          } else {
            temp.isExpand = true;
            temp.isShowBtn = false;
          }
        });
        //然后把timeLine的第一项扔掉
        this.timeLine.shift();
        this.loadTimeLine = false;
      });
    },
    async goDetailFromTimeLine(item, index) {
      if (item.Content.length !== 0) return;
      await this.$store.dispatch("checkHandle");
      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
        // 已授权已绑定
        if (item.SubCategoryName === "路演精华") {
          //跳转路演精华
          uni.navigateTo({
            url: "/reportPages/roadEssence/roadEssence?id=" + item.Id,
          });
        } else {
          uni.navigateTo({
            url: "/pageMy/reportDetail/reportDetail?id=" + item.Id,
          });
        }
      }
    },
    getNode(content, isExpand) {
      return `<div style='-webkit-line-clamp: ${isExpand ? 9999 : 3};-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;'>${content}</div>`;
    },
  },
  /* 触底 */
  onReachBottom: Throttle(function () {
    if (this.status === "nomore") return;
    this.status = "loading";
    this.page_no++;
    if (this.tabAct_id) {
      this.getCollectList();
    }
  }),
  /* 下拉刷新 */
  onPullDownRefresh: Throttle(function () {
    if (this.tabAct_id) {
      this.page_no = 1;
      this.refresh = true;
      this.getCollectList();
    }
  }),
  /**
   * 用户点击分享
   */
  onShareAppMessage: function (res) {
    return {
      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.titleReport,
      path: "/reportPages/IndustryReport/IndustryReport?id=" + this.industrialManagementId + "&tab=" + this.tabAct_id + "&tabs=" + this.pcTabActive,
      success: (res) => {},
      fail: (err) => {},
    };
  },
};
</script>

<style lang="scss">
.industry-content {
  background-color: #f7f7f7;
  // height: 100vh;
  .top-bg {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 100;
    background-color: white;
    text-align: center;
    .industry-video-poster {
      border-radius: 8rpx 8rpx 0 0;
      height: 340rpx;
      width: 728rpx;
    }
    .industry-video {
      height: 340rpx;
      width: 728rpx;
    }
    .top-bg-title {
      height: 99rpx;
      color: #2c83ff;
      background-color: #d1ebff;
      font-size: 28rpx;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .test {
      position: relative;
      span {
        position: absolute;
        left: 30rpx;
        bottom: 30rpx;
        color: white;
      }
    }
  }
  .top-box {
    position: fixed;

    width: 100%;

    top: 99rpx;
    left: 0;
    z-index: 100;
  }

  .top-tab-cont {
    .lucency {
      position: absolute;
      top: 0;
      right: 0;
      width: 32px;
      height: 30px;
      opacity: 0.9;
      background-color: #fff;
    }
    .tab-cont {
      padding: retu;
      padding: 30rpx 26rpx 0;
      background-color: #fff;
      font-size: 32rpx;
      box-shadow: 0 3rpx 6rpx rgba(187, 216, 255, 0.2);

      .scroll-tab {
        width: 100%;
        white-space: nowrap;
      }
      .scroll-tab-item {
        // flex-grow: 1;
        text-align: center;
        display: inline-block;
        padding: 0rpx 8rpx 30rpx 8rpx;
        margin-right: 60rpx;
        border-bottom: 8rpx solid transparent;
        position: relative;
        &:last-child {
          margin-right: 0;
        }
        &.active {
          border-bottom: none;
          color: #2c83ff;
          font-weight: 700;
        }
        .border_act {
          width: 100%;
          height: 8rpx;
          position: absolute;
          bottom: 0;
          left: 0;
        }
        .reg-hint {
          position: absolute;
          top: 0rpx;
          right: -10rpx;
          width: 14rpx;
          height: 14rpx;
          background-color: #ff0000;
          border-radius: 50%;
        }
      }
    }
  }
  .collect-ul {
    // margin-top: 30rpx;s
    padding-top: 210rpx;
    // padding-top: 4rpx;
    .collect-ltem {
      display: flex;
      padding: 30rpx 34rpx;
      background: #fff;
      margin-bottom: 4rpx;
      align-items: center;
      justify-content: space-between;
      .title {
        position: relative;
        max-width: 625rpx;
        color: #4a4a4a;
        font-size: 34rpx;
        padding-left: 28rpx;
        .reg-text {
          position: absolute;
          top: 15rpx;
          left: 0rpx;
          width: 14rpx;
          height: 14rpx;
          background-color: #ff0000;
          border-radius: 50%;
          z-index: 9;
        }
      }
      .desc {
        margin-top: 17rpx;
        padding-left: 28rpx;
        width: 625rpx;
        color: #999;
      }
    }
    .time-line {
      margin-top: 15rpx;
      padding: 30rpx 40rpx 50rpx 40rpx;
      min-height: calc(100vh - 190rpx);
      background-color: #ffffff;
      position: relative;
      .loadTimeLine {
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        position: absolute;
        background-color: #fff;
        z-index: 6;
      }
      .line-item {
        position: relative;
        padding: 0 0 50rpx 40rpx;
        /* border-left:1rpx solid #DAE9FD; */
        &:last-child {
          padding-bottom: 0;
          &::after {
            height: calc(100% - 25rpx);
          }
        }
        &:first-child {
          .time {
            &::after {
              background-color: #3385ff;
            }
          }
        }
        &::before,
        &::after {
          position: absolute;
          content: "";
        }
        &::before {
          width: 24rpx;
          height: 24rpx;
          background-color: #dae9fd;
          z-index: 1;
          left: 0;
          top: 27rpx;
          transform: translate(-50%, -50%);
          border-radius: 50%;
        }
        &::after {
          top: 17rpx;
          left: 0;
          width: 1rpx;
          height: calc(100%);
          background-color: #dae9fd;
          z-index: 2;
        }
        .time {
          width: 245rpx;
          height: 55rpx;
          text-align: center;
          line-height: 45rpx;
          padding: 5rpx 20rpx;
          background-color: #f5f9ff;
          border-radius: 64rpx;
          color: #5181c9;
          font-size: 32rpx;
          margin-bottom: 20rpx;
          position: relative;
          &::before,
          &::after {
            position: absolute;
            content: "";
            left: -36rpx;
            top: 27rpx;
            width: 24rpx;
            height: 1rpx;
            background-color: #dae9fd;
            z-index: 1;
          }
          &::after {
            left: -40rpx;
            top: 27rpx;
            width: 12rpx;
            height: 12rpx;
            border-radius: 50%;
            transform: translate(-50%, -50%);
            background-color: #9dc5ff;
            z-index: 3;
          }
        }
        .content {
          color: #666666;
          position: relative;
          .rich-text {
            overflow: hidden;
            text-overflow: ellipsis;
            text-align: justify;
            display: -webkit-box;
            -webkit-line-clamp: 3;
            -webkit-box-orient: vertical;
            position: relative;
            &.expand {
              -webkit-line-clamp: 999;
              height: auto;
            }
          }
          .expan-btn {
            color: #2c83ff;
            text-align: right;
            &.pos {
              padding: 0 0 0 40rpx;
              background-color: rgba(255, 255, 255, 0.882);
              position: absolute;
              right: 0;
              bottom: 0;
            }
          }
          .content-reg {
            position: absolute;
            top: 10rpx;
            left: -20rpx;
            width: 14rpx;
            height: 14rpx;
            background-color: #ff0000;
            border-radius: 50%;
          }
        }
        .title {
          color: #3385ff;
        }
      }
    }
  }
}
#industry-content {
  .industry-video-module {
    .global-video-box {
      .video-content {
        top: 400rpx !important;
      }
      .close-icon {
        top: 330rpx !important;
      }
    }
  }
}
</style>