Explorar el Código

合并master先

hbchen hace 1 año
padre
commit
e6d36b1ea3

+ 2 - 2
activityPages/activityDetail/manageMixin.js

@@ -8,12 +8,12 @@ export default {
       type = type ? type : valName;
       if (this.detailData.IsSignup == 1) {
         if (this.detailData.IsResearchPoints) {
-          if (isTimeGreaterThanCurrent(this.detailData.SiginupDeadline)) {
+          if (isTimeGreaterThanCurrent(this.detailData.CancelDeadline)) {
             uni.showModal({
               confirmText: "知道了",
               showCancel: false,
               confirmColor: "#3385FF",
-              content: "报名名单已提交举办方,若想取消,请联系对口销售",
+              content: "当前时间点已无法取消报名,若想取消,请联系对口销售",
             });
             return;
           }

+ 8 - 4
activityPages/playBack/playBack.vue

@@ -1,6 +1,6 @@
 <template>
   <block>
-    <view class="container container-play-back" v-if="isUserBindingPhoneNumber">
+    <view class="container container-play-back">
       <!-- 筛选部分 -->
       <view class="select-content-activity">
         <view class="screen-item">
@@ -39,7 +39,7 @@
           <view class="title-date" @click="goDetail(item)">
             <text :class="item.ActivityType == 1 ? '' : 'xianxia'">{{ item.ActivityType == 1 ? "线上" : "线下" }}</text>
             {{ item.ActivityTimeText }}
-            <view class="audio-back" v-if="item.AudioLink" @click.stop="PlayBackAll(item)">
+            <view class="audio-back" v-if="item.AudioLink" @click.stop="playBack(item)">
               <view class="audio-box">
                 <block v-if="item.FileType == 2">
                   <image class="audio-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/video_play.png"></image>
@@ -96,7 +96,7 @@
         :hasPermission="hasPermission"
       />
     </view>
-    <not-have-login v-else />
+    <!-- <not-have-login v-else /> -->
     <Loading />
   </block>
 </template>
@@ -184,9 +184,13 @@ export default {
       this.page_no = 1;
       this.getActivityList();
     },
+		async playBack(item){
+			await this.$store.dispatch("showLoginModal")
+			this.PlayBackAll(item)
+		}
   },
   onLoad() {
-    this.isUserBindingPhoneNumber && this.getActivityList();
+    this.getActivityList();
   },
   async onShow() {
     this.$store.commit("setRouterActivity", "活动回放");

+ 56 - 14
activityPages/themeActivity/themeActivity.vue

@@ -1,6 +1,6 @@
 <template>
   <block>
-    <view class="container theme-container" v-if="isUserBindingPhoneNumber">
+    <view class="container theme-container">
       <!-- 筛选部分 -->
       <view class="select-content-activity">
         <view class="top-title" v-if="!type">
@@ -54,7 +54,7 @@
             <view class="title-date" @click="goDetail(item)">
               <text :class="item.ActivityType == 1 ? '' : 'xianxia'">{{ item.ActivityType == 1 ? "线上" : "线下" }}</text>
               {{ item.SourceType == 2 ? "" : item.ActivityTimeText }}
-              <view class="audio-back" v-if="item.AudioLink" @click.stop="PlayBackAll(item)">
+              <view class="audio-back" v-if="item.AudioLink" @click.stop="playBack(item)">
                 <view class="audio-box">
                   <block v-if="item.FileType == 2">
                     <image class="audio-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/video_play.png"></image>
@@ -108,23 +108,34 @@
                         {{ item.City }}
                       </view>
                       <view style="display: flex">
-                        <text v-if="item.IsShowOutboundCall && item.ActivityTypeId == 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
-                        <text v-if="item.IsShowAppointment" @click="summaryIsHandel(item)">{{ item.IsAppointment == 1 ? "取消纪要" : "预约纪要" }}</text>
-                        <text v-if="item.IsShowMeetingReminder" @click="meetingReminderAdd(item.ActivityId, item.IsCancelMeetingReminder)">
+                        <text v-if="item.IsShowOutboundCall && item.ActivityTypeId == 1" class="button"
+												 @click="signupCheck(item, 1)">{{
+                          item.IsSignup == 1 ? "取消外呼" : "预约外呼"
+                        }}</text>
+                        <text v-if="item.IsShowAppointment" @click="summaryHandelCheck(item)">{{
+                          item.IsAppointment == 1 ? "取消纪要" : "预约纪要"
+                        }}</text>
+                        <text v-if="item.IsShowMeetingReminder" @click="meetingReminderCheck(item.ActivityId, item.IsCancelMeetingReminder)">
                           {{ item.IsCancelMeetingReminder == 0 ? "消息提醒" : "取消提醒" }}
                         </text>
                         <view v-if="item.IsShowHelpSsk" style="width: 130rpx">
-                          <text @click="askingGo(item)">帮我带问</text>
+                          <text @click="askingCheck(item)">帮我带问</text>
                         </view>
-                        <text v-if="item.IsShowOutboundCall && item.ActivityTypeId != 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
-                        <text v-if="item.IsShowDetails" @click="goDetail(item)" class="button">查看详情</text>
+                        <text v-if="item.IsShowOutboundCall && item.ActivityTypeId != 1" class="button" @click="signupCheck(item, 1)">{{
+                          item.IsSignup == 1 ? "取消外呼" : "预约外呼"
+                        }}</text>
+                        <text v-if="item.IsShowDetails" @click="goDetailCheck(item)" class="button">查看详情</text>
                         <block v-if="item.IsShowSignup">
                           <block v-if="item.IsCClassMeeting && !item.IsYidongConduct">
-                            <text class="button" @click="signupIsAddOfCancel(item, 3, 'CClass')">{{ item.IsSignup == 1 ? "取消报名" : "我要报名" }}</text>
+                            <text class="button" @click="signupCheck(item, 3, 'CClass')">{{
+                              item.IsSignup == 1 ? "取消报名" : "我要报名"
+                            }}</text>
                           </block>
                           <block v-else>
-                            <text class="button" v-if="item.IsSignup !== 1" @click="wanttosignup(item)">我要报名</text>
-                            <text class="button" v-else @click="signupIsAddOfCancel(item, 2)">{{ item.SignupType == 1 ? "取消外呼" : "取消报名" }}</text>
+                            <text class="button" v-if="item.IsSignup !== 1" @click="wanttosignupCheck(item)">我要报名</text>
+                            <text class="button" v-else @click="signupCheck(item, 2)">{{
+                              item.SignupType == 1 ? "取消外呼" : "取消报名"
+                            }}</text>
                           </block>
                         </block>
                       </view>
@@ -186,7 +197,7 @@
       </view>
       <videoModule :showVideoPop.sync="showVideoPop" :videoPopList="videoPopList" />
     </view>
-    <not-have-login v-else />
+    <!-- <not-have-login v-else /> -->
     <ShowResearchDlg :isResearchModalShow.sync="isResearchModalShow" :jurisdictionList="jurisdictionList" :checkResearchList.sync="checkResearchList" />
     <Loading />
   </block>
@@ -280,7 +291,8 @@ export default {
     },
 
     // 点击了top的标签
-    jumpHandler() {
+    async jumpHandler() {
+			await this.$store.dispatch("showLoginModal")
       if (this.contentDetail.IsJump) {
         if (this.contentDetail.IsResearch) {
           //严选
@@ -330,8 +342,38 @@ export default {
         this.selectInitHandler(this.whichDay, this.activityMonthWeekList);
         this.selectInitHandler(this.selectActiveId, this.activityTypeList);
       }
-      this.isUserBindingPhoneNumber && this.getActivityList();
+      // this.isUserBindingPhoneNumber && 
+			this.getActivityList();
     },
+		// 操作之前 是否登录判断
+		async playBack(item){
+			await this.$store.dispatch("showLoginModal")
+			this.PlayBackAll(item)
+		},
+		async signupCheck(item,type,valName = ""){
+			await this.$store.dispatch("showLoginModal")
+			this.signupIsAddOfCancel(item,type,valName)
+		},
+		async summaryHandelCheck(item){
+			await this.$store.dispatch("showLoginModal")
+			this.summaryIsHandel(item)
+		},
+		async meetingReminderCheck(id, type){
+			await this.$store.dispatch("showLoginModal")
+			this.meetingReminderAdd(id, type)
+		},
+		async askingCheck(item, type = ""){
+			await this.$store.dispatch("showLoginModal")
+			this.askingGo(item, type)
+		},
+		async wanttosignupCheck(item){
+			await this.$store.dispatch("showLoginModal")
+			this.wanttosignup(item)
+		},
+		async goDetailCheck(item){
+			await this.$store.dispatch("showLoginModal")
+			this.goDetail(item)
+		}
   },
   onLoad(option) {
     this.loadInit(option);

+ 12 - 5
components/ItemComponent/activityItem.vue

@@ -10,11 +10,13 @@
       </block>
     </view>
     <view class="content-type"> {{ list.ActivityTypeName || "专项产业调研" }}</view>
-    <view :class="['content-title', 'text-Line', list.ResearchTheme && 'content-min-hight']" v-if="list.ActivityName || list.ResearchTheme">
+    <!-- <view :class="['content-title', 'text-Line', list.ResearchTheme && 'content-min-hight']" v-if="list.ActivityName || list.ResearchTheme">
       <image v-if="list.IsResearchPoints" src="https://hzstatic.hzinsights.com/cygx/icon/Research_Points.png"></image>
 			<image v-else-if="list.IsResearch" src="https://hzstatic.hzinsights.com/cygx/icon/Research_normal.png"></image>
       <image v-else-if="list.IsExternalLabel" src="https://hzstatic.hzinsights.com/cygx/icon/activity_external.png"></image>
-      {{ list.ActivityName || list.ResearchTheme }}
+      {{ list.ActivityName || list.ResearchTheme }} -->
+    <view :class="['content-title', list.ResearchTheme && 'content-min-hight']" v-if="list.ActivityName || list.ResearchTheme">
+      <mp-html :content="richTextClamp(3) + (list.ActivityName || list.ResearchTheme) + '</div>'" />
     </view>
     <view style="display: flex" class="content-text content-min-hight text_twoLine" v-if="list.ActivityTimeText && list.SourceType !== 1">
       <text> 活动时间:{{ list.ActivityTimeText }}</text>
@@ -221,12 +223,12 @@ export default {
       this.addItemData = item || this.itemData;
       if (item && item.IsSignup == 1) {
         if (item.IsResearchPoints) {
-          if (isTimeGreaterThanCurrent(item.SiginupDeadline)) {
+          if (isTimeGreaterThanCurrent(item.CancelDeadline)) {
             uni.showModal({
               confirmText: "知道了",
               showCancel: false,
               confirmColor: "#3385FF",
-              content: "报名名单已提交举办方,若想取消,请联系对口销售",
+              content: "当前时间点已无法取消报名,若想取消,请联系对口销售",
             });
             return;
           }
@@ -277,7 +279,7 @@ export default {
         this.flag = true;
         this.selectShow = false;
         if (this.addItemData.IsResearchPoints) {
-          this.researchPointsHandler(id, type, item);
+          this.researchPointsHandler(id, type, this.addItemData);
         } else {
           this.myIsApplyHandler(id, type, valName);
         }
@@ -555,6 +557,11 @@ export default {
       let index = this.$parent.newDataList.findIndex((key) => key.Activity && key.Activity.ActivityId === item.ActivityId);
       this.$parent.newDataList[index].Activity[value] = num;
     },
+    richTextClamp(val) {
+      return `<div style="${
+        val == 7 ? "min-height: 50px;" : ""
+      }line-clamp: ${val};-webkit-line-clamp: ${val};text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;word-wrap: break-word;word-break: break-all;">`;
+    },
     // 我要报名的请求拆分出来了
     async myIsApplyHandler(id, type, valName = "") {
       const res = await activity.signupAdd({

+ 8 - 1
components/ItemComponent/chartItem.vue

@@ -1,6 +1,8 @@
 <template>
   <view class="container-chart-item" @click="goDetail(list)">
-    <text class="chart-title text_twoLine">{{ list.Title }}</text>
+    <view class="chart-title">
+      <mp-html :content="richTextClamp(2) + list.Title + '</div>'" />
+    </view>
     <view class="item-content-img">
       <image :src="list.BodyHtml" mode=""></image>
     </view>
@@ -51,6 +53,11 @@ export default {
     myChartCollect(id) {
       this.$emit("myChartCollect", id);
     },
+    richTextClamp(val) {
+      return `<div style="${
+        val == 7 ? "min-height: 50px;" : ""
+      }line-clamp: ${val};-webkit-line-clamp: ${val};text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;word-wrap: break-word;word-break: break-all;">`;
+    },
   },
 };
 </script>

+ 21 - 25
components/ItemComponent/roadshowItem.vue

@@ -1,7 +1,7 @@
 <template>
   <view class="container-roadshow-item">
-    <view class="title">
-      <text class="text_twoLine">{{ list.Title }}</text>
+    <view class="title" @click="goDetails">
+       <mp-html :content="richTextClamp(2) + list.Title + '</div>'" />
     </view>
     <view class="cover-item" :style="{ 'background-image': 'url(' + list.BackgroundImg + ')' }">
       <block v-if="list.Type == 2 || list.Type == 3">
@@ -22,11 +22,7 @@
       <view :class="['identification', list.Type != 1 && 'identification-video']"> </view>
       <image
         class="identification-img"
-        :src="
-          list.Type == 1
-            ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/video-iocn.png'
-            : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/audio-icon.png'
-        "
+        :src="list.Type == 1 ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/video-iocn.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/audio-icon.png'"
       ></image>
     </view>
     <view class="title-share">
@@ -34,11 +30,7 @@
         <image @click="myLeavingMessageHandler(list)" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/leaving_message.png"></image>
         <image
           @click="isCollectionHandeler(list)"
-          :src="
-            list.IsCollect
-              ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/collected_icon.png'
-              : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/not_collected.png'
-          "
+          :src="list.IsCollect ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/collected_icon.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/not_collected.png'"
         ></image>
         <button class="share-icon" open-type="share" :data-item="list">
           <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/multimedia/share-btn-icon.png"></image>
@@ -49,12 +41,7 @@
       <audioModule :showAudioPop.sync="showAudioPop" />
     </view>
     <videoModule :showVideoPop.sync="showVideoPop" :curVideoId="curVideoId" :videoPopList="videoPopList" />
-    <modalDialog
-      :isShowhasPermission="isShowhasPermission"
-      :applyForIsShow="applyForIsShow"
-      :jurisdictionList="jurisdictionList"
-      :hasPermission="hasPermission"
-    />
+    <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
   </view>
 </template>
 
@@ -185,13 +172,7 @@ export default {
     async myLeavingMessageHandler(item) {
       await this.$store.dispatch("showLoginModal");
       uni.navigateTo({
-        url:
-          "/activityPages/generationAsk/generationAsk?id=" +
-          (item.Type == 3 ? item.Id : item.ActivityId) +
-          "&type=文章&roadshow=" +
-          item.Type +
-          "&roadshowTitle=" +
-          item.Title,
+        url: "/activityPages/generationAsk/generationAsk?id=" + (item.Type == 3 ? item.Id : item.ActivityId) + "&type=文章&roadshow=" + item.Type + "&roadshowTitle=" + item.Title,
       });
     },
 
@@ -199,6 +180,21 @@ export default {
     async isCollectionHandeler(item) {
       this.$emit("isCollectionHandeler", item);
     },
+    // 跳转
+    goDetails() {
+      console.log(this.list);
+      if (this.list.Type == 3) {
+        // 跳转产业资源包
+        uni.navigateTo({ url: "/reportPages/IndustryReport/IndustryReport?id=" + this.list.IndustryId });
+      } else {
+        uni.navigateTo({ url: "/activityPages/activityDetail/activityDetail?id=" + this.list.ActivityId });
+      }
+    },
+    richTextClamp(val) {
+      return `<div style="${
+        val == 7 ? "min-height: 50px;" : ""
+      }line-clamp: ${val};-webkit-line-clamp: ${val};text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;word-wrap: break-word;word-break: break-all;">`;
+    },
   },
 };
 </script>

+ 2 - 2
components/activity/indexActivity.js

@@ -72,12 +72,12 @@ export default {
 			console.log(this.itemData,item.IsSignup);
       if (item && item.IsSignup == 1) {
         if (item.IsResearchPoints) {
-          if (isTimeGreaterThanCurrent(item.SiginupDeadline)) {
+          if (isTimeGreaterThanCurrent(item.CancelDeadline)) {
             uni.showModal({
               confirmText: "知道了",
               showCancel: false,
               confirmColor: "#3385FF",
-              content: "报名名单已提交举办方,若想取消,请联系对口销售",
+              content: "当前时间点已无法取消报名,若想取消,请联系对口销售",
             });
             return;
           }

+ 3 - 0
components/activity/showResearchDlg.vue

@@ -47,6 +47,9 @@
             <text>本次会议扣除点数:</text>
             <text>{{ checkResearchList.ActivityPoints }}</text>
           </view>
+          <view class="content-box" style="margin-top:10rpx">
+            <text>{{ checkResearchList.CancelPopupMsg }}</text>
+          </view>
         </block>
       </view>
     </u-modal>

+ 3 - 2
components/audioModule/index.vue

@@ -149,8 +149,9 @@ export default {
         this.curTime = parseInt(this.globalBgAudioManager.currentTime);
       }
       this.audioTime = curAudio.PlaySeconds;
-      this.title = curAudio.Name;
-      this.activityTitle = this.$store.state.audioBg.activityTitle;
+      this.title = curAudio.Name ? curAudio.Name.replace(/<\/?font.*?>/g, "") : "";
+      let activityTitle = this.$store.state.audioBg.activityTitle;
+      this.activityTitle = activityTitle ? activityTitle.replace(/<\/?font.*?>/g, "") : "";
       this.play = !this.globalBgAudioManager.paused;
       this.listenAudio();
     },

+ 5 - 4
components/loadingAll/loadingAll.vue

@@ -2,7 +2,7 @@
   <view v-show="loadingShow">
     <view class="request-loading-view">
       <!-- <view class="loading-view"><view class="loading"></view></view> -->
-	  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/all-loading.gif"></image>
+	  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/loading_all.gif"></image>
     </view>
   </view>
 </template>
@@ -28,13 +28,14 @@ export default {
   width: 100%;
   height: 100%;
   z-index: 10000;
-  background-color: rgba(0, 0, 0, 0.6);
+  // background-color: rgba(0, 0, 0, 0.6);
   display: flex;
   justify-content: center;
   align-items: center;
+  // padding-top: 430rpx;
   image {
-	width: 270rpx;
-	height: 282rpx;
+	width: 110rpx;
+	height: 110rpx;
   }
 }
 </style>

+ 39 - 2
components/report/timeLine.vue

@@ -21,15 +21,22 @@
       >
     </view>
     <view v-show="loadTimeLine" class="loadTimeLine"></view>
+		
+		<!-- 视频模块 -->
+		<videoModule :showVideoPop.sync="showVideoPop" :videoPopList="videoPopList" />
+		<audioModule ref="timeLineAudio" :showAudioPop.sync="showAudioPop" />
+		
   </view>
 </template>
 
 <script>
 import { Reports } from "@/config/api.js";
+import videoModule from "@/components/videoModule/index";
+import audioModule from "@/components/audioModule/index";
 
 export default {
   name: "",
-  components: {},
+  components: {videoModule,audioModule},
   props: {
     dataList: {
       type: Array,
@@ -40,6 +47,9 @@ export default {
     return {
       richTextHeight: 10000,
       loadTimeLine: false, //时间线的遮罩
+			showVideoPop:false,
+			videoPopList:{},
+			showAudioPop:false
     };
   },
   computed: {},
@@ -48,6 +58,7 @@ export default {
   mounted() {},
   methods: {
     async goDetailFromTimeLine(item, index) {
+			// console.log(item);
       item.TimeLineId &&
         (await Reports.postTacticsHistory({
           TimeLineId: item.TimeLineId,
@@ -58,7 +69,33 @@ export default {
         uni.navigateTo({
           url: "/reportPages/roadEssence/roadEssence?id=" + item.Id,
         });
-      } else {
+      } else if(item.Resource == 4){
+        if(!item.VideoUrl) return
+				this.showVideoPop=true
+				this.videoPopList={
+					Id: item.Id,
+					ResourceUrl: item.VideoUrl,
+					Title: item.Title,
+					ActivityId:item.Id
+				}
+			}else if(item.Resource == 5){
+        if(!item.VoiceUrl) return
+	      this.$store.commit("audioBg/parseIntAudio", true);
+	      // 判断是否为同一个音频
+	      if (this.$store.state.audioBg.indexId == item.Id) {
+	        if (this.globalBgAudioManager.paused) {
+	          this.globalBgAudioManager.play();
+	        }
+	      } else {
+	        let VoiceList = {
+	          Url: item.VoiceUrl,
+	          Name: item.Title,
+	          PlaySeconds: item.VoicePlaySeconds,
+	        };
+	        this.$store.commit("audioBg/addAudio", { list: VoiceList, indexId: item.Id, activityTitle: item.Title });
+	      }
+	      this.showAudioPop = true;
+			}else {
         !item.ArticleId && !item.ChartId && this.$emit("setRouter");
         if (item.Resource === 2) {
           // 跳转产品内测详情

+ 4 - 0
config/api.js

@@ -75,6 +75,10 @@ export const Search = {
   getArtAndChartList: (params) => {
     return getHttp("/search/artAndChart/listPage", params, 0);
   },
+  /* 综合搜索接口 */
+  getComprehensiveList: (params) => {
+    return getHttp("/search/comprehensive/list", params, 0);
+  },
 };
 /* 图标 */
 export const Chart = {

+ 8 - 1
config/modules/Home.js

@@ -44,5 +44,12 @@ export const Home = {
   bannerHistory: (params) => {
     return postHttp("/banner/add/history", params, 0);
   },
-  
+  /* 获取标签列表 */
+  homeTagListCustom: (params) => {
+    return getHttp("/tag/list/custom", params, 0);
+  },
+  /* 标签记录点击信息 */
+  tagAddHistory: (params) => {
+    return postHttp("/tag/add/history", params, 0);
+  },
 };

+ 110 - 0
pages-search/components/ItemContent.vue

@@ -0,0 +1,110 @@
+<template>
+  <view class="morning-item" @click="isGoDetalisOfDlgHandler(list)">
+    <block v-if="list.Source == 'meetingreviewchapt'">
+      <view class="item-title" v-if="list.IndustryName">
+        <mp-html :content="richTextClamp(3) + `【${list.IndustryName}】晨会精华 ` + '</div>'" />
+      </view>
+      <view class="item-rich-text">
+        <mp-html :content="richTextClamp(10) + list.Content + '</div>'" />
+      </view>
+      <view class="item-time">
+        <text>{{ list.PublishTime }}</text>
+      </view>
+    </block>
+    <block v-else>
+      <view class="item-title" v-if="list.Title">
+        <mp-html :content="richTextClamp(3) + list.Title + '</div>'" />
+      </view>
+      <view class="item-rich-text" v-if="list.Source == 'productinterior'">
+        <mp-html :content="richTextClamp(10) + list.Body + '</div>'" />
+      </view>
+      <view class="item-rich-text" v-else>
+        <mp-html :content="richTextClamp(10) + list.Abstract + '</div>'" />
+      </view>
+      <view class="item-time">
+        <text>{{ list.Source == "productinterior" ? list.PublishTime : list.PublishDate }}</text>
+      </view>
+    </block>
+  </view>
+</template>
+
+<script>
+/*
+Source 字段的分别代表 
+researchsummary     本周研究汇总
+minutessummary      上周纪要汇总
+meetingreviewchapt  晨会精华
+productnterior      产品内测
+*/
+export default {
+  name: "",
+  props: {
+    list: {
+      type: Object,
+      default: {},
+      required: true,
+    },
+  },
+  methods: {
+    // 判断是跳转本周||上周||晨会弹框
+    isGoDetalisOfDlgHandler(item) {
+      // 判断是晨会文章、弹出弹框 通过传统方式进行操控兄弟之间传值
+      if (item.Source == "meetingreviewchapt") {
+        this.$emit("showMorningDialog", item);
+      } else if (item.Source == "productinterior") {
+        // 跳转产品内测详情
+        uni.navigateTo({
+          url: "/reportPages/internalDetials/internalDetials?id=" + item.ProductInteriorId,
+        });
+      } else {
+        let isType = item.Source == "researchsummary" ? 2 : 3;
+        this.$store.dispatch("checkHandle", "/reportPages/reportSecretDetail/reportSecretDetail?type=" + isType + "&id=" + item.ArticleId);
+      }
+    },
+    // 对返回的文本进行处理 多少行进行省略
+    richTextClamp(val) {
+      return `<div style="${
+        val >= 7 ? "min-height: 50px;" : ""
+      }line-clamp: ${val};-webkit-line-clamp: ${val};text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;word-wrap: break-word;word-break: break-all;">`;
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.morning-item {
+  width: 100%;
+  background: #ffffff;
+  box-shadow: 0rpx 3rpx 8rpx 0rpx rgba(0, 0, 0, 0.16);
+  border-radius: 8rpx;
+  padding: 20rpx;
+  margin-bottom: 20rpx;
+  overflow: hidden;
+  .item-title {
+    position: relative;
+    font-size: 32rpx;
+    font-weight: 500;
+    color: #333333;
+    line-height: 38rpx;
+    text-indent: 0.5em;
+    &::before {
+      content: "";
+      position: absolute;
+      top: 5rpx;
+      left: 0;
+      width: 6rpx;
+      height: 31rpx;
+      background-color: #3385ff;
+    }
+  }
+  .item-rich-text {
+    margin: 10rpx 0;
+  }
+  .item-time {
+    display: flex;
+    align-items: center;
+    color: #acacac;
+    font-size: 24rpx;
+    line-height: 28rpx;
+  }
+}
+</style>

+ 120 - 0
pages-search/components/industrialsource.vue

@@ -0,0 +1,120 @@
+<template>
+  <view class="container-report-item" @click="goDetail(list)">
+    <view class="item-title" v-if="list.IndustryName">
+      <mp-html :content="richTextClamp(3) + list.IndustryName + isSourceText(list) + '</div>'" />
+    </view>
+    <view class="item-lable">
+      <view class="lable-list" v-for="item in list.IndustrialSubjectList" :key="item.IndustrialSubjectId">{{ item.SubjectName }}</view>
+    </view>
+    <view class="item-time">
+      <text>{{ list.PublishDate }} &nbsp;&nbsp;更新</text>
+    </view>
+  </view>
+</template>
+
+<script>
+import mpHtml from "@/uni_modules/mp-html/components/mp-html/mp-html.vue";
+export default {
+  name: "",
+  components: { mpHtml },
+  props: {
+    list: {
+      type: Object,
+      default: {},
+      required: true,
+    },
+  },
+  data() {
+    return {};
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {
+    goDetail(item) {
+      if (item.HomeType !== 1) {
+        /* 无需授权且已绑定 检验是或否有权限 */
+        uni.navigateTo({ url: "/reportPages/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId });
+      }
+    },
+    isSourceText(list) {
+      let str = list.Source == 1 ? "(弘则资源包)" : list.Source == 2 ? "(买方研选主题)" : "";
+      return str;
+    },
+    richTextClamp(val) {
+      return `<div style="${
+        val == 7 ? "min-height: 50px;" : ""
+      }line-clamp: ${val};-webkit-line-clamp: ${val};text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;word-wrap: break-word;word-break: break-all;">`;
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.container-report-item {
+  width: 100%;
+  background: #ffffff;
+  box-shadow: 0rpx 3rpx 8rpx 0rpx rgba(0, 0, 0, 0.16);
+  border-radius: 8rpx;
+  padding: 20rpx;
+  margin-bottom: 20rpx;
+  overflow: hidden;
+  .item-title {
+    position: relative;
+    font-size: 32rpx;
+    font-weight: 500;
+    color: #333333;
+    line-height: 38rpx;
+    text-indent: 0.5em;
+    &::before {
+      content: "";
+      position: absolute;
+      top: 5rpx;
+      left: 0;
+      width: 6rpx;
+      height: 31rpx;
+      background-color: #3385ff;
+    }
+  }
+  .item-lable {
+    margin-top: 20rpx;
+    height: 290rpx;
+    display: flex;
+    flex-direction: column;
+    flex-wrap: wrap;
+    overflow: hidden;
+    overflow-x: auto;
+    .lable-list {
+      width: 185rpx;
+      height: 42rpx;
+      border-radius: 39rpx;
+      margin-bottom: 30rpx;
+      margin-right: 30rpx;
+      text-align: center;
+      line-height: 39rpx;
+      background: url(~@/static/img/report_bg.png) no-repeat;
+      background-size: 100% 100%;
+      text-indent: 0em;
+    }
+  }
+
+  .text-Line {
+    text-overflow: -o-ellipsis-lastline;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+
+  .item-time {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    color: #acacac;
+    font-size: 24rpx;
+    line-height: 28rpx;
+  }
+}
+</style>

+ 113 - 0
pages-search/components/morningDlg.vue

@@ -0,0 +1,113 @@
+<template>
+  <view class="morning-dlg">
+    <van-popup :show="isMorningShow" @close="onClose" round>
+      <view class="close-iocn">
+        <van-icon @click="onClose" color="#333" name="cross" />
+      </view>
+      <view class="content">
+        <view class="content-box">
+          <view class="report-content-title">{{ morningItem.IndustryName }}</view>
+          <view class="content-body">
+            <mp-html :content="strFontSize(morningItem.Content)" />
+          </view>
+        </view>
+        <view class="bottom-btn">
+          <view class="btn" @click="lookPrevious"> 查看往期汇总</view>
+          <view class="btn" @click="lookDetails"> 查看资源包</view>
+        </view>
+      </view>
+    </van-popup>
+  </view>
+</template>
+
+<script>
+export default {
+  props: {
+    isMorningShow: {
+      type: Boolean,
+      default: false,
+      required: true,
+    },
+    morningItem: {
+      type: Object,
+      default: {},
+      required: true,
+    },
+  },
+  data() {
+    return {
+      show: false,
+    };
+  },
+  methods: {
+    // 关闭弹框
+    onClose() {
+      this.$emit("update:isMorningShow", false);
+    },
+    // 查看往期汇总
+    lookPrevious() {
+      uni.navigateTo({
+        url: "/reportPages/morningAll/morningAll",
+      });
+      this.onClose();
+    },
+    // 查看资源包
+    lookDetails() {
+      uni.navigateTo({
+        url: "/reportPages/IndustryReport/IndustryReport?id=" + this.morningItem.IndustryId,
+      });
+      this.onClose();
+    },
+  },
+};
+</script>
+
+<style scope lang="scss">
+.morning-dlg {
+  .close-iocn {
+    padding: 25rpx 35rpx;
+    display: flex;
+    justify-content: flex-end;
+  }
+  .content {
+    width: 632rpx;
+    background-color: #fff;
+    padding: 0rpx 30rpx 100rpx 30rpx;
+    .content-box {
+      width: 100%;
+      min-height: 400rpx;
+      max-height: 830rpx;
+      overflow: hidden;
+      overflow-y: auto;
+    }
+    .bottom-btn {
+      position: fixed;
+      bottom: 0;
+      left: 0;
+      width: 100%;
+      height: 82rpx;
+      display: flex;
+      align-items: center;
+      background-color: #fff;
+      border-top: 1rpx solid #f0f0f0;
+      color: #3385ff;
+      .btn {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        height: 100%;
+      }
+      :first-child {
+        border-right: 3rpx solid #f0f0f0;
+      }
+    }
+    .content-body {
+      margin-top: 15rpx;
+    }
+  }
+  .report-content-title {
+    text-align: center;
+  }
+}
+</style>

+ 163 - 0
pages-search/components/synthetical.vue

@@ -0,0 +1,163 @@
+<template>
+  <view>
+    <view class="content-ul" v-if="haveData">
+      <view class="item-ul">
+        <block v-for="(item, index) in newDataList" :key="index">
+          <view v-if="index % 2 == 0 && item.IsShowData">
+            <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
+            <block v-if="item.Source === 'newchart'">
+              <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
+            </block>
+            <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
+              <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
+            </block>
+            <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
+              <ActivityItem :list="item.Activity" />
+            </block>
+            <block v-if="item.Source === 'industrialsource'">
+              <Industrialsource :list="item.IndustrialResource" />
+            </block>
+            <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
+              <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
+            </block>
+          </view>
+        </block>
+      </view>
+      <view class="item-ul">
+        <block v-for="(item, index) in newDataList" :key="index">
+          <view v-if="index % 2 !== 0 && item.IsShowData">
+            <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
+            <block v-if="item.Source === 'newchart'">
+              <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
+            </block>
+            <block v-if="item.Source === 'industrialsource'">
+              <Industrialsource :list="item.IndustrialResource" />
+            </block>
+            <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
+              <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
+            </block>
+            <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
+              <ActivityItem :list="item.Activity" />
+            </block>
+            <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
+              <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
+            </block>
+          </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>
+    <morning-dlg v-if="isMorningShow" :isMorningShow.sync="isMorningShow" :morningItem.sync="morningItem" />
+  </view>
+</template>
+
+<script>
+import { Search } from "@/config/api";
+import ChartItem from "@/components/ItemComponent/chartItem.vue";
+import ReportItem from "@/components/ItemComponent/reportItem.vue";
+import RoadshowItem from "@/components/ItemComponent/roadshowItem.vue";
+import ActivityItem from "@/components/ItemComponent/activityItem.vue";
+import ItemContent from "./ItemContent.vue";
+import MorningDlg from "./morningDlg.vue";
+import Industrialsource from "./industrialsource.vue";
+export default {
+  components: { Industrialsource, ChartItem, ReportItem, RoadshowItem, ActivityItem, ItemContent, MorningDlg },
+  props: {
+    searchTxt: {
+      type: String,
+      default: "",
+    },
+    isSyntheticalShow: {
+      type: Boolean,
+      default: false,
+    },
+    pageNumSynthetical: {
+      type: Number,
+      default: "",
+    },
+  },
+  data() {
+    return {
+      newDataList: [],
+      isMorningShow: false, // 晨会的弹框
+      morningItem: {}, // 晨会的弹框
+      haveData: true,
+    };
+  },
+  watch: {
+    pageNumSynthetical: {
+      handler(val) {
+        if (this.isSyntheticalShow) {
+          this.getComprehensiveList();
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  computed: {},
+  components: {},
+  methods: {
+    // 获取数据
+    async getComprehensiveList() {
+      const res = await Search.getComprehensiveList({
+        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
+        CurrentIndex: this.pageNumSynthetical,
+        PageSize: 10,
+      });
+      if (res.Ret === 200) {
+        this.$parent.status = !res.Data.Paging.IsEnd ? "loadmore" : "nomore";
+        let listArr = [];
+        res.Data.List &&
+          res.Data.List.forEach((item) => {
+            let obj = {
+              Source: item.Source,
+              Article: item.Article,
+              Newchart: item.Newchart,
+              Activity: item.Activity || item.Activityspecial,
+              Roadshow: item.Roadshow || item.Activityvideo || item.Activityvoice,
+              ThreeSummary: item.Researchsummary || item.Minutessummary || item.Meetingreviewchapt || item.ProductInterior,
+              IndustrialResource: item.IndustrialResource,
+            };
+            if (obj.Article && obj.Article.BodyHighlight) {
+              obj.Article.Body = obj.Article.BodyHighlight;
+            }
+            listArr.push({ ...obj, IsShowData: obj.Article || obj.Newchart || obj.Roadshow || obj.Activity || obj.ThreeSummary || obj.IndustrialResource });
+          });
+        this.newDataList = this.pageNumSynthetical === 1 ? listArr : [...this.newDataList, ...listArr];
+        this.haveData = this.newDataList && this.newDataList.length ? true : false;
+      }
+    },
+    // 晨会弹框显示
+    showMorningDialog(item) {
+      console.log(item);
+      if (item.Source == "meetingreviewchapt") {
+        this.isMorningShow = true;
+        this.morningItem = item;
+      }
+    },
+    // 处理数据
+    dataListItem(item) {
+      let obj = item.ThreeSummary ? { ...item.ThreeSummary, Source: item.Source } : {};
+      return obj;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.content-ul {
+  padding: 30rpx 10rpx;
+  display: flex;
+  justify-content: space-between;
+  .item-ul {
+    width: 49%;
+    &:first-child {
+      margin-right: 10rpx;
+    }
+  }
+}
+</style>

+ 33 - 92
pages-search/indedxSearch/indedxSearch.vue

@@ -20,41 +20,19 @@
             <text @click="searchHandle" style="color: #3385ff">搜索</text>
           </view>
         </view>
+        <!-- // 综合及各种类型的的tabs -->
         <view class="search-tabs" v-if="isResult">
           <view :class="['tabs-item', tabsActive == item.id && 'active']" v-for="item in tabsList" :key="item.id" @click="tabsHandel(item)">
             {{ item.title }}
             <view class="item-act" v-if="tabsActive == item.id"></view>
           </view>
         </view>
+        <!-- // 活动微路演的筛选 -->
         <block v-if="isResult">
-          <view class="more-summary more-box" v-if="tabsActive == 1 && haveResultSummary">
-            <view>
-              <text class="more-text"> 纪要/图表 </text>
-            </view>
-            <view style="display: flex; align-items: center">
-              <!-- <view class="summary-select">
-              <text @click="summarySelectHandler(item, '纪要')" :class="['select-item', summarySelectActive == item.value && 'active-item']" v-for="item in summarySelect" :key="item.value">{{
-                item.name
-              }}</text>
-            </view> -->
-              <view v-if="tabsActive == 1" class="more-rivet" @click="tabsActiveMore(2)">
-                更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon>
-              </view>
-            </view>
-          </view>
-          <view
-            class="activity-select"
-            style="display: flex; align-items: center; justify-content: flex-end"
-            v-if="tabsActive == 4 || tabsActive == 5"
-          >
+          <view class="activity-select" style="display: flex; align-items: center; justify-content: flex-end" v-if="tabsActive == 4 || tabsActive == 5">
             <block v-for="item in activitySelect" :key="item.type">
               <view :class="['summary-select', item.type == 5 && 'select-roadshow']" v-if="tabsActive == item.type">
-                <text
-                  @click="summarySelectHandler(key, item.name)"
-                  :class="['select-item', activitySelectActive == key.value && 'active-item']"
-                  v-for="key in item.list"
-                  :key="key.value"
-                >
+                <text @click="summarySelectHandler(key, item.name)" :class="['select-item', activitySelectActive == key.value && 'active-item']" v-for="key in item.list" :key="key.value">
                   {{ key.name }}
                 </text>
               </view>
@@ -68,12 +46,7 @@
           <view class="history" v-if="key.title !== '搜索历史' || (key.title == '搜索历史' && historySearchList.length)">
             <view class="history-title title">
               <text>{{ key.title }}</text>
-              <image
-                v-if="key.imgShown"
-                @click="clearHistory"
-                src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png"
-                class="empty_ico"
-              ></image>
+              <image v-if="key.imgShown" @click="clearHistory" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico"></image>
             </view>
             <view class="history-item">
               <block v-for="(item, index) in relyOn(key.title)" :key="item">
@@ -88,46 +61,14 @@
       </view>
       <view v-else class="content">
         <block v-if="haveResult">
-          <view>
-            <summary-chart
-              :resultList="tabsActive == 1 ? resultList.slice(0, 10) : resultList"
-              :tabsActiveChild="tabsActive"
-              v-if="resultList.length && (tabsActive == 2 || tabsActive == 1)"
-            />
-            <view class="more-report more-box" v-if="tabsActive === 1 && haveResultReport">
-              <text class="more-text"> 资源包/报告 </text>
-              <view>
-                <view class="more-rivet" @click="tabsActiveMore(3)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
-              </view>
-            </view>
-            <reportPage
-              @updateFllow="updateFllow"
-              :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>
-              <view>
-                <view class="more-rivet" @click="tabsActiveMore(4)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
-              </view>
-            </view>
-            <activityBack
-              :collectLists="collectList"
-              :tabsActiveSearch="tabsActive"
-              v-if="collectList.length && (tabsActive == 4 || tabsActive == 1)"
-            />
-            <view class="more-activity more-box" v-if="tabsActive === 1 && haveResultRoadshow">
-              <text class="more-text"> 微路演 </text>
-              <view>
-                <view class="more-rivet" @click="tabsActiveMore(5)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
-              </view>
-            </view>
-            <roadshowPage
-              :roadshowPageList="roadshowPageList"
-              :tabsRoadshowSearch="tabsActive"
-              v-if="roadshowPageList.length && (tabsActive == 5 || tabsActive == 1)"
-            />
+          <block v-if="tabsActive === 1">
+            <synthetical :searchTxt="searchTxt" :isSyntheticalShow="isSyntheticalShow" :pageNumSynthetical="pageNumSynthetical" />
+          </block>
+          <view v-else>
+            <summary-chart :resultList="tabsActive == 1 ? resultList.slice(0, 10) : resultList" :tabsActiveChild="tabsActive" v-if="resultList.length && (tabsActive == 2 || tabsActive == 1)" />
+            <reportPage @updateFllow="updateFllow" :reportPageData="reportPageData" id="container-report-page" v-if="Object.keys(reportPageData).length && (tabsActive == 3 || tabsActive == 1)" />
+            <activityBack :collectLists="collectList" :tabsActiveSearch="tabsActive" v-if="collectList.length && (tabsActive == 4 || tabsActive == 1)" />
+            <roadshowPage :roadshowPageList="roadshowPageList" :tabsRoadshowSearch="tabsActive" v-if="roadshowPageList.length && (tabsActive == 5 || tabsActive == 1)" />
           </view>
         </block>
         <view class="nodata" v-else>
@@ -150,9 +91,10 @@ import activityBack from "../components/activityBack.vue";
 import reportPage from "../components/report.vue";
 import roadshowPage from "../components/roadshow.vue";
 import NotHaveLogin from "../../components/notHaveLogin.vue";
+import Synthetical from "../components/synthetical.vue";
 
 export default {
-  components: { summaryChart, activityBack, reportPage, roadshowPage, NotHaveLogin },
+  components: { summaryChart, activityBack, reportPage, roadshowPage, NotHaveLogin, Synthetical },
   data() {
     return {
       searchTxt: "",
@@ -175,7 +117,8 @@ export default {
       activitySelectActive: "0",
       refresh: false, //正在下拉
       pageNum: 1,
-      pageSize: null,
+      pageNumSynthetical: 0,
+      pageSize: 10,
       totalPage: 0,
       status: "loadmore",
       loadText: {
@@ -184,6 +127,7 @@ export default {
         nomore: "已经到底了",
       },
       isSearchKeyWord: [],
+      isSyntheticalShow: false,
     };
   },
   computed: {
@@ -212,15 +156,7 @@ export default {
         : this.haveResultRoadshow;
     },
   },
-  watch: {
-    tabsActive: {
-      handler(val) {
-        val == 1 ? (this.pageSize = 5) : (this.pageSize = 10);
-      },
-      deep: true,
-      immediate: true,
-    },
-  },
+  watch: {},
   methods: {
     //搜索事件
     searchHandle() {
@@ -272,16 +208,16 @@ export default {
     },
     //搜索
     async getDataList() {
+      this.pageNumSynthetical = 0;
       this.isResult = true;
+      this.isSyntheticalShow = false;
       if (!this.isSearchKeyWord.includes(this.searchTxt)) {
         this.isSearchKeyWord.push(this.searchTxt);
         await User.userSearchKeyWordLog({ KeyWord: this.searchTxt });
       }
       if (this.tabsActive == 1) {
-        this.synthesiz();
-        this.getReportList();
-        this.getActivityBackList();
-        this.getRoadshowList();
+        this.isSyntheticalShow = true;
+        this.pageNumSynthetical = 1;
       } else if (this.tabsActive == 2) {
         this.synthesiz();
       } else if (this.tabsActive == 3) {
@@ -297,7 +233,7 @@ export default {
       const res = await Search.getArtAndChartList({
         KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
         OrderColumn: this.summarySelectActive,
-        PageSize: 10,
+        PageSize: this.pageSize,
         CurrentIndex: this.pageNum,
         ListType: 1,
       });
@@ -376,7 +312,7 @@ export default {
     async getReportList() {
       const res = await Report.getSearchReportAndResource({
         KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
-        PageSize: this.tabsActive == 1 ? 5 : "",
+        PageSize: "",
       });
       if (res.Ret === 200) {
         if (this.refresh) {
@@ -394,7 +330,7 @@ export default {
     //获取微路演
     async getRoadshowList() {
       const res = await Home.microRoadshowList({
-        PageSize: this.pageSize == 5 ? 6 : this.pageSize,
+        PageSize: this.pageSize,
         CurrentIndex: this.pageNum,
         KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
         Filter: Number(this.activitySelectActive),
@@ -451,7 +387,7 @@ export default {
         duration: 300,
       });
       this.pageNum = 1;
-      this.pageSize = this.tabsActive == 1 ? 5 : 10;
+      this.pageNumSynthetical = 0;
       this.totalPage = 0;
       this.summarySelectActive = "Matching";
       this.activitySelectActive = "0";
@@ -510,9 +446,13 @@ export default {
   }),
   // 上拉加载this.resultList
   onReachBottom: Throttle(function () {
-    if (this.tabsActive == 1 || this.tabsActive == 3) return;
+    if (this.tabsActive == 3) return;
     if (this.status === "nomore") return;
     this.status = "loading";
+    if (this.tabsActive == 1) {
+      this.pageNumSynthetical++;
+      return;
+    }
     this.pageNum++;
     this.getDataList();
   }),
@@ -622,6 +562,7 @@ export default {
     }
     .history {
       height: 270rpx;
+      overflow: hidden;
       .history-title {
         display: flex;
         align-items: center;

+ 4 - 5
pages/activity/activity.vue

@@ -11,7 +11,7 @@
           </view>
         </template>
       </search-bar>
-      <view class="screen-item" v-if="isUserBindingPhoneNumber">
+      <view class="screen-item">
         <text :class="isShowJurisdiction ? 'active' : ''" @click="permissioActivity">有权限行业</text>
         <!-- 各种状态选择 -->
         <view class="select-conyent" ref="select-conyent">
@@ -39,7 +39,7 @@
     <!-- 筛选状态 -->
 
     <!-- 活动列表 -->
-    <block v-if="isUserBindingPhoneNumber">
+    <block>
       <view class="collect-activity" v-if="haveData">
 				<activityTypeList :dataList="collectTypeList" :chartPermissionIds="chartPermissionIds"
 				 :isShowJurisdiction="isShowJurisdiction" :whichDay="whichDay" containerStyle="padding: 34rpx;display: flex;"/>
@@ -51,7 +51,7 @@
       </view>
       <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
     </block>
-    <not-have-login v-else />
+    <!-- <not-have-login v-else /> -->
     <Loading />
   </view>
 </template>
@@ -255,14 +255,13 @@ export default {
         });
       }
     },
-
     //去往搜索事件
     goSearch() {
       this.$store.dispatch("checkHandle", "/pages-search/indedxSearch/indedxSearch?source=活动页面");
     },
     //去往 活动回放activityPlayBack
     async activityPlayBack() {
-      await this.$store.dispatch("showLoginModal");
+      // await this.$store.dispatch("showLoginModal");
       uni.navigateTo({ url: "/activityPages/playBack/playBack" });
     },
     // 跳转已结束活动

+ 135 - 39
pages/index/index.vue

@@ -31,47 +31,64 @@
           </view>
         </swiper>
       </view>
-      <view class="content-ul">
-        <view class="item-ul">
-          <block v-for="(item, index) in newDataList" :key="index">
-            <view v-if="index % 2 == 0 && item.IsShowData">
-              <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
-              <block v-if="item.Source === 'newchart'">
-                <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
-              </block>
-              <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
-                <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
-              </block>
-              <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
-                <ActivityItem :list="item.Activity" />
-              </block>
-              <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
-                <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
-              </block>
-            </view>
-          </block>
+      <view
+        v-if="isTopHeight"
+        class="lable-select-content"
+        :style="[{ top: isTopHeight }, { 'background-color': isScrollNumber >= 175 ? '#fff' : '#f5f6fa' }, { 'box-shadow': isScrollNumber >= 175 ? '0rpx 3rpx 8rpx 0rpx rgba(0, 0, 0, 0.16)' : '' }]"
+      >
+        <view class="lable-row" v-for="(item, index) in lableIsRows" :key="index">
+          <view :class="['lable-item', lable.isAct && 'item-active']" v-for="lable in item" :key="lable.TagId" @click="lableKeysHandler(lable)">
+            {{ lable.TagName }}
+          </view>
         </view>
-        <view class="item-ul">
-          <block v-for="(item, index) in newDataList" :key="index">
-            <view v-if="index % 2 !== 0 && item.IsShowData">
-              <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
-              <block v-if="item.Source === 'newchart'">
-                <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
-              </block>
-              <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
-                <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
-              </block>
-              <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
-                <ActivityItem :list="item.Activity" />
-              </block>
-              <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
-                <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
-              </block>
-            </view>
-          </block>
+      </view>
+      <block v-if="newDataList && newDataList.length">
+        <view class="content-ul">
+          <view class="item-ul">
+            <block v-for="(item, index) in newDataList" :key="index">
+              <view v-if="index % 2 == 0 && item.IsShowData">
+                <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
+                <block v-if="item.Source === 'newchart'">
+                  <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
+                </block>
+                <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
+                  <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
+                </block>
+                <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
+                  <ActivityItem :list="item.Activity" />
+                </block>
+                <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
+                  <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
+                </block>
+              </view>
+            </block>
+          </view>
+          <view class="item-ul">
+            <block v-for="(item, index) in newDataList" :key="index">
+              <view v-if="index % 2 !== 0 && item.IsShowData">
+                <block v-if="item.Source === 'article'"> <ReportItem :list="item.Article" /></block>
+                <block v-if="item.Source === 'newchart'">
+                  <ChartItem :list="item.Newchart" :isMyChartCollection="isMyChartCollection" @myChartIsTop="myChartIsTop" @myChartCollect="myChartCollect" />
+                </block>
+                <block v-if="item.Source === 'roadshow' || item.Source === 'activityvideo' || item.Source === 'activityvoice'">
+                  <RoadshowItem :list="item.Roadshow" @isCollectionHandeler="isCollectionHandeler" />
+                </block>
+                <block v-if="item.Source === 'activity' || item.Source === 'activityspecial'">
+                  <ActivityItem :list="item.Activity" />
+                </block>
+                <block v-if="['researchsummary', 'minutessummary', 'meetingreviewchapt', 'productinterior'].includes(item.Source)">
+                  <item-content :list="dataListItem(item)" @showMorningDialog="showMorningDialog" />
+                </block>
+              </view>
+            </block>
+          </view>
         </view>
+        <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="page_no > 1" />
+      </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 style="">暂无数据</text>
       </view>
-      <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="page_no > 1" />
       <view v-if="newDataList.length === 4" class="bind-btn">
         <view @click="goLogin"> 为了给您提供更好的使用体验,<br />请 <text class="login-text">登录</text>后再查看此页面内容</view>
       </view>
@@ -124,15 +141,38 @@ export default {
       showVideoPopUp: false, //
       videoPopListUp: {},
       isScrollNumber: 0,
+      dataListLable: [], // 标签的数据
+      actIdLable: "", // 标签选择后的ID
+      isTopHeight: "",
     };
   },
   computed: {
     bannerClass() {
+      //判断banner的样式
       return this.bannerDataList.length > 0 && this.isScrollNumber < 235;
     },
     bannerPosition() {
       return this.bannerDataList.length > 0;
     },
+    lableIsRows() {
+      //处理标签的样式
+      const numTags = this.dataListLable.length;
+      const rows = [];
+
+      if (numTags <= 4) {
+        rows.push(this.dataListLable);
+      } else if (numTags > 4 && numTags <= 8) {
+        const firstRow = this.dataListLable.slice(0, 4);
+        const secondRow = this.dataListLable.slice(4);
+        rows.push(firstRow, secondRow);
+      } else if (numTags >= 9) {
+        const firstRow = this.dataListLable.filter((_, index) => index % 2 === 0);
+        const secondRow = this.dataListLable.filter((_, index) => index % 2 !== 0);
+        rows.push(firstRow, secondRow);
+      }
+
+      return rows;
+    },
   },
   components: {
     ChartItem,
@@ -151,6 +191,7 @@ export default {
       const res = await Home.getNewList({
         PageSize: this.pageSize,
         CurrentIndex: this.page_no,
+        TagIds: this.actIdLable,
       });
       if (res.Ret === 200) {
         this.status = !res.Data.Paging.IsEnd ? "loadmore" : "nomore";
@@ -284,6 +325,29 @@ export default {
           });
       }
     },
+    async lableKeysHandler(item) {
+      let actId = [];
+      this.$set(item, "isAct", !item.isAct);
+      this.lableIsRows.forEach((item) => {
+        item.forEach((_) => {
+          _.isAct && actId.push(_.TagId);
+        });
+      });
+      this.page_no = 1;
+      this.actIdLable = actId.join(",");
+      this.getNewList();
+      if (!item.isAct) return;
+      const res = await Home.tagAddHistory({
+        TagId: item.TagId,
+      });
+    },
+    // 或者标签内容
+    async homeTagListCustom() {
+      const res = await Home.homeTagListCustom();
+      if (res.Ret === 200) {
+        this.dataListLable = res.Data || [];
+      }
+    },
   },
   mounted() {
     uni.$on("updateNewList", (data) => {
@@ -294,6 +358,9 @@ export default {
   onLoad() {
     this.getBannerList();
     this.getNewList();
+    this.homeTagListCustom();
+    let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
+    this.isTopHeight = menuButtonInfo.height + menuButtonInfo.top + 7 + "px";
   },
   onShow() {
     this.getUserInfo();
@@ -334,7 +401,7 @@ export default {
       };
     } else {
       return {
-        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "弘则研究—聚焦 前瞻 客观 深度",
+        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "弘则研究—聚焦·前瞻·客观·深度",
         path: "/pages/index/index",
         success: (res) => {},
         fail: (err) => {},
@@ -468,5 +535,34 @@ export default {
       color: #3385ff;
     }
   }
+  .lable-select-content {
+    position: sticky;
+    left: 0;
+    top: 88px;
+    overflow: hidden;
+    overflow-x: auto;
+    width: 100%;
+    background-color: #fff;
+    padding: 10rpx 0 10rpx 20rpx;
+    z-index: 9;
+
+    .lable-row {
+      display: flex;
+    }
+    .lable-item {
+      flex-shrink: 0;
+      padding: 8rpx 40rpx;
+      background: #ffffff;
+      border: 1rpx solid #dcdfe6;
+      border-radius: 48rpx;
+      margin-right: 20rpx;
+      white-space: nowrap;
+      margin-top: 20rpx;
+    }
+    .item-active {
+      background: #3385ff;
+      color: #fff;
+    }
+  }
 }
 </style>