bd 2 年 前
コミット
c92a6d7bee
46 ファイル変更3412 行追加1212 行削除
  1. 16 4
      App.vue
  2. 4 1
      activityPages/activityDetail/activityDetail.vue
  3. 76 38
      activityPages/activityDetail/jurisdiction/components.vue
  4. 5 1
      activityPages/activitySearch/activitySearch.vue
  5. 0 35
      activityPages/components/index.js
  6. 5 0
      activityPages/editOutbound/editOutbound.vue
  7. 5 0
      activityPages/generationAsk/generationAsk.vue
  8. 411 0
      activityPages/specialDetail/specialDetail.vue
  9. 248 0
      activityPages/specialResearchPage/specialResearchPage.vue
  10. 4 1
      activityPages/themeActivity/themeActivity.vue
  11. 54 0
      components/freeCharge.vue
  12. 35 0
      components/freeMixin.js
  13. 26 13
      components/modalDialog.vue
  14. 75 2
      config/api.js
  15. 3 3
      config/config.js
  16. 2 2
      main.js
  17. 5 0
      pageMy/advice/advice.vue
  18. 6 1
      pageMy/applyInterview/applyInterview.vue
  19. 5 1
      pageMy/applyResult/applyResult.vue
  20. 6 1
      pageMy/browseHistory/browseHistory.vue
  21. 119 0
      pageMy/chartPage/chartPage.vue
  22. 36 0
      pageMy/excessivePages/excessivePages.vue
  23. 151 0
      pageMy/freeTrial/freeTrial.vue
  24. 32 28
      pageMy/login/login.vue
  25. 6 1
      pageMy/myCollection/myCollection.vue
  26. 180 0
      pageMy/mySchedulepage/mySchedulepage.vue
  27. 69 30
      pageMy/reportDetail/reportDetail.vue
  28. 382 0
      pageMy/reportPage/reportPage.vue
  29. 294 199
      pageMy/search/search.vue
  30. 63 0
      pageMy/transitionPages/transitionPages.vue
  31. 71 13
      pages.json
  32. 82 75
      pages/activity/activity.vue
  33. 524 228
      pages/index/index.vue
  34. 0 341
      pages/login/login.vue
  35. 277 155
      pages/my/my.vue
  36. 1 1
      pages/pcWebViev/pcWebViev.vue
  37. 4 1
      pages/reportForm/reportForm.vue
  38. 7 2
      reportPages/IndustryReport/IndustryReport.vue
  39. 0 1
      reportPages/index.scss
  40. 7 2
      reportPages/industrialReport/industrialReport.vue
  41. 6 1
      reportPages/myAskPage/myAskPage.vue
  42. 6 1
      reportPages/reportSearch/reportSearch.vue
  43. 49 11
      reportPages/reportSecretDetail/reportSecretDetail.vue
  44. 48 17
      reportPages/roadEssence/roadEssence.vue
  45. 7 2
      reportPages/secretDetails/secretDetails.vue
  46. BIN
      static/img/nodata.png

+ 16 - 4
App.vue

