<template> <view class="container industry-content" id="industry-content"> <block v-if="haveData"> <view class="is-track-follow" v-if="dataFollow.IsShowFollowButton"> <is-track-follow :isShowFollowButton.sync="dataFollow.IsShowFollowButton" source="resources" :sourceId="industrialManagementId" :isFollowData.sync="dataFollow.IsFollowButton" /> </view> <view class="top-video-content"> <!-- 详情封面图 --> <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> <view class="title-tabs-content" :style="{ top: dataFollow.IsShowFollowButton ? '60rpx' : 0 }"> <view class="top-bg-title">产业赛道布局于{{ layoutTime }}</view> <view class="tab-content"> <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 }} <text class="reg-text" v-if="item.IsRed"></text> </view> </block> </view> </view> <view class="collect-ul"> <!-- 其他tab --> <block v-if="tabAct_id !== 99999"> <view class="global_card_content collect-ltem" v-for="(item, index) in collectList" :key="index" @click="goDetail(item, index)"> <view class="item-left"> <text class="title global_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> </block> <!-- 时间线 --> <block v-if="tabAct_id === 99999"> <time-line ref="timeChild" :dataList="timeLine" @setRouter="setRouter" /> </block> <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" /> </view> </block> <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" /> <Loading /> </view> </template> <script> import { Mine, Home, Reports } from "@/config/api.js"; import freeCharge from "@/components/freeCharge"; import modalDialog from "@/components/modalDialog.vue"; import IsTrackFollow from "@/components/isTrackFollow.vue"; import TimeLine from "@/components/report/timeLine.vue"; 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>", }, //第一项是为了获取当前手机下,三行是多少相对高度 ], dataFollow: {}, isSendWx: "", }; }, onLoad(option) { this.industrialManagementId = option.id; this.isSendWx = option.IsSendWx || ""; this.tabAct_id = +option.tab || ""; this.toArticleCategoryList(); }, onShow() { this.$store.dispatch("statistics", { PageType: "IndustryList", IndustrialManagementId: this.industrialManagementId }); }, components: { freeCharge, modalDialog, IsTrackFollow, TimeLine, }, watch: { //监听tabs的变化 tabAct_id: { handler(newVal) { 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, PageRouter: this.$store.state.pageRouterReport, IsSendWx: this.isSendWx, }).then((res) => { if (res.Ret == 200) { uni.setNavigationBarTitle({ title: res.Data.IndustryName, }); this.dataFollow = res.Data; 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.$refs.timeChild.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.$refs.timeChild.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) { if (item.SubCategoryName === "路演精华") { //跳转路演精华 uni.navigateTo({ url: "/reportPages/roadEssence/roadEssence?id=" + item.ArticleId, }); } else if (item.Resource === 2) { // 跳转产品内测详情 uni.navigateTo({ url: "/reportPages/internalDetials/internalDetials?id=" + item.ArticleId, }); } else if (item.Resource === 1) { this.setRouter(); uni.navigateTo({ url: "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId, }); } }, // 视频播放权限判断 async handelVideoPlay() { await this.$store.dispatch("showLoginModal"); this.$store.commit("setRouterReport", "资源包详情页"); 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; } } }, // 播放视频 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) { this.getRecordTracking("展开收起", { Id: item.Id }); item.isExpand = !item.isExpand; this.timeLine.splice(index, 1, item); }, async goDetailFromTimeLine(item, index) { if (item.Content.length !== 0) return; // 已授权已绑定 if (item.SubCategoryName === "路演精华") { //跳转路演精华 uni.navigateTo({ url: "/reportPages/roadEssence/roadEssence?id=" + item.Id, }); } else { this.setRouter(); 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>`; }, // 去往文章详情的 setRouter() { this.tabBars.forEach((item) => { if (this.tabAct_id == item.CategoryId) { this.$store.commit("setRouterReport", item.MatchTypeName); } }); }, }, /* 触底 */ onReachBottom() { if (this.status === "nomore") return; this.status = "loading"; this.page_no++; if (this.tabAct_id) { this.getCollectList(); } }, /* 下拉刷新 */ onPullDownRefresh() { if (this.tabAct_id) { this.page_no = 1; this.refresh = true; this.getCollectList(); } }, /** * 用户点击分享 */ onShareAppMessage() { return { title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.titleReport, path: "/reportPages/IndustryReport/IndustryReport?id=" + this.industrialManagementId + "&tab=" + this.tabAct_id + "&tabs=" + this.pcTabActive, }; }, }; </script> <style lang="scss"> .industry-content { background-color: $uni-bg-color; .top-video-content { width: 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; } .test { position: relative; span { position: absolute; left: 30rpx; bottom: 30rpx; color: white; } } } .title-tabs-content { position: sticky; top: 60rpx; left: 0; z-index: 99; margin-bottom: 20rpx; .top-bg-title { height: 60rpx; color: $uni-color-new; background-color: #edf4ff; font-size: 24rpx; display: flex; align-items: center; justify-content: center; } .tab-content { width: 100%; background-color: #fff; display: flex; flex-wrap: wrap; padding: 30rpx 20rpx 0; .scroll-tab-item { position: relative; display: inline-block; height: 54rpx; line-height: 54rpx; padding: 0 23rpx; background: #f8f8fa; border-radius: 27px; color: #333; margin: 0rpx 20rpx 20rpx 0; .reg-text { position: absolute; top: -6rpx; right: -8rpx; width: 14rpx; height: 14rpx; background-color: #ff0000; border-radius: 50%; } } .active { color: $uni-color-new !important; background-color: #e5efff !important; font-weight: 600; } } } .collect-ul { padding-bottom: 50rpx; padding: 0 25rpx; .collect-ltem { display: flex; background: #fff; align-items: center; justify-content: space-between; margin-bottom: 20rpx; border-top: 4rpx solid $uni-color-new; .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; } } } .is-track-follow { height: 60rpx; position: sticky; width: 100%; top: 0rpx; left: 0; z-index: 99; } } #industry-content { .industry-video-module { .global-video-box { .video-content { top: 400rpx !important; } .close-icon { top: 330rpx !important; } } } } </style>