bd0716 %!s(int64=2) %!d(string=hai) anos
pai
achega
2417079cfe

+ 4 - 10
activityPages/activityDetail/activityDetail.vue

@@ -259,7 +259,7 @@
     </view>
     <!-- 权限部分 -->
     <view v-else>
-      <jurisdiction :idAct="id" :haveAuth="haveAuth" :industryMsg="industryMsg" :msgType="msgType" :sellerMobile="sellerMobile" :sellerName="sellerName"></jurisdiction>
+      <jurisdiction :idAct="id" :jurisdictionList="jurisdictionList"></jurisdiction>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
     <view v-show="false">
@@ -309,10 +309,7 @@ export default {
       },
       isNeedAddCountryCode: false,
       haveAuth: "",
-      industryMsg: "",
-      sellerMobile: "",
-      sellerName: "", //销售名称
-      msgType: "",
+      jurisdictionList: {},
       editIsShow: false, //外呼莫泰框
       countryCode: "", //外呼区号
       mobileEdit: "", //外呼手机号
@@ -400,10 +397,7 @@ export default {
         .then((res) => {
           if (res.Ret == 200) {
             this.haveAuth = res.Data.HasPermission;
-            this.industryMsg = res.Data.PopupMsg;
-            this.sellerMobile = res.Data.SellerMobile;
-            this.sellerName = res.Data.SellerName;
-            this.msgType = res.Data.MsgType;
+            this.jurisdictionList = res.Data;
             if (res.Data.HasPermission == 1) {
               this.detailData = res.Data.Detail;
               let pages = getCurrentPages();
@@ -634,7 +628,7 @@ export default {
     //视频的播放事件
     handelVideoPlay() {
       if (!this.isVideoPlay) {
-        Home.microAideoHistoryAdd({ VideoId: this.detailData.ActivityId,SourceType:2 });
+        Home.microAideoHistoryAdd({ VideoId: this.detailData.ActivityId, SourceType: 2 });
       }
       this.isVideoPlay = true;
     },

+ 24 - 35
activityPages/activityDetail/jurisdiction/components.vue

@@ -1,24 +1,28 @@
 <template>
-  <view class="noauth-cont" v-if="haveAuth === 2 || haveAuth === 3 || haveAuth === 4 || haveAuth === 5">
+  <view class="noauth-cont" v-if="jurisdictionList.HasPermission === 2 || jurisdictionList.HasPermission === 3 || jurisdictionList.HasPermission === 4 || jurisdictionList.HasPermission === 5">
     <block v-if="!isShowAlert">
       <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
-      <block v-if="haveAuth == 3">
-        <view class="tip">{{ industryMsg }}</view>
-        <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+      <block v-if="jurisdictionList.HasPermission == 3">
+        <view class="tip">{{ jurisdictionList.PopupMsg }}</view>
+        <view class="btn-cont" v-if="jurisdictionList.Type !== '专项调研'" @click="applyAuth"> 立即申请 </view>
       </block>
-      <block v-if="haveAuth == 4 || haveAuth == 5">
-        <view class="tip">{{ industryMsg }}</view>
-        <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+      <block v-if="jurisdictionList.HasPermission == 4 || jurisdictionList.HasPermission == 5">
+        <view class="tip">{{ jurisdictionList.PopupMsg }}</view>
+        <view class="btn-cont" v-if="jurisdictionList.Type !== '专项调研'" @click="applyAuth"> 立即申请 </view>
       </block>
-      <view class="tip" v-if="haveAuth === 2">
-        <text style="margin-bottom: 20rpx"> 您暂无权限参加此活动 </text>
-        <text>若想参加可以联系对口销售 </text>
-        <text @click="callPhone(sellerMobile)"
-          >{{ sellerName }}:<text style="color: #d4bf86; display: inline-block">{{ sellerMobile }}</text></text
-        >
-        <text>申请开通对应的试用权限</text>
+      <view class="tip" v-if="jurisdictionList.HasPermission === 2">
+        <block v-if="jurisdictionList.Type == '专项调研'"> 需要升级行业套餐权限才可参与此活动,请联系对口销售</block>
+        <block v-else>
+          <text style="margin-bottom: 20rpx"> 您暂无权限参加此活动 </text>
+          <text>若想参加可以联系对口销售 </text>
+          <text @click="callPhone(jurisdictionList.SellerMobile)" v-if="jurisdictionList.Type !== '专项调研'">
+            {{ jurisdictionList.SellerName }}:
+            <text style="color: #d4bf86; display: inline-block">{{ jurisdictionList.SellerMobile }}</text>
+          </text>
+          <text>申请开通对应的试用权限</text>
+        </block>
       </view>
-      <view v-if="haveAuth === 2" class="btn-cont" @click="sellerApplyAuth"> 立即申请 </view>
+      <view v-if="jurisdictionList.HasPermission === 2 && jurisdictionList.Type !== '专项调研'" class="btn-cont" @click="sellerApplyAuth"> 立即申请 </view>
       <view class="btn-cont back-btn" @click="backIndex"> 返回</view>
     </block>
     <block v-else>
@@ -34,25 +38,10 @@
 import { User, FreeButton } from "@/config/api.js";
 export default {
   props: {
-    haveAuth: {
-      type: Number,
-      required: true,
-    },
-    industryMsg: {
-      type: String,
-      required: true,
-    },
-    sellerMobile: {
-      type: String,
-      required: true,
-    },
-    sellerName: {
-      type: String,
-      required: true,
-    },
-    msgType: {
-      type: String,
+    jurisdictionList: {
+      type: Object,
       required: true,
+      default: {},
     },
     idAct: {
       type: Number,
@@ -68,11 +57,11 @@ export default {
     /* 无权限申请开通权限 */
     applyAuth() {
       /* 区分是否是潜在用户 */
-      this.haveAuth === 3
+      this.jurisdictionList.HasPermission === 3
         ? uni.navigateTo({
             url: "/pageMy/applyTrial/applyTrial?tryType=Activity&detailId=" + this.idAct,
           })
-        : this.haveAuth === 5
+        : this.jurisdictionList.HasPermission === 5
         ? this.sellerApplyAuth()
         : uni.showModal({
             title: "",

+ 4 - 9
activityPages/specialDetail/specialDetail.vue

@@ -71,7 +71,7 @@
     </view>
     <!-- 权限部分 -->
     <view v-else>
-      <jurisdiction :idAct="id" :haveAuth="haveAuth" :industryMsg="industryMsg" :msgType="msgType" :sellerMobile="sellerMobile" :sellerName="sellerName"></jurisdiction>
+      <jurisdiction :idAct="id" :jurisdictionList="jurisdictionList"></jurisdiction>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
     <u-modal
@@ -109,11 +109,8 @@ export default {
       id: "",
       detailData: {},
       haveAuth: "",
-      industryMsg: "",
-      sellerMobile: "",
-      sellerName: "", //销售名称
-      msgType: "",
       specialIsFollow: false,
+      jurisdictionList: {},
     };
   },
   components: {
@@ -129,10 +126,8 @@ export default {
       if (res.Ret == 200) {
         this.specialIsFollow = res.Data.IsFollow;
         this.haveAuth = res.Data.HasPermission;
-        this.industryMsg = res.Data.PopupMsg;
-        this.sellerMobile = res.Data.SellerMobile;
-        this.sellerName = res.Data.SellerName;
-        this.msgType = res.Data.MsgType;
+        this.jurisdictionList = res.Data;
+        this.jurisdictionList.Type = "专项调研";
         if (res.Data.HasPermission == 1) {
           this.detailData = res.Data.Detail;
         }

+ 3 - 2
components/activity/indexActivity.scss

@@ -125,13 +125,14 @@
       overflow-x: auto;
 
       text {
+        display: flex;
+        align-items: center;
+        justify-content:center;
         width: 113rpx;
         height: 42rpx;
         background: #ffffff;
         border: 2rpx solid #3385ff;
         border-radius: 4rpx;
-        text-align: center;
-        line-height: 40rpx;
         font-size: 24rpx;
         flex-shrink: 0;
         margin-right: 20rpx;

+ 5 - 2
components/modalDialog.vue

@@ -31,7 +31,8 @@
       :confirm-style="{ fontWeight: '700' }"
     >
       <view class="slot-content">
-        <block v-if="jurisdictionList.isAudioVideo == 2">
+		  <!-- 2 - 活动视频  3 - 产业视频 -->
+        <block v-if="jurisdictionList.isAudioVideo == 2 || jurisdictionList.isAudioVideo == 3">
           <text>您暂无权限查看此视频</text>
           <text>若想查看可以联系对口销售</text>
         </block>
@@ -243,8 +244,10 @@ export default {
     },
 
     showhasPermissionBtn() {
+		// isAudioVideo -- 3 产业视频
       User.applyTry({
-        TryType: this.jurisdictionList.isAudioVideo == 1 ? "MicroAudio" : this.jurisdictionList.isAudioVideo == 2 ? "MicroVideo" : "Activity",
+        TryType: this.jurisdictionList.isAudioVideo == 1 ? "MicroAudio" :
+		 (this.jurisdictionList.isAudioVideo == 2 || this.jurisdictionList.isAudioVideo == 3) ? "MicroVideo" : "Activity",
         DetailId: this.jurisdictionList.ActivityId,
       }).then((res) => {
         this.showhasPermission = false;

+ 147 - 11
pages-search/components/report.vue

@@ -17,10 +17,36 @@
               <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
             </view>
           </view>
-          <view class="read-more" v-if="item.IndustrialSubjectList">
-            <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
+          <view class="read-more">
+<!--            <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
               {{ val.SubjectName }}
-            </text>
+            </text> -->
+			<view class="industry-video-item" @click.stop="handelVideoPlay(item)"
+			:style="{'background-image':'url('+item.IndustryVideo.BackgroundImg+ ')'}" v-if="item.IndustryVideo">
+				5min
+				<br />
+				逻辑解析
+				<view class="industry-video-icon">
+					<image src="https://hzstatic.hzinsights.com/cygx/video-right-top-icon.svg"></image>
+				</view>
+			</view>
+			<block v-if="item.IndustrialSubjectList">
+				<view v-if="item.IndustryVideo" style="display: flex;flex-wrap: wrap;width: 420rpx;">
+					<view v-for="val in item.IndustrialSubjectList.slice(0,4)" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+						{{ val.SubjectName }}
+					</view>
+				</view>
+				<block v-if="item.IndustryVideo && item.IndustrialSubjectList.length>4">
+					<view v-for="val in item.IndustrialSubjectList.slice(4)" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+						{{ val.SubjectName }}
+					</view>
+				</block>
+				<block v-if="!item.IndustryVideo">
+					<view v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+						{{ val.SubjectName }}
+					</view>
+				</block>
+			</block>
           </view>
         </view>
       </block>
@@ -40,10 +66,34 @@
               <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
             </view>
           </view>
-          <view class="read-more" @click="themeDetails(item)" v-if="item.IndustrialSubjectList">
-            <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
+          <view class="read-more" v-if="item.IndustrialSubjectList">
+           <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
               {{ val.SubjectName }}
             </text>
+<!-- 			<view class="industry-video-item" @click.stop="handelVideoPlay(item)"
+			:style="{'background-image':'url('+item.IndustryVideo.BackgroundImg+ ')'}" v-if="item.IndustryVideo">
+				5min
+				<br />
+				逻辑解析
+				<view class="industry-video-icon">
+					<image src="https://hzstatic.hzinsights.com/cygx/video-right-top-icon.svg"></image>
+				</view>
+			</view>
+			<view v-if="item.IndustryVideo" style="display: flex;flex-wrap: wrap;width: 420rpx;">
+				<view v-for="val in item.IndustrialSubjectList.slice(0,4)" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+					{{ val.SubjectName }}
+				</view>
+			</view>
+			<block v-if="item.IndustryVideo && item.IndustrialSubjectList.length>4">
+				<view v-for="val in item.IndustrialSubjectList.slice(4)" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+					{{ val.SubjectName }}
+				</view>
+			</block>
+			<block v-if="!item.IndustryVideo">
+				<view v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId" class="text-box text_oneLine">
+					{{ val.SubjectName }}
+				</view>
+			</block> -->
           </view>
         </view>
       </block>
@@ -116,13 +166,19 @@
         <rich-text :nodes="accounts"></rich-text>
       </view>
     </u-modal>
+	<!-- 视频模块 -->
+	<videoModule :showVideoPop="showVideoPop" :videoPopList="videoPopList" class="industry-video-module"/>
+	<!-- 权限弹窗 -->
+	<modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
   </view>
 </template>
 
 <script>
 import {Report } from "@/config/api"
+import videoModule from "@/components/videoModule/index";
+import modalDialog from "@/components/modalDialog.vue";
 export default {
-  components: {},
+  components: {videoModule,modalDialog},
   props: {
     reportPageData: {
       type: Object,
@@ -134,6 +190,12 @@ export default {
       confirmText: "知道了",
       isCancelBtn: false,
       accounts: "",
+	  showVideoPop:false, //视频弹窗显示控制
+	  videoPopList:{},// 视频信息
+	  isShowhasPermission: false, //  联系销售的提交申请
+	  applyForIsShow: false, // 提交申请
+	  jurisdictionList: {},
+	  hasPermission: "", //权限
     };
   },
   watch: {},
@@ -188,6 +250,45 @@ export default {
       }
       this.goFollowShow = false;
     },
+	// 播放权限判断
+	handelVideoPlay(item){
+		if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+		  if (item.AuthInfo.HasPermission == 1) {
+		    this.playVideo(item)
+		  } else {
+		    this.hasPermission = item.AuthInfo.HasPermission;
+		    this.jurisdictionList.ActivityId = item.IndustryVideo.Id;
+			// 产业视频
+		    this.jurisdictionList.isAudioVideo = 3;
+		    if (this.hasPermission == 2) {
+		      this.jurisdictionList.SellerMobile = item.AuthInfo.SellerMobile;
+		      this.jurisdictionList.SellerName = item.AuthInfo.SellerName;
+		      this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
+		      this.isShowhasPermission = true;
+		    } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+		      this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
+		      this.applyForIsShow = true;
+		    }
+		  }
+		} else {
+		  this.$store.dispatch("checkHandle");
+		}
+	},
+	playVideo(item){
+		let params={
+			Id:item.IndustryVideo.Id,
+			ResourceUrl:item.IndustryVideo.ResourceUrl,
+			BackgroundImg:item.IndustryVideo.BackgroundImg,
+			Title:`5min【${item.IndustryName}】逻辑解析`
+		}
+		if (this.$store.state.videoPlay.playVideoId != item.Id) {
+		  this.$store.commit("videoPlay/palyTimeUpdate", 0);
+		  this.$store.commit("videoPlay/playVideo", item.Id);
+		}
+		this.globalBgAudioManager.stop();
+		this.videoPopList = params;
+		this.showVideoPop = true;
+	}
   },
 };
 </script>
@@ -218,14 +319,49 @@ export default {
       margin-top: 20rpx;
       display: flex;
       flex-wrap: wrap;
-      margin-left: 30rpx;
+      margin-left: 80rpx;
+	  .industry-video-item{
+	  	height: 126rpx;
+	  	width: 170rpx;
+		// width: 216rpx;
+	  	margin: 0 40rpx 30rpx 0;
+		// margin: 0 15rpx 30rpx 0;
+	  	border-radius: 8rpx;
+	  	background-size: cover;
+	  	background-position: center;
+	  	background-repeat: no-repeat;
+	  	font-weight: 500;
+	  	font-size: 32rpx;
+	  	color: white;
+	  	line-height: 45rpx;
+	  	padding: 20rpx;
+	  	position: relative;
+	  	overflow: hidden;
+	  	.industry-video-icon{
+	  		height: 0rpx;
+	  		width: 0rpx;
+	  		border-style: solid;
+	  		border-color: #3385FF #3385FF transparent transparent;
+	  		border-width: 28rpx;
+	  		position: absolute;
+	  		right: 0;
+	  		top: 0;
+	  		image{
+	  			position: absolute;
+	  			right: -24rpx;
+	  			bottom: 0;
+	  			height: 20rpx;
+	  			width: 20rpx;
+	  		}
+	  	}
+	  }
       .text-box {
-        margin-bottom: 27rpx;
-        margin-right: 15rpx;
+        margin-bottom: 30rpx;
+        margin-right: 40rpx;
         padding: 0;
         font-size: 24rpx;
         color: #408fff;
-        width: 216rpx;
+        width: 170rpx;
         height: 46rpx;
         line-height: 46rpx;
         text-align: center !important;
@@ -302,4 +438,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 16 - 1
pages-search/indedxSearch/indedxSearch.vue

@@ -78,7 +78,8 @@
               <view class="more-rivet" @click="tabsActiveMore(3)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
             </view>
           </view>
-          <reportPage :reportPageData="reportPageData" v-if="Object.keys(reportPageData).length && (tabsActive == 3 || tabsActive == 1)" />
+          <reportPage :reportPageData="reportPageData" id="container-report-page"
+		  v-if="Object.keys(reportPageData).length && (tabsActive == 3 || tabsActive == 1)" />
 
           <view class="more-activity more-box" v-if="tabsActive === 1 && haveResultActivity">
             <text class="more-text"> 活动/回放 </text>
@@ -613,3 +614,17 @@ export default {
   }
 }
 </style>
+<style lang="scss">
+	#container-report-page{
+		.industry-video-module{
+			  .global-video-box{
+				  .video-content{
+					  top: 400rpx!important;
+				  }
+				  .close-icon{
+					  top: 330rpx!important;
+				  }
+			  }
+		}
+	}
+</style>

+ 4 - 2
pages/index/index.vue

@@ -41,7 +41,8 @@
       <view class="audio-video-content" v-if="topTabsActive == 4">
         <view class="audio-item" v-for="item in videoAudioList" :key="item.Id">
           <view class="cover-item" :style="{ 'background-image': 'url(' + item.BackgroundImg + ')' }">
-            <block v-if="item.Type == 2">
+			  <!-- type:3 -- 产业视频 -->
+            <block v-if="item.Type == 2 || item.Type == 3"> 
               <image class="img-bg" @click="handelPlay(item)" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon_index.png"></image>
             </block>
             <block v-else>
@@ -708,7 +709,8 @@ export default {
     if (from === "button") {
       let item = target.dataset.item;
       let audio_id = item.Type == 1 || item.AudioType == 1 ? item.Id : "";
-      let video_id = item.Type == 2 ? item.Id : "";
+	  // type=2 -- 活动视频 type=3 -- 产业视频
+      let video_id = item.Type == 2 || item.Type == 3 ? item.Id : "";
       let activity_id = item.Type == 2 && item.ActivityId > 0 ? item.ActivityId : "";
       let title_share = item.AudioTitle || item.Title;
       return {

+ 34 - 2
pages/reportForm/index.scss

@@ -403,9 +403,41 @@
     margin-left: 60rpx;
     display: flex;
     flex-wrap: wrap;
-
+	.industry-video-item{
+		height: 126rpx;
+		width: 170rpx;
+		margin: 0 40rpx 27rpx 0;
+		border-radius: 8rpx;
+		background-size: cover;
+		background-position: center;
+		background-repeat: no-repeat;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: white;
+		line-height: 45rpx;
+		padding: 20rpx;
+		position: relative;
+		overflow: hidden;
+		.industry-video-icon{
+			height: 0rpx;
+			width: 0rpx;
+			border-style: solid;
+			border-color: #3385FF #3385FF transparent transparent;
+			border-width: 28rpx;
+			position: absolute;
+			right: 0;
+			top: 0;
+			image{
+				position: absolute;
+				right: -24rpx;
+				bottom: 0;
+				height: 20rpx;
+				width: 20rpx;
+			}
+		}
+	}
     .text-box {
-      margin-bottom: 27rpx;
+      margin-bottom: 30rpx;
       margin-right: 40rpx;
       padding: 0;
       font-size: 24rpx;

+ 77 - 4
pages/reportForm/reportForm.vue

@@ -98,7 +98,8 @@
               </view>
             </view>
           </view>
-          <view class="content-box" v-if="item.IndustrialSubjectList.length > 6">
+		  <!-- 多于6个时 取消展开/收起 的交互 全部显示 ------- 查研观向 8.4 -->
+<!--          <view class="content-box" v-if="item.IndustrialSubjectList.length > 6">
             <u-read-more :toggle="true" :show-height="item.IndustrialSubjectList.length > 6 ? 140 : 150" :shadow-style="shadowStyle" close-text="展开" color="#D1D1D1">
               <view class="read-more">
                 <view v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId" @click="goIndustryReport(item.IndustrialManagementId)" class="text-box">
@@ -106,10 +107,29 @@
                 </view>
               </view>
             </u-read-more>
-          </view>
-          <view class="content-box" v-else @click="goIndustryReport(item.IndustrialManagementId)">
+          </view> -->
+          <view class="content-box" @click="goIndustryReport(item.IndustrialManagementId)">
             <view class="read-more">
-              <view v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId" class="text-box">{{ val.SubjectName }}</view>
+				<view class="industry-video-item" @click.stop="handelVideoPlay(item)"
+				:style="{'background-image':'url('+item.IndustryVideo.BackgroundImg+ ')'}" v-if="item.IndustryVideo">
+					5min
+					<br />
+					逻辑解析
+					<view class="industry-video-icon">
+						<image src="https://hzstatic.hzinsights.com/cygx/video-right-top-icon.svg"></image>
+					</view>
+				</view>
+				<block v-if="item.IndustrialSubjectList">
+					<view v-if="item.IndustryVideo" style="display: flex;flex-wrap: wrap;width: 420rpx;">
+						<view v-for="val in item.IndustrialSubjectList.slice(0,4)" :key="val.IndustrialSubjectId" class="text-box">{{ val.SubjectName }}</view>
+					</view>
+					<block v-if="item.IndustryVideo && item.IndustrialSubjectList.length>4">
+						<view v-for="val in item.IndustrialSubjectList.slice(4)" :key="val.IndustrialSubjectId" class="text-box">{{ val.SubjectName }}</view>
+					</block>
+					<block v-if="!item.IndustryVideo">
+						<view v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId" class="text-box">{{ val.SubjectName }}</view>
+					</block>
+				</block>
             </view>
           </view>
         </view>
@@ -133,6 +153,9 @@
       </view>
     </u-modal>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
+	<!-- 视频模块 -->
+	<videoModule :showVideoPop="showVideoPop" :videoPopList="videoPopList" />
+	<modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
     <suspenButton v-if="wholeShowListData.IsShow" />
   </view>
 </template>
@@ -143,6 +166,8 @@ import coverGuide from "./components/coverGuide.vue";
 import { Throttle, Debounce } from "@/config/util.js";
 import freeCharge from "@/components/freeCharge";
 import suspenButton from "@/components/suspen_button.vue";
+import videoModule from "@/components/videoModule/index";
+import modalDialog from "@/components/modalDialog.vue";
 import { Reports } from "@/config/api.js";
 let app = getApp();
 export default {
@@ -151,6 +176,8 @@ export default {
     coverGuide,
     freeCharge,
     suspenButton,
+	videoModule,
+	modalDialog
   },
   data() {
     return {
@@ -190,6 +217,12 @@ export default {
       isCancelBtn: false,
       scrollLeft: 0,
       showTransition: false, //点击绝密后的隐现
+	  showVideoPop:false, //视频弹窗显示控制
+	  videoPopList:{},// 视频信息
+	  isShowhasPermission: false, //  联系销售的提交申请
+	  applyForIsShow: false, // 提交申请
+	  jurisdictionList: {},
+	  hasPermission: "", //权限
     };
   },
   onLoad(option) {
@@ -421,6 +454,46 @@ export default {
       this.page_no = 1;
       this.getIndustryList();
     },
+	// 视频播放权限判断
+	handelVideoPlay(item){
+		if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+		  if (item.AuthInfo.HasPermission == 1) {
+		    this.playVideo(item)
+		  } else {
+		    this.hasPermission = item.AuthInfo.HasPermission;
+		    this.jurisdictionList.ActivityId = item.IndustryVideo.Id;
+		    this.jurisdictionList.isAudioVideo = 3;
+		    if (this.hasPermission == 2) {
+		      this.jurisdictionList.SellerMobile = item.AuthInfo.SellerMobile;
+		      this.jurisdictionList.SellerName = item.AuthInfo.SellerName;
+		      this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
+		      this.isShowhasPermission = true;
+		    } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+		      this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
+		      this.applyForIsShow = true;
+		    }
+		  }
+		} else {
+		  this.$store.dispatch("checkHandle");
+		}
+
+	},
+	playVideo(item){
+		let params={
+			Id:item.IndustryVideo.Id,
+			ResourceUrl:item.IndustryVideo.ResourceUrl,
+			BackgroundImg:item.IndustryVideo.BackgroundImg,
+			Title:`5min【${item.IndustryName}】逻辑解析`
+		}
+		if (this.$store.state.videoPlay.playVideoId != item.Id) {
+		  this.$store.commit("videoPlay/palyTimeUpdate", 0);
+		  this.$store.commit("videoPlay/playVideo", item.Id);
+		}
+		// console.log(params);
+		this.globalBgAudioManager.stop();
+		this.videoPopList = params;
+		this.showVideoPop = true;
+	}
   },
   /* 触底 */
   onReachBottom: Throttle(function () {

+ 366 - 25
reportPages/IndustryReport/IndustryReport.vue

@@ -1,9 +1,21 @@
 <template>
-  <view class="container industry-content">
+  <view class="container industry-content" id="industry-content">
     <view v-if="haveData">
       <view class="content-top">
-        <view class="top-bg">产业赛道布局于{{ layoutTime }}</view>
-        <view class="top-box">
+        <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">
@@ -20,18 +32,38 @@
           </view>
         </view>
       </view>
-      <view class="collect-ul">
-        <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 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-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" />
+          <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">
+                <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>
@@ -39,6 +71,8 @@
       <text>暂时没有报告的内容</text>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
+   <!-- 权限弹窗 -->
+   	<modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
   </view>
 </template>
 
@@ -47,6 +81,7 @@ import { Mine } 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() {
@@ -72,6 +107,22 @@ export default {
       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) {
@@ -84,6 +135,7 @@ export default {
   },
   components: {
     freeCharge,
+	  modalDialog
   },
   watch: {
     //监听tabs的变化
@@ -104,6 +156,8 @@ export default {
       if (this.tabAct_id !== item.CategoryId) {
         this.tabAct_id = item.CategoryId;
         this.pageNum = 1;
+        this.timeLine=[]
+        this.totalPage=""
         uni.pageScrollTo({
           scrollTop: 0,
           duration: 0,
@@ -113,6 +167,7 @@ export default {
     toArticleCategoryList() {
       Reports.toArticleCategoryList({
         IndustrialManagementId: this.industrialManagementId,
+        ShowTimeLine:1
       }).then((res) => {
         if (res.Ret == 200) {
           uni.setNavigationBarTitle({
@@ -120,6 +175,8 @@ export default {
           });
           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;
@@ -129,6 +186,53 @@ export default {
     },
     /* 获取列表 */
     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,
@@ -161,7 +265,7 @@ export default {
       await this.$store.dispatch("checkHandle");
       if (!this.$store.state.isAuth && !this.$store.state.isBind) {
         // 已授权已绑定
-        if (item.IsHaveVideo) {
+        if (item.SubCategoryName=== "路演精华") {
           //跳转路演精华
           uni.navigateTo({
             url: "/reportPages/roadEssence/roadEssence?id=" + item.ArticleId,
@@ -173,6 +277,89 @@ export default {
         }
       }
     },
+	// 视频播放权限判断
+	handelVideoPlay(){
+		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()
+			setTimeout(()=>{
+				this.havePlayed=true
+			},10)
+		}).exec()
+	},
+    //展开收起晨会内容
+    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=>{
+        /* console.log(res[0][0].height) */
+        //根据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 () {
@@ -214,22 +401,45 @@ export default {
     top: 0;
     left: 0;
     width: 100%;
-    z-index: 999;
-    background-color: #d1ebff;
-    height: 73rpx;
-    color: #2c83ff;
-    font-size: 24rpx;
-    line-height: 73rpx;
-    text-align: center;
+    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: 73rpx;
+    top: 99rpx;
     left: 0;
-    z-index: 999;
+    z-index: 100;
   }
 
   .top-tab-cont {
@@ -290,7 +500,7 @@ export default {
   }
   .collect-ul {
     // margin-top: 30rpx;s
-    padding-top: 175rpx;
+    padding-top: 210rpx;
     // padding-top: 4rpx;
     .collect-ltem {
       display: flex;
@@ -323,6 +533,137 @@ export default {
         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;
+            }
+          }
+        }
+        .title{
+          color:#3385FF;
+        }
+      }
+    }
+    
+  }
+}
+#industry-content{
+  .industry-video-module{
+	  .global-video-box{
+		  .video-content{
+			  top: 400rpx!important;
+		  }
+		  .close-icon{
+			  top: 330rpx!important;
+		  }
+	  }
   }
 }
 </style>

+ 4 - 4
utils/styleClassify.js

@@ -2,7 +2,7 @@ export const color_word_bg = {
   color_bg: [
     {
       name: "医药",
-      color: "#EEFFF2",
+      color: "#FFEFFA",
     },
     {
       name: "科技",
@@ -32,7 +32,7 @@ export const color_word_bg = {
   color_word: [
     {
       name: "医药",
-      color: "#04CE3D",
+      color: "#EE99D4",
     },
     {
       name: "科技",
@@ -64,8 +64,8 @@ export const color_word_bg = {
 export const MultimediaIcon = [
   {
     name: "医药",
-    audio: "https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/green_audio.png",
-    video: "https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/green_video.png",
+    audio: "https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/pink_audio.png",
+    video: "https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/pink_video.png",
   },
   {
     name: "科技",