@@ -197,13 +197,13 @@ button {
 .nodata {
   text-align: center;
   display: block;
-  color: #d8d8d8;
+  color: #666666;
   padding: 200rpx 0;
   margin: 0 auto;
   .nodata_ico {
-    width: 150rpx;
-    height: 162rpx;
-    margin-bottom: 50rpx;
+    width: 374rpx;
+    height: 288rpx;
+    margin-bottom: 30rpx;
   }
   .nodata_img {
     width: 374rpx;
@@ -274,4 +274,16 @@ button {
   background-color: #f0f0f0;
   color: #999999;
 }
+.free-charge {
+  position: fixed;
+  display: flex;
+  align-items: center;
+  bottom: 260rpx;
+  right: 41rpx;
+  height: 156rpx;
+  z-index: 999;
+}
+.footer-free-charge {
+  z-index: 99999;
+}
 </style>

+ 4 - 1
activityPages/activityDetail/activityDetail.vue

@@ -204,6 +204,7 @@
     <view v-else>
       <jurisdiction :idAct="id" :haveAuth="haveAuth" :industryMsg="industryMsg" :msgType="msgType" :sellerMobile="sellerMobile" :sellerName="sellerName"></jurisdiction>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
@@ -212,6 +213,7 @@ import { activity, User } from "@/config/api.js";
 import modalDialog from "@/components/modalDialog.vue";
 import areaCode from "@/activityPages/components/areaCode.vue";
 import jurisdiction from "./jurisdiction/components.vue";
+import freeCharge from "@/components/freeCharge";
 let app = getApp({ allowDefault: true });
 export default {
   data() {
@@ -254,6 +256,7 @@ export default {
     modalDialog,
     jurisdiction,
     areaCode,
+    freeCharge,
   },
   watch: {
     haveAuth: {
@@ -479,7 +482,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: "活动详情",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "活动详情",
       path: "/activityPages/activityDetail/activityDetail?id=" + this.id,
       success: (res) => {},
       fail: (err) => {},

+ 76 - 38
activityPages/activityDetail/jurisdiction/components.vue

@@ -1,36 +1,37 @@
 <template>
   <view class="noauth-cont" v-if="haveAuth === 2 || haveAuth === 3 || haveAuth === 4 || haveAuth === 5">
-    <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="!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>
+      <block v-if="haveAuth == 4 || haveAuth == 5">
+        <view class="tip">{{ industryMsg }}</view>
+        <view class="btn-cont" @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>
+      <view v-if="haveAuth === 2" class="btn-cont" @click="sellerApplyAuth"> 立即申请 </view>
+      <view class="btn-cont back-btn" @click="backIndex"> 返回</view>
     </block>
-    <block v-if="haveAuth == 4 ">
-      <view class="tip">{{ industryMsg }}</view>
-      <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+    <block v-else>
+      <text class="moneh-text"> 上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡 </text>
+      <img src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/month_card.png" class="month_card" alt="" />
+      <view class="btn-cont btn-dl" @click="applyAuth"> 立即上传 </view>
+      <view class="btn-cont month-back" @click="backIndex"> 返回</view>
     </block>
-     <block v-if="haveAuth == 5 ">
-      <view class="tip">{{ industryMsg }}</view>
-      <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
-    </block>
-    <view class="tip" v-if="haveAuth === 2">
-      <text style="margin-bottom: 20rpx">
-        <!-- {{ industryMsg }} -->
-        您暂无权限参加此活动
-      </text>
-      <text>若想参加可以联系对口销售 </text>
-      <text @click="callPhone(sellerMobile)"
-        >{{ sellerName }}:<text style="color: #d4bf86; display: inline-block">{{ sellerMobile }}</text></text
-      >
-      <text>申请开通对应的试用权限</text>
-    </view>
-     <view v-if="haveAuth === 2" class="btn-cont" @click="sellerApplyAuth"> 立即申请 </view>
-    <view class="btn-cont back-btn" @click="backIndex"> 返回</view>
   </view>
 </template>
 
 <script>
-import { User } from "@/config/api.js";
+import { User, FreeButton } from "@/config/api.js";
 export default {
   props: {
     haveAuth: {
@@ -53,10 +54,15 @@ export default {
       type: String,
       required: true,
     },
-    idAct:{
+    idAct: {
       type: Number,
       required: true,
-    }
+    },
+  },
+  data() {
+    return {
+      isShowAlert: false,
+    };
   },
   methods: {
     /* 无权限申请开通权限 */
@@ -66,7 +72,9 @@ export default {
         ? uni.navigateTo({
             url: "/pageMy/applyTrial/applyTrial?tryType=Activity&detailId=" + this.idAct,
           })
-        : this.haveAuth === 5 ? this.sellerApplyAuth()  : uni.showModal({
+        : this.haveAuth === 5
+        ? this.sellerApplyAuth()
+        : uni.showModal({
             title: "",
             content: "您已经提交过申请了,请耐心等待",
             showCancel: false,
@@ -75,23 +83,23 @@ export default {
           });
     },
     //销售的立即申请
-    sellerApplyAuth(){
+    sellerApplyAuth() {
       User.applyTry({
-            TryType : 'Activity',
-            DetailId: this.idAct
+        TryType: "Activity",
+        DetailId: this.idAct,
       }).then((res) => {
-          if(res.Ret === 200) {
-            uni.showModal({
+        if (res.Ret === 200) {
+          uni.showModal({
             title: "",
             content: "提交申请成功,请耐心等待",
             showCancel: false,
             confirmColor: "#3385FF",
             success: function (res) {
-              this.backIndex()
+              this.backIndex();
             },
           });
-          }
-      })
+        }
+      });
     },
     // 返回首頁
     backIndex() {
@@ -108,6 +116,16 @@ export default {
         phoneNumber: num,
       });
     },
+    //获取权限弹窗是否展示免费月卡接口
+    async userIsShowAlert() {
+      const res = await FreeButton.userIsShowAlert();
+      if (res.Ret === 200) {
+        this.isShowAlert = res.Data.IsShow;
+      }
+    },
+  },
+  mounted() {
+    this.userIsShowAlert();
   },
 };
 </script>
@@ -150,8 +168,8 @@ export default {
 
     &.back-btn {
       background: #fff !important;
-      color: #2C83FF;
-      border: 1px solid #2C83FF;
+      color: #2c83ff;
+      border: 1px solid #2c83ff;
       margin-top: 30rpx;
     }
 
@@ -169,5 +187,25 @@ export default {
       z-index: 1;
     }
   }
+  .month_card {
+    width: 100%;
+    height: 565rpx;
+    padding-left: -20rpx;
+  }
+  .btn-dl {
+    background: linear-gradient(253deg, #fcf3e9 0%, #eedec8 100%) !important;
+    color: #333 !important;
+    margin: 30rpx auto !important;
+  }
+  .month-back {
+    background: #f6f6f6 !important;
+    color: #999 !important;
+  }
+  .moneh-text {
+    text-align: center;
+    width: 632rpx;
+    margin: 0 auto 20rpx;
+    color: #999999;
+  }
 }
 </style>

+ 5 - 1
activityPages/activitySearch/activitySearch.vue

@@ -215,6 +215,8 @@
 				<view style="color: #A9AFB8;" @click="selectShow=false">取消</view>
 			</u-popup>
 		</view>
+    
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
@@ -225,6 +227,7 @@ import modalDialog from "@/components/modalDialog.vue";
 import areaCode from "@/activityPages/components/areaCode.vue";
 import myMixin from "../components/index.js";
 import myActivityMixin from "../components/indexActivity.js";
+import freeCharge  from '@/components/freeCharge'
 let app = getApp({allowDefault: true});
 export default {
   data() {
@@ -245,6 +248,7 @@ export default {
   components: {
     modalDialog,
     areaCode,
+    freeCharge,
   },
   methods: {
     //获取快捷主题
@@ -544,7 +548,7 @@ export default {
   /* 用户点击分享  */
   onShareAppMessage: function (res) {
     return {
-      title: "活动搜索",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  "活动搜索",
       path:
         "/activityPages/activitySearch/activitySearch?statesId=" +
         this.activeState +

+ 0 - 35
activityPages/components/index.js

@@ -194,31 +194,6 @@ export default {
         }
       });
     },
-    // 跳转判断权限
-    // public(type, flag, purl, price = "") {
-    //   this.$store.dispatch("checkHandle", type).then((res) => {
-    //     app.globalData.isAuth = res.IsAuth;
-    //     app.globalData.isBind = res.IsBind;
-    //     if (!res.IsAuth && !res.IsBind) {
-    //       //已授权已绑定
-    //       if (flag) {
-    //         uni.navigateTo({
-    //           url: purl + price,
-    //         });
-    //       }
-    //     } else if (res.IsAuth) {
-    //       //未授权
-    //       uni.navigateTo({
-    //         url: "/pageMy/authGuide/authGuide",
-    //       });
-    //     } else if (res.IsBind && !res.IsAuth) {
-    //       //已授权未绑定
-    //       uni.navigateTo({
-    //         url: "/pageMy/login/login",
-    //       });
-    //     }
-    //   });
-    // },
     //今日,明日 活动的选择
     timeListBtn(type, item) {
       this.activityTimeList.forEach((key) => {
@@ -227,15 +202,5 @@ export default {
         }
       });
     },
-    // strictSelection	(){
-    // 		activity.descriptionOfResearch().then(res=>{
-    // 			if(res.Ret==200){
-    //                 this.$util.modalShow('',res.Data.Item.ConfigValue,'知道了',()=>{
-
-    //                 })
-    // 			}
-    // 		})
-
-    // 	}
   },
 };

+ 5 - 0
activityPages/editOutbound/editOutbound.vue

@@ -56,11 +56,13 @@
         <rich-text :nodes="content"></rich-text>
       </view>
     </u-modal>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
 <script>
 import { activity } from "@/config/api.js";
+import freeCharge  from '@/components/freeCharge'
 export default {
   data() {
     return {
@@ -79,6 +81,9 @@ export default {
       cellphone: "",
     };
   },
+  components: {
+    freeCharge
+  },
   methods: {
     areaCode() {
       this.areacodeShow = true;

+ 5 - 0
activityPages/generationAsk/generationAsk.vue

@@ -5,11 +5,13 @@
       <text class="num-tag">{{ advice_content.length }}/100</text>
     </view>
     <view class="btn-cont" @click="submitHandle"> 提交 </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
 <script>
 import { activity, Report } from "@/config/api.js";
+import freeCharge  from '@/components/freeCharge'
 export default {
   data() {
     return {
@@ -18,6 +20,9 @@ export default {
       type: "",
     };
   },
+  components: {
+    freeCharge
+  },
   computed: {
     titlePlaceholder() {
       return this.type == "文章" ? "请描述您的问题,销售会跟进问题,后期在线下为您解答" : "请描述您的问题,分析师会代您向专家提问。";

+ 411 - 0
activityPages/specialDetail/specialDetail.vue

@@ -0,0 +1,411 @@
+<template>
+  <view class="container special-detail">
+    <view class="" v-if="haveAuth == 1">
+      <view class="top-notice-special">
+        <view class="notice">
+          <van-notice-bar color="#FFFFFF" background="#FE9000" text="专项调研行程持续更新中,满五家即开团,欢迎点击感兴趣预报名" />
+        </view>
+        <view class="inform-btn" @click="specialFollow">{{ isFollow ? "取消通知" : "新调研通知" }}</view>
+      </view>
+      <view class="content">
+        <view class="dialog-title" :class="1 == 1 ? 'brackets-title' : ''">{{ detailData.ResearchTheme }}</view>
+        <view class="network">
+          <view class="network-left">活动类型:</view>
+          <view class="network-right">{{ detailData.ActivityTypeName }}</view>
+        </view>
+        <view class="network">
+          <view class="network-left">所属行业:</view>
+          <view class="network-right">{{ detailData.ChartPermissionName }}</view>
+        </view>
+        <view class="network">
+          <view class="network-left">预期时间:</view>
+          <view class="network-right">{{ detailData.ActivityTimeText }}</view>
+        </view>
+        <view class="network">
+          <view class="network-left">调研形式:</view>
+          <view class="network-right">
+            {{ detailData.SpecialType == 1 ? "线上" : "线下" }}
+            <block v-if="detailData.SpecialType == 2">({{ detailData.City }})</block>
+          </view>
+        </view>
+        <block v-if="detailData.IndustrialName || detailData.IndustrialSubjectName">
+          <view class="network">
+            <view class="network-left">产业名称:</view>
+            <view class="network-right">{{ detailData.IndustrialName }}</view>
+          </view>
+          <view class="network">
+            <view class="network-left">相关公司:</view>
+            <view class="network-right">{{ detailData.IndustrialSubjectName }}</view>
+          </view>
+        </block>
+        <block v-else>
+          <view class="network">
+            <view class="network-left">相关主题:</view>
+            <view class="network-right">{{ detailData.Label }}</view>
+          </view>
+        </block>
+      </view>
+      <view class="" style="height: 50rpx"></view>
+      <view class="look-Trip" @click="lookImg">
+        查看行程安排
+        <van-icon name="arrow" />
+      </view>
+      <view class="interest-btn">
+        <text class="button" v-if="detailData.IsSignup !== 1" @click="interest">感兴趣</text>
+        <text class="button" @click="beNotInterested" v-else>已预报名</text>
+      </view>
+    </view>
+    <!-- 权限部分 -->
+    <view v-else>
+      <jurisdiction :idAct="id" :haveAuth="haveAuth" :industryMsg="industryMsg" :msgType="msgType" :sellerMobile="sellerMobile" :sellerName="sellerName"></jurisdiction>
+    </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
+    <u-modal
+      v-model="goFollowShow"
+      :content-style="{ fontSize: '32rpx' }"
+      :show-cancel-button="false"
+      confirm-text="知道了"
+      @cancel="isCancelBtn = false"
+      :show-title="false"
+      :cancel-style="{ borderRight: '1rpx solid #EBEBEB' }"
+      :confirm-style="{ fontWeight: '700' }"
+    >
+      <view class="slot-content">
+        <rich-text :nodes="accounts"></rich-text>
+      </view>
+    </u-modal>
+  </view>
+</template>
+
+<script>
+import { activity, User } from "@/config/api.js";
+import jurisdiction from "../activityDetail/jurisdiction/components.vue";
+import freeCharge from "@/components/freeCharge";
+let app = getApp({ allowDefault: true });
+export default {
+  data() {
+    return {
+      id: "",
+      detailData: {},
+      haveAuth: "",
+      industryMsg: "",
+      sellerMobile: "",
+      sellerName: "", //销售名称
+      msgType: "",
+      isFollow: false,
+      accounts: `您已开启【专项调研】新活动通知<br/><br/>请关注【查研观向小助手】公众号,及时获取微信消息提醒`,
+      goFollowShow: false,
+    };
+  },
+  components: {
+    jurisdiction,
+    freeCharge,
+  },
+  watch: {
+    haveAuth: {
+      handler() {
+        //上传页面统计
+        // if (this.haveAuth == 1) {
+        //   this.$store.dispatch("statistics", { PageType: "ActivitParticulars", DetailId: this.id });
+        // }
+      },
+      immediate: true,
+    },
+  },
+  methods: {
+    async getActivityDetail() {
+      const res = await activity.getSpecialDetailList({ ActivityId: this.id });
+      if (res.Ret == 200) {
+        this.isFollow = 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;
+        if (res.Data.HasPermission == 1) {
+          this.detailData = res.Data.Detail;
+        }
+      }
+    },
+    //感兴趣
+    async interest() {
+      const res = await activity.postSpecialSignupAdd({
+        ActivityId: this.detailData.ActivityId,
+      });
+      if (res.Ret === 200) {
+        this.detailData.IsSignup = 1;
+        this.currentPages();
+        uni.showModal({
+          content: "预报名成功,已通知您的销售",
+          confirmText: "知道了",
+          showCancel: false,
+          confirmColor: "#3385FF",
+        });
+      }
+    },
+    //已预报名、就是不感兴趣
+    beNotInterested() {
+      uni.showModal({
+        content: "您要取消此次专研调研的预报名吗?",
+        confirmColor: "#3385FF",
+        cancelColor: "#606266",
+        success: async (res) => {
+          if (res.confirm) {
+            const res = await activity.postSpecialSignupAdd({
+              ActivityId: this.detailData.ActivityId,
+            });
+            if (res.Ret === 200) {
+              this.detailData.IsSignup = 0;
+              this.currentPages();
+            }
+          }
+        },
+      });
+    },
+    currentPages() {
+      let pages = getCurrentPages();
+      let prevPage = pages[pages.length - 2];
+      let path = prevPage.$page.fullPath;
+      if (path == "/activityPages/specialResearchPage/specialResearchPage") {
+        const index = prevPage.$vm.collectList.findIndex((item) => item.ActivityId == this.id);
+        prevPage.$vm.collectList[index].IsSignup = this.detailData.IsSignup;
+      }
+    },
+    //查看行程的事件
+    lookImg() {
+      uni.previewImage({
+        urls: [this.detailData.TripImgLink], //查看图片的数组
+      });
+    },
+    //新调研通知
+    async specialFollow() {
+      if (this.isFollow) {
+        uni.showModal({
+          content: "您要取消【专项调研】新活动通知吗?",
+          confirmColor: "#3385FF",
+          cancelColor: "#606266",
+          success: async (res) => {
+            if (res.confirm) {
+              const res = await activity.postSpecialFollow();
+              if (res.Ret === 200) {
+                this.isFollow = !this.isFollow;
+              }
+            }
+          },
+        });
+      } else {
+        const res = await activity.postSpecialFollow();
+        if (res.Ret === 200) {
+          this.isFollow = !this.isFollow;
+          this.goFollowShow = true;
+        }
+      }
+    },
+  },
+  onLoad(option) {
+    this.id = option.id || '';
+  },
+  async onShow() {
+    await this.$store.dispatch("checkHandle");
+    if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+      //已授权已绑定
+      this.getActivityDetail();
+    }
+  },
+  /**
+   * 用户点击分享
+   */
+  onShareAppMessage: function (res) {
+    return {
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费试用月卡!" : "活动详情",
+      path: "/activityPages/specialDetail/specialDetail?id=" + this.id,
+      success: (res) => {},
+      fail: (err) => {},
+    };
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.special-detail {
+  padding-bottom: 100rpx;
+  .top-notice-special {
+    height: 96rpx;
+    padding-right: 20rpx;
+    background-color: #fe9000;
+    position: relative;
+    .notice {
+      width: 80%;
+    }
+    .inform-btn {
+      position: absolute;
+      right: 20rpx;
+      top: 50%;
+      transform: translateY(-50%);
+      width: 147rpx;
+      height: 40rpx;
+      background: #ffffff;
+      border-radius: 4rpx;
+      text-align: center;
+      line-height: 40rpx;
+      font-size: 24rpx;
+      color: #ff9e58;
+    }
+  }
+  .notice {
+    height: 60rpx;
+    width: 100%;
+  }
+  .choose-limit {
+    position: relative;
+    display: flex;
+    align-items: center;
+    // margin-left: 20rpx;
+    image {
+      width: 93rpx;
+      height: 38rpx;
+    }
+    .limit-img {
+      position: absolute;
+      top: -13rpx;
+      right: -30rpx;
+      width: 46rpx;
+      height: 26rpx;
+    }
+  }
+  .content {
+    padding: 34rpx 34rpx 0rpx;
+    margin-bottom: -20rpx;
+    color: #333333;
+    font-size: 28rpx;
+    view {
+      padding-left: 20rpx;
+    }
+
+    text {
+      line-height: 80rpx;
+      padding-left: 20rpx;
+    }
+
+    .phone {
+      padding: 0;
+      display: inline-block;
+      color: #2c83ff;
+    }
+
+    .dialog-title {
+      width: 682rpx;
+      padding: 20rpx;
+      background: #f2f2f2;
+      opacity: 0.8;
+      text-align: center;
+      font-size: 30rpx;
+      font-weight: bold;
+      margin-bottom: 30rpx;
+      color: #000;
+    }
+    .brackets-title {
+      padding-left: 20rpx;
+    }
+    .city-box {
+      display: flex;
+      align-items: center;
+
+      text {
+        padding: 0;
+      }
+
+      .city {
+        display: flex;
+        color: #2088ff;
+        align-items: center;
+
+        image {
+          width: 27rpx;
+          height: 32rpx;
+          margin-right: 12rpx;
+        }
+      }
+    }
+  }
+
+  .network {
+    margin-bottom: 30rpx;
+    padding: 0 !important;
+    display: flex;
+    .network-left {
+      width: 160rpx;
+      text-align-last: justify;
+      text-align: justify;
+    }
+
+    .network-right {
+      width: 480rpx;
+    }
+    .network-zoom {
+      .text_zoom {
+        width: 100%;
+        word-break: break-all;
+        color: #333333;
+      }
+      view {
+        padding: 0 !important;
+        margin: 0 !important;
+      }
+      .copy-zoom {
+        display: inline-block;
+        padding: 5rpx 17rpx !important;
+        border-radius: 34rpx;
+        background-color: #ebf4ff;
+        font-size: 24rpx;
+        color: #2c83ff;
+        margin: 0 10rpx;
+        margin-top: 30rpx;
+      }
+    }
+    .network-link {
+      width: 520rpx !important;
+      view {
+        padding: 0 !important;
+        margin: 0 !important;
+        width: 100%;
+        display: flex;
+        justify-content: space-between;
+        :first-child {
+          width: 350rpx;
+        }
+        .copy-link {
+          padding: 5rpx 17rpx !important;
+          border-radius: 34rpx;
+          background-color: #ebf4ff;
+          font-size: 24rpx;
+          color: #2c83ff;
+        }
+      }
+    }
+  }
+
+  .look-Trip {
+    width: 100%;
+    text-align: center;
+    font-size: 28rpx;
+    color: #3385ff;
+    font-weight: 500;
+  }
+  .interest-btn {
+    width: 100%;
+    text-align: center;
+    text {
+      width: 318rpx;
+      height: 67rpx;
+      background: #3385ff;
+      font-size: 28rpx;
+      color: #fff;
+      font-weight: 500;
+      border-radius: 4rpx;
+      line-height: 67rpx;
+      margin: 90rpx auto 40rpx;
+    }
+  }
+}
+</style>

+ 248 - 0
activityPages/specialResearchPage/specialResearchPage.vue

@@ -0,0 +1,248 @@
+<template>
+  <view class="container special-research">
+    <view class="top-notice">
+      <view class="notice">
+        <van-notice-bar color="#FFFFFF" background="#FE9000" text="专项调研行程持续更新中,满五家即开团,欢迎点击感兴趣预报名" />
+      </view>
+      <view class="inform-btn" @click="specialFollow">{{ isFollow ? "取消通知" : "新调研通知" }}</view>
+    </view>
+    <!-- 活动列表 -->
+    <view>
+      <view class="collect-ul">
+        <view class="collect-ltem" v-for="(item, index) in collectList" :key="index">
+          <view class="title-date" @click="goDetail(item)">
+            <text :class="item.SpecialType == 1 ? '' : 'xianxia'">{{ item.SpecialType == 1 ? "线上" : "线下" }}</text>
+            <view class="city-img" v-if="item.City">
+              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png"></image>
+              {{ item.City }}
+            </view>
+          </view>
+          <view class="item-li">
+            <view class="item-img" @click="goDetail(item)">
+              <image :src="item.ImgUrl" />
+            </view>
+            <view class="item">
+              <view class="item-text" @click="goDetail(item)">
+                <text class="activity-title"> {{ item.ResearchTheme }} </text>
+                <text class="text_twoLine">预期时间:{{ item.ActivityTimeText }} </text>
+              </view>
+              <view class="bottom-box">
+                <view class="" style="width: 130rpx"> </view>
+                <text @click="lookImg(item)">行程安排</text>
+                <text class="button" v-if="item.IsSignup !== 1" @click="interest(item)">感兴趣</text>
+                <text class="button" @click="beNotInterested(item)" v-else>已预报名</text>
+              </view>
+            </view>
+          </view>
+        </view>
+        <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
+      </view>
+      <view class="select-box"> </view>
+      <!-- 所有自定义弹框 -->
+    </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
+    <u-modal
+      v-model="goFollowShow"
+      :content-style="{ fontSize: '32rpx' }"
+      :show-cancel-button="false"
+      confirm-text="知道了"
+      @cancel="isCancelBtn = false"
+      :show-title="false"
+      :cancel-style="{ borderRight: '1rpx solid #EBEBEB' }"
+      :confirm-style="{ fontWeight: '700' }"
+    >
+      <view class="slot-content">
+        <rich-text :nodes="accounts"></rich-text>
+      </view>
+    </u-modal>
+  </view>
+</template>
+
+<script>
+import { activity, User } from "@/config/api.js";
+import { Throttle } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
+export default {
+  data() {
+    return {
+      page_no: 1,
+      pageSize: 10,
+      collectList: [],
+      status: "loadmore",
+      refresh: false, //正在下拉
+      loadText: {
+        loadmore: "上拉加载更多",
+        loading: "加载中",
+        nomore: "已经到底了",
+      },
+      isFollow: false,
+      accounts: `您已开启【专项调研】新活动通知<br/><br/>请关注【查研观向小助手】公众号,及时获取微信消息提醒`,
+      goFollowShow: false,
+    };
+  },
+  components: {
+    freeCharge,
+  },
+  methods: {
+    //获取事件
+    async getActivityList() {
+      const res = await activity.getSpecialList({
+        PageSize: this.pageSize,
+        CurrentIndex: this.page_no,
+      });
+      if (res.Ret === 200) {
+        this.isFollow = res.Data.IsFollow;
+        this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
+        if (this.page_no === 1) {
+          this.collectList = res.Data.List || [];
+          if (this.refresh) {
+            uni.stopPullDownRefresh();
+            this.refresh = false;
+          }
+        } else {
+          this.collectList = this.collectList.concat(res.Data.List);
+        }
+      }
+    },
+    //查看行程的事件
+    lookImg(item) {
+      uni.previewImage({
+        urls: [item.TripImgLink], //查看图片的数组
+      });
+    },
+    //去往详情页面
+    goDetail(item) {
+      this.$store.dispatch("checkHandle", "/activityPages/specialDetail/specialDetail?id=" + item.ActivityId);
+    },
+    //感兴趣
+    async interest(item) {
+      const res = await activity.postSpecialSignupAdd({
+        ActivityId: item.ActivityId,
+      });
+      if (res.Ret === 200) {
+        item.IsSignup = 1;
+        uni.showModal({
+          content: "预报名成功,已通知您的销售",
+          confirmText: "知道了",
+          showCancel: false,
+          confirmColor: "#3385FF",
+        });
+      }
+    },
+    //已预报名、就是不感兴趣
+    beNotInterested(item) {
+      uni.showModal({
+        content: "您要取消此次专研调研的预报名吗?",
+        confirmColor: "#3385FF",
+        cancelColor: "#606266",
+        success: async (res) => {
+          if (res.confirm) {
+            const res = await activity.postSpecialSignupAdd({
+              ActivityId: item.ActivityId,
+            });
+            if (res.Ret === 200) {
+              item.IsSignup = 0;
+            }
+          }
+        },
+      });
+    },
+    //新调研通知
+    async specialFollow() {
+      if (this.isFollow) {
+        uni.showModal({
+          content: "您要取消【专项调研】新活动通知吗?",
+          confirmColor: "#3385FF",
+          cancelColor: "#606266",
+          success: async (res) => {
+            if (res.confirm) {
+              const res = await activity.postSpecialFollow();
+              if (res.Ret === 200) {
+                this.isFollow = !this.isFollow;
+              }
+            }
+          },
+        });
+      } else {
+        const res = await activity.postSpecialFollow();
+        if (res.Ret === 200) {
+          this.isFollow = !this.isFollow;
+          this.goFollowShow = true;
+        }
+      }
+    },
+  },
+  onLoad(option) {
+    this.getActivityList();
+  },
+  onShow() {
+    this.$store.dispatch("checkHandle");
+  },
+  /* 触底 */
+  onReachBottom: Throttle(function () {
+    if (this.status === "nomore") return;
+    this.status = "loading";
+    this.page_no++;
+    this.getActivityList();
+  }),
+  /* 下拉刷新 */
+  onPullDownRefresh: Throttle(function () {
+    this.page_no = 1;
+    this.refresh = true;
+    this.getActivityList();
+  }),
+  /** 用户点击分享 */
+  onShareAppMessage: function (res) {
+    return {
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费试用月卡!" : "专项产业调研",
+      path: "/activityPages/specialResearchPage/specialResearchPage",
+    };
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.special-research {
+  background: #f7f7f7;
+  padding-bottom: 30rpx;
+  position: relative;
+  .top-notice {
+    position: sticky;
+    top: 0;
+    z-index: 99;
+    background-color: #fe9000;
+    display: flex;
+    align-items: center;
+    height: 96rpx;
+    display: flex;
+    padding-right: 20rpx;
+    .notice {
+      width: 80%;
+    }
+    .inform-btn {
+      width: 147rpx;
+      height: 40rpx;
+      background: #ffffff;
+      border-radius: 4rpx;
+      text-align: center;
+      line-height: 40rpx;
+      font-size: 24rpx;
+      color: #ff9e58;
+    }
+  }
+  .collect-ul {
+    padding-top: 10rpx;
+  }
+
+  .city-img {
+    display: flex;
+    align-items: center;
+    image {
+      width: 27rpx;
+      height: 32rpx;
+      margin-right: 12rpx;
+    }
+  }
+}
+@import "../components/indexActivity.scss";
+</style>

+ 4 - 1
activityPages/themeActivity/themeActivity.vue

@@ -90,6 +90,7 @@
       />
     </view>
     <areaCode :isAreaCode="isAreaCode" :areaCode="areaCode" />
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
@@ -100,6 +101,7 @@ import modalDialog from "@/components/modalDialog.vue";
 import myMixin from "../components/index.js";
 import myActivityMixin from "../components/indexActivity.js";
 import areaCode from "@/activityPages/components/areaCode.vue";
+import freeCharge  from '@/components/freeCharge'
 export default {
   mixins: [myMixin, myActivityMixin],
   data() {
@@ -116,6 +118,7 @@ export default {
   components: {
     areaCode,
     modalDialog,
+    freeCharge,
   },
   methods: {
     async getActivityList() {
@@ -184,7 +187,7 @@ export default {
   /** 用户点击分享 */
   onShareAppMessage: function (res) {
     return {
-      title: this.type || this.label,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : ( this.type || this.label),
       path: "/activityPages/themeActivity/themeActivity?title=" + this.label + "&permissionIds=" + this.permissionIds + "&whichDay="+ this.whichDay + "&type=" + this.type,
     };
   },

+ 54 - 0
components/freeCharge.vue

@@ -0,0 +1,54 @@
+<template>
+  <view class="container-freecharge" v-if="isShowFreeBtn">
+    <image @click="toggle" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/free_icon.png"></image>
+    <image @click="removeBton" class="remove-icon" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/free_%20remove.png"></image>
+  </view>
+</template>
+
+<script>
+import { FreeButton } from "@/config/api.js";
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    isShowFreeBtn: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  watch: {
+  },
+  methods: {
+    //跳转到免费送月卡页面
+    toggle() {
+      uni.navigateTo({
+        url: "/pageMy/freeTrial/freeTrial",
+      });
+    },
+    //隐藏当天的按钮
+    async removeBton() {
+      const res = await FreeButton.userFreeButtonUpdate();
+      if(res.Ret === 200){
+        this.$parent.isShowFree = false;
+      }
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.container-freecharge {
+  position: relative;
+  image {
+    width: 156rpx;
+    height: 156rpx;
+  }
+  .remove-icon {
+    width: 31rpx;
+    height: 31rpx;
+    position: absolute;
+    right: 0;
+    top: 0;
+  }
+}
+</style>

+ 35 - 0
components/freeMixin.js

@@ -0,0 +1,35 @@
+// import freeCharge  from '@/components/freeCharge'
+import { FreeButton } from "@/config/api.js";
+export default {
+  //   components: {
+  //     freeCharge
+  // },
+  data() {
+    return {
+      isShowFree: false, //免费标签的隐现
+      isHorzMobile: null, //手机号是否是弘则的
+    };
+  },
+  onShow() {
+    this.isShowFreeButton();
+  },
+  onLoad() {
+    this.userIsShowShare()
+  },
+  methods: {
+    //免费标签的隐现
+    async isShowFreeButton() {
+      const res = await FreeButton.userIsShowFreeButton();
+      if (res.Ret === 200) {
+        this.isShowFree = res.Data.IsShow;
+      }
+    },
+    //判断手机号是否是弘则的
+    async userIsShowShare() {
+      const res = await FreeButton.userIsShowShare();
+      if (res.Ret === 200) {
+       this.isHorzMobile = res.Data.IsShow;
+      }
+    },
+  },
+};

+ 26 - 13
components/modalDialog.vue

@@ -41,7 +41,7 @@
       :content-style="{ fontSize: '32rpx' }"
       @confirm="applyIsShowBtn"
       :show-cancel-button="true"
-      confirm-text="立即申请"
+      :confirm-text="isShowAlert ? '立即上传' : '立即申请'"
       @cancel="applyIsShowCancel"
       :show-title="false"
       :cancel-style="{ borderRight: '1rpx solid #EBEBEB' }"
@@ -68,7 +68,9 @@
         <!-- <rich-text :nodes="hasPermissionText"></rich-text> -->
         <text>您暂无权限参加此活动</text>
         <text>若想参加可以联系对口销售</text>
-        <view>{{jurisdictionList.SellerName}} : <text @click="mobileDial" class="seller-mobile"> {{jurisdictionList.SellerMobile}}</text></view>
+        <view
+          >{{ jurisdictionList.SellerName }} : <text @click="mobileDial" class="seller-mobile"> {{ jurisdictionList.SellerMobile }}</text></view
+        >
         <text>申请开通对应的试用权限</text>
       </view>
     </u-modal>
@@ -112,7 +114,7 @@
 </template>
 
 <script>
-import { User,activity } from "@/config/api.js";
+import { User, activity, FreeButton } from "@/config/api.js";
 export default {
   data() {
     return {
@@ -132,6 +134,7 @@ export default {
       editIsShowDlg: false,
       mailboxBindingDlg: false,
       mailboxText: "您当前绑定的联系方式为邮箱,请先设置您的外呼号码",
+      isShowAlert: false, //获取权限弹窗是否展示免费月卡接口
     };
   },
   props: {
@@ -260,7 +263,7 @@ export default {
       this.cancelShow = this.isCancelShow;
     },
     applyForIsShow() {
-      this.jurisdictionText = this.jurisdictionList.PopupMsg;
+      this.jurisdictionText = this.isShowAlert ? "上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡" : this.jurisdictionList.PopupMsg;
       this.applyIsShow = this.applyForIsShow;
     },
     isShowhasPermission() {
@@ -329,8 +332,8 @@ export default {
         });
       } else if (this.hasPermission == 4) {
         this.showRelation = true;
-      }else if (this.hasPermission == 5) {
-       this.showhasPermissionBtn()
+      } else if (this.hasPermission == 5) {
+        this.showhasPermissionBtn();
       }
     },
     applyIsShowCancel() {
@@ -339,15 +342,15 @@ export default {
     },
     showhasPermissionBtn() {
       User.applyTry({
-            TryType : 'Activity',
-            DetailId: this.jurisdictionList.ActivityId
+        TryType: "Activity",
+        DetailId: this.jurisdictionList.ActivityId,
       }).then((res) => {
-         this.showhasPermission = false;
-         this.$parent.isShowhasPermission = false;
-      })
+        this.showhasPermission = false;
+        this.$parent.isShowhasPermission = false;
+      });
     },
-    mobileDial(){
-       uni.makePhoneCall({
+    mobileDial() {
+      uni.makePhoneCall({
         phoneNumber: this.jurisdictionList.SellerMobile, //仅为示例
       });
       this.showhasPermission = false;
@@ -394,6 +397,16 @@ export default {
       this.$parent.mailboxBinding = false;
       this.mailboxBindingDlg = false;
     },
+    //获取权限弹窗是否展示免费月卡接口
+    async userIsShowAlert() {
+      const res = await FreeButton.userIsShowAlert();
+      if (res.Ret === 200) {
+        this.isShowAlert = res.Data.IsShow;
+      }
+    },
+  },
+  mounted() {
+    this.userIsShowAlert();
   },
 };
 </script>

+ 75 - 2
config/api.js

@@ -29,6 +29,10 @@ export const Report = {
   articleAskAdd: (params) => {
     return postHttp("/article/askAdd", params, 0);
   },
+  /* 下载PDF打水印接口*/
+  articlePdfwatermark: (params) => {
+    return getHttp("/article/pdfwatermark", params, 1);
+  },
 };
 
 /* 用户 */
@@ -97,6 +101,10 @@ export const User = {
   getAskList: (params) => {
     return getHttp("/user/ask/list");
   },
+  //更改用户微信头像
+  headimgurlUpdate: (params) => {
+    return postHttp("/user/headimgurl/update", params);
+  },
 };
 
 /* 首页 */
@@ -106,7 +114,7 @@ export const Home = {
 	PageSize * CurrentIndex * ChartPermissionId *品类id,最新传0
 	*/
   getList: (params) => {
-    return getHttp("/home/list", params);
+    return getHttp("/home/artAndChart/list", params);
   },
   /* 获取品种 */
   Tab: (params) => {
@@ -150,6 +158,10 @@ export const Search = {
   getResultReport: (params) => {
     return getHttp("/search/report/list", params, 0);
   },
+  /* 报告 KeyWord 素材库*/
+  getArtAndChartList: (params) => {
+    return getHttp("/search/artAndChart/list", params, 0);
+  },
 };
 
 /* 报告  */
@@ -304,7 +316,7 @@ export const activity = {
   },
   /*获取活动类型下的主题列表接口(4.3版本)*/
   getActivityLabelTypeList: (params) => {
-    return getHttp("/activity/labelTypeList", params);
+    return getHttp("/activity/labelTypeListV5", params);
   },
   /* 校验活动带问是否有权限接口 */
   checkAskActivity: (params) => {
@@ -340,4 +352,65 @@ export const Research = {
   researchHotKeyWord: (params) => {
     return getHttp("/research/hotKeyWord", params, 0);
   },
+  /*获取专项产业调研列表接口*/
+  getSpecialList: (params) => {
+    return getHttp("/activity/special/list", params);
+  },
+  /*获取专项产业调研列表接口*/
+  getSpecialDetailList: (params) => {
+    return getHttp("/activity/special/detail", params);
+  },
+  /*获取专项产业调研列表接口*/
+  postSpecialFollow: (params) => {
+    return postHttp("/activity/special/follow", params);
+  },
+  /*感兴趣、不感兴趣接口*/
+  postSpecialSignupAdd: (params) => {
+    return postHttp("/activity/special/signup/add", params);
+  },
+};
+export const FreeButton = {
+  /*获取是否展示免费试用按钮接口*/
+  userIsShowFreeButton: (params) => {
+    return getHttp("/user/isShow/freeButton", params, 0);
+  },
+  /* 隐藏当天的按钮接口 */
+  userFreeButtonUpdate: (params) => {
+    return postHttp("/user/freeButton/update", params, 0);
+  },
+  /*分享的时候判断是不是弘则的手机号*/
+  userIsShowShare: (params) => {
+    return getHttp("/user/isShow/share", params, 0);
+  },
+  /*获取权限弹窗是否展示免费月卡接口*/
+  userIsShowAlert: (params) => {
+    return getHttp("/user/isShow/alert", params, 0);
+  },
+  /*获取权限弹窗是否展示免费月卡接口*/
+  wechatShareImage: (params) => {
+    return postHttp("/wechat/shareImage", params, 0);
+  },
+};
+
+export const Chart = {
+  /*图表标签分类接口*/
+  getChartPatg: (params) => {
+    return getHttp("/chart/patg", params);
+  },
+  /*我的收藏接口*/
+  getChartcollection: (params) => {
+    return getHttp("/chart/my/collection", params);
+  },
+  /*删除我的收藏接口*/
+  myChartCollect: (params) => {
+    return postHttp("/chart/collect", params);
+  },
+  /*图表的详情*/
+  myChartDetail: (params) => {
+    return getHttp("/chart/detail", params);
+  },
+  /*图表的详情*/
+  myChartTop: (params) => {
+    return postHttp("/chart/top", params);
+  },
 };

+ 3 - 3
config/config.js

@@ -1,5 +1,5 @@
-//export const baseUrl = 'http://8.136.199.33:8500/api';//小程序开发接口地址
-export const baseUrl = 'https://cygx.hzinsights.com/api';//小程序线上接口地址
+export const baseUrl = 'http://8.136.199.33:8500/api';//小程序开发接口地址
+//export const baseUrl = 'https://cygx.hzinsights.com/api';//小程序线上接口地址
 // #ifdef H5
 export const H5baseUrl=process.env.NODE_ENV === 'development'?window.location.origin+'/':baseUrl
-// #endif
+// #endif 

+ 2 - 2
main.js

@@ -4,7 +4,7 @@ import store from './store'
 import * as Db from './config/db.js';//缓存操作
 import * as Util from './config/util.js';//通用方法
 import uView from "uview-ui";
-
+import ferrMin from './components/freeMixin.js'
 Vue.use(uView);
 
 Vue.config.productionTip = false
@@ -13,7 +13,7 @@ Vue.prototype.$db = Db;
 Vue.prototype.$util = Util;
 Vue.prototype.$global = App.globalData;
 App.mpType = 'app'
-
+Vue.mixin(ferrMin)
 const app = new Vue({
    ...App,
 	store

+ 5 - 0
pageMy/advice/advice.vue

@@ -17,11 +17,13 @@
       </view>
     </view>
     <view class="btn-cont" @click="submitHandle"> 提交 </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
 import { uploadurl, Mine } from "@/config/api.js";
+import freeCharge from "@/components/freeCharge";
 export default {
   data() {
     return {
@@ -30,6 +32,9 @@ export default {
       advice_content: "",
     };
   },
+  components: {
+    freeCharge,
+  },
   methods: {
     init() {
       (this.fileList = []), (this.uploadIndex = 0);

+ 6 - 1
pageMy/applyInterview/applyInterview.vue

@@ -15,15 +15,17 @@
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" v-if="totalPage > 1" />
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有访谈申请的内容</text>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
 import { Mine } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
 export default {
   data() {
     return {
@@ -50,6 +52,9 @@ export default {
   onLoad() {
     this.getInterList();
   },
+  components: {
+    freeCharge,
+  },
   methods: {
     /* 获取列表 */
     getInterList() {

+ 5 - 1
pageMy/applyResult/applyResult.vue

@@ -26,6 +26,11 @@ export default {
     goIndex() {
       uni.navigateBack({
         delta: 2,
+        fail: (err) => {
+          uni.switchTab({
+            url: "/pages/index/index",
+          });
+        },
       });
     },
   },
@@ -54,7 +59,6 @@ export default {
     .btn-cont {
       width: 368rpx;
       height: 80rpx;
-      // position: relative;
       background: linear-gradient(268deg, #2ddbff 0%, #1599ff 49%, #005eff 100%);
       color: #fff;
       font-size: 34rpx;

+ 6 - 1
pageMy/browseHistory/browseHistory.vue

@@ -11,15 +11,17 @@
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="10" margin-bottom="10" v-if="totalPage > 1" />
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有浏览历史</text>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
 import { Mine } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
 export default {
   data() {
     return {
@@ -40,6 +42,9 @@ export default {
   onLoad() {
     this.gethistoryList();
   },
+  components: {
+    freeCharge,
+  },
   methods: {
     /* 获取列表 */
     gethistoryList() {

+ 119 - 0
pageMy/chartPage/chartPage.vue

@@ -0,0 +1,119 @@
+<template>
+  <view class="container reportDetail-container">
+    <web-view :src="chartData.HttpUrl">
+      <cover-view class="footer-con">
+        <cover-view class="handle-item" @click="collectHandle">
+          <cover-image
+            class="download-img"
+            :src="isCollection ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_act.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_ico.png'"
+          ></cover-image>
+          <cover-view>收藏</cover-view>
+        </cover-view>
+      </cover-view>
+    </web-view>
+  </view>
+</template>
+
+<script>
+import { Chart } from "@/config/api.js";
+import freeCharge from "@/components/freeCharge";
+let app = getApp({ allowDefault: true });
+export default {
+  data() {
+    return {
+      id: "",
+      chartData: {},
+      isCollection: false,
+    };
+  },
+  components: {
+    freeCharge,
+  },
+  methods: {
+    /* 获取详情 */
+    async myChartDetail() {
+      const res = await Chart.myChartDetail({
+        ChartId: Number(this.id),
+      });
+      if (res.Ret === 200) {
+        this.chartData = res.Data;
+        this.isCollection = res.Data.IsCollection;
+        uni.setNavigationBarTitle({
+          title: this.chartData.Title,
+        });
+      }
+    },
+    /* 收藏 */
+    async collectHandle() {
+      const res = await Chart.myChartCollect({
+        ChartId: this.chartData.ChartId,
+      });
+      if (res.Ret === 200) {
+        this.isCollection = res.Data.Status == 1 ? true : false;
+        this.$util.toast(res.Msg);
+      }
+    },
+  },
+  async onShow() {
+    await this.$store.dispatch("checkHandle");
+    if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+      //已授权已绑定
+      this.id && this.myChartDetail();
+    } 
+  },
+  onLoad(option) {
+    // /* 兼容iphonex底部 */
+    uni.getSystemInfo({
+      success: (res) => {
+        let ua = res.model;
+        if (ua.search("iPhone X") != -1 || ua.search("iPhone 11") != -1 || ua.search("iPhone 11 Pro Max") != -1) {
+          this.isIphoneX = true;
+        }
+      },
+    });
+    this.id = option.id || "";
+  },
+  /**
+   * 用户点击分享
+   */
+  onShareAppMessage: function (res) {
+    return {
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.chartData.Title,
+      path: "/pageMy/chartPage/chartPage?id=" + this.id,
+    };
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.reportDetail-container {
+  background-color: #fff;
+  .footer-con {
+    position: fixed;
+    z-index: 99999;
+    bottom: 0;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    left: 0;
+    width: 100%;
+    background-color: #ffffff;
+    display: flex;
+    justify-content: space-around;
+    height: 100rpx;
+    border-top: 1px solid #dddddd;
+    .handle-item {
+      align-items: center;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      position: relative;
+      z-index: 99999;
+      .download-img {
+        width: 44rpx;
+        height: 44rpx;
+        margin-bottom: 4rpx;
+      }
+    }
+  }
+}
+</style>

+ 36 - 0
pageMy/excessivePages/excessivePages.vue

@@ -0,0 +1,36 @@
+<template>
+  <view></view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      scene:''
+    };
+  },
+  methods: {
+     async onLoadInit(){
+          await this.$store.dispatch("checkHandle",'noGO')
+          if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+            //已授权已绑定
+            uni.switchTab({
+                url:'/pages/index/index'
+            })
+          } else {
+            //已授权未绑定
+            uni.reLaunch({
+              url: "/pageMy/login/login?scene="+this.scene,
+            });
+          }
+      }
+  },
+  onLoad(options) {
+    wx.hideHomeButton();
+    this.onLoadInit()
+    this.scene = options.scene || ''
+  },
+};
+</script>
+
+<style></style>

+ 151 - 0
pageMy/freeTrial/freeTrial.vue

@@ -0,0 +1,151 @@
+<template>
+  <view class="container container-free">
+    <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
+      <view class="content">
+        <van-icon custom-class="search-icon" name="arrow-left" size="24px" @click="goSearch" />
+        <view class="text">免费送月卡</view>
+      </view>
+    </view>
+    <view class="img-code"> 
+      <image :src="wechatCode"></image>
+    </view>
+    <view class="btn-box">
+      <button class="bottom_in" open-type="share" plain="true">分享</button>
+      <view @click="goSearch" class="btn-back">返回</view>
+    </view>
+  </view>
+</template>
+
+<script>
+import { FreeButton } from "@/config/api.js";
+
+export default {
+  data() {
+    return {
+      navBarStyle: {
+        height: 60 + "px",
+        paddingTop: 40 + "px",
+        paddingBottom: "4px",
+      },
+      wechatCode:'',//二维码
+      scene:"",//用户的id
+    };
+  },
+  methods: {
+    initNavBar() {
+      let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
+      this.navBarStyle = {
+        height: menuButtonInfo.height + menuButtonInfo.top + 8 + "px",
+        paddingTop: menuButtonInfo.top - 4 + "px",
+        paddingBottom: "4px",
+      };
+    },
+    goSearch() {
+      uni.navigateBack();
+    },
+    async wechatShareImage() {
+      const res = await FreeButton.wechatShareImage();
+      if(res.Ret === 200) {
+        this.wechatCode = res.Data.FileLink
+        this.scene = res.Data.Scene
+      }
+    },
+  },
+  onLoad() {
+    this.initNavBar();
+    this.wechatShareImage()
+  },
+  /**
+   * 用户点击分享
+   */
+  onShareAppMessage: function (res) {
+    return {
+      title: "送您一张免费月卡",
+      path: "/pageMy/excessivePages/excessivePages?scene="+this.scene,
+      imageUrl: "https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/share_month.png",
+    };
+  },
+};
+</script>
+<style lang="scss">
+.nav-bar-wrap {
+  color: #fff;
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  z-index: 999;
+  .content {
+    position: relative;
+    height: 100%;
+    .search-icon {
+      position: absolute;
+      left: 34rpx;
+      top: 50%;
+      transform: translateY(-50%);
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.container-free {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  background: url("https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/background_image.jpg") no-repeat;
+  background-size: 100% 100%;
+  .btn-box {
+    position: absolute;
+    bottom: 115rpx;
+    left: 50%;
+    transform: translateX(-50%);
+    text-align: center;
+    font-size: 34rpx;
+    color: #fff;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+  }
+  .bottom_in {
+    width: 379rpx;
+    height: 80rpx;
+    line-height: 80rpx;
+    background: linear-gradient(180deg, #f8d083 0%, #f0b157 100%);
+    border: none;
+    font-weight: 600;
+    margin-bottom: 20rpx;
+    color: #fff;
+  }
+  .btn-back {
+    width: 379rpx;
+    height: 80rpx;
+    border: 1px solid #f1e2ce;
+    line-height: 78rpx;
+  }
+  .img-code {
+    width: 200rpx;
+    height: 200rpx;
+    position: absolute;
+    top: 46%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    image {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+.nav-bar-wrap {
+  .content {
+    .text {
+      text-align: center;
+      width: 50vw;
+      position: absolute;
+      left: 50%;
+      top: 50%;
+      transform: translate(-50%, -50%);
+      font-weight: bold;
+      font-size: 16px;
+    }
+  }
+}
+</style>

+ 32 - 28
pageMy/login/login.vue

@@ -73,6 +73,7 @@ export default {
       showCountryCode: "+86",
       countryCode: "86", //区号
       isAreaCode: false,
+      scene: "", //分享人的分享码
     };
   },
   methods: {
@@ -115,7 +116,7 @@ export default {
           this.phoneIpt &&
             User.getPhoneCode({
               Mobile: this.phoneIpt,
-              AreaNum:this.countryCode
+              AreaNum: this.countryCode,
             }).then((res) => {
               if (res.Ret === 200) {
                 this.$refs.uCode.start();
@@ -142,32 +143,18 @@ export default {
           LoginType: 1,
           Mobile: this.phoneNum,
           CountryCode: this.countryCode,
+          ShareUserCode: this.scene,
         };
-        User.Bind(params).then((res) => {
-          if (res.Ret === 200) {
-            let token = res.Data.Authorization;
-            this.$db.set("access_token", token);
-            uni.navigateBack({
-              delta: 1,
-            });
-          }
-        });
+        this.bindLogin(params);
       } else {
         if (this.email && this.codeNum && this.checked) {
           params = {
             Email: this.email,
             LoginType: 2,
             VCode: this.codeNum,
+            ShareUserCode: this.scene,
           };
-          User.Bind(params).then((res) => {
-            if (res.Ret === 200) {
-              let token = res.Data.Authorization;
-              this.$db.set("access_token", token);
-              uni.navigateBack({
-                delta: 1,
-              });
-            }
-          });
+          this.bindLogin(params);
         } else {
           this.$util.toast(!this.checked ? "请先勾选用户服务协议" : !this.email ? "请输入邮箱地址" : "请输入验证码");
         }
@@ -186,19 +173,35 @@ export default {
           LoginType: 3,
           VCode: this.phone_code,
           CountryCode: this.countryCode,
+          ShareUserCode: this.scene,
         };
-        User.Bind(params).then((res) => {
-          if (res.Ret === 200) {
-            let token = res.Data.Authorization;
-            this.$db.set("access_token", token);
+        this.bindLogin(params);
+      } else {
+        this.$util.toast(!this.checked ? "请先勾选用户服务协议" : !this.phoneIpt ? "请输入手机号" : "请输入验证码");
+      }
+    },
+    //绑定登陆
+    bindLogin(params) {
+      User.Bind(params).then((res) => {
+        if (res.Ret === 200) {
+          let token = res.Data.Authorization;
+          this.$db.set("access_token", token);
+          if (res.Data.IsPotential && this.scene) {
+            uni.reLaunch({
+              url: "/pageMy/transitionPages/transitionPages",
+            });
+          } else {
             uni.navigateBack({
               delta: 1,
+              fail: (err) => {
+                uni.switchTab({
+                  url: "/pages/index/index",
+                });
+              },
             });
           }
-        });
-      } else {
-        this.$util.toast(!this.checked ? "请先勾选用户服务协议" : !this.phoneIpt ? "请输入手机号" : "请输入验证码");
-      }
+        }
+      });
     },
     areacode(num) {
       this.showCountryCode = "+" + num;
@@ -209,7 +212,7 @@ export default {
       this.isAreaCode = false;
     },
   },
-  onLoad() {
+  onLoad(options) {
     /* 校验session */
     uni.checkSession({
       success: (res) => {
@@ -239,6 +242,7 @@ export default {
         });
       },
     });
+    this.scene = options.scene || "";
   },
   onShow() {
     // #ifdef MP-WEIXIN

+ 6 - 1
pageMy/myCollection/myCollection.vue

@@ -11,15 +11,17 @@
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有收藏的内容</text>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
 import { Mine } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
 export default {
   data() {
     return {
@@ -40,6 +42,9 @@ export default {
   onLoad() {
     this.getCollectList();
   },
+  components: {
+    freeCharge,
+  },
   methods: {
     /* 获取列表 */
     getCollectList() {

+ 180 - 0
pageMy/mySchedulepage/mySchedulepage.vue

@@ -0,0 +1,180 @@
+<template>
+  <view class="container activity-content">
+
+    <view class="collect-ul" v-if="haveData">
+      <view class="collect-ltem" v-for="(item, index) in collectList" :key="index">
+        <view class="title-date" @click="goDetail(item)">
+          <text :class="item.ActivityType == 1 ? '' : 'xianxia'">{{ item.ActivityType == 1 ? "线上" : "线下" }}</text>
+          {{ item.ActivityTimeText }}
+        </view>
+        <view class="item-li">
+          <view class="item-img" @click="goDetail(item)">
+            <image :src="item.ImgUrl">
+            <text v-if="item.ActiveState == 1" class="img-status begin">未开始</text>
+            <text v-else-if="item.ActiveState == 2" class="img-status proceed">进行中</text>
+            <text v-else class="img-status">已结束</text>
+            <view class="img-type">
+              <image :src="item.ImgUrlText" mode=""></image>
+            </view>
+          </view>
+          <view class="item">
+            <view class="item-text" @click="goDetail(item)">
+              <text class="activity-title"> {{ item.ActivityName }} </text>
+              <text class="text_twoLine" v-if="item.ActivityTypeName == '专家电话会' || item.ActivityTypeName == '专家线下沙龙' || item.ActivityTypeName == '研选电话会'">专家背景:{{ item.Expert }} </text>
+              <text class="text_twoLine" v-if="item.ActivityTypeName == '公司调研电话会' || item.ActivityTypeName == '公司线下调研'">嘉宾:{{ item.DistinguishedGuest }} </text>
+              <text class="text_twoLine" v-if="item.ActivityTypeName == '分析师电话会' || item.ActivityTypeName == '分析师线下沙龙'">主讲人:{{ item.Speaker }}</text>
+            </view>
+            <block v-if="item.ActiveState == 1">
+              <view class="bottom-box city" v-if="item.ActiveState == 1 && item.IsLimitPeople == 1 && item.ActivityTypeName == '公司调研电话会'">
+                <view class="city-img">
+                  <image v-if="item.City" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png" />
+                  {{ item.City }}
+                </view>
+                <text class="button" v-if="item.IsSignup !== 1" @click="wanttosignup(item.ActivityId)">我要报名</text>
+                <text class="button" v-else @click="signupCancel(item.ActivityId, 2, item.ActivityTime)">{{ item.SignupType == 1 ? "取消外呼" : "取消报名" }}</text>
+              </view>
+              <view class="bottom-box" v-else-if="item.ActivityType == 1">
+                <view class="" style="width: 130rpx">
+                  <text v-if="item.ActivityTypeId == 1" @click="askingGo(item)">帮我带问</text>
+                </view>
+                <text @click="meetingReminderAdd(item.ActivityId)" v-if="item.IsCancelMeetingReminder == 0">会议提醒</text>
+                <text @click="meetingReminderCancel(item.ActivityId)" v-else>取消提醒</text>
+                <text class="button" v-if="item.IsSignup !== 1" @click="signupAdd(item.ActivityId, 1)">预约外呼</text>
+                <text class="button" @click="signupCancel(item.ActivityId, 1, item.ActivityTime)" v-else>取消外呼</text>
+              </view>
+              <view class="bottom-box city" v-else>
+                <view class="city-img">
+                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png" />
+                  {{ item.City }}
+                </view>
+                <text class="button" v-if="item.IsSignup !== 1" @click="signupAdd(item.ActivityId, 3)">我要报名</text>
+                <text class="button" v-else @click="signupCancel(item.ActivityId, 3, item.ActivityTime)">取消报名</text>
+              </view>
+            </block>
+            <block v-else>
+               <view class="bottom-box city" v-if="item.City">
+                <view class="city-img">
+                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png" />
+                  {{ item.City }}
+                </view>
+               </view>  
+               <view class="bottom-box real-time" v-if="item.ActiveState == 2 && item.ActivityTypeId == 1">
+                 <text class="button"  @click="askingGo(item,'提问')">实时提问</text>
+                </view>
+            </block>
+          </view>
+        </view>
+      </view>
+      <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
+    </view>
+    <view class="nodata" v-if="!haveData">
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
+      <text>{{ tabsActive == 0 ? "暂时没有符合条件的活动" : "暂无我的日程" }}</text>
+    </view>
+      <!-- 所有自定义弹框 -->
+      <modalDialog
+        :isShow="isShow"
+        :signupType="signupType"
+        :goFollow="goFollow"
+        :signupStatus="signupStatus"
+        :hasPermission="hasPermission"
+        :jurisdictionList="jurisdictionList"
+        :editIsShow="editIsShow"
+        :isCancelShow="isCancelShow"
+        :idTypeCancel="idTypeCancel"
+        @cancelShowBtn="cancelEnsure"
+        :countryCode="countryCode"
+        :mobileEdit="mobileEdit"
+        :goOnNextStep="goOnNextStep"
+        :isShowhasPermission="isShowhasPermission"
+        :applyForIsShow="applyForIsShow"
+        :mailboxBinding="mailboxBinding"
+      />
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
+  </view>
+</template>
+
+<script>
+import { activity } from "@/config/api.js";
+import { Throttle } from "@/config/util.js";
+import myActivityMixin from "@/activityPages/components/indexActivity.js";
+import modalDialog from "@/components/modalDialog.vue";
+import freeCharge from '@/components/freeCharge'
+let app = getApp();
+export default {
+  mixins: [myActivityMixin],
+  components: {
+    modalDialog, freeCharge
+  },
+  data() {
+    return {
+      collectTypeList: [],
+      haveData: true,
+      whichDay: "",
+      listChartPermission: [],
+      listChartPermissionInit: [],
+      chartPermissionIds: "",
+      isShowJurisdiction: false, //
+      isGetJurisdiction: 0,
+      isrefresh: true,
+      activityTypeId: '',
+    };
+  },
+  methods: {
+    //
+    async getActivityList() {
+      const res = await activity.getScheduleList({ PageSize: this.pageSize, CurrentIndex: this.page_no });
+      if (res.Ret === 200) {
+        this.contentImg = res.Data.ImgUrl;
+        this.contentLabel = res.Data.Label;
+        this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
+        if (this.page_no === 1) {
+          this.collectList = res.Data.List || [];
+          this.haveData = this.collectList.length ? true : false;
+          if (this.refresh) {
+            uni.stopPullDownRefresh();
+            this.refresh = false;
+          }
+        } else {
+          this.collectList = this.collectList.concat(res.Data.List);
+        }
+      }
+    },
+  },
+  //load
+  onLoad(option) {
+   this.getActivityList();
+  },
+  async onShow() {
+    await this.$store.dispatch("checkHandle", "noGO");
+  },
+  /* 触底 */
+  onReachBottom: Throttle(function () {
+    if (this.status === "nomore") return;
+    this.status = "loading";
+    this.page_no++;
+     this.getActivityList();
+  }),
+  /* 下拉刷新 */
+  onPullDownRefresh: Throttle(function () {
+    this.page_no = 1;
+    this.refresh = true;
+    this.getActivityList();
+  }),
+ 
+};
+</script>
+
+<style scoped lang="scss">
+.activity-content {
+  background-color: #f7f7f7;
+  padding-bottom: 90rpx;
+  position: relative;
+  padding-top: 20rpx;
+  .nodata_ico {
+    width: 374rpx;
+    height: 288rpx;
+  }
+}
+@import "@/activityPages/components/indexActivity.scss";
+</style>

+ 69 - 30
pageMy/reportDetail/reportDetail.vue

@@ -5,44 +5,48 @@
       <web-view :src="linkurl + '?id=' + id + '&fromType=mpwechat&token=' + access_token"></web-view>
     </block>
     <view class="noauth-cont" v-else-if="haveAuth === 2 || haveAuth === 3 || haveAuth === 4 || haveAuth === 5">
-      <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
-      <block v-if="haveAuth !== 3">
-        <!-- <view class="tip">您暂无权限查看{{ industry }}内容,若想查看可以申请开通哦</view> -->
-        <view class="tip">您暂无权限查看此报告内容,若想查看可以申请开通对应的试用权限</view>
-        <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
-      </block>
-      <view class="tip" v-if="haveAuth === 3">
-        <!-- 您暂无权限查看{{ industry }}内容 -->
-        您暂无权限查看此报告内容
-        <view class="contract">
-          若想查看可以联系对口销售
-          <text @click="callPhone(sale_number)"
-            >{{ sale_name }}:<text style="color: #d4bf86">{{ sale_number }}</text></text
-          >
+      <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">您暂无权限查看此报告内容,若想查看可以申请开通对应的试用权限</view>
+          <view class="btn-cont" @click="applyAuth">{{ isShowAlert ? "立即上传" : "立即申请" }} </view>
+        </block>
+        <view class="tip" v-if="haveAuth === 3">
+          您暂无权限查看此报告内容
+          <view class="contract">
+            若想查看可以联系对口销售
+            <text @click="callPhone(sale_number)"
+              >{{ sale_name }}:<text style="color: #d4bf86">{{ sale_number }}</text></text
+            >
+          </view>
+          <view>申请开通对应的试用权限</view>
         </view>
-        <!-- <view>开通该行业的试用权限</view> -->
-        <view>申请开通对应的试用权限</view>      
-      </view>
-      <view v-if="haveAuth === 3" class="btn-cont" @click="sellerApplyAuth"> 立即申请 </view>
-      <view class="btn-cont back-btn" @click="backIndex"> 返回 </view>
+        <view v-if="haveAuth === 3" class="btn-cont" @click="sellerApplyAuth"> 立即申请</view>
+        <view class="btn-cont back-btn" @click="backIndex"> 返回 </view>
+      </block>
+      <block v-else>
+        <text class="moneh-text"> 上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡 </text>
+        <img src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/month_card.png" class="month_card" alt="" />
+        <view class="btn-cont btn-dl" @click="applyAuth"> 立即上传 </view>
+        <view class="btn-cont month-back" @click="backIndex"> 返回</view>
+      </block>
     </view>
   </view>
 </template>
 
 <script>
-import { Report, User, Reports } from "@/config/api.js";
+import { Report, User, Reports, FreeButton } from "@/config/api.js";
 let app = getApp({ allowDefault: true });
 export default {
   data() {
     return {
       haveAuth: false,
-      // haveFree:false,//是否付费
       access_token: "", //用户标识
       isIphoneX: false, //判断机型
       reportInfo: "",
-      linkurl:'https://details.hzinsights.com/raiReportDtl',//线上链接地址
+      //linkurl:'https://details.hzinsights.com/raiReportDtl',//线上链接地址
       //linkurl:'http://192.168.20.72:3000/xcx_h5/raiReportDtl',//线上链接地址
-      //linkurl: "http://advisoryadmin.brilliantstart.cn/xcx_h5/raiReportDtl", //链接地址
+      linkurl: "http://advisoryadmin.brilliantstart.cn/xcx_h5/raiReportDtl", //链接地址
       showNav: false,
       id: "",
       isShowTip: false,
@@ -51,6 +55,7 @@ export default {
       industry: "", //行业
       readTiem: 0,
       setIntervalTiem: null,
+      isShowAlert: false,
     };
   },
   computed: {},
@@ -65,11 +70,17 @@ export default {
             title: res.Data.Detail.IsSummary == 1 ? "纪要详情" : "报告详情",
           });
           this.haveAuth = res.Data.HasPermission;
+          this.isShowWriter = res.Data.IsShow;
           this.industry = res.Data.Detail.CategoryName;
           this.sale_name = res.Data.Detail.SellerName;
           this.sale_number = res.Data.Detail.SellerMobile;
           if (res.Data.HasPermission === 1) {
             //有访问权限
+            if (res.Data.Detail.IsNeedJump) {
+              uni.redirectTo({
+                url: "/pageMy/reportPage/reportPage?id=" + this.id,
+              });
+            }
             this.reportInfo = res.Data.Detail;
             this.access_token = this.access_token || this.$db.get("access_token");
             this.$store.dispatch("statistics", { PageType: "ReportParticulars", DetailId: this.id });
@@ -110,17 +121,17 @@ export default {
         TryType: "Article",
         DetailId: Number(this.id),
       }).then((res) => {
-       if(res.Ret === 200) {
-         uni.showModal({
+        if (res.Ret === 200) {
+          uni.showModal({
             title: "",
             content: "提交申请成功,请耐心等待",
             showCancel: false,
             confirmColor: "#365595",
             success: function (res) {
-            this.backIndex()
+              this.backIndex();
             },
           });
-      }
+        }
       });
     },
     // 返回首頁
@@ -202,6 +213,13 @@ export default {
         },
       });
     },
+    //获取权限弹窗是否展示免费月卡接口
+    async userIsShowAlert() {
+      const res = await FreeButton.userIsShowAlert();
+      if (res.Ret === 200) {
+        this.isShowAlert = res.Data.IsShow;
+      }
+    },
   },
   async onShow() {
     this.readTiem = 0;
@@ -232,6 +250,7 @@ export default {
     if (!this.id && !+this.id > 0) {
       this.errorDetails();
     }
+    this.userIsShowAlert();
   },
   /**
    * 用户点击分享
@@ -239,7 +258,7 @@ export default {
   onShareAppMessage: function (res) {
     if (this.id) {
       return {
-        title: this.reportInfo.Title,
+        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.reportInfo.Title,
         path: "/pageMy/reportDetail/reportDetail?id=" + this.id,
         success: (res) => {},
         fail: (err) => {},
@@ -254,7 +273,7 @@ export default {
         ArticleId: Number(this.id),
         StopTime: this.readTiem,
         OutType: 2,
-        Source:'MOBILE'
+        Source: "MOBILE",
       }).then((res) => {});
     }
   },
@@ -266,7 +285,7 @@ export default {
         ArticleId: Number(this.id),
         StopTime: this.readTiem,
         OutType: 1,
-        Source:'MOBILE'
+        Source: "MOBILE",
       }).then((res) => {});
     }
   },
@@ -387,5 +406,25 @@ export default {
       }
     }
   }
+  .month_card {
+    width: 100%;
+    height: 565rpx;
+    padding-left: -20rpx;
+  }
+  .btn-dl {
+    background: linear-gradient(253deg, #fcf3e9 0%, #eedec8 100%) !important;
+    color: #333 !important;
+    margin: 30rpx auto !important;
+  }
+  .month-back {
+    background: #f6f6f6 !important;
+    color: #999 !important;
+  }
+  .moneh-text {
+    text-align: center;
+    width: 632rpx;
+    margin: 0 auto 20rpx;
+    color: #999999;
+  }
 }
 </style>

+ 382 - 0
pageMy/reportPage/reportPage.vue

@@ -0,0 +1,382 @@
+<template>
+  <view class="container reportDetail-container">
+    <block v-if="haveAuth === 1">
+      <web-view :src="linkurl">
+        <cover-view bindtap="searchViewTap" class="search-view">
+          <cover-view class="search-view-box" @click="btnSearch">
+            <cover-image class="search-icon" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/search.png"></cover-image>
+            <cover-view class="search-text">搜索您想要的纪要</cover-view>
+          </cover-view>
+        </cover-view>
+        <cover-view class="footer-con">
+          <cover-view class="handle-item" @click="applyHandle">
+            <cover-image
+              class="download-img"
+              :src="isInterviewApply ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/apply_act.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/apply_ico.png'"
+            ></cover-image>
+            <cover-view>申请访谈</cover-view>
+          </cover-view>
+          <cover-view class="handle-item" @click="collectHandle">
+            <cover-image
+              class="download-img"
+              :src="isCollection ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_act.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_ico.png'"
+            ></cover-image>
+            <cover-view>收藏</cover-view>
+          </cover-view>
+          <cover-view class="handle-item" v-if="fileLink" @click="downloadFile">
+            <cover-image class="download-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/down_ico.png"></cover-image>
+            <cover-view>下载</cover-view>
+          </cover-view>
+        </cover-view>
+        <cover-view class="footer-free-charge free-charge" v-if="isShowFree">
+          <cover-image class="img" @click="toggle" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/free_icon.png"></cover-image>
+          <cover-image @click="removeBton" class="remove-icon" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/free_%20remove.png"></cover-image>
+        </cover-view>
+      </web-view>
+    </block>
+  </view>
+</template>
+
+<script>
+import { Report, User, Reports, FreeButton } from "@/config/api.js";
+import freeCharge from "@/components/freeCharge";
+let app = getApp({ allowDefault: true });
+export default {
+  data() {
+    return {
+      haveAuth: false,
+      // haveFree:false,//是否付费
+      access_token: "", //用户标识
+      isIphoneX: false, //判断机型
+      reportInfo: "",
+      showNav: false,
+      id: "",
+      linkurl: "",
+      isShowTip: false,
+      sale_name: "", //可联系销售名称
+      sale_number: "", //可联系销售电话
+      industry: "", //行业
+      readTiem: 0,
+      setIntervalTiem: null,
+      fileLink: false,
+      isCollection: false,
+      isInterviewApply: false,
+    };
+  },
+  components: {
+    freeCharge,
+  },
+  methods: {
+    /* 获取详情 */
+    getDetail() {
+      Report.reportDtl({
+        ArticleId: Number(this.id),
+      }).then((res) => {
+        if (res.Ret === 200) {
+          uni.setNavigationBarTitle({
+            title: res.Data.Detail.IsSummary == 1 ? "纪要详情" : "报告详情",
+          });
+          this.haveAuth = res.Data.HasPermission;
+          this.industry = res.Data.Detail.CategoryName;
+          this.sale_name = res.Data.Detail.SellerName;
+          this.sale_number = res.Data.Detail.SellerMobile;
+          if (res.Data.HasPermission === 1) {
+            //有访问权限
+            this.reportInfo = res.Data.Detail;
+            this.isCollection = this.reportInfo.IsCollect;
+            this.isInterviewApply = this.reportInfo.IsInterviewApply;
+            this.linkurl = res.Data.Detail.HttpUrl;
+            this.fileLink = res.Data.Detail.FileLink;
+            this.access_token = this.access_token || this.$db.get("access_token");
+            this.$store.dispatch("statistics", { PageType: "ReportParticulars", DetailId: this.id });
+          }
+        }
+      });
+    },
+    /* 无权限申请开通权限 */
+    applyAuth() {
+      /* 区分是否是潜在用户 */
+      this.haveAuth === 2
+        ? User.applyTry({
+            ApplyMethod: 3,
+            TryType: "Article",
+            DetailId: Number(this.id),
+          }).then((res) => {
+            if (res.Ret === 200) {
+              uni.navigateTo({
+                url: "/pageMy/applyResult/applyResult",
+              });
+            }
+          })
+        : this.haveAuth === 4
+        ? uni.navigateTo({
+            url: "/pageMy/applyTrial/applyTrial?tryType=Article&detailId=" + this.id,
+          })
+        : uni.showModal({
+            title: "",
+            content: "您已经提交过申请了,请耐心等待",
+            showCancel: false,
+            confirmColor: "#365595",
+            success: function (res) {},
+          });
+    },
+    //销售的立即申请
+    sellerApplyAuth() {
+      User.applyTry({
+        TryType: "Article",
+        DetailId: Number(this.id),
+      }).then((res) => {
+        if (res.Ret === 200) {
+          uni.showModal({
+            title: "",
+            content: "提交申请成功,请耐心等待",
+            showCancel: false,
+            confirmColor: "#365595",
+            success: function (res) {
+              this.backIndex();
+            },
+          });
+        }
+      });
+    },
+    // 返回首頁
+    backIndex() {
+      uni.navigateBack({
+        fail() {
+          uni.switchTab({
+            url: "/pages/index/index",
+          });
+        },
+      });
+    },
+    callPhone(num) {
+      uni.makePhoneCall({
+        phoneNumber: num,
+      });
+    },
+    /* 申请访谈 */
+    applyHandle() {
+      // 申请访谈
+      !this.isInterviewApply &&
+        this.$util.modal("", "专家访谈申请会提交给您的对口销售,销售会线下与您取得联系,确定申请吗?", () => {
+          this.interviewApi();
+        });
+      // 取消申请访谈 区分状态 '待邀请','待访谈','已完成','已取消'
+      if (this.isInterviewApply) {
+        this.$util.modal(
+          "",
+          this.reportInfo.InterviewApplyStatus == "待访谈"
+            ? "当前无法取消访谈,若有疑问,请联系对口销售"
+            : this.reportInfo.InterviewApplyStatus == "待邀请"
+            ? "您要取消此次访谈申请吗?"
+            : "该访谈已完成",
+          () => {
+            this.reportInfo.InterviewApplyStatus == "待邀请"
+              ? this.interviewApi()
+              : this.reportInfo.InterviewApplyStatus == "待访谈"
+              ? uni.makePhoneCall({
+                  phoneNumber: "18767183922",
+                })
+              : "";
+          }
+        );
+      }
+    },
+    /* 访谈接口 */
+    interviewApi() {
+      Report.applyRpt({
+        ArticleId: Number(this.id),
+      }).then((res) => {
+        this.isInterviewApply = !this.isInterviewApply;
+      });
+    },
+    /* 收藏 */
+    collectHandle() {
+      Report.collectRpt({
+        ArticleId: Number(this.id),
+      }).then((res) => {
+        this.isCollection = !this.isCollection;
+        this.$util.toast(res.Msg);
+      });
+    },
+    /* 错误 */
+    errorDetails() {
+      uni.showModal({
+        confirmText: "知道了",
+        showCancel: false,
+        confirmColor: "#3385FF",
+        content: "网络不好,请刷新重试",
+        success: (res) => {
+          uni.navigateBack({
+            fail() {
+              uni.switchTab({
+                url: "/pages/index/index",
+              });
+            },
+          });
+        },
+      });
+    },
+    async downloadFile() {
+      const res = await Report.articlePdfwatermark({
+        ArticleId: Number(this.id),
+      });
+      if (res.Ret === 200) {
+        uni.navigateTo({
+          url: "/pageMy/downloadFile/downloadFile?url=" + res.Data.FileLink,
+        });
+      }
+    },
+    btnSearch() {
+      uni.navigateTo({ url: "/pageMy/search/search" });
+    },
+    //跳转到免费送月卡页面
+    toggle() {
+      uni.navigateTo({
+        url: "/pageMy/freeTrial/freeTrial",
+      });
+    },
+    //隐藏当天的按钮
+    async removeBton() {
+      const res = await FreeButton.userFreeButtonUpdate();
+    },
+  },
+  async onShow() {
+    this.readTiem = 0;
+    this.setIntervalTiem = setInterval(() => {
+      this.readTiem++;
+    }, 1000);
+    let page = getCurrentPages(); //查看路径
+    if (page.length === 1) {
+      await this.$store.dispatch("checkHandle");
+      if (!this.$store.state.isAuth && !this.$store.state.isBind) this.getDetail();
+    } else {
+      // 跳转入口
+      this.getDetail();
+    }
+  },
+  onLoad(option) {
+    // /* 兼容iphonex底部 */
+    uni.getSystemInfo({
+      success: (res) => {
+        let ua = res.model;
+        if (ua.search("iPhone X") != -1 || ua.search("iPhone 11") != -1 || ua.search("iPhone 11 Pro Max") != -1) {
+          this.isIphoneX = true;
+        }
+      },
+    });
+    this.id = option.id ? option.id : "";
+    if (!this.id && !+this.id > 0) {
+      this.errorDetails();
+    }
+  },
+  /**
+   * 用户点击分享
+   */
+  onShareAppMessage: function (res) {
+    if (this.id) {
+      return {
+        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.reportInfo.Title,
+        path: "/pageMy/reportDetail/reportDetail?id=" + this.id,
+        success: (res) => {},
+        fail: (err) => {},
+      };
+    }
+  },
+  onHide() {
+    //页面退出
+    if (this.id && +this.id > 0) {
+      clearInterval(this.setIntervalTiem);
+      Reports.addStopTime({
+        ArticleId: Number(this.id),
+        StopTime: this.readTiem,
+        OutType: 2,
+        Source: "MOBILE",
+      }).then((res) => {});
+    }
+  },
+  onUnload() {
+    if (this.id && +this.id > 0) {
+      //页面返回
+      clearInterval(this.setIntervalTiem);
+      Reports.addStopTime({
+        ArticleId: Number(this.id),
+        StopTime: this.readTiem,
+        OutType: 1,
+        Source: "MOBILE",
+      }).then((res) => {});
+    }
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.reportDetail-container {
+  background-color: #fff;
+  .search-view {
+    position: fixed;
+    width: 100%;
+    height: 110rpx;
+    padding: 15rpx 34rpx;
+    z-index: 99999;
+    font-size: 24rpx;
+    box-sizing: border-box;
+    background: #fff;
+    .search-view-box {
+      display: flex;
+      align-items: center;
+      background: #f6f6f6;
+      border: 1px solid #e5e5e5;
+      border-radius: 35rpx;
+      height: 70rpx;
+      z-index: 99999;
+    }
+    .search-icon {
+      width: 26rpx;
+      height: 26rpx;
+      margin: 0 15rpx;
+      z-index: 99999;
+    }
+  }
+  .footer-con {
+    position: fixed;
+    z-index: 99999;
+    bottom: 0;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    left: 0;
+    width: 100%;
+    background-color: #ffffff;
+    display: flex;
+    justify-content: space-around;
+    height: 100rpx;
+    border-top: 1px solid #dddddd;
+    .handle-item {
+      align-items: center;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      position: relative;
+      z-index: 99999;
+      .download-img {
+        width: 44rpx;
+        height: 44rpx;
+        margin-bottom: 4rpx;
+      }
+    }
+  }
+  .footer-free-charge {
+    .img {
+      width: 156rpx;
+      height: 156rpx;
+    }
+    .remove-icon {
+      width: 31rpx;
+      height: 31rpx;
+      position: absolute;
+      right: 0;
+      top: 0;
+    }
+  }
+}
+</style>

+ 294 - 199
pageMy/search/search.vue

@@ -1,80 +1,100 @@
 <template>
-  <view class="searchTarget-container container">
-    <view class="searchTarget-header">
-      <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
-      <icon type="search" size="15" class="sea_ico" />
-      <view class="ipt-right">
-        <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
-        <text class="line">|</text>
-        <text @click="searchHandle" style="color: #3385ff">搜索</text>
+  <view class="search-container container">
+    <view class="sticky-content">
+      <view class="searchTarget-header">
+        <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
+        <icon type="search" size="15" class="sea_ico" />
+        <view class="ipt-right">
+          <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
+          <text class="line">|</text>
+          <text @click="searchHandle" style="color: #3385ff">搜索</text>
+        </view>
+      </view>
+      <view class="radio-content">
+        <van-radio-group :value="radioSelect" @change="onChangeRadio" direction="horizontal">
+          <van-radio icon-size="16" name="1">搜全部</van-radio>
+          <van-radio icon-size="16" name="2">搜纪要</van-radio>
+          <van-radio icon-size="16" name="3">搜图表</van-radio>
+        </van-radio-group>
+      </view>
+      <view class="tab-cont" v-if="radioSelect == 2 && isResult">
+        <view :class="['item', item.mode == orderColumn && 'tabs-active text_twoLine']" v-for="item in tabBars" :key="item.mode" @click.stop="toggleTab(item)">
+          {{ item.PermissionName }}
+          <view class="active" v-if="orderColumn === item.mode"></view>
+        </view>
       </view>
     </view>
-    <view class="search-cont">
-      <template v-if="!isResult">
-        <view class="search-cont-top" v-if="historySearchList.length">
-          <view class="cont-tit">
-            <text>搜索历史</text>
-            <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico" @click="clearHistory"></image>
-          </view>
-          <view class="targetList">
-            <view class="target-item" v-for="(item, index) in historySearchList" :key="index" @click="chooseTarget(item)">{{ item }}</view>
-          </view>
+    <view class="search-cont" v-if="!isResult">
+      <view class="search-cont-top">
+        <view class="cont-tit">
+          <text>热搜关键词:</text>
         </view>
-        <view class="search-cont-top">
-          <view class="cont-tit">
-            <text>弘则推荐</text>
-          </view>
-          <view class="targetList">
-            <view class="target-item" v-for="(item, index) in keywordList" :key="index" @click="chooseTarget(item)">{{ item }}</view>
-          </view>
+        <view class="targetList">
+          <view class="target-item" v-for="(item, index) in hotKeyWord" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
         </view>
-      </template>
-      <template v-else>
-        <block v-if="haveResult">
-          <view class="tab-cont">
-            <scroll-view scroll-x="true" scroll-with-animation class="scroll-tab" :scroll-into-view="'_' + tabIndex">
-              <block v-for="(item, index) in tabBars" :key="item.ChartPermissionId">
-                <view :id="'_' + index" class="scroll-tab-item" :class="{ active: tabAct_id === item.ChartPermissionId }" @click.stop="toggleTab(item, index)">
-                  {{ item.PermissionName }}
-                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/border_act.png" mode="" class="border_act" v-if="tabAct_id === item.ChartPermissionId"></image>
-                </view>
-              </block>
-            </scroll-view>
-          </view>
-          <view class="result-data">
-            <view class="report-ul">
-              <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
-                <!-- <view class="item-content">{{report.content}}</view> -->
-                <view class="item-content"><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-                <view class="line"></view>
-                <view class="item-title"><u-parse :html="report.Title"></u-parse></view>
-                <view class="item-abstract" v-if="report.abstract">
-                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_ico.png" class="report_ico"></image>
-                  {{ report.abstract }}
-                </view>
-                <text class="item-createtime">{{ report.PublishDate }}</text>
+      </view>
+      <view class="search-cont-top">
+        <view class="cont-tit">
+          <text>弘则推荐:</text>
+        </view>
+        <view class="targetList">
+          <view class="target-item" v-for="(item, index) in keywordList" :key="index" @click="chooseTarget(item)"># {{ item }}</view>
+          <view class="chart-item" v-for="(item, index) in chartWordList" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
+        </view>
+      </view>
+      <view class="search-cont-top" v-if="historySearchList.length">
+        <view class="cont-tit">
+          <text>搜索历史:</text>
+          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico" @click="clearHistory"></image>
+        </view>
+        <view class="targetList">
+          <block v-for="(item, index) in historySearchList" :key="index">
+            <view v-if="index < 8" class="target-item" @click="chooseTarget(item)"># {{ item }}</view>
+          </block>
+        </view>
+      </view>
+    </view>
+    <!-- 内容地方 -->
+    <view class="search-cont" v-else>
+      <block v-if="haveResult">
+        <view class="result-data">
+          <view class="report-ul">
+            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
+              <view class="item-content-img" v-if="report.BodyHtml">
+                <image :src="report.BodyHtml" mode=""></image>
+              </view>
+              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
+              <view class="line"></view>
+              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
+              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
+              <view class="item-createtime chart-tag" v-else>
+                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
               </view>
             </view>
-            <view class="report-ul">
-              <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
-                <view class="item-content"><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-                <view class="line"></view>
-                <view class="item-title"><u-parse :html="report.Title"></u-parse></view>
-                <view class="item-abstract" v-if="report.ExpertBackground">
-                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_ico.png" class="report_ico"></image>
-                  {{ report.ExpertBackground }}
-                </view>
-                <text class="item-createtime">{{ report.PublishDate }}</text>
+          </view>
+          <view class="report-ul">
+            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
+              <view class="item-content-img" v-if="report.BodyHtml">
+                <image :src="report.BodyHtml" mode=""></image>
+              </view>
+              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
+              <view class="line"></view>
+              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
+              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
+              <view class="item-createtime chart-tag" v-else>
+                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
               </view>
             </view>
           </view>
-          <u-loadmore :status="status" icon-type="flower" :load-text="loadText" bg-color="#F7F7F7" padding-bottom="20rpx" />
-        </block>
-        <view class="nodata" v-else>
-          <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
-          <text>未找到您想搜索的内容</text>
         </view>
-      </template>
+        <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="pageNum > 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>未找到您想搜索的内容</text>
+      </view>
     </view>
   </view>
 </template>
@@ -82,6 +102,7 @@
 <script>
 import { Search } from "@/config/api.js";
 import { Debounce, Throttle } from "@/config/util.js";
+let app = getApp({ allowDefault: true });
 export default {
   data() {
     return {
@@ -92,62 +113,64 @@ export default {
       historySearchList: [],
       // 关键字列表
       keywordList: [],
-      targetList: [], //所有指标列表
+      chartWordList: [],
       // 搜索结果列表
       resultList: [],
-      page_no: 1,
+      resultDataList: [],
+      indList: [],
+      pageNum: 1,
       pageSize: 10,
       totalPage: 0,
-      orderColumn: "Matching",
-      loadText: {
-        loadmore: "上拉加载更多",
-        loading: "加载中",
-        nomore: "已经到底了",
-      },
-      status: "loadmore",
-      tabAct_id: 1,
-      isTabAct: true,
+      hotKeyWord: [],
+      radioSelect: "1",
       tabBars: [
         {
           PermissionName: "匹配度排序",
-          ChartPermissionId: 1,
           mode: "Matching",
         },
         {
           PermissionName: "综合排序",
-          ChartPermissionId: 2,
           mode: "Comprehensive",
         },
         {
           PermissionName: "发布时间排序",
-          ChartPermissionId: 3,
           mode: "PublishDate",
         },
       ],
+      orderColumn: "Matching",
+      status: "loadmore",
+      loadText: {
+        loadmore: "上拉加载更多",
+        loading: "加载中",
+        nomore: "已经到底了",
+      },
     };
   },
   watch: {
     searchTxt(newVal) {
       if (newVal.length <= 0) {
-        this.tabAct_id = 1;
         this.isResult = false;
+        this.orderColumn = "Matching";
       }
     },
   },
   methods: {
-    //tabs切换事件
-    toggleTab(item, index) {
-      this.orderColumn = item.mode;
-      if (this.tabAct_id !== item.ChartPermissionId) {
-        this.tabAct_id = item.ChartPermissionId;
-        this.pageNum = 1;
-        this.getDataList();
-        uni.pageScrollTo({
-          scrollTop: 0,
-          duration: 0,
-        });
+    //获取热搜关键词的请求
+    async researchHotKeyWord() {
+      const res = await Search.getKeys();
+      if (res.Ret === 200) {
+        this.hotKeyWord = res.Data.ListHot || [];
+        this.chartWordList = res.Data.List || [];
+        this.keywordList = res.Data.Item ? res.Data.Item.ConfigValue.split(",") : [];
       }
     },
+    //点击了搜索的变化
+    onChangeRadio(value) {
+      this.radioSelect = value.detail;
+      this.orderColumn = "Matching";
+      this.dataInit();
+      this.clearIpt();
+    },
     /* 获取关键词 */
     getKeyWord() {
       Search.getKeys().then((res) => {
@@ -160,25 +183,14 @@ export default {
     chooseTarget(item) {
       this.searchTxt = item;
       this.SecName = item;
-      this.resultList = [];
-      this.page_no = 1;
+      this.dataInit();
+      this.indList = [];
+      if (!this.historySearchList.includes(this.searchTxt)) {
+        this.historySearchList.unshift(this.searchTxt);
+        this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
+      }
       this.getDataList();
     },
-    // 键盘输入过程中
-    searchDoing() {
-      this.isResult = false;
-      //全部指标列表
-      let arr = JSON.parse(JSON.stringify(this.targetList));
-      let filterArr = [];
-      // // 过滤出符合搜索条件的值
-      arr.forEach((item, index) => {
-        if (item.SecName.includes(this.searchTxt)) {
-          item.SecName = this.join(item.SecName, this.searchTxt);
-          filterArr.unshift(item);
-        }
-      });
-      this.keywordList = filterArr;
-    },
     // 拼接
     join(str, key) {
       return str.replace(new RegExp(`${key}`, "g"), `%%${key}%%`).split("%%");
@@ -191,71 +203,112 @@ export default {
           this.historySearchList.unshift(this.searchTxt);
           this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
         }
-        this.resultList = [];
-        this.page_no = 1;
+        this.indList = [];
+        this.dataInit();
         this.getDataList();
       } else {
         this.$util.toast("请输入关键字");
       }
     }),
     // 查找数据
-    getDataList() {
+    async getDataList() {
       this.isResult = true;
-      Search.getResult({
+      const res = await Search.getArtAndChartList({
         KeyWord: this.searchTxt,
-        // PageSize: this.pageSize,
-        // CurrentIndex: this.page_no,
-        OrderColumn: this.orderColumn,
-      }).then((res) => {
-        if (res.Ret === 200) {
-          // this.status = this.page_no < res.Data.Paging.Pages ? 'loadmore' : 'nomore';
-          this.status = "nomore";
-          this.totalPage = res.Data.Paging.Pages; //总页数
-          if (this.page_no === 1) {
-            this.resultList = res.Data.List || [];
-            this.haveResult = this.resultList.length ? true : false;
+        OrderColumn: this.radioSelect == 2 ? this.orderColumn : "",
+        ListType: this.radioSelect,
+      });
+      if (res.Ret === 200) {
+        this.totalPage = res.Data.Paging.Totals;
+        if (this.radioSelect == 1) {
+          if (!res.Data.List.length) {
+            this.resultDataList = res.Data.ChartList || [];
+          } else if (!res.Data.ChartList.length) {
+            this.resultDataList = res.Data.List || [];
           } else {
-            this.resultList = this.resultList.concat(res.Data.List);
+            this.resultDataList.push(res.Data.List.shift());
+            let newArr = [];
+            let newArrTwo = [];
+            for (let i = 0; i < res.Data.List.length; i += 2) {
+              newArr.push(res.Data.List.slice(i, i + 2));
+            }
+            for (let i = 0; i < res.Data.ChartList.length; i += 2) {
+              newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
+            }
+            let arr = [];
+            newArr.forEach((item, index) => {
+              if (newArrTwo[index]) {
+                arr.push(newArrTwo[index], item);
+              } else {
+                arr.push(item);
+              }
+            });
+            this.resultDataList = this.resultDataList.concat(arr.flat(Infinity));
           }
+          this.haveResult = this.resultDataList.length ? true : false;
+        } else if (this.radioSelect == 2) {
+          this.resultDataList = res.Data.List || [];
+          this.haveResult = this.resultDataList.length ? true : false;
+        } else {
+          this.resultDataList = res.Data.ChartList || [];
+          this.haveResult = this.resultDataList.length ? true : false;
         }
-      });
-    },
-    // 点击数据列表修改数据
-    itemClick(item) {
-      let data = encodeURIComponent(JSON.stringify(item));
-      uni.navigateTo({
-        url: "/pages/recordData/recordData?data=" + data,
-      });
+        this.resultList = this.haveResult ? this.resultDataList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize) : [];
+      }
     },
     /* 表单清空 */
     clearIpt() {
       this.searchTxt = "";
+      this.dataInit();
       this.isTabAct = false;
-      this.orderColumn = "Matching";
-      //
+    },
+    /* 进入详情 校验是否有该品种权限 */
+    goDetail(item) {
+      if (item.Source == 2) {
+        /* 无需授权且已绑定 检验是或否有权限 */
+        this.$store.dispatch("checkHandle", "/pageMy/chartPage/chartPage?id=" + item.ChartId);
+      } else {
+        /* 无需授权且已绑定 检验是或否有权限 */
+        this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId);
+      }
     },
     /* 历史搜索清空 */
     clearHistory() {
       this.historySearchList = [];
       this.$db.del("historySearchList");
     },
-    /* 进入详情 校验是否有该品种权限 */
-    goDetail(item) {
-      uni.navigateTo({
-        url: "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId,
+    //获取数据的初始值
+    dataInit() {
+      this.pageNum = 1;
+      this.resultList = [];
+      this.resultDataList = [];
+      this.status = "loadmore";
+        uni.pageScrollTo({
+          scrollTop: 0,
+          duration: 0,
+        });
+    },
+    //tabs切换事件
+    toggleTab(item) {
+      this.orderColumn = item.mode;
+      this.pageNum = 1;
+      uni.pageScrollTo({
+        scrollTop: 0,
+        duration: 0,
+      });
+      this.resultList = [];
+      this.getDataList();
+      uni.pageScrollTo({
+        scrollTop: 0,
+        duration: 0,
       });
     },
   },
-  /* 触底 */
-  onReachBottom: Throttle(function () {
-    // this.status = 'nomore';
-    if (this.isResult) {
-      // if(this.status === 'nomore') return ;
-      // this.page_no++;
-      // this.getDataList();
+  onLoad(options) {
+    if (options.text) {
+      this.searchTxt = options.text;
+      this.getDataList();
     }
-  }),
-  onLoad() {
     // 获取历史搜索记录
     if (this.$db.get("historySearchList")) {
       let historyList = JSON.parse(this.$db.get("historySearchList"));
@@ -265,21 +318,38 @@ export default {
   onShow() {
     this.$store.dispatch("statistics", { PageType: "SummarySearch" });
     this.getKeyWord();
+    this.researchHotKeyWord();
   },
+  // 上拉加载this.resultList
+  onReachBottom: Throttle(function () {
+    if (!this.resultList.length) return;
+    if (this.status === "nomore") return;
+    this.status = "loading";
+    this.pageNum++;
+    this.resultList = this.resultList.concat(this.resultDataList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize));
+    this.status = this.pageNum * 10 < this.totalPage ? "loadmore" : "nomore";
+    console.log(this.status);
+  }),
 };
 </script>
 
 <style lang="scss">
-.searchTarget-container {
+.search-container {
   background-color: #fff;
-  .searchTarget-header {
-    padding: 0 34rpx;
-    width: 100%;
-    background-color: #fff;
-    position: fixed;
+  padding-bottom: 30rpx;
+  .sticky-content {
+    position: sticky;
     top: 0;
     left: 0;
+    width: 100%;
     z-index: 99;
+    padding-bottom: 10rpx;
+    background-color: #fff;
+  }
+  .searchTarget-header {
+    padding: 0 34rpx;
+    width: 100%;
+    position: relative;
     padding: 30rpx 0;
     display: flex;
     justify-content: center;
@@ -321,8 +391,13 @@ export default {
       }
     }
   }
+  .radio-content {
+    width: 100%;
+    padding-left: 58rpx;
+    background-color: #fff;
+    display: flex;
+  }
   .search-cont {
-    padding-top: 130rpx;
     .search-cont-top {
       padding: 0 34rpx 0;
       margin-bottom: 10rpx;
@@ -331,9 +406,9 @@ export default {
         margin-bottom: 0;
       }
       .cont-tit {
-        color: #666;
-        font-size: 28rpx;
-        margin-bottom: 30rpx;
+        font-size: 32rpx;
+        margin-bottom: 20rpx;
+        font-weight: 500;
         display: flex;
         justify-content: space-between;
         .empty_ico {
@@ -344,16 +419,14 @@ export default {
       .targetList {
         display: flex;
         flex-wrap: wrap;
-        // justify-content: space-between;
+        font-size: 28rpx;
         .target-item {
-          padding: 4rpx 18rpx;
-          color: #4a4a4a;
-          font-size: 26rpx;
-          // border: 1rpx solid #3385ff;
-          background-color: #f7f7f7;
-          margin-bottom: 30rpx;
-          margin-right: 30rpx;
-          border-radius: 20rpx;
+          width: 50%;
+          margin-bottom: 20rpx;
+        }
+        .chart-item {
+          width: 100%;
+          margin-bottom: 20rpx;
         }
       }
     }
@@ -381,7 +454,6 @@ export default {
       }
     }
     .result-data {
-      margin-top: 80rpx;
       min-height: calc(100vh - 130rpx);
       padding: 20rpx 34rpx 40rpx;
       display: flex;
@@ -398,13 +470,10 @@ export default {
           box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
           background: #fff;
           .item-content {
-            // height: 273rpx;
             font-size: 24rpx;
             line-height: 40rpx;
             color: #7f7f7f;
             display: -webkit-box;
-            // text-overflow:ellipsis;
-            // overflow: hidden;
             text {
               display: inline;
             }
@@ -430,6 +499,10 @@ export default {
               display: inline;
             }
           }
+          .chart-title {
+            height: 72rpx;
+            padding-bottom: 10rpx;
+          }
           .item-abstract {
             font-size: 26rpx;
             color: #6a6a6a;
@@ -447,45 +520,67 @@ export default {
           }
         }
       }
+      .chart-tag {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding-top: 1rpx;
+        height: 36rpx;
+        .tag-item {
+          width: 148rpx;
+          border-radius: 28rpx;
+          border: 2rpx solid rgba(49, 137, 255, 1);
+          overflow: hidden;
+          color: #3385ff;
+          text-align: center;
+          line-height: 32rpx;
+        }
+      }
+      .item-content-img {
+        display: flex;
+        align-items: center;
+        width: 330rpx;
+        margin-left: -15rpx;
+        margin-bottom: -20rpx;
+        image {
+          width: 100%;
+          height: 262rpx;
+          vertical-align: middle;
+        }
+      }
     }
   }
   .tab-cont {
-    position: fixed;
-    top: 128rpx;
     width: 100%;
-    padding: 0 26rpx;
-    background-color: #fff;
+    display: flex;
+    align-items: center;
+    padding: 20rpx 30rpx 0;
     font-size: 32rpx;
-    z-index: 99;
-    box-shadow: 0 3rpx 6rpx rgba(187, 216, 255, 0.2);
-    .scroll-tab {
-      width: 100%;
-      white-space: nowrap;
+    &::-webkit-scrollbar {
+      width: 0;
+      height: 0;
+      display: none;
     }
-    .scroll-tab-item {
-      // flex-grow: 1;
-      text-align: center;
-      display: inline-block;
-      padding: 0 8rpx 30rpx 8rpx;
-      margin-right: 40rpx;
-      border-bottom: 8rpx solid transparent;
+    .item {
       position: relative;
-      &:last-child {
-        margin-right: 0;
-      }
-      &.active {
-        border-bottom: none;
-        color: #2c83ff;
-        font-weight: 700;
-      }
-      .border_act {
-        width: 100%;
-        height: 8rpx;
+      padding-bottom: 16rpx;
+      margin-right: 50rpx;
+      flex-shrink: 0;
+      .active {
         position: absolute;
-        bottom: 0;
         left: 0;
+        bottom: 0;
+        height: 4rpx;
+        width: 100%;
+        border-radius: 2rpx;
+
+        font-weight: 500;
+        background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
       }
     }
+    .tabs-active {
+      color: #3385ff;
+    }
   }
 }
 </style>

+ 63 - 0
pageMy/transitionPages/transitionPages.vue

@@ -0,0 +1,63 @@
+<template>
+  <view class="container container-transition">
+    <text class="moneh-text"> 上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡 </text>
+    <img src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/month_card.png" class="month_card" alt="" />
+    <view class="btn-cont btn-dl" @click="applyAuth"> 立即上传 </view>
+    <view class="btn-cont month-back" @click="backIndex"> 返回</view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  methods: {
+    applyAuth() {
+      uni.navigateTo({
+        url: "/pageMy/applyTrial/applyTrial",
+      });
+    },
+    backIndex() {
+      uni.switchTab({
+        url: "/pages/index/index",
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.container-transition {
+    padding-top: 200rpx;
+  .month_card {
+    width: 100%;
+    height: 565rpx;
+    padding-left: -20rpx;
+  }
+  .btn-cont {
+      width: 368rpx;
+      height: 80rpx;
+      color: #fff;
+      font-size: 34rpx;
+      margin: 0 auto ;
+      text-align: center;
+      line-height: 80rpx;
+    }
+  .btn-dl {
+    background: linear-gradient(253deg, #fcf3e9 0%, #eedec8 100%) !important;
+    color: #333 !important;
+    margin: 30rpx auto !important;
+  }
+  .month-back {
+    background: #f6f6f6 !important;
+    color: #999 !important;
+  }
+  .moneh-text {
+    text-align: center;
+    width: 632rpx;
+    margin: 0 auto 20rpx;
+    color: #999999;
+  }
+}
+</style>

+ 71 - 13
pages.json

@@ -5,7 +5,8 @@
       "path": "pages/index/index",
       "style": {
         "navigationBarTitleText": "查研观向",
-        "enablePullDownRefresh": true
+        "enablePullDownRefresh": true,
+        "navigationStyle": "custom"
       }
     },
     {
@@ -25,7 +26,8 @@
     {
       "path": "pages/my/my",
       "style": {
-        "navigationBarTitleText": "我的"
+        "navigationBarTitleText": "我的",
+        "navigationStyle": "custom"
       }
     },
     {
@@ -34,17 +36,15 @@
         "navigationBarTitleText": "",
         "enablePullDownRefresh": false
       }
+    },
+    {
+      "path": "pages/cesi/cesi",
+      "style": {
+        "navigationBarTitleText": "",
+        "enablePullDownRefresh": false
+      }
     }
-      ,{
-            "path" : "pages/cesi/cesi",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-    ],
+  ],
   "subPackages": [
     {
       "root": "activityPages",
@@ -100,6 +100,20 @@
             "navigationBarTitleText": "主题活动",
             "enablePullDownRefresh": false
           }
+        },
+        {
+          "path": "specialResearchPage/specialResearchPage",
+          "style": {
+            "navigationBarTitleText": "专项产业调研",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "specialDetail/specialDetail",
+          "style": {
+            "navigationBarTitleText": "活动详情",
+            "enablePullDownRefresh": false
+          }
         }
       ]
     },
@@ -252,6 +266,49 @@
           "style": {
             "navigationBarTitleText": "绑定联系方式"
           }
+        },
+        {
+          "path": "reportPage/reportPage",
+          "style": {
+            "navigationBarTitleText": "报告详情",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "freeTrial/freeTrial",
+          "style": {
+            "navigationBarTitleText": "免费送试用",
+            "enablePullDownRefresh": false,
+            "navigationStyle": "custom"
+          }
+        },
+        {
+          "path": "excessivePages/excessivePages",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "transitionPages/transitionPages",
+          "style": {
+            "navigationBarTitleText": "免费月卡",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "mySchedulepage/mySchedulepage",
+          "style": {
+            "navigationBarTitleText": "我的日程",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "chartPage/chartPage",
+          "style": {
+            "navigationBarTitleText": "",
+            "enablePullDownRefresh": false
+          }
         }
       ]
     }
@@ -270,6 +327,7 @@
       "van-tabs": "/wxcomponents/vant/dist/tabs/index",
       "van-transition": "/wxcomponents/vant/dist/transition/index",
       "van-tag": "/wxcomponents/vant/dist/tag/index",
+      "van-icon": "/wxcomponents/vant/dist/icon/index",
       "van-radio": "/wxcomponents/vant/dist/radio/index",
       "van-radio-group": "/wxcomponents/vant/dist/radio-group/index"
     }
@@ -281,7 +339,7 @@
     "list": [
       {
         "pagePath": "pages/index/index",
-        "text": "纪要库",
+        "text": "素材库",
         "iconPath": "static/img/tab/index_ico.png",
         "selectedIconPath": "static/img/tab/index_actico.png"
       },

+ 82 - 75
pages/activity/activity.vue

@@ -39,14 +39,14 @@
     <view class="collect-activity" v-if="haveData && tabsActive == 0">
       <view class="content-list">
         <view class="half">
-          <view class="activity-ltem" v-for="(item, index) in collectTypeList" :key="index" v-if="index % 2 == 0">
+          <view class="activity-ltem" v-for="(item, index) in collectTypeList" :key="index" v-if="item.Position==1">
             <image class="zindex-one" :src="item.ImgUrl"></image>
             <image class="zindex-two" :src="item.ImgUrlBg"></image>
             <view class="content">
-              <view class="item-img" @click="goDetails(item.ActivityTypeId,item.ActivityTypeName)">
+              <view class="item-img" @click="goDetails(item)">
                 {{ item.ActivityTypeName }}
               </view>
-              <view class="activity-li" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val.KeyWord)">
+              <view class="activity-li" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val,item.Resource)">
                 <image class="item-image" lazy-load :src="val.ImgUrlBg"></image>
                 <text class="text_oneLine"> {{ val.KeyWord }}</text>
               </view>
@@ -54,14 +54,14 @@
           </view>
         </view>
         <view class="half">
-          <view class="activity-ltem" v-for="(item, index) in collectTypeList" :key="index" v-if="index % 2 != 0">
+          <view class="activity-ltem" v-for="(item, index) in collectTypeList" :key="index" v-if="item.Position==2">
             <image class="zindex-one" :src="item.ImgUrl"></image>
             <image class="zindex-two" :src="item.ImgUrlBg"></image>
             <view class="content">
-              <view class="item-img"  @click="goDetails(item.ActivityTypeId,item.ActivityTypeName)">
+              <view class="item-img"  @click="goDetails(item)">
                 {{ item.ActivityTypeName }}
               </view>
-              <view class="activity-li" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val.KeyWord)">
+              <view class="activity-li" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val,item.Resource)">
                 <image class="item-image" lazy-load :src="val.ImgUrlBg"></image>
                 <text class="text_oneLine"> {{ val.KeyWord }}</text>
               </view>
@@ -161,7 +161,7 @@
         :applyForIsShow="applyForIsShow"
         :mailboxBinding="mailboxBinding"
       />
-
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
@@ -170,11 +170,12 @@ import { activity } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
 import myActivityMixin from "@/activityPages/components/indexActivity.js";
 import modalDialog from "@/components/modalDialog.vue";
+import freeCharge from '@/components/freeCharge'
 let app = getApp();
 export default {
   mixins: [myActivityMixin],
   components: {
-    modalDialog,
+    modalDialog, freeCharge
   },
   data() {
     return {
@@ -188,7 +189,7 @@ export default {
           id: 2,
         },
       ],
-      collectTypeList:[],
+      collectTypeList: [],
       chartPermissionName: "所有行业",
       haveData: true,
       activityTimeList: [
@@ -202,7 +203,7 @@ export default {
       isShowJurisdiction: false, //
       isGetJurisdiction: 0,
       isrefresh: true,
-      activityTypeId:''
+      activityTypeId: '',
     };
   },
   computed: {
@@ -223,7 +224,7 @@ export default {
         this.listChartPermission = res.Data.ListChartPermission;
         this.listChartPermissionInit = res.Data.ListChartPermission2;
         this.clickPermission()
-         if (this.chartPermissionIds) {
+        if (this.chartPermissionIds) {
           this.closeTheWindow();
         }
       }
@@ -238,22 +239,22 @@ export default {
       });
       if (res.Ret === 200) {
         this.collectTypeList = res.Data.List || [];
-        this.haveData= this.collectTypeList.length ? true : false;
+        this.haveData = this.collectTypeList.length ? true : false;
         if (this.refresh) {
           uni.stopPullDownRefresh();
           this.refresh = false;
         }
       }
     },
-    async getActivityList(){
-    const res=  await activity.getScheduleList({ PageSize: this.pageSize, CurrentIndex: this.page_no });
-    if (res.Ret === 200) {
+    async getActivityList() {
+      const res = await activity.getScheduleList({ PageSize: this.pageSize, CurrentIndex: this.page_no });
+      if (res.Ret === 200) {
         this.contentImg = res.Data.ImgUrl;
         this.contentLabel = res.Data.Label;
         this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
         if (this.page_no === 1) {
           this.collectList = res.Data.List || [];
-          this.haveData= this.collectList.length ? true : false;
+          this.haveData = this.collectList.length ? true : false;
           if (this.refresh) {
             uni.stopPullDownRefresh();
             this.refresh = false;
@@ -264,26 +265,26 @@ export default {
       }
     },
     //头部tabs切换
-        toggleTab(item, index) {
-    if (!this.$store.state.isAuth && !this.$store.state.isBind) {
-         //已授权已绑定
-       if (index != this.tabsActive) {
-         this.tabsActive = index;
-         this.page_no = 1;
-         this.collectTypeList = [];
-         this.collectList=[]
-         this.tabsActive==0 ? this.getActivityLabelTypeList() : this.getActivityList()
-         if(this.tabsActive !==0 ){ 
-           this.selectComponent("#industry").toggle(false);
-         }
-       }
-    } else {
-         //已授权未绑定
-         uni.navigateTo({
-           url: "/pageMy/login/login",
-         });
-       }
-     
+    toggleTab(item, index) {
+      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
+        //已授权已绑定
+        if (index != this.tabsActive) {
+          this.tabsActive = index;
+          this.page_no = 1;
+          this.collectTypeList = [];
+          this.collectList = []
+          this.tabsActive == 0 ? this.getActivityLabelTypeList() : this.getActivityList()
+          if (this.tabsActive !== 0) {
+            this.selectComponent("#industry").toggle(false);
+          }
+        }
+      } else {
+        //已授权未绑定
+        uni.navigateTo({
+          url: "/pageMy/login/login",
+        });
+      }
+
     },
     // 下拉的选择的关闭事件
     closeTheWindow() {
@@ -298,7 +299,7 @@ export default {
             item.IsChoose = false;
           }
         });
-        this.chartPermissionName = str.length==6?"所有行业" : str.join(",") 
+        this.chartPermissionName = str.length == 6 ? "所有行业" : str.join(",")
       }
     },
     // 下拉的选择的选中事件
@@ -350,39 +351,36 @@ export default {
       this.getActivityLabelTypeList()
     },
     //是否有权限的点击事件
-  async  permissioActivity() {
+    async permissioActivity() {
       if (!this.$store.state.isAuth && !this.$store.state.isBind) {
-      this.selectComponent("#industry").toggle(false);
-      this.isShowJurisdiction = !this.isShowJurisdiction;
-      this.isGetJurisdiction = this.isShowJurisdiction ? 1 : 2;
-      await  this.getUserSearchContent();
-      this.selectComponent("#industry").toggle(false);
-      if(this.isShowJurisdiction){
-        this.getActivityLabelTypeList()
-      }else{
-        this.replacementBtn()
-      }    
-      }else {
-          //已授权未绑定
-          uni.navigateTo({
-            url: "/pageMy/login/login",
-          });
+        this.selectComponent("#industry").toggle(false);
+        this.isShowJurisdiction = !this.isShowJurisdiction;
+        this.isGetJurisdiction = this.isShowJurisdiction ? 1 : 2;
+        await this.getUserSearchContent();
+        this.selectComponent("#industry").toggle(false);
+        if (this.isShowJurisdiction) {
+          this.getActivityLabelTypeList()
+        } else {
+          this.replacementBtn()
+        }
+      } else {
+        //已授权未绑定
+        uni.navigateTo({
+          url: "/pageMy/login/login",
+        });
       }
-
-      
-      
     },
-     //点击后有权限的
-    clickPermission(){
-              if(this.isShowJurisdiction){     
+    //点击后有权限的
+    clickPermission() {
+      if (this.isShowJurisdiction) {
         const arr = [];
-         this.listChartPermission.forEach((key) => {
+        this.listChartPermission.forEach((key) => {
           if (key.IsChoose) {
-          arr.push(key.ChartPermissionId);
-        }
+            arr.push(key.ChartPermissionId);
+          }
         });
         this.chartPermissionIds = arr.join(",");
-        }
+      }
     },
     loadShare(option) {
       if (option && Object.keys(option).length !== 0) {
@@ -399,12 +397,22 @@ export default {
         });
       }
     },
-    goDetails(key,type='') {
-       this.$store.dispatch("checkHandle", "/activityPages/themeActivity/themeActivity?title=" + key + "&type=" + type + "&permissionIds=" + this.chartPermissionIds + "&whichDay="+ this.whichDay)
+    goDetails(item, key) {
+      if (item.Resource === 1 || key === 1) {
+        let type = item.ActivityTypeName || '';
+        let key = item.ActivityTypeId || item.KeyWord;
+        this.$store.dispatch("checkHandle", "/activityPages/themeActivity/themeActivity?title=" + key + "&type=" + type + "&permissionIds=" + this.chartPermissionIds + "&whichDay=" + this.whichDay)
+      } else {
+        if (key) {
+          this.$store.dispatch("checkHandle", "/activityPages/specialDetail/specialDetail?id=" + item.ActivityId);
+        } else {
+          this.$store.dispatch("checkHandle", "/activityPages/specialResearchPage/specialResearchPage")
+        }
+      }
     },
     //去往搜索事件
     goSearch() {
-       this.$store.dispatch("checkHandle", "/activityPages/activitySearch/activitySearch")
+      this.$store.dispatch("checkHandle", "/activityPages/activitySearch/activitySearch")
     },
   },
   //load
@@ -415,11 +423,11 @@ export default {
   },
   async onShow() {
     await this.$store.dispatch("checkHandle", "noGO");
-    },
+  },
   /** 用户点击分享 */
   onShareAppMessage: function (res) {
     return {
-      title: this.messageTitle,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  this.messageTitle,
       path: "/pages/activity/activity?whichDay=" + this.whichDay + "&chartPermissionIds=" + this.chartPermissionIds + "&isGetJurisdiction=" + this.isGetJurisdiction,
     };
   },
@@ -428,16 +436,16 @@ export default {
     if (this.status === "nomore") return;
     this.status = "loading";
     this.page_no++;
-     this.getActivityList();
+     this.tabsActive == 1 && this.getActivityList() 
   }),
   /* 下拉刷新 */
   onPullDownRefresh: Throttle(function () {
-      this.page_no = 1;
+    this.page_no = 1;
     this.refresh = true;
     this.tabsActive == 0 ? this.getActivityLabelTypeList() : this.getActivityList();
   }),
   // 页面滚动事件
-  onPageScroll() {},
+  onPageScroll() { },
 
 };
 </script>
@@ -629,17 +637,17 @@ export default {
       width: 100%;
       height: 86rpx;
       position: relative;
-      .item-image{
+      .item-image {
         width: 100%;
         height: 100%;
       }
       .text_oneLine {
-        position:absolute;
+        position: absolute;
         width: 100%;
         height: 50rpx;
         padding: 0 30rpx;
         text-align: center;
-        font-size:28rpx;
+        font-size: 28rpx;
         top: 15rpx;
         color: #fff;
       }
@@ -685,5 +693,4 @@ export default {
   font-size: 24rpx;
 }
 @import "@/activityPages/components/indexActivity.scss";
-
 </style>

+ 524 - 228
pages/index/index.vue

@@ -1,77 +1,126 @@
 <template>
-  <view class="container Index-container">    
-    <view class="index-fixed">
-      <view class="index-header">
-        <input type="text" placeholder="搜索您想要的纪要" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" disabled @click="goSearch" />
-        <icon type="search" size="15" class="search_ico" />
-      </view>
-      <!-- 导航条 -->
-      <view class="tab-cont">
-        <scroll-view scroll-x="true" scroll-with-animation class="scroll-tab" @scroll="scrollMove" :scroll-left="scrollLeft" :scroll-into-view="'_' + tabIndex">
-          <block v-for="(item, index) in tabBars" :key="item.ChartPermissionId">
-            <view :id="'_' + index" class="scroll-tab-item" :class="{ active: tabAct_id == item.ChartPermissionId }" @click.stop="toggleTab(item, index)">
-              {{ item.PermissionName }}
-              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/border_act.png" mode="" class="border_act" v-if="tabAct_id == item.ChartPermissionId"></image>
+  <view class="container Index-container">
+    <view class="top-content-box">
+      <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
+        <view class="content">
+          <van-icon name="search" size="28px" class="search-icon" @click="goSearch" />
+          <view class="top-tabs">
+            <view :class="['item', item.val == topTabsActive && 'tabs-active']" v-for="(item, index) in topTabBars" :key="item.val" @click="topTabsChange(item.val)">
+              {{ item.type }}
+              <block v-if="index === topTabBars.length - 1 && isShowChart">
+                <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
+              </block>
+              <view class="active" v-if="item.val == topTabsActive"></view>
             </view>
-          </block>
-          <view class="limit-box" v-if="limitIsShow">
-            <image class="limit-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
           </view>
-        </scroll-view>
+        </view>
       </view>
-    </view>  
+      <view class="tabs-content">
+        <view class="second-tabs" v-if="topTabsActive == '2' || topTabsActive == '3'">
+          <view
+            :class="['item', item.ChartPermissionId == secondActive && 'tabs-active text_twoLine']"
+            v-for="(item, index) in secondBars"
+            :key="item.ChartPermissionId"
+            @click="handleClickTopSub(item)"
+          >
+            {{ item.PermissionName }}
+            <block v-if="index === secondBars.length - 1 && topTabsActive == '2' && isShowResearch">
+              <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
+            </block>
+            <view class="active" v-if="item.ChartPermissionId == secondActive"></view>
+          </view>
+        </view>
+        <block v-if="topTabsActive == '3'">
+          <view class="children-ul">
+            <view :class="['chart-children', chartChildrenActive == item.CtagId ? 'children-active' : '']" v-for="item in chartChildren" :key="item.CtagId" @click="handleChartChildren(item)">{{
+              item.Name
+            }}</view>
+          </view>
+        </block>
+      </view>
+    </view>
     <block v-if="haveData">
       <view class="data-cont">
         <view class="report-ul">
           <view class="report-item" v-for="(report, index) in dataList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
             <view class="item-content-img" v-if="report.BodyHtml">
-              <!-- <mp-html :content="report.BodyHtml" /> -->
               <image :src="report.BodyHtml" mode=""></image>
             </view>
             <view class="item-content" v-else>{{ report.Body }}</view>
             <view class="line"></view>
-            <text class="item-title">{{ report.Title }}</text>
+            <text :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']">{{ report.Title }}</text>
             <view class="item-abstract text_twoLine" v-if="report.ExpertBackground">
               <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/fenxi_ico.png" class="report_ico"></image>
               {{ report.ExpertBackground }}
             </view>
-            <view class="item-createtime">
-              <text>{{ report.PublishDate }}</text>
-              <view class="item-examine" v-if="report.IsResearch">
-                <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
-                <text>{{ report.Pv }}</text>
+            <block v-if="report.Source == 1">
+              <view class="item-createtime">
+                <text>{{ report.PublishDate }}</text>
+                <view class="item-examine" v-if="report.IsResearch">
+                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
+                  <text>{{ report.Pv }}</text>
+                </view>
               </view>
-            </view>
+            </block>
+            <block v-else>
+              <view class="item-createtime chart-tag">
+                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
+              </view>
+              <view class="chart-collect" v-if="topTabsActive == 3 && secondActive == 0">
+                <text class="cancel" @click.stop="myChartIsTop(report.ChartId)">{{ report.IsTop ? "取消置顶" : "置顶" }}</text>
+                <text class="remove" @click.stop="myChartCollect(report.ChartId)">移除</text>
+              </view>
+              <view class="my-chart-collect" v-if="topTabsActive == 3 && secondActive == 0 && report.IsTop"></view>
+            </block>
           </view>
         </view>
         <view class="report-ul">
           <view class="report-item" v-for="(report, index) in dataList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
             <view class="item-content-img" v-if="report.BodyHtml">
-              <!-- <mp-html :content="report.BodyHtml" /> -->
               <image :src="report.BodyHtml"></image>
             </view>
             <view class="item-content" v-else>{{ report.Body }}</view>
             <view class="line"></view>
-            <text class="item-title">{{ report.Title }}</text>
+            <text :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']">{{ report.Title }}</text>
             <view class="item-abstract text_twoLine" v-if="report.ExpertBackground">
               <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/fenxi_ico.png" class="report_ico"></image>
               {{ report.ExpertBackground }}
             </view>
-            <view class="item-createtime">
-              <text>{{ report.PublishDate }}</text>
-              <view class="item-examine" v-if="report.IsResearch">
-                <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
-                <text>{{ report.Pv }}</text>
+            <block v-if="report.Source == 1">
+              <view class="item-createtime">
+                <text>{{ report.PublishDate }}</text>
+                <view class="item-examine" v-if="report.IsResearch">
+                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
+                  <text>{{ report.Pv }}</text>
+                </view>
               </view>
-            </view>
+            </block>
+            <block v-else>
+              <view class="item-createtime chart-tag">
+                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
+              </view>
+              <view class="chart-collect" v-if="topTabsActive == 3 && secondActive == 0">
+                <text class="cancel" @click.stop="myChartIsTop(report.ChartId)">{{ report.IsTop ? "取消置顶" : "置顶" }}</text>
+                <text class="remove" @click.stop="myChartCollect(report.ChartId)">移除</text>
+              </view>
+              <view class="my-chart-collect" v-if="topTabsActive == 3 && secondActive == 0 && report.IsTop"></view>
+            </block>
           </view>
         </view>
       </view>
-      <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" />
+      <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="pageNum > 1" />
     </block>
     <view class="nodata" v-else-if="haveData === false" style="padding-top: 400rpx">
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
-      <text>暂时没有行业数据</text>
+      <block class="nodata" v-if="!isBindingMobile && secondActive == 0">
+        <text>请先绑定联系方式</text>
+        <view class="bind-mobile" @click="bindingMobile">绑定联系方式</view>
+      </block>
+      <block v-else>
+        <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
+        <text>{{ topTabsActive == 3 && secondActive == 0 ? "暂无收藏的图表" : "暂时没有数据" }}</text>
+      </block>
     </view>
     <view class="content-intimate" v-if="reportShow">
       <van-transition :show="showTransition" name="fade-right">
@@ -92,47 +141,58 @@
       </van-transition>
       <image @click="showTransition = !showTransition" src="https://hzstatic.hzinsights.com/cygx/czbk/intimate-icon.png" mode=""></image>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
-import { Home, Reports } from "@/config/api.js";
-import { Throttle } from "@/config/util.js";
+import { Home, Reports, Chart } from "@/config/api.js";
+import { Throttle, deepCopy } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
 let app = getApp();
 export default {
   data() {
     return {
+      navBarStyle: {
+        height: 60 + "px",
+        paddingTop: 40 + "px",
+        paddingBottom: "20px",
+      },
+      topTabBars: [
+        //一级top
+        { type: "最新", val: 1 },
+        { type: "纪要", val: 2 },
+        { type: "图表", val: 3 },
+      ],
+      topTabsActive: 1, //一级top的tabs
+      secondActive: "", //二级的tabs
+      secondBars: [], //二级的tabs数组
+      chartChildren: [], //二级的tabs下的标签
+      chartChildrenActive: 0,
       refresh: false,
       pageSize: 10, //条数
       pageNum: 1, //页码
       haveMore: true, //是否有更多数据
       haveData: null, //是否有数据
-      tabAct_id: 0,
       //数据列表
       dataList: [],
-      // tab
-      tabBars: [],
       status: "loadmore",
       loadText: {
         loadmore: "上拉加载更多",
         loading: "加载中",
         nomore: "已经到底了",
       },
-      totalPage: "",
-      limitIsShow: false, //限免的隐现
-      scrollLeft: 0,
       showTransition: false, //点击绝密后的隐现
       reportShow: false, //绝密标签的隐现
+      isShowChart: false, //图表限免
+      isShowResearch: false, //研选限免
+      isBindingMobile: true, //图表我的收藏是否绑定手机号
     };
   },
-  watch: {
-    tabAct_id: {
-      handler() {
-        this.getReportList();
-      },
-      immediate: true,
-    },
+  components: {
+    freeCharge,
   },
+  watch: {},
   onLoad(optios) {
     uni.getSystemInfo({
       success: function (res) {
@@ -143,124 +203,273 @@ export default {
         }
       },
     });
-    if (optios.tabid) {
-      this.tabAct_id = optios.tabid;
+    if (optios.topTabsActive) {
+      this.topTabsActive = optios.topTabsActive;
+      this.getTabs();
     }
-    this.getTabs();
+    this.initNavBar();
     this.reportIsShow();
+    this.getReportList();
   },
   onShow() {
-    this.$store.dispatch("statistics", { PageType: "Summary", ChartPermissionId: Number(this.tabAct_id) });
+    //进入页面的记录
+    this.$store.dispatch("statistics", { PageType: "Activit" });
     // #ifdef MP-WEIXIN
     uni.hideHomeButton();
     // #endif
   },
   methods: {
-      gopc(){
-            uni.reLaunch({
-              url: "/pages/pcWebViev/pcWebViev",
-            });
-      },
-    goSecretDetail(type) {
-      uni.navigateTo({
-        url: "/reportPages/secretDetails/secretDetails?type=" + type,
-      });
+    //获取胶囊位置
+    initNavBar() {
+      let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
+      this.navBarStyle = {
+        height: menuButtonInfo.height + menuButtonInfo.top + 8 + "px",
+        paddingTop: menuButtonInfo.top - 4 + "px",
+        paddingBottom: "4px",
+      };
     },
-    async reportIsShow() {
-      const res = await Reports.reportIsShow();
-      if (res.Ret === 200) {
-        this.reportShow = res.Data.IsShow;
+    //点击顶部一级分类
+    topTabsChange(name) {
+      this.topTabsActive = name;
+      this.chartChildren = [];
+      this.chartChildrenActive = 0;
+      this.secondActive = "";
+      this.pageNum = 1;
+      this.dataList = [];
+      uni.pageScrollTo({
+        scrollTop: 0,
+        duration: 0,
+      });
+      if (this.topTabsActive == "2" || this.topTabsActive == "3") {
+        this.getTabs();
+      } else {
+        this.initData();
       }
     },
-    /* 切换分类 */
-    toggleTab(item, index) {
-      if (this.tabAct_id !== item.ChartPermissionId) {
-        this.tabAct_id = item.ChartPermissionId;
-        this.pageNum = 1;
-        uni.pageScrollTo({
-          scrollTop: 0,
-          duration: 0,
+    //点击顶部二级分类
+    handleClickTopSub(item) {
+      this.secondActive = item.ChartPermissionId;
+      this.chartChildren = [];
+      this.chartChildrenActive = 0;
+      this.childrenChartData();
+      this.initData();
+    },
+    //点击图标的二级分类 处理数据
+    childrenChartData() {
+      if (this.topTabsActive == 3 && this.secondActive != 0) {
+        let arr = [];
+        this.secondBars.forEach((item) => {
+          if (this.secondActive === item.ChartPermissionId) {
+            deepCopy(arr, item.List);
+            arr.unshift({
+              CtagId: 0,
+              Name: "全部",
+            });
+            this.chartChildren = arr;
+          }
         });
-        this.$store.dispatch("statistics", { PageType: "Summary", ChartPermissionId: Number(this.tabAct_id) });
+
+        this.chartChildrenActive = 0;
       }
     },
-    scrollMove(e) {
-      this.scrollLeft = e.detail.scrollLeft;
+    //点击图标的三级分类
+    handleChartChildren(item) {
+      this.chartChildrenActive = item.CtagId;
+      this.initData();
+    },
+    //点击
+    initData() {
+      this.pageNum = 1;
+      this.dataList = [];
+      uni.pageScrollTo({
+        scrollTop: 0,
+        duration: 0,
+      });
+      this.getReportList();
+    },
+    /* 获取tab分类 */
+    getTabs() {
+      this.secondBars = [];
+      this.topTabsActive == "2"
+        ? Home.Tab().then((res) => {
+            if (res.Ret === 200) {
+              this.secondBars = res.Data.List;
+              this.secondActive = this.secondBars[0].ChartPermissionId;
+              this.getReportList();
+            }
+          })
+        : Chart.getChartPatg().then((res) => {
+            if (res.Ret === 200) {
+              let arr = res.Data;
+              arr.unshift({
+                ChartPermissionId: 0,
+                PermissionName: "我的收藏",
+              });
+              this.secondBars = arr;
+              this.secondActive = 0;
+              this.getReportList();
+            }
+          });
     },
     /* 获取列表 */
-    getReportList() {
-      Home.getList({
-        PageSize: this.pageSize,
-        CurrentIndex: this.pageNum,
-        ChartPermissionId: Number(this.tabAct_id) || 0,
-      }).then((res) => {
+    async getReportList() {
+      if (this.topTabsActive == "3" && this.secondActive == 0) {
+        const res = await Chart.getChartcollection({
+          PageSize: this.pageSize,
+          CurrentIndex: this.pageNum,
+        });
         if (res.Ret === 200) {
-          if (!res.Data.HaveResearch) {
-            this.$util.modalShow("", "您暂无查看研选权限", "", () => {
-              uni.reLaunch({
-                url: "/pages/index/index",
-              });
-            });
-          }
           this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
-          // this.totalPage = res.Data.Paging.Pages;//总页数
-          if (res.Data.List && res.Data.List.length > 0) {
-            res.Data.List.forEach((item) => {
-              if (item.BodyHtml) {
-                item.BodyHtml = item.BodyHtml.replace(/'\'/g, "");
-              }
-            });
-          }
+          this.isBindingMobile = res.Data.IsBindingMobile;
           if (this.pageNum === 1) {
             this.dataList = res.Data.List || [];
-            this.haveData = this.dataList.length ? true : false;
+            this.haveData = this.dataList.length > 0 ? true : false;
           } else {
             this.dataList = this.dataList.concat(res.Data.List);
           }
-          if (this.refresh) {
-            uni.stopPullDownRefresh();
-            this.refresh = false;
-          }
         }
-      });
-    },
-    /* 获取tab分类 */
-    getTabs() {
-      Home.Tab().then((res) => {
+      } else {
+        const res = await Home.getList({
+          PageSize: this.pageSize,
+          CurrentIndex: this.pageNum,
+          ChartPermissionId: this.secondActive,
+          CtagId: this.chartChildrenActive,
+          ListType: this.topTabsActive,
+        });
         if (res.Ret === 200) {
-          let arr = res.Data.List;
-          arr.unshift({
-            ChartPermissionId: 0,
-            PermissionName: "最新",
+          this.processingData(res);
+        }
+      }
+    },
+    //处理数据
+    processingData(res) {
+      if (!res.Data.HaveResearch) {
+        this.$util.modalShow("", "您暂无查看研选权限", "", () => {
+          uni.reLaunch({
+            url: "/pages/index/index",
           });
-          this.tabBars = arr;
-          this.limitIsShow = this.tabBars.some((item) => item.IsShowSustainable);
-          if (this.tabAct_id == 0) {
-            this.getReportList();
+        });
+      }
+      this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
+      res.Data.List &&
+        res.Data.List.forEach((item) => {
+          if (item.BodyHtml) {
+            item.BodyHtml = item.BodyHtml.replace(/'\'/g, "");
           }
+        });
+      if (this.topTabsActive == "2") {
+        if (this.pageNum === 1) {
+          this.dataList = res.Data.List || [];
+          this.haveData = this.dataList.length ? true : false;
+        } else {
+          this.dataList = this.dataList.concat(res.Data.List);
+        }
+      } else {
+        if (this.pageNum === 1) {
+          this.haveData = res.Data.List ? true : res.Data.ChartList ? true : false;
         }
+        if (!res.Data.List) {
+          this.dataList = this.dataList.concat(res.Data.ChartList);
+        } else if (!res.Data.ChartList) {
+          this.dataList = this.dataList.concat(res.Data.List);
+        } else {
+          this.dataList.push(res.Data.List.shift());
+          let newArr = [];
+          let newArrTwo = [];
+          for (let i = 0; i < res.Data.List.length; i += 2) {
+            newArr.push(res.Data.List.slice(i, i + 2));
+          }
+          for (let i = 0; i < res.Data.ChartList.length; i += 2) {
+            newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
+          }
+          let arr = [];
+          newArr.forEach((item, index) => {
+            if (newArrTwo[index]) {
+              arr.push(newArrTwo[index], item);
+            } else {
+              arr.push(item);
+            }
+          });
+          this.dataList = this.dataList.concat(arr.flat(Infinity));
+        }
+      }
+
+      if (this.refresh) {
+        uni.stopPullDownRefresh();
+        this.refresh = false;
+      }
+    },
+    //我的收藏的删除
+    myChartCollect(id) {
+      uni.showModal({
+        content: "确认要将该图表移除我的收藏吗?",
+        confirmColor: "#3385FF",
+        cancelColor: "#606266",
+        success: async (res) => {
+          if (res.confirm) {
+            const res = await Chart.myChartCollect({
+              ChartId: id,
+            });
+            if (res.Ret === 200) {
+              this.initData();
+              this.$util.toast("已取消收藏");
+            }
+          }
+        },
       });
     },
+    //我的收藏 置顶
+    async myChartIsTop(id) {
+      const res = await Chart.myChartTop({
+        ChartId: id,
+      });
+      if (res.Ret === 200) {
+        this.initData();
+        this.$util.toast(res.Msg);
+      }
+    },
     /* 进入详情 校验是否有该品种权限 */
     goDetail(item) {
-      /* 无需授权且已绑定 检验是或否有权限 */
-      this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId);
+      if (item.Source == 2) {
+        /* 无需授权且已绑定 检验是或否有权限 */
+        this.$store.dispatch("checkHandle", "/pageMy/chartPage/chartPage?id=" + item.ChartId);
+      } else {
+        /* 无需授权且已绑定 检验是或否有权限 */
+        this.$store.dispatch("checkHandle", "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId);
+      }
     },
     /* 搜索 */
     goSearch() {
       this.$store.dispatch("checkHandle", "/pageMy/search/search");
     },
-    adviceHandle() {
-      this.$store.dispatch("checkHandle", "/pageMy/advice/advice");
+    /* 绝密标签的隐现 */
+    async reportIsShow() {
+      const res = await Reports.reportIsShow();
+      if (res.Ret === 200) {
+        this.reportShow = res.Data.IsShow;
+        this.isShowChart = res.Data.IsShowChart;
+        this.isShowResearch = res.Data.IsShowResearch;
+      }
+    },
+    /* 绝密标签点击后的跳转 */
+    goSecretDetail(type) {
+      uni.navigateTo({
+        url: "/reportPages/secretDetails/secretDetails?type=" + type,
+      });
+    },
+    /* 绑定联系方式 */
+    bindingMobile() {
+      uni.navigateTo({
+        url: "/pageMy/login/login",
+      });
     },
-  },
-  onShow() {
-    this.$store.dispatch("statistics", { PageType: "Activit" });
   },
   /* 下拉刷新 */
   onPullDownRefresh: Throttle(function () {
-    this.pageNum = 1;
+    this.status = "loadmore";
     this.refresh = true;
+    this.dataList = [];
+    this.pageNum = 1;
     this.getReportList();
   }),
   // 上拉加载
@@ -270,23 +479,16 @@ export default {
     this.pageNum++;
     this.getReportList();
   }),
-  /**
-   * 用户点击分享
-   */
+  /** 用户点击分享*/
   onShareAppMessage: function (res) {
     return {
-      title: "您手边的弘则研究素材检索库",
-      path: "/pages/index/index?tabid=" + this.tabAct_id,
-      imageUrl: this.tabAct_id == 0 ? "https://hzstatic.hzinsights.com/cygx/czbk/home_share.png" : "",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "您手边的弘则研究素材检索库",
+      path: "/pages/index/index?topTabsActive=" + this.topTabsActive,
+      imageUrl: this.topTabsActive == 1 ? "https://hzstatic.hzinsights.com/cygx/czbk/home_share.png" : "",
       success: (res) => {},
       fail: (err) => {},
     };
   },
-  onHide() {
-    if (this.showTransition) {
-      this.showTransition = false;
-    }
-  },
 };
 </script>
 
@@ -294,90 +496,127 @@ export default {
 .Index-container {
   background-color: #f7f7f7;
   font-size: 30rpx;
-  .index-fixed {
-    width: 750rpx;
-    position: fixed;
-    left: 0;
+  .top-content-box {
+    position: sticky;
     top: 0;
+    left: 0;
+    width: 100%;
     z-index: 999;
-    .index-header {
-      background-color: #fff;
-      padding: 32rpx 34rpx;
+  }
+  .nav-bar-wrap {
+    background-color: #fff;
+    width: 100%;
+    .content {
       position: relative;
-      .sea_ipt_placeholder {
-        color: #8d8d8d;
-        opacity: 0.7;
-      }
-      .sea_ipt {
-        width: 100%;
-        height: 70rpx;
-        font-size: 30rpx;
-        color: #707070;
-        background-color: #f6f6f6;
-        padding: 0 34rpx 0 70rpx;
-        border-radius: 70rpx;
-        border: 1rpx solid #e5e5e5;
-      }
-      .search_ico {
-        display: block;
+      height: 90%;
+      .search-icon {
+        text-align: center;
         position: absolute;
-        color: #8d8d8d;
-        left: 60rpx;
-        top: 50%;
-        z-index: 100;
+        left: 34rpx;
+        top: 60%;
         transform: translateY(-50%);
       }
-    }
-    .tab-cont {
-      padding: 0 26rpx;
-      background-color: #fff;
-      font-size: 32rpx;
-      box-shadow: 0 3rpx 6rpx rgba(187, 216, 255, 0.2);
-      .scroll-tab {
-        position: relative;
-        width: 100%;
-        white-space: nowrap;
-      }
-      .limit-box {
+      .top-tabs {
+        width: 460rpx;
         position: absolute;
-        text-align: center;
-        display: inline-block;
-        padding-right: 50rpx;
-        top: -9rpx;
-        margin-left: -38rpx;
-        image {
-          width: 46rpx;
-          height: 26rpx;
-        }
-      }
-      .scroll-tab-item {
-        // flex-grow: 1;
-        text-align: center;
-        display: inline-block;
-        padding: 10rpx 8rpx 20rpx 8rpx;
-        margin-right: 35rpx;
-        border-bottom: 8rpx solid transparent;
-        position: relative;
-        &:last-child {
-          margin-right: 0;
+        left: 55%;
+        top: 60%;
+        transform: translate(-50%, -50%);
+        display: flex;
+        align-items: center;
+        font-size: 34rpx;
+        &::-webkit-scrollbar {
+          width: 0;
+          height: 0;
+          display: none;
         }
-        &.active {
-          border-bottom: none;
-          color: #2c83ff;
-          font-weight: 700;
+        .item {
+          position: relative;
+          padding-bottom: 16rpx;
+          margin-right: 50rpx;
+          flex-shrink: 0;
+          .limit-img {
+            position: absolute;
+            top: -15rpx;
+            right: -50rpx;
+          }
+          .active {
+            position: absolute;
+            left: 0;
+            bottom: 0;
+            height: 4rpx;
+            width: 100%;
+            border-radius: 1rpx;
+            background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
+          }
         }
-        .border_act {
-          width: 100%;
-          height: 8rpx;
-          position: absolute;
-          bottom: 0;
-          left: 0;
+        .tabs-active {
+          color: #3385ff;
+          font-weight: 500;
         }
       }
     }
   }
+  .tabs-content {
+    padding: 0 30rpx;
+    background-color: #fff;
+    .children-ul {
+      display: flex;
+      flex-wrap: wrap;
+      .children-active {
+        background-color: #3385ff;
+        color: #fff;
+      }
+    }
+    .chart-children {
+      padding: 10rpx 20rpx;
+      margin: 0rpx 20rpx 20rpx 0;
+      background-color: #f9f9f9;
+      color: #666666;
+      font-size: 26rpx;
+      border-radius: 4rpx;
+    }
+  }
+  .second-tabs {
+    width: 100%;
+    display: flex;
+    overflow-x: auto;
+    background-color: #fff;
+    font-size: 30rpx;
+    color: #999999;
+    padding: 20rpx 0;
+    &::-webkit-scrollbar {
+      width: 0;
+      height: 0;
+      display: none;
+    }
+    .item {
+      position: relative;
+      padding-bottom: 16rpx;
+      margin-right: 50rpx;
+      flex-shrink: 0;
+      .limit-img {
+        position: absolute;
+        top: -15rpx;
+        right: -50rpx;
+      }
+      .active {
+        position: absolute;
+        left: 0;
+        bottom: 0;
+        height: 4rpx;
+        width: 100%;
+        border-radius: 1rpx;
+        background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
+      }
+    }
+    .tabs-active {
+      color: #3385ff;
+      font-weight: 500;
+    }
+  }
   .data-cont {
-    padding: 228rpx 20rpx 10rpx;
+    padding: 28rpx 20rpx 10rpx;
     display: flex;
     .report-ul {
       width: 50%;
@@ -390,12 +629,28 @@ export default {
         border-radius: 8rpx;
         box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
         background: #fff;
+        position: relative;
+        overflow: hidden;
+        .my-chart-collect {
+          content: "";
+          display: block;
+          position: absolute;
+          top: 0;
+          left: 0;
+          width: 0;
+          height: 0;
+          border-top: 60rpx solid #3385ff;
+          border-right: 60rpx solid transparent;
+        }
         .item-content-img {
           display: flex;
           align-items: center;
+          width: 330rpx;
+          margin-left: -6rpx;
+          margin-bottom: -20rpx;
           image {
             width: 100%;
-            height: 232rpx;
+            height: 262rpx;
             vertical-align: middle;
           }
         }
@@ -431,6 +686,10 @@ export default {
           color: #4a4a4a;
           margin-bottom: 10rpx;
         }
+        .chart-title {
+          height: 72rpx;
+          padding-bottom: 10rpx;
+        }
         .item-abstract {
           font-size: 26rpx;
           color: #6a6a6a;
@@ -458,16 +717,47 @@ export default {
             }
           }
         }
+        .chart-tag {
+          padding-top: 1rpx;
+          height: 36rpx;
+          .tag-item {
+            width: 148rpx;
+            border-radius: 28rpx;
+            border: 2rpx solid rgba(49, 137, 255, 1);
+            overflow: hidden;
+            color: #3385ff;
+            text-align: center;
+            line-height: 30rpx;
+          }
+        }
+        .chart-collect {
+          margin-top: 20rpx;
+          padding-top: 20rpx;
+          padding: 20rpx 0 0 20rpx;
+          border-top: 1rpx solid #dcdfe6;
+          display: flex;
+          align-items: center;
+          .cancel {
+            background: #3385ff;
+            margin-right: 20rpx;
+            color: #ffffff;
+          }
+          .remove {
+            border: 1px solid #3385ff;
+            color: #3385ff;
+          }
+          text {
+            width: 130rpx;
+            height: 46rpx;
+            line-height: 46rpx;
+            border-radius: 4rpx;
+            text-align: center;
+            font-size: 24rpx;
+          }
+        }
       }
     }
   }
-  .advice_ico {
-    width: 81rpx;
-    height: 81rpx;
-    position: fixed;
-    right: 30rpx;
-    bottom: 214rpx;
-  }
   .content-intimate {
     position: fixed;
     display: flex;
@@ -501,17 +791,23 @@ export default {
       z-index: 99;
     }
   }
-  // .rich-text {
-  //     width: 315rpx;
-  //     height: 272rpx;
-  //     image {
-  //         width: 315rpx;
-  //         height: 272rpx;
-  //     }
-  //     img {
-  //       width: 315rpx;
-  //       height: 272rpx;
-  //     }
-  // }
+  .tabs-img {
+    width: 46rpx;
+    height: 26rpx;
+  }
+  .nodata {
+    font-size: 40rpx;
+    .bind-mobile {
+      width: 244rpx;
+      height: 58rpx;
+      background: #3385ff;
+      border-radius: 8rpx;
+      font-size: 28rpx;
+      line-height: 58rpx;
+      text-align: center;
+      color: #fff;
+      margin: 50rpx auto;
+    }
+  }
 }
 </style>

+ 0 - 341
pages/login/login.vue

@@ -1,341 +0,0 @@
-<template>
-	<view class="container login-container">
-		<view class="bind-tab">
-			<text :class="['tab',{'act-tab':bind_type === 1}]" @click="toggleTab(1)">手机号</text>
-			<text :class="['tab',{'act-tab':bind_type === 2}]" @click="toggleTab(2)">邮箱</text>
-		</view>
-		<view class="bind-cont">
-			<view class="tel-bind" v-if="bind_type === 1">
-				<view class="ipt-item">
-					<label class="item-label item-iphone" @click="isAreaCode=true">{{showCountryCode}}   <u-icon :name="isAreaCode?'arrow-up':'arrow-down'" color="#B2B2B2" size="28"></u-icon></label>
-					<input type="number" v-model="phoneIpt" class="ipt" placeholder="请输入手机号" style="width: 300rpx;">
-          <button open-type="getPhoneNumber" value="用户授权" @getphonenumber="getPhoneNumber" class='code-btn'>微信手机号绑定</button> 
-				</view>
-				<view class="ipt-item">
-					<label class="item-label">验证码</label>
-					<input type="number" v-model="phone_code" class="ipt" placeholder="请输入4位验证码" maxlength="6" style="width: 300rpx;">
-					<u-verification-code :seconds="seconds" ref="uCode" 
-					@change="codeChange"></u-verification-code>
-					<button @click="getCode" class="code-btn">{{tips}}</button>
-				</view>
-				<view class="bind-bot">
-					<u-checkbox v-model="checked" :disabled="false" active-color="#07C160" size="34"></u-checkbox>
-					<view class="tip">我已阅读并同意<text @click="lookArgeement">《用户服务协议》</text> </view>
-				</view>
-				<button @click="bindPhoneHandle" class='infobutton bind-btn'>提交</button>
-<!-- 				<button v-if="checked" open-type="getPhoneNumber" value="用户授权" @getphonenumber="getPhoneNumber" class='infobutton plain-style'>微信手机号绑定</button> 
-				<button v-else value="用户授权"class='infobutton plain-style' @click="$util.toast('请先勾选用户服务协议')">微信手机号绑定</button> -->
-			</view>
-			<view class="email-bind" v-else>
-				<view class="ipt-item">
-					<label class="item-label">邮箱</label>
-					<input type="text" v-model="email" class="ipt" placeholder="请输入邮箱地址">
-				</view>
-				<view class="ipt-item">
-					<label class="item-label">验证码</label>
-					<input type="number" v-model="codeNum" class="ipt" placeholder="请输入4位验证码" maxlength="6" style="width: 300rpx;">
-					<u-verification-code :seconds="seconds" ref="uCode" 
-					@change="codeChange"></u-verification-code>
-					<button @click="getCode" class="code-btn">{{tips}}</button>
-				</view>
-				<view class="bind-bot">
-					<u-checkbox v-model="checked" :disabled="false" active-color="#07C160" size="34"></u-checkbox>
-					<view class="tip">我已阅读并同意<text @click="lookArgeement">《用户服务协议》</text> </view>
-				</view>
-				<button @click="bindHandle" class='infobutton bind-btn'>提交</button>
-			</view>
-		</view>
-		<view class="select-box">
-			<u-popup v-model="isAreaCode" mode="bottom"  @close="cancel">
-				<view class="box" style="color: #333333;font-size: 28rpxrpx;">请选择您的国际区号</view>
-				<view class="box" style="color: #2C83FF;" @click="areacode('86')">大陆+86</view>
-				<view class="box" style="color: #2C83FF;" @click="areacode('852')">香港+852</view>
-				<view class="box" style="color: #2C83FF;" @click="areacode('886')">台湾+886</view>
-				<view class="box" style="color: #2C83FF;" @click="areacode('1')">美国+1</view>
-				<view class="box" style="color: #2C83FF;" @click="areacode('65')">新加坡+65</view>
-				<view class="box box-bottom" style="color: #A9AFB8;" @click="cancel">取消</view>
-			</u-popup>
-		</view>
-	</view>
-</template>
-
-<script>
-	import { User } from '@/config/api.js';
-	export default {
-		data() {
-			return {
-				bind_type:1,//绑定方式
-				checked:false,
-				isArgee:false,
-				seconds:60,
-				tips:'获取验证码',
-				email:'',//邮箱
-				phoneNum:'',//手机号,
-				codeNum:'',//验证码
-				phoneIpt:'',
-				phone_code:'',
-				showCountryCode:'+86',
-				countryCode:'86',//区号
-				isAreaCode: false,
-				
-			};
-		},
-		methods:{
-			/* 切换方式 */
-			toggleTab(val) {
-				this.email = ''
-				this.phoneNum = ''
-				this.codeNum = ''
-				this.bind_type = val;
-				this.phoneIpt = '';
-				this.phone_code = '';
-				this.checked = false;
-			},
-			/* 授权获取手机号 */
-			getPhoneNumber(e) {
-				//console.log(e)
-				if(e.detail.errMsg == 'getPhoneNumber:ok') { // 点击了允许
-					User.getPhoneNum({
-						EncryptedData: e.detail.encryptedData,
-						Iv: e.detail.iv
-					}).then(res => {
-						if(res.Ret === 200) {
-							this.phoneNum = res.Data.PurePhoneNumber;
-							this.countryCode=res.Data.CountryCode
-                             this.phoneIpt=res.Data.PhoneNumber;
-							this.bindHandle()
-						}
-					})
-				}
-			},
-			codeChange(text) {
-				this.tips = text;
-			},
-			/* 获取邮箱验证码 */
-			getCode() {
-				if(this.$refs.uCode.canGetCode) {
-					if(this.bind_type === 1) {
-						!this.phoneIpt && this.$util.toast('请先输入手机号');
-						this.phoneIpt && User.getPhoneCode({
-							Mobile:this.phoneIpt,
-							AreaNum:this.countryCode
-						}).then(res => {
-							if(res.Ret === 200) {
-								this.$refs.uCode.start();
-							}
-						})
-					}else {
-						!this.email && this.$util.toast('请先输入邮箱');
-						this.email && User.getEmailCode({
-							Email:this.email
-						}).then(res => {
-							if(res.Ret === 200) {
-								this.$refs.uCode.start();
-							}
-						})						
-					}
-				}
-			},
-			/* 绑定 */
-			bindHandle() {
-				let params;
-				if(this.bind_type === 1) {
-					params = {
-						LoginType: 1,
-						Mobile: this.phoneNum,
-						CountryCode:this.countryCode
-					}
-					User.Bind(params).then(res => {
-						if(res.Ret === 200) {
-							let token = res.Data.Authorization;
-							this.$db.set('access_token',token)
-							uni.navigateBack({
-								delta:1
-							})
-						}
-					})
-				}else {
-					if(this.email && this.codeNum && this.checked) {
-						params = {
-							Email: this.email,
-							LoginType: 2,
-							VCode: this.codeNum
-						}
-						User.Bind(params).then(res => {
-							if(res.Ret === 200) {
-								let token = res.Data.Authorization;
-								this.$db.set('access_token',token)
-								uni.navigateBack({
-									delta:1
-								})
-							}
-						})
-					} else {
-						this.$util.toast(!this.checked?'请先勾选用户服务协议':!this.email?'请输入邮箱地址':'请输入验证码')
-					}
-                   
-				}
-			},
-			lookArgeement() {
-				uni.navigateTo({
-					url:'/pages/agreement/agreement'
-				})
-			},
-			/* 绑定手机号 */
-			bindPhoneHandle() {
-				if(this.phoneIpt && this.phone_code && this.checked) {
-					let params = {
-						Mobile: this.phoneIpt,
-						LoginType: 3,
-						VCode: this.phone_code,
-						CountryCode:this.countryCode
-					}
-					User.Bind(params).then(res => {
-						if(res.Ret === 200) {
-							let token = res.Data.Authorization;
-							this.$db.set('access_token',token)
-							uni.navigateBack({
-								delta:1
-							})
-						}
-					})
-				} else {
-					this.$util.toast(!this.checked?'请先勾选用户服务协议':!this.phoneIpt?'请输入手机号':'请输入验证码')
-				}
-			},
-			areacode(num){
-				this.showCountryCode= '+' + num
-				this.countryCode=num
-				this.isAreaCode=false
-			},
-			cancel(){
-				this.isAreaCode=false
-			}
-		},
-	 onLoad() {
-			/* 校验session */
-			uni.checkSession({
-				success: (res) => {
-					if(res.errMsg != 'checkSession:ok') {
-						uni.login({
-						   success: result=> {
-								User.wechatLog({
-									Code:result.code
-								}).then(res => {
-									let token = res.Data.Authorization;
-									this.$db.set('access_token',token);
-								})
-						  }
-						});
-					}
-				},
-				fail: (err) => {
-					uni.login({
-					   success: result=> {
-							User.wechatLog({
-								Code:result.code
-							}).then(res => {
-								let token = res.Data.Authorization;
-								this.$db.set('access_token',token);
-							})
-					  }
-					});
-				}
-			})
-		},
-		onShow() {
-			// #ifdef MP-WEIXIN
-				uni.hideHomeButton()
-			// #endif
-		}
-	}
-</script>
-
-<style lang="scss">
-.login-container {
-	color: #333;
-	.bind-tab {
-		padding: 30rpx 34rpx 0;
-		display: flex;
-		align-items: center;
-		font-size: 34rpx;
-		.tab {
-			margin-right: 60rpx;
-			padding-bottom: 8rpx;
-			&.act-tab {
-				border-bottom: 4rpx solid #07C160;
-			}	
-		}
-	}
-	.bind-cont {
-		.tel-bind {
-			padding: 40rpx 0 60rpx;
-		}
-		.infobutton {
-			width: 368rpx;
-			height: 80rpx;
-			line-height: 80rpx;
-			background-color: #07C160;
-			color: #fff;
-			margin: 40rpx auto 0;
-		}
-		.email-bind {
-			padding: 40rpx 0 60px;
-		}
-		.ipt-item {
-			padding: 33rpx 32rpx;
-			border-bottom: 1rpx solid #E5E5E5;
-			display: flex;
-			align-items: center;
-			font-size: 34rpx;
-			position: relative;
-			.item-label {
-				text-align: justify;
-				text-align-last: justify;
-				display: inline-block;
-				width: 106rpx;
-				margin-right: 40rpx;
-			}
-			.ipt {
-				width: 500rpx;
-				font-size: 32rpx;
-				color: #666;
-			}
-			.code-btn {
-				position: absolute;
-				right: 34rpx;
-				background-color: #fff;
-				font-size: 28rpx;
-				color: #07C160;
-			}
-		}
-		.bind-btn {
-			margin-top: 140rpx;
-		}
-		.bind-bot {
-			display: flex;
-			align-items: center;
-			font-size: 24rpx;
-			padding: 0 34rpx;
-			margin-top: 30rpx;
-			.check-sty {
-				transform:scale(0.7)
-			}
-			.tip {
-				text {
-					display: inline;
-					color: #07C160;
-				}
-			}
-		}
-	}
-	.item-iphone {
-		display: flex !important;
-		justify-content: space-between !important;
-		align-items: center !important;
-		width: 118rpx !important;
-		margin-right: 26rpx !important;
-	}
-
-}
-</style>

+ 277 - 155
pages/my/my.vue

@@ -1,79 +1,99 @@
 <template>
   <view class="container my-container" v-if="haveData">
-    <view class="my-top-info">
-      <image :src="userInfo.Headimgurl" class="avatar" v-if="isLogin && userInfo.Headimgurl"></image>
-      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/default_avatar.png" class="avatar" v-else></image>
-      <view class="right-section">
-        <template v-if="isLogin">
-          <view class="info-item space-item text_oneLine" v-if="userInfo.Mobile || userInfo.Email">
-            <view class="item-label" decode="true">{{ userInfo.Mobile ? "手机号" : "邮&nbsp;&nbsp;&nbsp;箱" }}</view>
-            :{{ userInfo.Mobile || userInfo.Email }}
-          </view>
-          <view class="info-item space-item text_oneLine"> <view class="item-label" decode="true">姓&nbsp;&nbsp;&nbsp;名</view>:{{ userInfo.RealName || "暂无" }} </view>
-          <view class="info-item text_oneLine"> <view class="item-label" decode="true">公&nbsp;&nbsp;&nbsp;司</view>:{{ userInfo.CompanyName || "暂无" }} </view>
-        </template>
-        <button class="no-log" v-else @click="loginHandle">{{ login_txt }}</button>
-      </view>
-    </view>
-    <view class="auth-cont">
-      <image src="https://hzstatic.hzinsights.com/cygx/czbk/auth_bg.png" class="auth_bg"></image>
-      <view class="auth-info">
-        <template v-if="isLogin">
-          <text class="info-label">我的权限:</text>
-          <scroll-view scroll-x="true" scroll-with-animation class="auth-ul" v-if="userInfo.HasPermission === 0">
-            <!-- <view class="auth-ul" > -->
-            <text class="auth-li" v-for="item in authList" :key="item">{{ item }}</text>
-            <!-- </view> -->
-          </scroll-view>
-          <block v-else>
-            <text class="no-auth">{{ userInfo.HasPermission === 3 ? "权限申请已提交,请等待审核" : "暂未开通行业权限" }}</text>
-            <button class="auth-btn" @click="applyAuth" v-if="userInfo.HasPermission != 3">申请开通</button>
-          </block>
-        </template>
-        <text class="notlog-tip" v-else>让好的研究不再是奢侈品</text>
+    <view class="my-background">
+      <view class="my-notice" v-if="myNotice">
+        添加到我的小程序,做您手边的研究素材库👆
+        <van-icon @click="myNotice = false" class="my-icon" name="cross" />
       </view>
     </view>
-    <view class="my-bot-cont">
-      <view class="list-item border_bottom" @click="itemClickHandle('外呼')">
-        <text>外呼号码</text>
-        <view class="my-bot-box">
-          <text v-if="userInfo.OutboundCountryCode && userInfo.OutboundMobile" style="margin-right: 40rpx; font-size: 28rpx">{{ userInfo.OutboundCountryCode }}-{{ userInfo.OutboundMobile }}</text>
-          <text v-else style="margin-right: 40rpx; font-size: 28rpx">未设置</text>
-          <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
+    <view class="my-info">
+      <view class="my-top-info">
+        <view class="info">
+          <view class="info-img">
+            <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
+              <image class="avatar" v-if="headimgurl" :src="headimgurl"></image>
+              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/logo.png" class="avatar" v-else></image>
+            </button>
+          </view>
+          <view class="info-list">
+            <block v-if="isLogin">
+              <text class="name">{{ userInfo.RealName || "--" }}</text>
+              <text class="mobile">{{ userInfo.Mobile || userInfo.Email }}</text>
+              <text class="company-name">{{ userInfo.CompanyName || "--" }}</text>
+            </block>
+            <block v-else>
+              <text class="name">Hi,请绑定联系方式~</text>
+              <text class="bind-btn" @click="loginHandle">绑定联系方式</text>
+            </block>
+          </view>
+        </view>
+        <view class="auth-info">
+          <template v-if="isLogin">
+            <scroll-view scroll-x="true" scroll-with-animation class="auth-ul" v-if="userInfo.HasPermission === 0">
+              <text class="auth-li" v-for="item in authList" :key="item">{{ item }}</text>
+            </scroll-view>
+            <block v-else>
+              <button class="auth-btn" @click="applyAuth" v-if="userInfo.HasPermission != 3">申请开通权限</button>
+            </block>
+          </template>
+          <text v-else class="no-auth">暂无品种权限信息</text>
+        </view>
+        <view class="info-item">
+          <view class="item" @click="itemClickHandle('mySchedulepage')">
+            <text class="item-number">{{ userInfo.ScheduleNum }}</text>
+            <text class="item-text">活动日程</text>
+          </view>
+          <view class="item item-label" @click="itemClickHandle('myCollection')">
+            <text class="item-number">{{ userInfo.ConNum }}</text>
+            <text class="item-text">收藏</text>
+          </view>
+          <view class="item" @click="itemClickHandle('browseHistory')">
+            <text class="item-number">{{ userInfo.HistoryNum }}</text>
+            <text class="item-text">足迹</text>
+          </view>
         </view>
       </view>
-    </view>
-    <view class="my-bot-cont">
-      <view class="list-item border_bottom" @click="itemClickHandle('提问')">
-        <text>我的提问</text>
-        <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
-      </view>
-      <view class="list-item border_bottom" v-for="type in typeArr" :key="type" @click="itemClickHandle(type)">
-        <text>{{ type }}</text>
-        <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
+      <view class="info-bot">
+        <view class="list-item border_bottom" v-for="type in typeArr" :key="type" @click="itemClickHandle(type)">
+          <text>{{ type }}</text>
+          <view class="my-bot-box">
+            <block v-if="type == '外呼号码'">
+              <text v-if="userInfo.OutboundCountryCode && userInfo.OutboundMobile" style="margin-right: 40rpx; font-size: 28rpx">{{ userInfo.OutboundCountryCode }}-{{ userInfo.OutboundMobile }}</text>
+              <text v-else style="margin-right: 40rpx; font-size: 28rpx">未设置</text>
+            </block>
+            <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
+          </view>
+        </view>
       </view>
     </view>
+    <view class="bottom-text">您手边的研究素材库</view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
-import { Mine, checkToken, User } from "@/config/api.js";
+import { uploadurl, Mine, checkToken, User } from "@/config/api.js";
+import freeCharge from "@/components/freeCharge";
 let app = getApp();
 export default {
+  components: {
+    freeCharge,
+  },
   data() {
     return {
       isLogin: false, //是否绑定且授权
-      login_txt: "",
       haveData: null, //显示页面
-      typeArr: ["我的收藏", "访谈申请", "浏览历史", "优化建议"],
+      typeArr: ["外呼号码", "访谈申请", "我的提问", "优化建议"],
       typeObj: new Map([
-        ["我的收藏", "myCollection"],
+        ["外呼号码", "editOutbound"],
         ["访谈申请", "applyInterview"],
-        ["浏览历史", "browseHistory"],
+        ["我的提问", "myAskPage"],
         ["优化建议", "advice"],
       ]),
       userInfo: {},
       authList: [],
+      myNotice: true,
+      headimgurl: "",
     };
   },
   async onShow() {
@@ -84,11 +104,30 @@ export default {
       this.isLogin = true;
       this.getUser();
     } else {
-      this.login_txt = this.$store.state.isAuth ? "点击登录" : "绑定联系方式";
       this.isLogin = false;
     }
   },
   methods: {
+    //点击了头像
+    onChooseAvatar(e) {
+      let token = this.$db.get("access_token");
+      let authHeader = token || "";
+      let that = this;
+      uni.uploadFile({
+        url: uploadurl,
+        filePath: e.detail.avatarUrl,
+        header: {
+          "Content-Type": "multipart/form-data",
+          Authorization: authHeader,
+        },
+        name: "file",
+        success(res) {
+          let data = JSON.parse(res.data);
+          that.headimgurl = data.Data.ResourceUrl;
+          User.headimgurlUpdate({ Headimgurl: data.Data.ResourceUrl });
+        },
+      });
+    },
     /* 检查状态 */
     /* 获取用户信息 */
     getUser() {
@@ -96,6 +135,7 @@ export default {
         if (res.Ret === 200) {
           this.authList = res.Data.PermissionName && res.Data.PermissionName.split(",");
           this.userInfo = res.Data;
+          this.headimgurl = res.Data.Headimgurl;
           res.Data.Mobile && this.$db.set("mobile", res.Data.Mobile);
         }
       });
@@ -145,14 +185,18 @@ export default {
     itemClickHandle(type) {
       /* 是否登录 */
       if (this.isLogin) {
-        if (type == "外呼") {
+        if (type == "外呼号码") {
           uni.navigateTo({
             url: "/activityPages/editOutbound/editOutbound?title=设置外呼号码&identification=我的",
           });
-        } else if (type == "提问") {
+        } else if (type == "我的提问") {
           uni.navigateTo({
             url: "/reportPages/myAskPage/myAskPage",
           });
+        } else if (type == "myCollection" || type == "browseHistory" || type == "mySchedulepage") {
+          uni.navigateTo({
+            url: `/pageMy/${type}/${type}`,
+          });
         } else {
           let path = this.typeObj.get(type);
           uni.navigateTo({
@@ -169,119 +213,197 @@ export default {
 
 <style lang="scss" scoped>
 .my-container {
-  background-color: #fff;
-  .my-top-info {
-    padding: 30rpx 34rpx;
-    display: flex;
-    align-items: center;
-    .avatar {
-      width: 168rpx;
-      height: 168rpx;
-      border-radius: 50%;
-      margin-right: 45rpx;
-      border: 1rpx solid #ccc;
-    }
-    .right-section {
-      font-size: 34rpx;
-      .info-item {
-        width: 450rpx;
-        .item-label {
-          // text-align: justify;
-          // text-align-last: justify;
-          display: inline-block;
-          // width: 110rpx;
-        }
-        &.space-item {
-          margin-bottom: 10rpx;
-        }
-      }
-      .no-log {
-        padding: 0 20rpx;
-        height: 56rpx;
-        line-height: 52rpx;
-        background-color: #fff;
-        color: #3385ff;
-        font-size: 24rpx;
-        border: 2rpx solid #3385ff;
-      }
-    }
+  background: #f9f9f9;
+  position: relative;
+  .nav-bar-wrap {
+    color: #fff;
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    z-index: 999;
   }
-  .auth-cont {
-    width: 682rpx;
-    height: 153rpx;
-    margin: 38rpx auto;
-    padding: 24rpx 36rpx;
-    position: relative;
-    color: #4a4a4a;
-    .auth_bg {
-      width: 682rpx;
-      height: 153rpx;
-      position: absolute;
-      left: 0;
-      top: 0;
-    }
-    .auth-info {
+  .my-background {
+    height: 480rpx;
+    width: 100%;
+    background: url("https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/my_bg.jpg") no-repeat;
+    background-size: 100% 100%;
+    padding-top: 206rpx;
+    .my-notice {
+      height: 55rpx;
+      width: 690rpx;
+      margin: 0 auto;
+      background: rgba(255, 255, 255, 0.5);
+      border-radius: 8px 8px 8px 8px;
+      line-height: 55rpx;
+      text-align: center;
+      color: #ffffff;
       position: relative;
-      .notlog-tip {
-        font-size: 30rpx;
-        color: #333333;
-        line-height: 105rpx;
-        text-align: center;
+      padding-right: 20rpx;
+      .my-icon {
+        position: absolute;
+        right: 20rpx;
+        top: 50%;
+        transform: translateY(-50%);
+        font-weight: bold;
+        font-size: 16px;
       }
-      .info-label {
-        font-size: 34rpx;
+    }
+  }
+  .my-info {
+    position: absolute;
+    top: 301rpx;
+    left: 50%;
+    transform: translateX(-50%);
+    .my-top-info {
+      width: 690rpx;
+      margin: 0 auto;
+      height: 436rpx;
+      background: url("https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/my_log.png") no-repeat;
+      background-color: #ffffff;
+      background-position: right top;
+      background-size: 267rpx 274rpx;
+      box-sizing: border-box;
+      box-shadow: 0px 0rpx 7rpx 1rpx #f0f3f5;
+      border-radius: 8rpx;
+      .info {
+        padding: 61rpx 0 0 30rpx;
+        display: flex;
+        .info-img {
+          width: 126rpx;
+          height: 126rpx;
+          background: #c4c4c4;
+          border-radius: 50%;
+          overflow: hidden;
+          .avatar-wrapper {
+            width: 126rpx;
+            height: 126rpx;
+          }
+          .avatar {
+            width: 126rpx;
+            height: 126rpx;
+            border-radius: 50%;
+          }
+        }
+        .info-list {
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          margin-left: 32rpx;
+          font-size: 24rpx;
+          font-weight: 400;
+          color: #666666;
+          .name {
+            font-size: 30rpx;
+            color: #000000;
+            line-height: 35rpx;
+            font-weight: 500;
+          }
+          .bind-btn {
+            color: #3385ff;
+            width: 181rpx;
+            height: 49rpx;
+            background: #ffffff;
+            border-radius: 8rpx;
+            border: 2rpx solid #3385ff;
+            text-align: center;
+            line-height: 47rpx;
+          }
+        }
       }
-      .auth-ul {
+      .auth-info {
         width: 100%;
-        white-space: nowrap;
-        margin-top: 15rpx;
-        color: #333;
-        .auth-li {
-          display: inline-block;
-          padding: 6rpx 20rpx;
-          border: 1rpx solid #333333;
-          border-radius: 4rpx;
+        overflow: hidden;
+        margin-top: 36rpx;
+        .auth-ul {
+          white-space: nowrap;
+          padding: 0 30rpx;
+          color: #3385ff;
+          .auth-li {
+            display: inline-block;
+            padding: 1rpx 20rpx;
+            border: 1rpx solid #3385ff;
+            border-radius: 4rpx;
+            font-size: 24rpx;
+            margin-right: 20rpx;
+            background: #edf4ff;
+            &:last-child {
+              margin-right: 50rpx;
+            }
+          }
+        }
+        .no-auth {
+          text-align: center;
+          font-size: 28rpx;
+          color: #999999;
+        }
+        .auth-btn {
+          width: 181rpx;
+          height: 49rpx;
+          margin: 0 auto;
+          color: #3385ff;
           font-size: 24rpx;
-          margin-right: 20rpx;
-          &:last-child {
-            margin-right: 0;
+          line-height: 47rpx;
+          border: 2rpx solid #3385ff;
+        }
+      }
+      .info-item {
+        display: flex;
+        padding-left: 30rpx;
+        margin: 36rpx auto 0;
+        .item {
+          width: 208rpx;
+          height: 76rpx;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          text-align: center;
+          .item-number {
+            font-size: 40rpx;
+            font-weight: 500;
           }
         }
+        .item-label {
+          border-right: 1rpx solid #ececec;
+          border-left: 1rpx solid #ececec;
+        }
       }
-      .no-auth {
-        font-size: 28rpx;
-        margin-top: 20rpx;
+    }
+
+    .info-bot {
+      padding: 0 20rpx;
+      background-color: #fff;
+      box-shadow: 0px 0rpx 7rpx 1rpx #f0f3f5;
+      border-radius: 8rpx;
+      margin-top: 20rpx;
+      .list-item {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        font-size: 34rpx;
+        color: #4a4a4a;
+        padding: 33rpx 34rpx;
+        .icon-area {
+          width: 100rpx;
+        }
+        &:last-child {
+          position: static;
+        }
       }
-      .auth-btn {
-        width: 139rpx;
-        height: 56rpx;
-        background: rgba(255, 255, 255, 0.1);
-        color: #3385ff;
-        font-size: 24rpx;
-        position: absolute;
-        right: 0;
-        top: 50%;
-        transform: translateY(-50%);
-        line-height: 56rpx;
-        border: 2rpx solid #3385ff;
+      .my-bot-box {
+        display: flex;
       }
     }
   }
-  .my-bot-cont {
-    .my-bot-box {
-      display: flex;
-    }
-    .list-item {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      font-size: 34rpx;
-      color: #4a4a4a;
-      padding: 33rpx 34rpx;
-      .icon-area {
-        width: 100rpx;
-      }
-    }
+  .bottom-text {
+    position: fixed;
+    bottom: 130rpx;
+    right: 0;
+    z-index: 9;
+    font-size: 20rpx;
+    color: #999999;
+    width: 100%;
+    text-align: center;
   }
 }
 </style>

+ 1 - 1
pages/pcWebViev/pcWebViev.vue

@@ -57,7 +57,7 @@ export default {
   },
   onShareAppMessage(op) {
     return {
-      title: this.titleShare,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  this.titleShare,
       path: this.urlShare,
     };
   },

+ 4 - 1
pages/reportForm/reportForm.vue

@@ -182,6 +182,7 @@
       </van-transition>
       <image @click="showTransition = !showTransition" src="https://hzstatic.hzinsights.com/cygx/czbk/intimate-icon.png" mode=""></image>
     </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
@@ -190,6 +191,7 @@ import strategy from "./components/strategy.vue";
 import researchChoose from "./components/researchChoose.vue";
 import coverGuide from "./components/coverGuide.vue";
 import { Throttle, Debounce } from "@/config/util.js";
+import freeCharge  from '@/components/freeCharge'
 import { Reports } from "@/config/api.js";
 let app = getApp();
 export default {
@@ -197,6 +199,7 @@ export default {
     strategy,
     researchChoose,
     coverGuide,
+    freeCharge,
   },
   data() {
     return {
@@ -588,7 +591,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: "报告",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  "报告",
       path: "/pages/reportForm/reportForm?tab=" + this.tabAct_id + "&tabs=" + this.tabAct_idTwo,
       success: (res) => {},
       fail: (err) => {},

+ 7 - 2
reportPages/IndustryReport/IndustryReport.vue

@@ -35,9 +35,10 @@
       </view>
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有报告的内容</text>
     </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
@@ -45,6 +46,7 @@
 import { Mine } from "@/config/api.js"; //模拟
 import { Reports } from "@/config/api.js"; //模拟
 import { Throttle } from "@/config/util.js";
+import freeCharge  from '@/components/freeCharge'
 let app = getApp({ allowDefault: true });
 export default {
   data() {
@@ -80,6 +82,9 @@ export default {
   onShow() {
     this.$store.dispatch("statistics", { PageType: "IndustryList", IndustrialManagementId: this.industrialManagementId });
   },
+  components: {
+    freeCharge
+  },
   watch: {
     //监听tabs的变化
     tabAct_id: {
@@ -192,7 +197,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: this.titleReport,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  this.titleReport,
       path: "/reportPages/IndustryReport/IndustryReport?id=" + this.industrialManagementId + "&tab=" + this.tabAct_id,
       success: (res) => {},
       fail: (err) => {},

+ 0 - 1
reportPages/index.scss

@@ -1,5 +1,4 @@
 .collect-ul {
-  // margin-top: 30rpx;s
   padding-top: 4rpx;
   .collect-ltem {
     display: flex;

+ 7 - 2
reportPages/industrialReport/industrialReport.vue

@@ -21,15 +21,17 @@
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有报告的内容</text>
     </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
 <script>
 import { Reports } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
+import freeCharge  from '@/components/freeCharge'
 let app = getApp({allowDefault: true});
 export default {
   data() {
@@ -125,6 +127,9 @@ export default {
       this.$store.dispatch("checkHandle","/pageMy/reportDetail/reportDetail?id=" + item.ArticleId)
     },
   },
+  components: {
+    freeCharge
+  },
   /* 触底 */
   onReachBottom: Throttle(function () {
     if (this.status === "nomore") return;
@@ -144,7 +149,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: this.titleReport,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  this.titleReport,
       path:
         "/reportPages/industrialReport/industrialReport?id=" + this.categoryId + "&type=" + this.typeIsPost + "&isGenre=" + this.genreIs + "&idGenre=" + this.idGenre + "&idArticle=" + this.articleId,
       success: (res) => {},

+ 6 - 1
reportPages/myAskPage/myAskPage.vue

@@ -17,15 +17,20 @@
       </view>
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有提问的内容</text>
     </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
 <script>
 import { User } from "@/config/api.js";
+import freeCharge  from '@/components/freeCharge'
 export default {
+  components: {
+    freeCharge
+  },
   data() {
     return {
       askList: [],

+ 6 - 1
reportPages/reportSearch/reportSearch.vue

@@ -188,12 +188,14 @@
         <rich-text :nodes="accounts"></rich-text>
       </view>
     </u-modal>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
 import { Search, Reports, Research, Report } from "@/config/api.js";
 import { Debounce, Throttle } from "@/config/util.js";
+import freeCharge from "@/components/freeCharge";
 let app = getApp({ allowDefault: true });
 export default {
   data() {
@@ -238,6 +240,9 @@ export default {
       }
     },
   },
+  components: {
+    freeCharge,
+  },
   methods: {
     async researchHotKeyWord() {
       const res = await Research.researchHotKeyWord();
@@ -408,7 +413,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: "报告",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  "报告",
       path: "/reportPages/reportSearch/reportSearch?text=" + this.searchTxt,
       success: (res) => {},
       fail: (err) => {},

+ 49 - 11
reportPages/reportSecretDetail/reportSecretDetail.vue

@@ -53,13 +53,22 @@
       <statement :show="isShowStatement" />
     </block>
     <view class="noauth-cont" v-else-if="hasPermission == 3 || hasPermission == 4">
-      <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
-      <block>
-        <view class="tip">您暂无权限查看此文章内容,若想查看可以申请开通哦</view>
-        <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+      <block v-if="!isShowAlert">
+        <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
+        <block>
+          <view class="tip">您暂无权限查看此文章内容,若想查看可以申请开通哦</view>
+          <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+        </block>
+        <view class="btn-cont back-btn" @click="backIndex"> 返回首页 </view>
+      </block>
+      <block v-else>
+        <text class="moneh-text"> 上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡 </text>
+        <img src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/month_card.png" class="month_card" alt="" />
+        <view class="btn-cont btn-dl" @click="applyAuth"> 立即上传 </view>
+        <view class="btn-cont month-back" @click="backIndex"> 返回</view>
       </block>
-      <view class="btn-cont back-btn" @click="backIndex"> 返回首页 </view>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
@@ -67,7 +76,8 @@
 import statement from "@/reportPages/components/statement.vue";
 import researchSummary from "./components/researchSummary.vue";
 import reportChoiceness from "./components/reportChoiceness.vue";
-import { Reports } from "@/config/api.js";
+import freeCharge from "@/components/freeCharge";
+import { Reports,FreeButton } from "@/config/api.js";
 let app = getApp({ allowDefault: true });
 export default {
   data() {
@@ -82,12 +92,12 @@ export default {
       dataListResearch: [], //本周数组
       hasPermission: "", //权限判断
       videoUrl: "",
-      //bgAudioManager:''
+      isShowAlert: false,
     };
   },
   methods: {
     audioPlay() {
-     if (this.videoUrl === app.globalData.bgAudioManager.src) {
+      if (this.videoUrl === app.globalData.bgAudioManager.src) {
         app.globalData.bgAudioManager.play();
       } else {
         app.globalData.bgAudioManager.title = this.detali.VideoName;
@@ -126,7 +136,7 @@ export default {
     applyAuth() {
       this.hasPermission === 4
         ? uni.navigateTo({
-            url: "/pageMy/applyTrial/applyTrial",
+            url: "/pageMy/applyTrial/applyTrial?tryType=Article&detailId=" + this.id,
           })
         : uni.showModal({
             title: "",
@@ -150,11 +160,19 @@ export default {
         url: "/pages/index/index",
       });
     },
+    //获取权限弹窗是否展示免费月卡接口
+    async userIsShowAlert() {
+      const res = await FreeButton.userIsShowAlert();
+      if (res.Ret === 200) {
+        this.isShowAlert = res.Data.IsShow;
+      }
+    },
   },
   components: {
     statement,
     researchSummary,
     reportChoiceness,
+    freeCharge,
   },
   onLoad(option) {
     this.isType = option.type;
@@ -162,7 +180,7 @@ export default {
     uni.setNavigationBarTitle({
       title: this.isType == 1 ? "报告精选" : this.isType == 2 ? "本周研究汇总" : "上周纪要汇总",
     });
-
+    this.userIsShowAlert();
     app.globalData.bgAudioManager.onEnded((res) => {
       this.isPlay = false;
     });
@@ -186,7 +204,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: this.detali.Title,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.detali.Title,
       path: "/reportPages/reportSecretDetail/reportSecretDetail?type=" + this.isType + "&id=" + this.id,
       success: (res) => {},
       fail: (err) => {},
@@ -284,5 +302,25 @@ export default {
       }
     }
   }
+  .month_card {
+    width: 100%;
+    height: 565rpx;
+    padding-left: -20rpx;
+  }
+  .btn-dl {
+    background: linear-gradient(253deg, #fcf3e9 0%, #eedec8 100%) !important;
+    color: #333 !important;
+    margin: 30rpx auto !important;
+  }
+  .month-back {
+    background: #f6f6f6 !important;
+    color: #999 !important;
+  }
+  .moneh-text {
+    text-align: center;
+    width: 632rpx;
+    margin: 0 auto 20rpx;
+    color: #999999;
+  }
 }
 </style>

+ 48 - 17
reportPages/roadEssence/roadEssence.vue

@@ -30,7 +30,6 @@
           </text>
         </view>
         <view class="content-boby">
-          <!-- <rich-text :nodes="detali.Body"></rich-text> -->
           <mp-html :content="detali.Body" />
         </view>
       </view>
@@ -38,19 +37,29 @@
       <statement :show="isShowStatement" />
     </block>
     <view class="noauth-cont" v-else-if="haveAuth === 3 || haveAuth === 4">
-      <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
-      <block>
-        <view class="tip">您暂无权限查看内容,若想查看可以申请开通哦</view>
-        <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+      <block v-if="!isShowAlert">
+        <image src="https://hzstatic.hzinsights.com/cygx/czbk/noauth.png" class="noauth-ico"></image>
+        <block>
+          <view class="tip">您暂无权限查看此文章内容,若想查看可以申请开通哦</view>
+          <view class="btn-cont" @click="applyAuth"> 立即申请 </view>
+        </block>
+        <view class="btn-cont back-btn" @click="backIndex"> 返回首页 </view>
+      </block>
+      <block v-else>
+        <text class="moneh-text"> 上传名片并填写简单信息,24小时内我们会为您开通一个月的免费月卡 </text>
+        <img src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/month_card.png" class="month_card" alt="" />
+        <view class="btn-cont btn-dl" @click="applyAuth"> 立即上传 </view>
+        <view class="btn-cont month-back" @click="backIndex"> 返回</view>
       </block>
-      <view class="btn-cont back-btn" @click="backIndex">返回首页</view>
     </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
 
 <script>
-import { Reports, User } from "@/config/api.js";
+import { Reports, User, FreeButton } from "@/config/api.js";
 import statement from "@/reportPages/components/statement.vue";
+import freeCharge from "@/components/freeCharge";
 let app = getApp({ allowDefault: true });
 export default {
   data() {
@@ -62,6 +71,7 @@ export default {
       isShowStatement: false, //免责声明隐现
       haveAuth: "", //权限判断
       videoUrl: "",
+      isShowAlert: false,
     };
   },
   methods: {
@@ -87,7 +97,7 @@ export default {
     applyAuth() {
       this.haveAuth === 4
         ? uni.navigateTo({
-            url: "/pageMy/applyTrial/applyTrial",
+            url: "/pageMy/applyTrial/applyTrial?tryType=Article&detailId=" + this.id,
           })
         : uni.showModal({
             title: "",
@@ -124,9 +134,17 @@ export default {
       this.isPlay = false;
       app.globalData.bgAudioManager.pause();
     },
+    //获取权限弹窗是否展示免费月卡接口
+    async userIsShowAlert() {
+      const res = await FreeButton.userIsShowAlert();
+      if (res.Ret === 200) {
+        this.isShowAlert = res.Data.IsShow;
+      }
+    },
   },
   components: {
     statement,
+    freeCharge,
   },
   onLoad(option) {
     this.id = Number(option.id) || "";
@@ -142,6 +160,7 @@ export default {
     app.globalData.bgAudioManager.onStop((res) => {
       this.isPlay = false;
     });
+    this.userIsShowAlert();
   },
   async onShow() {
     await this.$store.dispatch("checkHandle");
@@ -160,7 +179,7 @@ export default {
    */
   onShareAppMessage: function (res) {
     return {
-      title: this.detali.Title,
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.detali.Title,
       url: "reportPages/roadEssence/roadEssence?id=" + this.id,
       success: (res) => {},
       fail: (err) => {},
@@ -192,13 +211,11 @@ export default {
     .content-statement {
       display: flex;
       color: #707070;
-
       .statement {
         margin-left: 10rpx;
         color: #3385ff;
       }
     }
-
     .content-audio {
       margin: 60rpx 0;
       width: 682rpx;
@@ -209,7 +226,6 @@ export default {
       border-radius: 16rpx;
       display: flex;
       padding: 24rpx 21rpx 18rpx;
-
       .audio-img {
         width: 154rpx;
         height: 154rpx;
@@ -220,7 +236,6 @@ export default {
           height: 154rpx;
         }
       }
-
       .audio-title {
         font-size: 28rpx;
         color: #333;
@@ -235,7 +250,6 @@ export default {
         }
       }
     }
-
     .content-abstract {
       margin-bottom: 30rpx;
       font-size: 32rpx;
@@ -246,7 +260,6 @@ export default {
         font-weight: 700;
       }
     }
-
     .content-boby {
       font-size: 32rpx;
 
@@ -256,7 +269,6 @@ export default {
       }
     }
   }
-
   .content-link {
     width: 368rpx;
     height: 80rpx;
@@ -270,7 +282,26 @@ export default {
     box-sizing: border-box;
     margin: 100rpx auto;
   }
-
+  .month_card {
+    width: 100%;
+    height: 565rpx;
+    padding-left: -20rpx;
+  }
+  .btn-dl {
+    background: linear-gradient(253deg, #fcf3e9 0%, #eedec8 100%) !important;
+    color: #333 !important;
+    margin: 30rpx auto !important;
+  }
+  .month-back {
+    background: #f6f6f6 !important;
+    color: #999 !important;
+  }
+  .moneh-text {
+    text-align: center;
+    width: 632rpx;
+    margin: 0 auto 20rpx;
+    color: #999999;
+  }
   @import "../jurisdiction.scss";
 }
 </style>

+ 7 - 2
reportPages/secretDetails/secretDetails.vue

@@ -17,15 +17,17 @@
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
     </view>
     <view class="nodata" v-else>
-      <image src="@/static/img/nodata.png" mode="" class="nodata_ico"></image>
+      <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
       <text>暂时没有报告的内容</text>
     </view>
+   <freeCharge class="free-charge" :isShowFreeBtn="isShowFree"/>
   </view>
 </template>
 
 <script>
 import { Reports } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
+import freeCharge  from '@/components/freeCharge'
 let app = getApp({allowDefault: true});
 export default {
   data() {
@@ -45,6 +47,9 @@ export default {
       },
     };
   },
+  components: {
+    freeCharge
+  },
   methods: {
     async getList() {
       const res = await Reports.reportListByType({
@@ -97,7 +102,7 @@ export default {
   }),
   onShareAppMessage(res) {
     return {
-      title: this.isType == 2 ? "本周研究汇总" : "上周纪要汇总",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" :  this.isType == 2 ? "本周研究汇总" : "上周纪要汇总",
       path: "/reportPages/secretDetails/secretDetails?type=" + this.isType,
     };
   },

BIN
static/img/nodata.png