Browse Source

Merge branch '7.4' into 7.6

小彬 2 years ago
parent
commit
4ff7a88b35

+ 0 - 1
App.vue

@@ -48,7 +48,6 @@ export default {
       const updateManager = uni.getUpdateManager();
       updateManager.onCheckForUpdate(function (res) {
         // 请求完新版本信息的回调
-        // console.log(res.hasUpdate);
       });
       updateManager.onUpdateReady(function (res) {
         uni.showModal({

+ 169 - 55
activityPages/activityDetail/activityDetail.vue

@@ -12,25 +12,47 @@
         <!-- 内容部分 -->
         <view class="content">
           <view v-if="detailData.ActivityName" class="dialog-title" :class="1 == 1 ? 'brackets-title' : ''">{{ detailData.ActivityName }}</view>
-          <view class="audio-card" v-if="detailData.AudioLink">
+          <view class="audio-card" v-if="detailData.VoiceList && detailData.VoiceList.Url">
             <view class="card-title text_oneLine">
               {{ detailData.VoiceList.Name }}
             </view>
-            <slider activeColor="#3385FF" :max="detailData.VoiceList.PlaySeconds" :value="curTime" @change="handleAudioSliderChange($event)" block-size="16" class="slider" />
-            <view class="card-time">
-              <text class="time">{{ curTime | formatVoiceTime }}</text>
-              <text class="time">{{ detailData.VoiceList.PlaySeconds | formatVoiceTime }}</text>
+            <view class="slider-paly">
+              <view style="flex: 1; padding-top: 20rpx">
+                <slider
+                  activeColor="#3385FF"
+                  :max="detailData.VoiceList.PlaySeconds"
+                  :value="curTime"
+                  @touchstart="touchstartHandler"
+                  @change="handleAudioSliderChange($event)"
+                  @changing="handleAudioSliderChangeing($event)"
+                  block-size="16"
+                  class="slider"
+                />
+                <view class="card-time">
+                  <view class="time">{{ curTime | formatVoiceTime }}</view>
+                  <view class="time">{{ detailData.VoiceList.PlaySeconds | formatVoiceTime }}</view>
+                </view>
+              </view>
+              <view class="is-paly-card">
+                <image
+                  @click.stop="audioPlayBack"
+                  class=""
+                  :src="
+                    curVoiceId === detailData.ActivityId && !curAudioPaused
+                      ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif'
+                      : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'
+                  "
+                ></image>
+              </view>
             </view>
-            <view class="is-paly-card">
-              <image
-                @click.stop="audioPlayBack"
-                class=""
-                :src="
-                  curVoiceId === detailData.ActivityId && !curAudioPaused
-                    ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/suspend_icon.png'
-                    : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/play_icon.png'
-                "
-              ></image>
+            <view class="fast-reverse">
+              <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+              <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+                <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+                  {{ item.name }}
+                </view>
+              </block>
+              <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
             </view>
           </view>
           <view class="city-box">
@@ -47,10 +69,11 @@
           </view>
           <view v-if="detailData.Listndustrial.length" class="network dustrial-ui">
             <view class="network-left">产业标签:</view>
-            <view class="network-right">
-              <view :class="['dustrial-li', item.IsJump && 'dustrial-item']" @click="goDustrialHandler(item)" v-for="item in detailData.Listndustrial" :key="item.IndustrialManagementId">{{
-                item.IndustryName
-              }}</view>
+            <view class="network-right dustrial-content">
+              <view class="item" v-for="item in detailData.Listndustrial" :key="item.IndustrialManagementId">
+                <view :class="['dustrial-li', item.IsJump && 'dustrial-item']" @click="goDustrialHandler(item)">{{ item.IndustryName }} </view>
+                <image v-if="item.IndustryNewLabel" class="new_icon" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_report.png" mode=""></image>
+              </view>
             </view>
           </view>
           <view v-if="detailData.ActivityTimeText" class="network">
@@ -171,9 +194,6 @@
             <view class="make-outbound" @click="wanttosignup" v-if="detailData.IsSignup == 0 && detailData.IsShowSignup">
               {{ detailData.LimitPeopleNum > 0 ? `我要报名(${detailData.SignupNum}/${detailData.LimitPeopleNum})` : "我要报名" }}
             </view>
-            <!-- <view v-if="detailData.IsSignup != 0 && detailData.IsShowSignup && detailData.SignupType == 1" class="make-outbound" @click="signupCancel(2)">
-              {{ detailData.LimitPeopleNum > 0 ? `取消外呼(${detailData.SignupNum}/${detailData.LimitPeopleNum})` : "取消外呼" }}
-            </view> -->
             <view v-if="detailData.IsSignup != 0 && detailData.IsShowSignup" class="make-outbound" @click="signupCancel(2)">
               {{ detailData.LimitPeopleNum > 0 ? `${showWay}(${detailData.SignupNum}/${detailData.LimitPeopleNum})` : showWay }}
             </view>
@@ -219,7 +239,9 @@
       <jurisdiction :idAct="id" :haveAuth="haveAuth" :industryMsg="industryMsg" :msgType="msgType" :sellerMobile="sellerMobile" :sellerName="sellerName"></jurisdiction>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
-    <audioModule :showAudioPop="false" />
+    <view v-show="false">
+      <audioModule :showAudioPop="showAudioPop" />
+    </view>
   </view>
 </template>
 
@@ -275,6 +297,13 @@ export default {
       goOnNextStep: "", //设置外呼号后弹出哪个
       mailboxBinding: false, //是否绑定邮箱
       play: false,
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
+      curTime: 0,
     };
   },
   mixins: [manageMixin],
@@ -287,15 +316,24 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
-    curTime() {
-      //当前音频的播放时间
-      let initTime = this.curVoiceId === this.detailData.ActivityId ? this.$store.state.audioBg.curTime : 0;
-      return initTime;
-    },
+    // storeTime() {
+    //   //当前音频的播放时间
+    //   let initTime = this.curVoiceId === this.detailData.ActivityId ? this.$store.state.audioBg.curTime : 0;
+    //   return initTime;
+    // },
+    //报名的显示
     showWay() {
       let text = this.detailData.SignupType == 1 ? "取消外呼" : "取消报名";
       return text;
     },
+    //几倍的播放数度
+    isTimes() {
+      let isMultiple = this.curVoiceId === this.detailData.ActivityId ? this.$store.state.audioBg.multiple : 1;
+      return isMultiple;
+    },
+    showAudioPop() {
+      return this.$store.state.audioBg.show;
+    },
   },
   components: {
     modalDialog,
@@ -313,6 +351,13 @@ export default {
       },
       immediate: true,
     },
+    "$store.state.audioBg.curTime": {
+      handler(newVal) {
+        this.curTime = this.curVoiceId === this.detailData.ActivityId ? newVal : 0;
+      },
+      immediate: true,
+      deep: true,
+    },
   },
   methods: {
     //获取是否需要填写区号接口
@@ -475,25 +520,56 @@ export default {
     },
     //音频点击暂停播放
     audioPlayBack() {
-      if (this.globalBgAudioManager.src) {
-        if (this.$store.state.audioBg.activityId == this.detailData.ActivityId) {
-          if (this.globalBgAudioManager.paused) {
-            this.globalBgAudioManager.play();
-          } else {
-            this.globalBgAudioManager.pause();
-          }
+      if (this.$store.state.audioBg.activityId == this.detailData.ActivityId) {
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
         } else {
-          this.$store.commit("audioBg/addAudio", { list: this.detailData.VoiceList, activityId: this.detailData.ActivityId, activityTitle: this.detailData.ActivityName });
+          this.globalBgAudioManager.pause();
         }
       } else {
-        this.$store.commit("audioBg/removeAudio");
         this.$store.commit("audioBg/addAudio", { list: this.detailData.VoiceList, activityId: this.detailData.ActivityId, activityTitle: this.detailData.ActivityName });
       }
     },
+    // //拖动进度条
+    // handleAudioSliderChangeing(e) {
+    //   this.curTime = e.detail.value;
+    //   this.globalBgAudioManager.seek(this.curTime);
+    // },
+    //拖动进度条
+    handleAudioSliderChangeing(e) {
+      this.curTime = e.detail.value;
+    },
     //拖动进度条
     handleAudioSliderChange(e) {
       const value = e.detail.value;
       this.globalBgAudioManager.seek(value);
+      setTimeout(() => {
+        this.$store.commit("audioBg/setSlide", false);
+      }, 300);
+    },
+    touchstartHandler() {
+      this.$store.commit("audioBg/setSlide", true);
+    },
+    //倍速播放
+    isTimesHandler(i) {
+      if (this.$store.state.audioBg.activityId == this.detailData.ActivityId) {
+        let index = i == 3 ? 0 : i + 1;
+        this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+        this.globalBgAudioManager.playbackRate = this.isTimes;
+        this.globalBgAudioManager.startTime = this.curTime;
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
+        }
+      } else {
+        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/addAudio", { list: this.detailData.VoiceList, activityId: this.detailData.ActivityId, activityTitle: this.detailData.ActivityName });
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.detailData.VoiceList.PlaySeconds ? this.detailData.VoiceList.PlaySeconds - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
     },
   },
   async onLoad(option) {
@@ -562,7 +638,11 @@ export default {
       display: inline-block;
       color: #2c83ff;
     }
-
+    .new_icon {
+      width: 60rpx;
+      height: 30rpx;
+      margin: 0 20rpx 20rpx 0;
+    }
     .dialog-title {
       width: 682rpx;
       padding: 20rpx;
@@ -611,6 +691,16 @@ export default {
     .network-right {
       width: 480rpx;
     }
+    .dustrial-content {
+      display: flex;
+      flex-wrap: wrap;
+      .item {
+        display: flex;
+        align-items: center;
+        padding-left: 0;
+        margin-left: 0;
+      }
+    }
     .network-zoom {
       .text_zoom {
         width: 100%;
@@ -747,7 +837,8 @@ export default {
     margin-bottom: 10rpx !important;
   }
   .dustrial-li {
-    display: inline-block;
+    display: flex;
+    align-items: center;
     padding: 0 13rpx;
     margin: 0 20rpx 20rpx 0;
   }
@@ -761,19 +852,27 @@ export default {
   .audio-card {
     width: 100%;
     height: 282rpx;
-    background: #f5f9ff;
+    background: #f9f9f9;
     border-radius: 16rpx;
     margin: 0 auto;
-    padding: 30rpx !important;
-
+    padding: 30rpx;
+    padding-left: 30rpx;
+    view {
+      padding-left: 0;
+    }
     .slider {
       width: 100%;
       margin: 0;
     }
+    .slider-paly {
+      display: flex;
+      height: 80rpx;
+      align-items: center;
+      padding-left: 20rpx;
+    }
     .card-title {
-      color: #3385ff;
       font-size: 28rpx;
-      padding: 0 66rpx;
+      padding: 0 40rpx;
       text-align: center;
       margin-bottom: 35rpx;
     }
@@ -782,20 +881,35 @@ export default {
       justify-content: space-between;
       color: #999999;
       font-size: 20rpx;
-      padding-left: 0;
-      .time {
-        padding: 0;
-        line-height: 26rpx;
-      }
     }
     .is-paly-card {
-      width: 100%;
-      text-align: center;
-      padding-left: 0;
+      width: 70rpx;
+      height: 70rpx;
+      flex-shrink: 0;
+      margin-left: 30rpx;
       image {
-        margin-top: 5rpx;
-        width: 100rpx;
-        height: 100rpx;
+        width: 70rpx;
+        height: 70rpx;
+      }
+    }
+    .fast-reverse {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-top: 30rpx;
+      .speed-button {
+        width: 96rpx;
+        height: 47rpx;
+        background: #eaeaea;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 47rpx;
+        margin: 0 70rpx;
+        padding-left: 0;
+      }
+      .speed-img {
+        width: 50rpx;
+        height: 50rpx;
       }
     }
   }

+ 56 - 10
activityPages/activitySearch/activitySearch.vue

@@ -98,6 +98,7 @@
                       <text @click="askingGo(item)">帮我带问</text>
                     </view>
                     <text v-if="item.IsShowOutboundCall && item.ActivityTypeId != 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
+                    <text v-if="item.IsShowDetails" @click="goDetail(item)" class="button" >查看详情</text>
                     <block v-if="item.IsShowSignup">
                       <block v-if="item.IsCClassMeeting">
                         <text class="button" @click="signupIsAddOfCancel(item, 3, 'CClass')">{{ item.IsSignup == 1 ? "取消报名" : "我要报名" }}</text>
@@ -162,7 +163,9 @@
         <view style="color: #a9afb8" @click="selectShow = false">取消</view>
       </u-popup>
     </view>
-    <audioModule :showAudioPop.sync="showAudioPop" />
+    <view v-if="showAudioBox">
+      <audioModule :showAudioPop.sync="showAudioPop" />
+    </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
   </view>
 </template>
@@ -312,19 +315,55 @@ export default {
       this.page_no = 1;
       this.getList();
     },
+    // //点击了回放
+    // audioPlayBack(item) {
+    //   this.$store.commit("audioBg/parseIntAudio", true);
+    //   // 判断是否为同一个音频
+    //   if (this.$store.state.audioBg.activityId == item.ActivityId) {
+    //     if (this.globalBgAudioManager.paused) {
+    //       this.globalBgAudioManager.play();
+    //     } else {
+    //       this.globalBgAudioManager.pause();
+    //     }
+    //   } else {
+    //     this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
+    //   }
+    //   this.showAudioPop = true;
+    // },
     //点击了回放
-    audioPlayBack(item) {
-      // 判断是否为同一个音频
-      if (this.$store.state.audioBg.activityId == item.ActivityId) {
-        if (this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.play();
+    async audioPlayBack(item) {
+      if (!item.BackAudioPlay) {
+        const res = await activity.getActivityDetail({
+          ActivityId: item.ActivityId,
+        });
+        if (res.Ret === 200) {
+          item.BackAudioPlay = res.Data;
+        }
+      }
+      this.hasPermission = item.BackAudioPlay.HasPermission;
+      this.jurisdictionList.ActivityId = item.BackAudioPlay.ActivityId;
+      if (this.hasPermission == 1) {
+        this.$store.commit("audioBg/parseIntAudio", true);
+        // 判断是否为同一个音频
+        if (this.$store.state.audioBg.activityId == item.ActivityId) {
+          if (this.globalBgAudioManager.paused) {
+            this.globalBgAudioManager.play();
+          } else {
+            this.globalBgAudioManager.pause();
+          }
         } else {
-          this.globalBgAudioManager.pause();
+          this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
         }
-      } else {
-        this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
+        this.showAudioPop = true;
+      } else if (this.hasPermission == 2) {
+        this.jurisdictionList.SellerMobile = item.BackAudioPlay.SellerMobile;
+        this.jurisdictionList.SellerName = item.BackAudioPlay.SellerName;
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.isShowhasPermission = true;
+      } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.applyForIsShow = true;
       }
-      this.showAudioPop = true;
     },
   },
   computed: {
@@ -336,11 +375,18 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
+    showAudioBox() {
+      return this.$store.state.audioBg.parseIntShow;
+    },
   },
   onShow() {
+    this.$store.commit("audioBg/parseIntAudio", true);
     this.countryCcode(); //判断是否加区号
     this.$store.dispatch("statistics", { PageType: "ActivitSearch" });
   },
+  onHide() {
+    this.$store.commit("audioBg/parseIntAudio", false);
+  },
   //load
   onLoad(option) {
     if (this.$db.get("historySearchListActivity")) {

+ 80 - 30
activityPages/playBack/playBack.vue

@@ -31,15 +31,17 @@
           <text :class="item.ActivityType == 1 ? '' : 'xianxia'">{{ item.ActivityType == 1 ? "线上" : "线下" }}</text>
           {{ item.ActivityTimeText }}
           <view class="audio-back" v-if="item.AudioLink" @click.stop="audioPlayBack(item)">
-            <image
-              class="audio-img"
-              :src="
-                curVoiceId === item.ActivityId && !curAudioPaused
-                  ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_stop.png'
-                  : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_group.png'
-              "
-            ></image>
-            {{ curVoiceId === item.ActivityId && !curAudioPaused ? "暂停" : "回放" }}
+            <view class="audio-box">
+              <image
+                class="audio-img"
+                :src="
+                  curVoiceId === item.ActivityId && !curAudioPaused
+                    ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_stop.png'
+                    : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_group.png'
+                "
+              ></image>
+              {{ curVoiceId === item.ActivityId && !curAudioPaused ? "暂停" : "回放" }}
+            </view>
           </view>
         </view>
         <view class="item-li">
@@ -64,7 +66,11 @@
       </view>
       <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="totalPage > 1" />
     </view>
-    <audioModule :showAudioPop.sync="showAudioPop" />
+    <view v-if="showAudioBox">
+      <audioModule :showAudioPop.sync="showAudioPop" />
+    </view>
+    <!-- 所有自定义弹框 -->
+    <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
   </view>
 </template>
 
@@ -72,6 +78,8 @@
 import { activity, User } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
 import audioModule from "@/components/audioModule/index";
+import modalDialog from "@/components/modalDialog.vue";
+
 export default {
   data() {
     return {
@@ -91,9 +99,13 @@ export default {
         nomore: "已经到底了",
       },
       showAudioPop: false,
+      isShowhasPermission: false, //  联系销售的提交申请
+      applyForIsShow: false, // 提交申请
+      jurisdictionList: {},
+      hasPermission: "", //权限
     };
   },
-  components: { audioModule },
+  components: { audioModule, modalDialog },
   methods: {
     //获取活动
     async getActivityList() {
@@ -200,18 +212,39 @@ export default {
       item.IsChoose = !item.IsChoose;
     },
     //点击了回放
-    audioPlayBack(item) {
-      // 判断是否为同一个音频
-      if (this.$store.state.audioBg.activityId == item.ActivityId) {
-        if (this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.play();
+    async audioPlayBack(item) {
+      if (!item.BackAudioPlay) {
+        const res = await activity.getActivityDetail({
+          ActivityId: item.ActivityId,
+        });
+        if (res.Ret === 200) {
+          item.BackAudioPlay = res.Data;
+        }
+      }
+      this.hasPermission = item.BackAudioPlay.HasPermission;
+      this.jurisdictionList.ActivityId = item.BackAudioPlay.ActivityId;
+      if (this.hasPermission == 1) {
+        this.$store.commit("audioBg/parseIntAudio", true);
+        // 判断是否为同一个音频
+        if (this.$store.state.audioBg.activityId == item.ActivityId) {
+          if (this.globalBgAudioManager.paused) {
+            this.globalBgAudioManager.play();
+          } else {
+            this.globalBgAudioManager.pause();
+          }
         } else {
-          this.globalBgAudioManager.pause();
+          this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
         }
-      } else {
-        this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
+        this.showAudioPop = true;
+      } else if (this.hasPermission == 2) {
+        this.jurisdictionList.SellerMobile = item.BackAudioPlay.SellerMobile;
+        this.jurisdictionList.SellerName = item.BackAudioPlay.SellerName;
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.isShowhasPermission = true;
+      } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.applyForIsShow = true;
       }
-      this.showAudioPop = true;
     },
   },
   computed: {
@@ -223,11 +256,21 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
+    showAudioBox() {
+      return this.$store.state.audioBg.parseIntShow;
+    },
   },
   onLoad() {
     this.getActivityList();
     this.getUserSearchContent();
   },
+  async onShow() {
+    await this.$store.dispatch("checkHandle", "noGO");
+    this.$store.commit("audioBg/parseIntAudio", true);
+  },
+  onHide() {
+    this.$store.commit("audioBg/parseIntAudio", false);
+  },
   /* 触底 */
   onReachBottom: Throttle(function () {
     if (this.status === "nomore") return;
@@ -258,19 +301,26 @@ export default {
       right: 0;
       top: 50%;
       transform: translateY(-50%);
-      width: 99rpx;
-      height: 39rpx;
+      width: 125rpx;
+      height: 90rpx;
       font-size: 24rpx;
-      color: #fff;
       display: flex;
       align-items: center;
-      background-color: #3385ff;
-      border-radius: 20rpx;
-      padding-left: 4rpx;
-      .audio-img {
-        width: 30rpx;
-        height: 30rpx;
-        margin: 0 5rpx;
+      justify-content: flex-end;
+      color: #fff;
+      .audio-box {
+        width: 99rpx;
+        height: 39rpx;
+        display: flex;
+        align-items: center;
+        border-radius: 20rpx;
+        padding-left: 4rpx;
+        background-color: #3385ff;
+        .audio-img {
+          width: 30rpx;
+          height: 30rpx;
+          margin: 0 5rpx;
+        }
       }
     }
   }

+ 32 - 7
activityPages/themeActivity/themeActivity.vue

@@ -1,8 +1,10 @@
 <template>
   <view class="container theme-container">
     <view class="top-title" v-if="!type">
-      <image class="img" />
-      <text>{{ contentLabel }}</text>
+      <view :class="['content-title', !contentDetail.IsJump && 'jump-title']" @click="jumpHandler">
+        <text>{{ contentDetail.Label }}</text>
+        <image v-if="contentDetail.IndustryNewLabel" class="new_icon" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_report.png" mode=""></image>
+      </view>
     </view>
     <!-- 活动列表 -->
     <view>
@@ -45,6 +47,7 @@
                       <text @click="askingGo(item)">帮我带问</text>
                     </view>
                     <text v-if="item.IsShowOutboundCall && item.ActivityTypeId != 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
+                    <text v-if="item.IsShowDetails" @click="goDetail(item)" class="button" >查看详情</text>
                     <block v-if="item.IsShowSignup">
                       <block v-if="item.IsCClassMeeting">
                         <text class="button" @click="signupIsAddOfCancel(item, 3, 'CClass')">{{ item.IsSignup == 1 ? "取消报名" : "我要报名" }}</text>
@@ -110,6 +113,7 @@ export default {
       hasPermission: "", //是否有权限
       contentImg: "",
       contentLabel: "",
+      contentDetail: {},
       label: "",
       type: "",
       permissionIds: "",
@@ -139,7 +143,7 @@ export default {
           });
         }
         this.contentImg = res.Data.ImgUrl;
-        this.contentLabel = res.Data.Label;
+        this.contentDetail = res.Data;
         this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
         if (this.page_no === 1) {
           this.collectList = res.Data.List || [];
@@ -160,6 +164,17 @@ export default {
         }
       });
     },
+    jumpHandler() {
+      if (this.contentDetail.IsJump) {
+        if (this.contentDetail.IsResearch) {
+          //严选
+          this.$store.dispatch("checkHandle", "/reportPages/researchTheme/researchTheme?id=" + this.contentDetail.IndustrialManagementId);
+        } else {
+          //非严选
+          this.$store.dispatch("checkHandle", "/reportPages/IndustryReport/IndustryReport?id=" + this.contentDetail.IndustrialManagementId);
+        }
+      }
+    },
   },
   onLoad(option) {
     this.label = option.title;
@@ -208,12 +223,22 @@ export default {
     background-color: #fff;
     display: flex;
     align-items: center;
-    height: 96rpx;
     color: #3385ff;
     font-size: 30rpx;
-    .img {
-      width: 38rpx;
-      height: 38rpx;
+    padding: 30rpx 30rpx 20rpx;
+    .content-title {
+      display: flex;
+      align-items: center;
+      padding: 7rpx 12rpx;
+      background-color: #f8f8fa;
+      .new_icon {
+        width: 60rpx;
+        height: 30rpx;
+        margin-left: 10rpx;
+      }
+    }
+    .jump-title {
+      color: #999;
     }
   }
   .collect-ul {

+ 323 - 0
components/audioModule/1.vue

@@ -0,0 +1,323 @@
+<template>
+  <view class="container global-audio-box" v-if="showAudioPop">
+    <view class="bg-overlay" @click="isShowMaskHandler"></view>
+    <view class="audio-box">
+      <view class="activity-title">
+        {{ activityTitle }}
+        <view class="icon-cross" @click.stop="isShowMaskHandler">
+          <van-icon name="cross" font-size="32" />
+        </view>
+      </view>
+      <view class="audio-card">
+        <view class="card-title text_oneLine">
+          {{ title }}
+        </view>
+        <view class="slider-paly">
+          <view style="flex: 1; padding-top: 20rpx">
+            <slider activeColor="#3385FF" :max="audioTime" :value="curTime" @changing="handleAudioSliderChangeing($event)" block-size="16" class="slider" />
+            <view class="card-time">
+              <text class="time">{{ curTime | formatVoiceTime }}</text>
+              <text class="time">{{ audioTime | formatVoiceTime }}</text>
+            </view>
+          </view>
+          <view class="is-paly-card">
+            <image
+              @click.stop="handleChangePlayStatus"
+              :src="play ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'"
+            ></image>
+          </view>
+        </view>
+        <view class="fast-reverse">
+          <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+          <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+            <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+              {{ item.name }}
+            </view>
+          </block>
+          <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import { activity } from "@/config/api";
+export default {
+  name: "",
+  filters: {
+    formatVoiceTime(e) {
+      let m = parseInt(e / 60);
+      let s = parseInt(e % 60);
+      return `${m > 9 ? m : "0" + m}:${s > 9 ? s : "0" + s}`;
+    },
+  },
+  components: {},
+  props: {
+    showAudioPop: {
+      type: Boolean,
+      default: false,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      curTime: 0,
+      audioTime: 0, //当前音频总时长
+      title: "", //当前音频标题
+      activityTitle: "", //当前活动标题
+      play: false,
+      isEnded: false,
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
+    };
+  },
+  computed: {
+    //重新
+    audioInit() {
+      return {
+        activityId: this.$store.state.audioBg.activityId,
+        reportId: this.$store.state.audioBg.reportId,
+      };
+    },
+    // 几倍的播放速度
+    isTimes() {
+      return this.$store.state.audioBg.multiple;
+    },
+  },
+  watch: {
+    audioInit: {
+      handler(nval) {
+        this.init();
+      },
+      immediate: true,
+    },
+  },
+
+  created() {},
+  mounted() {},
+  methods: {
+    //点击隐藏事件
+    isShowMaskHandler() {
+      this.$emit("update:showAudioPop", false);
+    },
+    //数据初次加载
+    init() {
+      const curAudio = this.$store.state.audioBg.list;
+      if (this.globalBgAudioManager.src != curAudio.Url && curAudio.Url) {
+        this.$store.commit("audioBg/setMultiple", 1);
+        this.$store.commit("audioBg/updateAudioTime", 0);
+        this.globalBgAudioManager.src = curAudio.Url;
+        this.globalBgAudioManager.title = curAudio.Name;
+        this.globalBgAudioManager.startTime = 0;
+        this.globalBgAudioManager.playbackRate = this.isTimes;
+        this.curTime = 0;
+      } else {
+        this.curTime = parseInt(this.globalBgAudioManager.currentTime);
+      }
+      this.audioTime = curAudio.PlaySeconds;
+      this.title = curAudio.Name;
+      this.activityTitle = this.$store.state.audioBg.activityTitle;
+      this.play = !this.globalBgAudioManager.paused;
+      this.listenAudio();
+    },
+    //音频播放事件
+    listenAudio() {
+      this.globalBgAudioManager.onPlay(async () => {
+        console.log("音频播放");
+        this.play = true;
+        this.$store.commit("audioBg/updateAudioPause", false);
+        if (this.$store.state.audioBg.activityId) {
+          activity.backAudioPlay({ ActivityId: this.$store.state.audioBg.activityId });
+        }
+      });
+
+      this.globalBgAudioManager.onPause(() => {
+        console.log("音频暂停");
+        this.play = false;
+        this.$store.commit("audioBg/updateAudioPause", true);
+      });
+
+      this.globalBgAudioManager.onStop(() => {
+        console.log("音频停止");
+        this.$emit("update:showAudioPop", false);
+        uni.getSystemInfo({
+          success: (res) => {
+            if (res.osName == "ios") {
+              this.play = false;
+              this.$store.commit("audioBg/removeAudio");
+            } else {
+              this.play = false;
+              this.$store.commit("audioBg/updateAudioPause", true);
+            }
+          },
+        });
+      });
+
+      this.globalBgAudioManager.onEnded(() => {
+        console.log("音频onEnded");
+        this.$emit("update:showAudioPop", false);
+        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/parseIntAudio", false);
+      });
+
+      this.globalBgAudioManager.onError((e) => {
+        console.log("音频onError", e);
+        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/setMultiple", 1);
+        uni.showToast({
+          title: "音频播放错误",
+          icon: "none",
+        });
+      });
+
+      //音频的播放时间更新
+      this.globalBgAudioManager.onTimeUpdate(() => {
+        if (this.globalBgAudioManager.src && parseInt(this.globalBgAudioManager.currentTime) !== 0) {
+          this.curTime = parseInt(this.globalBgAudioManager.currentTime);
+          this.$store.commit("audioBg/updateAudioTime", this.curTime);
+        }
+      });
+    },
+    //拖动进度条
+    handleAudioSliderChangeing(e) {
+      this.curTime = e.detail.value;
+      this.globalBgAudioManager.seek(this.curTime);
+    },
+    //音频点击暂停播放
+    handleChangePlayStatus() {
+      if (!this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.pause();
+      } else {
+        this.globalBgAudioManager.play();
+      }
+    },
+    //倍速播放
+    isTimesHandler(i) {
+      console.log(this.curTime);
+      let index = i == 3 ? 0 : i + 1;
+      this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+      this.globalBgAudioManager.playbackRate = this.isTimes;
+      this.globalBgAudioManager.startTime = this.curTime;
+      if (this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.play();
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.audioTime ? this.audioTime - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.global-audio-box {
+  display: flex;
+  height: 100%;
+  position: fixed;
+  width: 100%;
+  top: 0;
+  left: 0;
+  z-index: 11;
+  .bg-overlay {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    top: 0;
+    left: 0;
+    background-color: rgba(0, 0, 0, 0.7);
+  }
+  .activity-title {
+    position: relative;
+    width: 100%;
+    font-size: 30rpx;
+    font-weight: 500;
+    margin-bottom: 35rpx;
+    padding-right: 30rpx;
+    .icon-cross {
+      position: absolute;
+      right: 0;
+      top: 50%;
+      transform: translateY(-50%);
+      padding: 10rpx;
+    }
+  }
+  .audio-box {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    padding: 30rpx;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    width: 100%;
+    background: #ffffff;
+    box-sizing: border-box;
+    border-radius: 30rpx 30rpx 0 0;
+  }
+  .audio-card {
+    width: 100%;
+    height: 282rpx;
+    background: #f9f9f9;
+    border-radius: 16rpx;
+    margin: 0 auto;
+    padding: 30rpx;
+    .slider {
+      width: 100%;
+      margin: 0;
+    }
+    .slider-paly {
+      display: flex;
+      height: 80rpx;
+      align-items: center;
+    }
+    .card-title {
+      color: #3385ff;
+      font-size: 28rpx;
+      padding: 0 40rpx;
+      text-align: center;
+      margin-bottom: 35rpx;
+    }
+    .card-time {
+      display: flex;
+      justify-content: space-between;
+      color: #999999;
+      font-size: 20rpx;
+    }
+    .is-paly-card {
+      width: 70rpx;
+      height: 70rpx;
+      flex-shrink: 0;
+      margin-left: 30rpx;
+      image {
+        width: 70rpx;
+        height: 70rpx;
+      }
+    }
+    .fast-reverse {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-top: 30rpx;
+      .speed-button {
+        width: 96rpx;
+        height: 47rpx;
+        background: #eaeaea;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 47rpx;
+        margin: 0 70rpx;
+      }
+      .speed-img {
+        width: 50rpx;
+        height: 50rpx;
+      }
+    }
+  }
+}
+</style>

+ 150 - 47
components/audioModule/index.vue

@@ -2,7 +2,7 @@
   <view class="container global-audio-box" v-if="showAudioPop">
     <view class="bg-overlay" @click="isShowMaskHandler"></view>
     <view class="audio-box">
-      <view class="activity-title text_oneLine">
+      <view class="activity-title">
         {{ activityTitle }}
         <view class="icon-cross" @click.stop="isShowMaskHandler">
           <van-icon name="cross" font-size="32" />
@@ -12,17 +12,38 @@
         <view class="card-title text_oneLine">
           {{ title }}
         </view>
-        <slider activeColor="#3385FF" :max="audioTime" :value="curTime" @change="handleAudioSliderChange($event)" block-size="16" class="slider" />
-        <view class="card-time">
-          <text class="time">{{ curTime | formatVoiceTime }}</text>
-          <text class="time">{{ audioTime | formatVoiceTime }}</text>
+        <view class="slider-paly">
+          <view style="flex: 1; padding-top: 20rpx">
+            <slider
+              activeColor="#3385FF"
+              :max="audioTime"
+              :value="curTime"
+              @touchstart="touchstartHandler"
+              @change="handleAudioSliderChange($event)"
+              @changing="handleAudioSliderChangeing($event)"
+              block-size="16"
+              class="slider"
+            />
+            <view class="card-time">
+              <text class="time">{{ curTime | formatVoiceTime }}</text>
+              <text class="time">{{ audioTime | formatVoiceTime }}</text>
+            </view>
+          </view>
+          <view class="is-paly-card">
+            <image
+              @click.stop="handleChangePlayStatus"
+              :src="play ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'"
+            ></image>
+          </view>
         </view>
-        <view class="is-paly-card">
-          <image
-            @click.stop="handleChangePlayStatus"
-            class=""
-            :src="play ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/suspend_icon.png' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/play_icon.png'"
-          ></image>
+        <view class="fast-reverse">
+          <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+          <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+            <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+              {{ item.name }}
+            </view>
+          </block>
+          <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
         </view>
       </view>
     </view>
@@ -55,16 +76,34 @@ export default {
       title: "", //当前音频标题
       activityTitle: "", //当前活动标题
       play: false,
-      isEnded: false,
+      isosName: "",
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
     };
   },
   computed: {
+    //重新
     audioInit() {
       return {
         activityId: this.$store.state.audioBg.activityId,
         reportId: this.$store.state.audioBg.reportId,
       };
     },
+    // 几倍的播放速度
+    isTimes() {
+      return this.$store.state.audioBg.multiple;
+    },
+    //进度条是否在滑动
+    isSlide() {
+      return this.$store.state.audioBg.isDragSlide;
+    },
+    isEnded() {
+      return this.$store.state.audioBg.isAudioEnded;
+    },
   },
   watch: {
     audioInit: {
@@ -77,7 +116,11 @@ export default {
 
   created() {},
   mounted() {
-    this.init();
+    uni.getSystemInfo({
+      success: (res) => {
+        this.isosName = res.osName;
+      },
+    });
   },
   methods: {
     //点击隐藏事件
@@ -87,81 +130,118 @@ export default {
     //数据初次加载
     init() {
       const curAudio = this.$store.state.audioBg.list;
-      if (this.globalBgAudioManager.src != curAudio.Url) {
+      if ((this.globalBgAudioManager.src != curAudio.Url && curAudio.Url) || (this.isEnded && this.isosName !== "ios" && curAudio.Url)) {
+        this.$store.commit("audioBg/setAudioEnd", false);
+        this.globalBgAudioManager.playbackRate = 1;
+        this.$store.commit("audioBg/setMultiple", 1);
+        this.$store.commit("audioBg/updateAudioTime", 0);
         this.globalBgAudioManager.src = curAudio.Url;
         this.globalBgAudioManager.title = curAudio.Name;
+        this.globalBgAudioManager.startTime = 0;
+        this.curTime = 0;
+      } else {
+        this.curTime = parseInt(this.globalBgAudioManager.currentTime);
       }
       this.audioTime = curAudio.PlaySeconds;
       this.title = curAudio.Name;
       this.activityTitle = this.$store.state.audioBg.activityTitle;
-      this.curTime = parseInt(this.globalBgAudioManager.currentTime);
       this.play = !this.globalBgAudioManager.paused;
       this.listenAudio();
     },
     //音频播放事件
     listenAudio() {
       this.globalBgAudioManager.onPlay(async () => {
+        console.log("音频播放");
         this.play = true;
         this.$store.commit("audioBg/updateAudioPause", false);
         if (this.$store.state.audioBg.activityId) {
           activity.backAudioPlay({ ActivityId: this.$store.state.audioBg.activityId });
         }
       });
+
       this.globalBgAudioManager.onPause(() => {
         console.log("音频暂停");
         this.play = false;
         this.$store.commit("audioBg/updateAudioPause", true);
       });
+
       this.globalBgAudioManager.onStop(() => {
         console.log("音频停止");
-        uni.getSystemInfo({
-          success: (res) => {
-            if (res.osName == "ios") {
-              console.log("ios");
-              this.$store.commit("audioBg/removeAudio");
-            } else {
-              this.play = false;
-              this.$store.commit("audioBg/updateAudioPause", true);
-            }
-          },
-        });
+        this.$emit("update:showAudioPop", false);
+        if (this.isosName == "ios") {
+          this.play = false;
+          this.$store.commit("audioBg/removeAudio");
+        } else {
+          this.play = false;
+          this.$store.commit("audioBg/updateAudioPause", true);
+        }
       });
+
       this.globalBgAudioManager.onEnded(() => {
         console.log("音频onEnded");
-        this.play = false;
-        this.$store.commit("audioBg/updateAudioPause", true);
+        this.$emit("update:showAudioPop", false);
+        this.$store.commit("audioBg/setAudioEnd", true);
+        this.$store.commit("audioBg/parseIntAudio", false);
+        this.$store.commit("audioBg/removeAudio");
       });
+
       this.globalBgAudioManager.onError((e) => {
         console.log("音频onError", e);
         this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/setMultiple", 1);
         uni.showToast({
           title: "音频播放错误",
           icon: "none",
         });
       });
+
       //音频的播放时间更新
       this.globalBgAudioManager.onTimeUpdate(() => {
-        this.curTime = parseInt(this.globalBgAudioManager.currentTime);
-        this.$store.commit("audioBg/updateAudioTime", this.curTime);
+        if (this.globalBgAudioManager.src && parseInt(this.globalBgAudioManager.currentTime) !== 0 && !this.isSlide) {
+          this.curTime = parseInt(this.globalBgAudioManager.currentTime);
+          this.$store.commit("audioBg/updateAudioTime", this.curTime);
+        }
       });
     },
     //拖动进度条
+    handleAudioSliderChangeing(e) {
+      this.curTime = e.detail.value;
+    },
+    //拖动进度条
     handleAudioSliderChange(e) {
       const value = e.detail.value;
       this.globalBgAudioManager.seek(value);
+      setTimeout(() => {
+        this.$store.commit("audioBg/setSlide", false);
+      }, 300);
     },
     //音频点击暂停播放
     handleChangePlayStatus() {
-      if (this.globalBgAudioManager.src) {
-        if (!this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.pause();
-        } else {
-          this.globalBgAudioManager.play();
-        }
+      if (!this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.pause();
       } else {
-        this.init();
+        this.globalBgAudioManager.play();
       }
     },
+    //倍速播放
+    isTimesHandler(i) {
+      let index = i == 3 ? 0 : i + 1;
+      this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+      this.globalBgAudioManager.playbackRate = this.isTimes;
+      this.globalBgAudioManager.startTime = this.curTime;
+      if (this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.play();
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.audioTime ? this.audioTime - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
+    },
+    touchstartHandler() {
+      this.$store.commit("audioBg/setSlide", true);
+    },
   },
 };
 </script>
@@ -188,7 +268,6 @@ export default {
     font-size: 30rpx;
     font-weight: 500;
     margin-bottom: 35rpx;
-    text-align: center;
     padding-right: 30rpx;
     .icon-cross {
       position: absolute;
@@ -202,19 +281,18 @@ export default {
     position: absolute;
     bottom: 0;
     left: 0;
+    padding: 30rpx;
     padding-bottom: constant(safe-area-inset-bottom);
     padding-bottom: env(safe-area-inset-bottom);
     width: 100%;
-    height: 460rpx;
     background: #ffffff;
-    padding: 30rpx;
     box-sizing: border-box;
     border-radius: 30rpx 30rpx 0 0;
   }
   .audio-card {
     width: 100%;
     height: 282rpx;
-    background: #f5f9ff;
+    background: #f9f9f9;
     border-radius: 16rpx;
     margin: 0 auto;
     padding: 30rpx;
@@ -222,10 +300,15 @@ export default {
       width: 100%;
       margin: 0;
     }
+    .slider-paly {
+      display: flex;
+      height: 80rpx;
+      align-items: center;
+    }
     .card-title {
       color: #3385ff;
       font-size: 28rpx;
-      padding: 0 66rpx;
+      padding: 0 40rpx;
       text-align: center;
       margin-bottom: 35rpx;
     }
@@ -236,12 +319,32 @@ export default {
       font-size: 20rpx;
     }
     .is-paly-card {
-      width: 100%;
-      text-align: center;
+      width: 70rpx;
+      height: 70rpx;
+      flex-shrink: 0;
+      margin-left: 30rpx;
       image {
-        margin-top: 5rpx;
-        width: 100rpx;
-        height: 100rpx;
+        width: 70rpx;
+        height: 70rpx;
+      }
+    }
+    .fast-reverse {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-top: 30rpx;
+      .speed-button {
+        width: 96rpx;
+        height: 47rpx;
+        background: #eaeaea;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 47rpx;
+        margin: 0 70rpx;
+      }
+      .speed-img {
+        width: 50rpx;
+        height: 50rpx;
       }
     }
   }

+ 421 - 0
components/audioModule/slider.vue

@@ -0,0 +1,421 @@
+<template>
+  <view class="container global-audio-box" v-if="showAudioPop">
+    <view class="bg-overlay" @click="isShowMaskHandler"></view>
+    <view class="audio-box">
+      <view class="activity-title">
+        {{ activityTitle }}
+        <view class="icon-cross" @click.stop="isShowMaskHandler">
+          <van-icon name="cross" font-size="32" />
+        </view>
+      </view>
+      <view class="audio-card">
+        <view class="card-title text_oneLine">
+          {{ title }}
+        </view>
+        <view class="slider-paly">
+          <view style="flex: 1; padding-top: 20rpx">
+            <view>
+              <movable-area class="slider" id="movable-area">
+                <movable-view
+                  class="time-button"
+                  animation="false"
+                  @change="handleSlideChange"
+                  @touchend="onTouchEnd"
+                  @htouchmove="onHtouchmove"
+                  direction="horizontal"
+                  id="movable-view"
+                  :x="movableViewX"
+                >
+                </movable-view>
+                <progress activeColor="#666" backgroundColor="#999" borderRadius="2" class="progress" :percent="progress" strokeWidth="2"></progress>
+              </movable-area>
+            </view>
+            <view class="card-time">
+              <text class="time">{{ curTime | formatVoiceTime }}</text>
+              <text class="time">{{ audioTime | formatVoiceTime }}</text>
+            </view>
+          </view>
+          <view class="is-paly-card">
+            <image
+              @click.stop="handleChangePlayStatus"
+              :src="play ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif' : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'"
+            ></image>
+          </view>
+        </view>
+        <view class="fast-reverse">
+          <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+          <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+            <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+              {{ item.name }}
+            </view>
+          </block>
+          <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import { activity } from "@/config/api";
+export default {
+  name: "",
+  filters: {
+    formatVoiceTime(e) {
+      let m = parseInt(e / 60);
+      let s = parseInt(e % 60);
+      return `${m > 9 ? m : "0" + m}:${s > 9 ? s : "0" + s}`;
+    },
+  },
+  components: {},
+  props: {
+    showAudioPop: {
+      type: Boolean,
+      default: false,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      movableViewX: 0,
+      currentTime: 0,
+      progress: 0,
+      moveAreaW: 0,
+      moveboxW: 0,
+      curTime: 0,
+      audioTime: 0, //当前音频总时长
+      title: "", //当前音频标题
+      activityTitle: "", //当前活动标题
+      play: false,
+      isEnded: false,
+      isMoving: false,
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
+    };
+  },
+  computed: {
+    //重新
+    audioInit() {
+      return {
+        activityId: this.$store.state.audioBg.activityId,
+        reportId: this.$store.state.audioBg.reportId,
+      };
+    },
+    // 几倍的播放速度
+    isTimes() {
+      return this.$store.state.audioBg.multiple;
+    },
+  },
+  watch: {
+    audioInit: {
+      handler(nval) {
+        this.init();
+        const query = uni.createSelectorQuery().in(this);
+        query
+          .select("#movable-area")
+          .boundingClientRect((data) => {
+            this.moveAreaW = data && data.width;
+          })
+          .exec();
+        query
+          .select("#movable-view")
+          .boundingClientRect((data) => {
+            this.moveboxW = data && data.width;
+          })
+          .exec();
+      },
+      immediate: true,
+    },
+  },
+
+  created() {},
+  mounted() {
+    console.log(123);
+  },
+  methods: {
+    handleSlideChange(e) {
+      console.log(e);
+      this.movableViewX = e.detail.x;
+      this.progress = Math.round((this.movableViewX / (this.moveAreaW - this.moveboxW)) * 100);
+      if (this.isMoving) {
+        this.curTime = Math.round(this.globalBgAudioManager.duration * (this.progress / 100));
+      }
+    },
+    // 用户拖动进度条结束时,重新给背景音乐的各项赋值
+    onTouchEnd() {
+      const isTime = parseInt(this.globalBgAudioManager.duration * (this.progress / 100));
+      this.globalBgAudioManager.seek(isTime);
+      setTimeout(() => {
+        this.isMoving = false;
+      }, 0);
+    },
+    onHtouchmove() {
+      this.isMoving = true;
+    },
+    //点击隐藏事件
+    isShowMaskHandler() {
+      this.$emit("update:showAudioPop", false);
+    },
+    //数据初次加载
+    init() {
+      const curAudio = this.$store.state.audioBg.list;
+      if (this.globalBgAudioManager.src != curAudio.Url && curAudio.Url) {
+        this.$store.commit("audioBg/setMultiple", 1);
+        this.$store.commit("audioBg/updateAudioTime", 0);
+        this.globalBgAudioManager.src = curAudio.Url;
+        this.globalBgAudioManager.title = curAudio.Name;
+        this.globalBgAudioManager.startTime = 0;
+        this.globalBgAudioManager.playbackRate = this.isTimes;
+        this.curTime = 0;
+        this.progress = 0;
+        this.movableViewX = 0;
+        console.log(this.movableViewX, " this.movableViewX = 0;");
+      } else {
+        this.curTime = parseInt(this.globalBgAudioManager.currentTime);
+      }
+      console.log(this.movableViewX, " this.movableViewX = 0;");
+      this.audioTime = curAudio.PlaySeconds;
+      this.title = curAudio.Name;
+      this.activityTitle = this.$store.state.audioBg.activityTitle;
+      this.play = !this.globalBgAudioManager.paused;
+      this.listenAudio();
+    },
+    //音频播放事件
+    listenAudio() {
+      this.globalBgAudioManager.onPlay(async () => {
+        console.log("音频播放");
+        this.play = true;
+        this.$store.commit("audioBg/updateAudioPause", false);
+        if (this.$store.state.audioBg.activityId) {
+          activity.backAudioPlay({ ActivityId: this.$store.state.audioBg.activityId });
+        }
+      });
+
+      this.globalBgAudioManager.onPause(() => {
+        console.log("音频暂停");
+        this.play = false;
+        this.$store.commit("audioBg/updateAudioPause", true);
+      });
+
+      this.globalBgAudioManager.onStop(() => {
+        console.log("音频停止");
+        this.$emit("update:showAudioPop", false);
+        uni.getSystemInfo({
+          success: (res) => {
+            if (res.osName == "ios") {
+              this.play = false;
+              this.$store.commit("audioBg/removeAudio");
+            } else {
+              this.play = false;
+              this.$store.commit("audioBg/updateAudioPause", true);
+            }
+          },
+        });
+      });
+
+      this.globalBgAudioManager.onEnded(() => {
+        console.log("音频onEnded");
+        this.$emit("update:showAudioPop", false);
+        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/parseIntAudio", false);
+      });
+
+      this.globalBgAudioManager.onError((e) => {
+        console.log("音频onError", e);
+        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/setMultiple", 1);
+        uni.showToast({
+          title: "音频播放错误",
+          icon: "none",
+        });
+      });
+
+      //音频的播放时间更新
+      this.globalBgAudioManager.onTimeUpdate(() => {
+        if (!this.isMoving) {
+          if (this.globalBgAudioManager.src && parseInt(this.globalBgAudioManager.currentTime) !== 0) {
+            this.movableViewX = Math.round(((this.moveAreaW - this.moveboxW) * parseInt(this.globalBgAudioManager.currentTime)) / this.globalBgAudioManager.duration);
+            this.progress = Math.round((100 * parseInt(this.globalBgAudioManager.currentTime)) / this.globalBgAudioManager.duration);
+            this.curTime = parseInt(this.globalBgAudioManager.currentTime);
+            this.$store.commit("audioBg/updateAudioTime", this.curTime);
+          }
+        }
+      });
+    },
+    //拖动进度条
+    // handleAudioSliderChangeing(e) {
+    //   this.curTime = e.detail.value;
+    //   this.globalBgAudioManager.seek(this.curTime);
+    // },
+    //音频点击暂停播放
+    handleChangePlayStatus() {
+      if (!this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.pause();
+      } else {
+        this.globalBgAudioManager.play();
+      }
+    },
+    //倍速播放
+    isTimesHandler(i) {
+      console.log(this.curTime);
+      let index = i == 3 ? 0 : i + 1;
+      this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+      this.globalBgAudioManager.playbackRate = this.isTimes;
+      this.globalBgAudioManager.startTime = this.curTime;
+      if (this.globalBgAudioManager.paused) {
+        this.globalBgAudioManager.play();
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.audioTime ? this.audioTime - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
+    },
+  },
+};
+</script>
+<style>
+.slider {
+  height: 40rpx;
+  margin: 0 32rpx;
+  position: relative;
+  width: 528rpx;
+}
+
+.slider .time-button {
+  background: #333;
+  border-radius: 30rpx;
+  color: #fff;
+  height: 30rpx;
+  text-align: center;
+  width: 30rpx;
+  z-index: 1;
+}
+
+.slider .progress {
+  height: 4rpx;
+  left: 0;
+  position: absolute;
+  top: 18rpx;
+  width: 528rpx;
+}
+
+.play-button {
+  -webkit-box-pack: center;
+  -webkit-box-align: center;
+  align-items: center;
+  display: flex;
+  justify-content: center;
+  margin-top: 52rpx;
+}
+</style>
+<style scoped lang="scss">
+.global-audio-box {
+  display: flex;
+  height: 100%;
+  position: fixed;
+  width: 100%;
+  top: 0;
+  left: 0;
+  z-index: 11;
+  .bg-overlay {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    top: 0;
+    left: 0;
+    background-color: rgba(0, 0, 0, 0.7);
+  }
+  .activity-title {
+    position: relative;
+    width: 100%;
+    font-size: 30rpx;
+    font-weight: 500;
+    margin-bottom: 35rpx;
+    padding-right: 30rpx;
+    .icon-cross {
+      position: absolute;
+      right: 0;
+      top: 50%;
+      transform: translateY(-50%);
+      padding: 10rpx;
+    }
+  }
+  .audio-box {
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    padding: 30rpx;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    width: 100%;
+    background: #ffffff;
+    box-sizing: border-box;
+    border-radius: 30rpx 30rpx 0 0;
+  }
+  .audio-card {
+    width: 100%;
+    height: 282rpx;
+    background: #f9f9f9;
+    border-radius: 16rpx;
+    margin: 0 auto;
+    padding: 30rpx;
+    .slider {
+      width: 100%;
+      margin: 0;
+    }
+    .slider-paly {
+      display: flex;
+      height: 80rpx;
+      align-items: center;
+    }
+    .card-title {
+      color: #3385ff;
+      font-size: 28rpx;
+      padding: 0 40rpx;
+      text-align: center;
+      margin-bottom: 35rpx;
+    }
+    .card-time {
+      display: flex;
+      justify-content: space-between;
+      color: #999999;
+      font-size: 20rpx;
+    }
+    .is-paly-card {
+      width: 70rpx;
+      height: 70rpx;
+      flex-shrink: 0;
+      margin-left: 30rpx;
+      image {
+        width: 70rpx;
+        height: 70rpx;
+      }
+    }
+    .fast-reverse {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-top: 30rpx;
+      .speed-button {
+        width: 96rpx;
+        height: 47rpx;
+        background: #eaeaea;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 47rpx;
+        margin: 0 70rpx;
+      }
+      .speed-img {
+        width: 50rpx;
+        height: 50rpx;
+      }
+    }
+  }
+}
+</style>

+ 1 - 1
config/api.js

@@ -361,7 +361,7 @@ export const activity = {
   },
   //背景音频开始播放
   backAudioPlay: (params) => {
-    return postHttp("/activity/voiceHistory/add", params);
+    return postHttp("/activity/voiceHistory/add", params,0);
   },
 };
 export const Research = {

+ 0 - 4
config/util.js

@@ -88,7 +88,6 @@ export const modal = (title='',content,callback = function() {}) => {
 	        if (res.confirm) {
 	            callback()
 	        } else if (res.cancel) {
-	            // console.log('用户点击取消');
 	        }
 	    }
 	});
@@ -105,7 +104,6 @@ export const modalShow = (title='',content,confirm,callback = function() {}) =>
 	        if (res.confirm) {
 	            callback()
 	        } else if (res.cancel) {
-	            // console.log('用户点击取消');
 	        }
 	    }
 	});
@@ -207,7 +205,6 @@ export const upload = ({
          sourceType: ['album', 'camera'],//图片来源
          success: function (res) {
             const tempFilePaths = res.tempFilePaths;//相当于src路径
-            //console.log(tempFilePaths);
             uni.showToast({
                title: '正在上传...',
                icon: 'loading',
@@ -256,7 +253,6 @@ export const upload = ({
          sourceType: ['album', 'camera'],
          success: function (res) {
             const tempFilePaths = res.tempFilePaths;
-				console.log(tempFilePaths)
             let uploadImgCount = 0;
             uni.showToast({
                title: '正在上传...',

+ 0 - 1
pageMy/applyTrial/applyTrial.vue

@@ -70,7 +70,6 @@ export default {
     /* 上传图片 */
     ChooseFile() {
       this.$util.upload.Single(uploadurl, (res) => {
-        //console.log(res)
         let data = JSON.parse(res.data);
         if (data.Ret === 200) {
           this.fileList = data.Data.ResourceUrl.split();

+ 0 - 2
pageMy/authGuide/authGuide.vue

@@ -87,7 +87,6 @@ export default {
     },
     //微信授权登录
     getUserInfo(e) {
-      console.log(e);
       if (e.detail.userInfo) {
         let userInfo = e.detail.userInfo;
         this.sendData(e.detail);
@@ -109,7 +108,6 @@ export default {
           },
         });
       }).catch((e) => {
-        // console.log(e)
       });
     },
   },

+ 0 - 1
pageMy/chartPage/chartPage.vue

@@ -47,7 +47,6 @@ export default {
         this.chartData = res.Data;
         this.isCollection = res.Data.IsCollection;
         this.httpUrl = encodeURIComponent(res.Data.HttpUrl);
-        console.log(this.httpUrl);
         uni.setNavigationBarTitle({
           title: this.chartData.Title,
         });

+ 0 - 1
pageMy/login/login.vue

@@ -89,7 +89,6 @@ export default {
     },
     /* 授权获取手机号 */
     getPhoneNumber(e) {
-      //console.log(e)
       if (e.detail.errMsg == "getPhoneNumber:ok") {
         // 点击了允许
         User.getPhoneNum({

+ 55 - 10
pageMy/mySchedulepage/mySchedulepage.vue

@@ -50,6 +50,7 @@
                     <text @click="askingGo(item)">帮我带问</text>
                   </view>
                   <text v-if="item.IsShowOutboundCall && item.ActivityTypeId != 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
+                  <text v-if="item.IsShowDetails" @click="goDetail(item)" class="button">查看详情</text>
                   <block v-if="item.IsShowSignup">
                     <block v-if="item.IsCClassMeeting">
                       <text class="button" @click="signupIsAddOfCancel(item, 3, 'CClass')">{{ item.IsSignup == 1 ? "取消报名" : "我要报名" }}</text>
@@ -102,7 +103,9 @@
       :mailboxBinding="mailboxBinding"
     />
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
-    <audioModule :showAudioPop.sync="showAudioPop" />
+    <view v-if="showAudioBox">
+      <audioModule :showAudioPop.sync="showAudioPop" />
+    </view>
   </view>
 </template>
 
@@ -146,6 +149,9 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
+    showAudioBox() {
+      return this.$store.state.audioBg.parseIntShow;
+    },
   },
   methods: {
     //
@@ -168,18 +174,53 @@ export default {
       }
     },
     //点击了回放
-    audioPlayBack(item) {
-      // 判断是否为同一个音频
-      if (this.$store.state.audioBg.activityId == item.ActivityId) {
-        if (this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.play();
+    // audioPlayBack(item) {
+    //   // 判断是否为同一个音频
+    //   if (this.$store.state.audioBg.activityId == item.ActivityId) {
+    //     if (this.globalBgAudioManager.paused) {
+    //       this.globalBgAudioManager.play();
+    //     } else {
+    //       this.globalBgAudioManager.pause();
+    //     }
+    //   } else {
+    //     this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
+    //   }
+    //   this.showAudioPop = true;
+    // },
+    //点击了回放
+    async audioPlayBack(item) {
+      if (!item.BackAudioPlay) {
+        const res = await activity.getActivityDetail({
+          ActivityId: item.ActivityId,
+        });
+        if (res.Ret === 200) {
+          item.BackAudioPlay = res.Data;
+        }
+      }
+      this.hasPermission = item.BackAudioPlay.HasPermission;
+      this.jurisdictionList.ActivityId = item.BackAudioPlay.ActivityId;
+      if (this.hasPermission == 1) {
+        this.$store.commit("audioBg/parseIntAudio", true);
+        // 判断是否为同一个音频
+        if (this.$store.state.audioBg.activityId == item.ActivityId) {
+          if (this.globalBgAudioManager.paused) {
+            this.globalBgAudioManager.play();
+          } else {
+            this.globalBgAudioManager.pause();
+          }
         } else {
-          this.globalBgAudioManager.pause();
+          this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
         }
-      } else {
-        this.$store.commit("audioBg/addAudio", { list: item.VoiceList, activityId: item.ActivityId, activityTitle: item.ActivityName });
+        this.showAudioPop = true;
+      } else if (this.hasPermission == 2) {
+        this.jurisdictionList.SellerMobile = item.BackAudioPlay.SellerMobile;
+        this.jurisdictionList.SellerName = item.BackAudioPlay.SellerName;
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.isShowhasPermission = true;
+      } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+        this.jurisdictionList.PopupMsg = item.BackAudioPlay.PopupMsg;
+        this.applyForIsShow = true;
       }
-      this.showAudioPop = true;
     },
   },
   //load
@@ -188,6 +229,10 @@ export default {
   },
   async onShow() {
     await this.$store.dispatch("checkHandle", "noGO");
+    this.$store.commit("audioBg/parseIntAudio", true);
+  },
+  onHide() {
+    this.$store.commit("audioBg/parseIntAudio", false);
   },
   /* 触底 */
   onReachBottom: Throttle(function () {

+ 0 - 2
pageMy/reportDetail/reportDetail.vue

@@ -236,7 +236,6 @@ export default {
       // 跳转入口
       this.getDetail();
     }
-    console.log('show');
   },
   onLoad(option) {
     this.id = option.id ? option.id : "";
@@ -244,7 +243,6 @@ export default {
       this.errorDetails();
     }
     this.userIsShowAlert();
-    console.log('进来了');
   },
   /**
    * 用户点击分享

+ 0 - 1
pageMy/search/search.vue

@@ -330,7 +330,6 @@ export default {
     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>

+ 3 - 1
pages.json

@@ -347,7 +347,9 @@
       "van-icon": "/wxcomponents/vant/dist/icon/index",
       "van-radio": "/wxcomponents/vant/dist/radio/index",
       "van-radio-group": "/wxcomponents/vant/dist/radio-group/index",
-      "van-overlay": "/wxcomponents/vant/dist/overlay/index"
+      "van-overlay": "/wxcomponents/vant/dist/overlay/index",
+      "van-checkbox": "/wxcomponents/vant/dist/checkbox/index",
+      "van-checkbox-group": "/wxcomponents/vant/dist/checkbox-group/index"
     }
   },
   "tabBar": {

+ 23 - 26
pages/activity/activity.vue

@@ -45,12 +45,12 @@
       <view class="content-list">
         <view class="half">
           <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-one" :src="item.ImgUrl" lazy-load></image>
             <view class="content">
               <view class="item-img" @click="goDetails(item)"> </view>
               <view :style="{ 'background-image': 'url(' + item.ImgUrlBg + ')' }" class="activity-ui">
-                <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>
+                <view class="activity-li" :style="{ 'background-image': 'url(' + val.ImgUrlBg + ')' }" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val, item.Resource)">
+                  <image v-if="val.IsNew" class="item-image" lazy-load src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/hot_activity.png"></image>
                   <text class="text_oneLine"> {{ val.KeyWord }}</text>
                 </view>
               </view>
@@ -59,12 +59,12 @@
         </view>
         <view class="half">
           <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-one" :src="item.ImgUrl" lazy-load></image>
             <view class="content">
               <view class="item-img" @click="goDetails(item)"> </view>
               <view :style="{ 'background-image': 'url(' + item.ImgUrlBg + ')' }" class="activity-ui">
-                <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>
+                <view class="activity-li" :style="{ 'background-image': 'url(' + val.ImgUrlBg + ')' }" v-for="val in item.List" :key="val.KeyWord" @click="goDetails(val, item.Resource)">
+                  <image v-if="val.IsNew" class="item-image" lazy-load src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/hot_activity.png"></image>
                   <text class="text_oneLine"> {{ val.KeyWord }}</text>
                 </view>
               </view>
@@ -86,13 +86,11 @@
 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() {
@@ -499,30 +497,28 @@ export default {
     .activity-li {
       width: 100%;
       height: 86rpx;
+      display: flex;
+      align-items: center;
+      justify-content:center;
+      background-repeat: no-repeat;
+      background-size: 100% 100%;
+      padding: 0 20rpx;
       position: relative;
+      font-size: 26rpx;
+      color: #fff;
       .item-image {
-        width: 100%;
-        height: 100%;
-      }
-      .text_oneLine {
         position: absolute;
+        left: 0;
+        top: 50%;
+        transform: translateY(-50%);
         width: 100%;
         height: 50rpx;
-        padding: 0 30rpx;
-        text-align: center;
-        font-size: 28rpx;
-        top: 15rpx;
-        color: #fff;
+
+      }
+      .new_img {
+        width: 26rpx;
+        height: 28rpx;
       }
-      // &::before {
-      //   content: "";
-      //   width: 0;
-      //   height: 0;
-      //   border-top: 8rpx solid transparent;
-      //   border-left: 17rpx solid #fff;
-      //   border-bottom: 8rpx solid transparent;
-      //   margin-right: 10rpx;
-      // }
     }
   }
   .more {
@@ -533,6 +529,7 @@ export default {
     margin-top: 90rpx;
   }
   .activity-ui {
+    padding: 20rpx;
     background-repeat: no-repeat;
     background-size: 100% 100%;
   }

+ 4 - 4
pages/purchaser/purchaser.vue

@@ -25,7 +25,7 @@
       <view class="theme-content">
         <view class="theme-ul" v-for="item in themeNewList" :key="item.IndustrialManagementId">
           <text class="text_oneLine" @click="themeDetails(item)"> # {{ item.IndustryName }}</text>
-          <image v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/host_report.png"></image>
+          <image v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/hot_report.png"></image>
         </view>
       </view>
     </view>
@@ -80,7 +80,7 @@
                 {{ index + 1 }}
               </text>
               <text class="text_oneLine" style="display: inline"> # {{ item.IndustryName }} </text>
-              <image class="new-img" v-if="item.IsNew" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/new_icon.png"></image>
+              <image class="new-img" v-if="item.IsNew" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_report.png"></image>
             </view>
             <text :class="item.IsFollw ? 'cancel-attention' : 'attention'" @click="isAttention(item, '主题')">{{ item.IsFollw ? "取消关注" : "+ 关注" }}</text>
           </view>
@@ -561,8 +561,8 @@ export default {
         padding-right: 20rpx;
       }
       .new-img {
-        width: 26rpx;
-        height: 28rpx;
+        width: 60rpx;
+        height: 30rpx;
         margin-left: 15rpx;
         flex-shrink: 0;
       }

+ 25 - 4
pages/reportForm/index.scss

@@ -1,11 +1,13 @@
 .reportForm-container {
   background-color: #f6f6f6;
+
   .index-fixed {
     width: 750rpx;
     position: fixed;
     left: 0;
     top: 0;
     z-index: 999;
+
     .index-header {
       background-color: #fff;
       padding: 32rpx 34rpx 0;
@@ -36,6 +38,7 @@
         z-index: 100;
       }
     }
+
     .limit-box {
       position: absolute;
       text-align: center;
@@ -105,10 +108,12 @@
 
   .strategy {
     background-color: #fff;
+
     .row {
       height: 10rpx;
       background-color: #f7f7f7;
     }
+
     .tab-cont-two {
       position: sticky;
       top: 252rpx;
@@ -120,6 +125,7 @@
       display: flex;
       flex-wrap: wrap;
       padding: 30rpx 20rpx;
+
       .scroll-tab-item {
         position: relative;
         display: inline-block;
@@ -160,10 +166,10 @@
 
     .industry-top {
       display: flex;
-      justify-content: space-between;
       background-color: #fff;
+      justify-content: space-between;
       height: 90rpx;
-      padding: 0 30rpx;
+      padding: 0 35rpx 0 30rpx;
       color: #333333;
       font-weight: 700;
       font-size: 32rpx;
@@ -198,6 +204,16 @@
         }
       }
 
+      .checkbox-content {
+        color: #333333;
+        font-size: 28rpx;
+        font-weight: 400;
+        display: flex;
+      }
+      .checkbox-ui {
+        display: flex;
+        align-items: center;
+      }
       .menu-items-tow {
         display: flex;
         padding: 30rpx 30rpx 20rpx;
@@ -322,11 +338,16 @@
           color: #333;
           font-size: 30rpx;
           padding-left: 10rpx;
+          align-items: center;
 
           image {
             margin-left: 10rpx;
-            width: 28rpx;
-            height: 36rpx;
+            width: 60rpx;
+            height: 30rpx;
+          }
+
+          .hot-icon {
+            width: 30rpx;
           }
         }
 

+ 22 - 119
pages/reportForm/reportForm.vue

@@ -57,7 +57,7 @@
             <text v-if="item.IsRed"></text>
           </view>
           <view class="box-right">
-            <text>{{ item.UpdateTime }}更新</text>
+            <text>{{ item.UpdateTime }}</text>
             <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
           </view>
         </view>
@@ -70,26 +70,11 @@
             <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/property_ico.png" style="height: 50rpx"></image>
             <text class="text-sub">细分产业</text>
           </view>
-          <van-dropdown-menu active-color="#333333">
-            <van-dropdown-item id="menuItem" @open="isscroll" :title="overallArrangementName">
-              <view class="menu-items">
-                <view class="menu-items-box" @click="overallBtn(index, item)" v-for="(item, index) in overallArrangement" :key="item.id">
-                  <view class="items-box">
-                    <u-icon v-show="item.isShow" name="checkbox-mark" color="#2C83FF" size="24"> </u-icon>
-                  </view>
-                  <text>{{ item.name }}</text>
-                </view>
-              </view>
-              <view class="replacement-box">
-                <view class="replacement">
-                  <text @click="replacementBtn" class="replacement-box">重置</text>
-                  <text @click="replacementConfirm">确定</text>
-                </view>
-              </view>
-            </van-dropdown-item>
-          </van-dropdown-menu>
-          <view class="new-recommend">
-            <text :class="[pitchOnId == item.id ? 'items-act' : '']" v-for="(item, index) in pitchOn" :key="item.id" @click="pitchClick(item, index)">{{ item.name }}</text>
+          <view class="checkbox-content">
+            <van-checkbox-group class="checkbox-ui" :value="deepCoverFocus" @change="checkboxChange">
+              <van-checkbox style="margin-right: 30rpx" name="cover" icon-size="14" shape="square">深度覆盖</van-checkbox>
+              <van-checkbox name="focus" icon-size="14" shape="square">推荐关注</van-checkbox>
+            </van-checkbox-group>
           </view>
         </view>
         <!-- 需要循环的地方 -->
@@ -97,17 +82,18 @@
           <!-- 火锅底料这个位置 -->
           <view class="industry-content">
             <view class="industry-box-left" @click="reportFllow(item.IndustrialManagementId)">
-              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/top_ico.png" v-if="item.IsFollow"></image>
-              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/top_no_ico.png" v-else></image>
+              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/attention_act.png" v-if="item.IsFollow"></image>
+              <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/attention_icon.png" v-else></image>
             </view>
             <view class="industry-box-right" @click="goIndustryReport(item.IndustrialManagementId)">
               <view class="ndustry-box-read">
                 <text>{{ item.IndustryName }}</text>
-                <image v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/ammunition_ico.png" mode=""></image>
+                <image class="hot-icon" v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/hot_report.png" mode=""></image>
+                <image v-if="item.IsNew" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_report.png" mode=""></image>
               </view>
               <view class="ndustry-box-arrow">
                 <text v-if="item.IsRed" class="read"></text>
-                <text class="ndustry-box-text">{{ item.UpdateTime }}更新</text>
+                <text class="ndustry-box-text">{{ item.UpdateTime }}</text>
                 <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
               </view>
             </view>
@@ -176,18 +162,6 @@ export default {
         backgroundImage: "none",
       },
       tabBarsTow: [],
-      pitchOn: [
-        {
-          name: "最新",
-          id: "NewTime",
-        },
-        {
-          name: "关注度",
-          id: "Recommend",
-        },
-      ],
-      pitchOnId: "NewTime",
-      //pitchOnName: '按最近更新排序',
       isNum: 1,
       strategyIndex: "",
       strategyIndexTwo: 0,
@@ -207,20 +181,7 @@ export default {
       haveData: true,
       totalPage: "",
       matchTypeName: "",
-      overallArrangement: [
-        {
-          name: "新布局产业",
-          id: "1",
-          isShow: false,
-        },
-        {
-          name: "深度研究产业",
-          id: "2",
-          isShow: false,
-        },
-      ],
-      overallArrangementId: "",
-      overallArrangementName: "全部产业",
+      deepCoverFocus: [], //深度覆盖 //推荐关注
       isScrollShow: false,
       isGuideShow: false,
       limitIsShow: false, //限免显示隐藏
@@ -284,6 +245,7 @@ export default {
     //tabs切换事件
     toggleTab(item, index) {
       this.strategyIndex = index;
+      this.deepCoverFocus = [];
       if (this.tabAct_id !== item.ChartPermissionId) {
         this.tabAct_id = item.ChartPermissionId;
         this.$store.dispatch("statistics", {
@@ -322,17 +284,6 @@ export default {
         });
       }
     },
-    //点击产业报告的筛选条件
-    pitchClick(item) {
-      this.pitchOnName = item.name;
-      this.OrderColumn = item.id;
-      if (this.pitchOnId !== item.id) {
-        this.pitchOnId = item.id;
-      }
-      this.page_no = 1;
-      this.status = "loadmore";
-      this.getIndustryList();
-    },
     //获取报告所有品种接口
     getTradeList() {
       Reports.getTradeList({
@@ -350,8 +301,8 @@ export default {
         OrderColumn: this.OrderColumn,
         PageSize: this.pageSize,
         CurrentIndex: this.page_no,
-        IsNewLabel: this.overallArrangementId.includes(1) ? "1" : "0",
-        IsDeepLabel: this.overallArrangementId.includes(2) ? "1" : "0",
+        DeepCover: this.deepCoverFocus.includes("cover") ? 1 : 0,
+        RecommendFocus: this.deepCoverFocus.includes("focus") ? 1 : 0,
       }).then((res) => {
         // this.industryList=res.Data.List
         this.status = this.page_no < res.Data.Paging.Pages ? "loadmore" : "nomore";
@@ -432,42 +383,6 @@ export default {
     hideIsred(is) {
       this.tabBarsTow[this.strategyIndexTwo].IsRed = is;
     },
-    /* 新布局产业选项*/
-    overallBtn(index, item) {
-      this.overallArrangement.forEach((key) => {
-        if (key.id == item.id) {
-          key.isShow = !key.isShow;
-        }
-      });
-    },
-    /* 新布局产业选项确定按钮 */
-    replacementConfirm() {
-      const arr = [];
-      const arrName = [];
-      this.overallArrangement.forEach((key) => {
-        if (key.isShow) {
-          arr.push(key.id);
-          arrName.push(key.name);
-        }
-      });
-      this.overallArrangementId = arr.join(",");
-      this.overallArrangementName = arrName.join(",") || "全部产业";
-      this.page_no = 1;
-      this.status = "loadmore";
-      this.getIndustryList();
-      this.selectComponent("#menuItem").toggle();
-    },
-    /* 新布局产业选项重置按钮 */
-    replacementBtn() {
-      this.OrderColumn = "NewTime";
-      this.pitchOnId = "NewTime";
-      this.overallArrangement.forEach((key) => (key.isShow = false));
-      this.overallArrangementName = "全部产业";
-    },
-    /* 判断页面滚动 */
-    isscroll: Debounce(function () {
-      this.isScrollShow = true;
-    }),
     /* 搜索 */
     async goSearch() {
       await this.$store.dispatch("checkHandle", "/reportPages/reportSearch/reportSearch?id=报告");
@@ -475,21 +390,12 @@ export default {
     /* 初始 */
     initList() {
       if (this.tabAct_id && this.strategyIndex !== 4 && this.strategyIndex !== 5) {
-        this.OrderColumn = "NewTime";
-        this.pitchOnId = "NewTime";
-        this.overallArrangementName = "全部产业";
-        this.overallArrangementId = "";
         this.page_no = 1;
         this.refresh = true;
         this.getIndustryList();
         this.getTradeList();
-        this.overallArrangement.forEach((key) => (key.isShow = false));
       }
       this.strategyIndex == 4 ? this.getstrategyAll() : (this.tabAct_idTwo = "");
-      if (this.isScrollShow) {
-        this.selectComponent("#menuItem").toggle(false);
-        this.isScrollShow = false;
-      }
       this.isNum = 1;
     },
     /* 页面加载 */
@@ -523,6 +429,12 @@ export default {
         url: "/reportPages/hotList/hotList",
       });
     },
+    //点击了checkbox
+    checkboxChange(e) {
+      this.deepCoverFocus = e.detail;
+      this.page_no = 1;
+      this.getIndustryList();
+    },
   },
   /* 触底 */
   onReachBottom: Throttle(function () {
@@ -572,21 +484,12 @@ export default {
       fail: (err) => {},
     };
   },
-  /**
-   *监听页面滚动
-   */
-  onPageScroll() {
-    if (this.isScrollShow) {
-      this.selectComponent("#menuItem").toggle(false);
-      this.isScrollShow = false;
-    }
-  },
+
   onHide() {
     if (this.showTransition) {
       this.showTransition = false;
     }
     if (this.strategyIndex == 4 || this.strategyIndex == 5) return;
-    this.selectComponent("#menuItem").toggle(false);
   },
 };
 </script>

+ 24 - 29
reportPages/hotList/hotList.vue

@@ -7,18 +7,6 @@
           <image v-if="tabsActive == item.Source" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/border_act.png"></image>
         </view>
       </view>
-      <block v-for="item in tabList" :key="item.Source">
-        <view class="children-tabs" v-if="tabsActive == item.Source">
-          <view
-            :class="['children-item', childrenTabsActive == key.ChartPermissionId && 'children-tab-active']"
-            v-for="(key, index) in item.List"
-            :key="key.ChartPermissionId"
-            @click="childrenTabsHandel(key, index)"
-          >
-            {{ key.PermissionName }}
-          </view>
-        </view>
-      </block>
     </view>
     <view class="content">
       <view class="content-ul" v-if="hotList.length && tabsActive == 1">
@@ -28,7 +16,8 @@
               <text class="li-serial serial-number" :style="{ background: serialBackground(index) }">
                 {{ index + 1 }}
               </text>
-              <text class="text_oneLine" style="display: inline"> # {{ item.IndustryName }} </text>
+              <text class="title-text text_oneLine" style="display: inline"> # {{ item.IndustryName }} </text>
+              <view class="industry-color" :style="[classifyColor(item.PermissionName)]">{{ item.PermissionName }}</view>
               <image class="new-img" v-if="item.IsNew" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/new_icon.png"></image>
             </view>
             <text :class="item.IsFollow ? 'cancel-attention' : 'attention'" @click="isAttention(item, '主题')">{{ item.IsFollow ? "取消关注" : "+ 关注" }}</text>
@@ -54,6 +43,7 @@
           <view class="li-item li-bottom" style="color: #999999">
             <view class="li-user text_oneLine">
               {{ item.PublishDate }}
+              <view class="industry-color" :style="[classifyColor(item.PermissionName)]">{{ item.PermissionName }}</view>
             </view>
           </view>
         </view>
@@ -80,13 +70,12 @@
 
 <script>
 import { Reports } from "@/config/api.js";
-
+import { color_word_bg } from "@/utils/styleClassify";
 export default {
   data() {
     return {
       tabList: [], //tab
       tabsActive: 1,
-      childrenTabsActive: 0,
       hotList: [],
       kolList: [],
 
@@ -103,29 +92,18 @@ export default {
       if (res.Ret === 200) {
         this.tabList = res.Data.List || [];
         this.tabsActive = this.tabList.length ? this.tabList[0].Source : 1;
-        this.childrenTabsActive = this.tabList.length ? this.tabList[0].List[0].ChartPermissionId : 1;
         this.researchHotList();
       }
     },
     /* 点击一级的tabs*/
     tabsHandler(item) {
       this.tabsActive = item.Source;
-      this.childrenTabsActive = item.List[0].ChartPermissionId;
-      this.listInit();
-      this.researchHotList();
-    },
-    /* 点击二级的tabs*/
-    childrenTabsHandel(item, index) {
-      this.childrenTabsActive = item.ChartPermissionId;
       this.listInit();
       this.researchHotList();
     },
     //产业关注 阅读、报告收藏
     async researchHotList() {
-      const res =
-        this.tabsActive == 1
-          ? await Reports.getIndustryFllowList({ ChartPermissionId: this.childrenTabsActive })
-          : await Reports.getIndustryReadList({ ChartPermissionId: this.childrenTabsActive, Source: this.tabsActive });
+      const res = this.tabsActive == 1 ? await Reports.getIndustryFllowList() : await Reports.getIndustryReadList({ Source: this.tabsActive });
       if (res.Ret === 200) {
         if (this.tabsActive == 1) {
           this.hotList = res.Data.List || [];
@@ -160,7 +138,6 @@ export default {
     async isAttention(item, val) {
       const res = val === "主题" ? await Reports.reportFllow({ IndustrialManagementId: item.IndustrialManagementId }) : await Reports.reportFllowDepartment({ DepartmentId: item.DepartmentId });
       if (res.Ret === 200) {
-        console.log(item);
         item.IsFollow = !item.IsFollow;
         if (res.Data.Status == 1) {
           this.goFollowShow = true;
@@ -194,6 +171,12 @@ export default {
         url: "/pageMy/reportDetail/reportDetail?id=" + item.ArticleId,
       });
     },
+    classifyColor(item) {
+      let text_color = color_word_bg.color_word.find((key) => key.name == item).color;
+      let back_ground = color_word_bg.color_bg.find((key) => key.name == item).color;
+      let _isColor = { color: text_color, border: ` 1px solid ${text_color}`, "background-color": back_ground };
+      return _isColor;
+    },
   },
   onLoad() {
     this.getTabList();
@@ -206,7 +189,7 @@ export default {
   padding: 30rpx;
   .top-content {
     position: sticky;
-    top: 0;
+    top: -1rpx;
     left: 0;
     z-index: 99;
     background-color: #fff;
@@ -284,6 +267,8 @@ export default {
       }
       .li-user {
         margin-left: 46rpx;
+        display: flex;
+        align-items: center;
       }
       .li-title {
         display: flex;
@@ -353,5 +338,15 @@ export default {
     color: #c4c4c4;
     font-size: 20rpx;
   }
+  .industry-color {
+    font-size: 26rpx;
+    padding: 0rpx 20rpx;
+    border-radius: 4rpx;
+    margin-left: 20rpx;
+  }
+  .title-text {
+    font-size: 28rpx;
+    font-weight: 500;
+  }
 }
 </style>

+ 1 - 1
reportPages/recentPages/recentPages.vue

@@ -7,7 +7,7 @@
             {{ index + 1 }}
           </text>
           <text class="text_oneLine" style="display: inline"> # {{ item.IndustryName }} </text>
-          <image class="new-img" v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/host_report.png"></image>
+          <image class="new-img" v-if="item.IsHot" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/hot_report.png"></image>
         </view>
         <text :class="item.IsFollw ? 'cancel-attention' : 'attention'" @click="isAttention(item)">{{ item.IsFollw ? "取消关注" : "+ 关注" }}</text>
       </view>

+ 0 - 1
reportPages/reportSearch/reportSearch.vue

@@ -341,7 +341,6 @@ export default {
     },
     //去往主题详情
     themeDetails(item) {
-      console.log(item);
       if (item.Source === 1) {
         //非严选
         this.$store.dispatch("checkHandle", "/reportPages/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId);

+ 15 - 1
reportPages/reportSecretDetail/components/reportChoiceness.vue

@@ -2,6 +2,9 @@
   <view>
     <view class="container-report forbid-copy" v-if="dataListResearch.length > 0">
       <view class="content" v-for="(item, index) in dataListResearch" :key="index">
+        <view v-if="item.Type === 'YANX'" class="official-notice">
+          <image src=" https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/mfyx_icon.png"></image>
+        </view>
         <view class="content-title">
           <view></view>
           <image :src="item.IcoLink" mode=""></image>
@@ -67,7 +70,7 @@ export default {
       align-items: center;
       justify-content: center;
       margin: 30rpx 0 30rpx;
-      color: #4A4A4A;
+      color: #4a4a4a;
       image {
         width: 40rpx;
         height: 44rpx;
@@ -118,6 +121,17 @@ export default {
         padding-bottom: 30rpx;
       }
     }
+    .official-notice {
+      width: calc(100% + 68rpx);
+      margin-left: -34rpx;
+      height: 150rpx;
+      margin-top: 70rpx;
+
+      image {
+        width: 100%;
+        height: 100%;
+      }
+    }
   }
 }
 </style>

+ 186 - 64
reportPages/reportSecretDetail/reportSecretDetail.vue

@@ -13,21 +13,46 @@
           <text>注:请务必阅读</text>
           <text class="statement" @click="isShowStatement = true">免责声明 </text>
         </view>
-        <view class="content-audio">
-          <view class="audio-img">
-            <image
-              @click.stop="audioPlayBack"
-              class=""
-              :src="
-                curVoiceId === detali.ArticleId && !curAudioPaused
-                  ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/suspend_icon.png'
-                  : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/play_icon.png'
-              "
-            ></image>
+        <view class="audio-card">
+          <view class="card-title text_oneLine">
+            {{ detali.VideoName }}
           </view>
-          <view class="audio-title">
-            <text>{{ detali.VideoName }}</text>
-            <text>{{ detali.VideoPlaySeconds }}</text>
+          <view class="slider-paly">
+            <view style="flex: 1; padding-top: 20rpx">
+              <slider
+                activeColor="#3385FF"
+                :max="detali.VideoPlaySeconds"
+                :value="curTime"
+                @touchstart="touchstartHandler"
+                @change="handleAudioSliderChange($event)"
+                @changing="handleAudioSliderChangeing($event)"
+                block-size="16"
+                class="slider"
+              />
+              <view class="card-time">
+                <text class="time">{{ curTime | formatVoiceTime }}</text>
+                <text class="time">{{ detali.VideoPlaySeconds | formatVoiceTime }}</text>
+              </view>
+            </view>
+            <view class="is-paly-card">
+              <image
+                @click.stop="audioPlayBack"
+                :src="
+                  curVoiceId === detali.ArticleId && !curAudioPaused
+                    ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif'
+                    : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'
+                "
+              ></image>
+            </view>
+          </view>
+          <view class="fast-reverse">
+            <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+            <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+              <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+                {{ item.name }}
+              </view>
+            </block>
+            <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
           </view>
         </view>
         <view v-if="detali.Abstract" class="content-abstract">
@@ -76,7 +101,9 @@
       </block>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
-    <audioModule :showAudioPop="false" />
+    <view v-show="false">
+      <audioModule :showAudioPop="showAudioPop" />
+    </view>
   </view>
 </template>
 
@@ -102,8 +129,23 @@ export default {
       hasPermission: "", //权限判断
       videoUrl: "",
       isShowAlert: false,
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
+      showAudioBox: false,
+      curTime: 0,
     };
   },
+  filters: {
+    formatVoiceTime(e) {
+      let m = parseInt(e / 60);
+      let s = parseInt(e % 60);
+      return `${m > 9 ? m : "0" + m}:${s > 9 ? s : "0" + s}`;
+    },
+  },
   computed: {
     curVoiceId() {
       //当前正在播放的音频id
@@ -113,26 +155,25 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
+    //几倍的播放数度
+    isTimes() {
+      let isMultiple = this.curVoiceId === this.detali.ArticleId ? this.$store.state.audioBg.multiple : 1;
+      return isMultiple;
+    },
+    showAudioPop() {
+      return this.$store.state.audioBg.show;
+    },
   },
-  methods: {
-    //音频点击暂停播放
-    audioPlayBack() {
-      let list = { Url: this.detali.VideoUrl, Name: this.detali.Title, PlaySeconds: this.detali.VideoPlaySeconds };
-      if (this.globalBgAudioManager.src) {
-        if (this.$store.state.audioBg.reportId == this.detali.ArticleId) {
-          if (this.globalBgAudioManager.paused) {
-            this.globalBgAudioManager.play();
-          } else {
-            this.globalBgAudioManager.pause();
-          }
-        } else {
-          this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
-        }
-      } else {
-        this.$store.commit("audioBg/removeAudio");
-        this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
-      }
+  watch: {
+    "$store.state.audioBg.curTime": {
+      handler(newVal) {
+        this.curTime = this.curVoiceId === this.detali.ArticleId ? newVal : 0;
+      },
+      immediate: true,
+      deep: true,
     },
+  },
+  methods: {
     //获取数据详情
     async getDetilaiList() {
       const res =
@@ -148,6 +189,8 @@ export default {
               ArticleId: this.id,
             });
       if (res.Ret === 200) {
+        let arr = res.Data.Detail.VideoPlaySeconds.split(":");
+        res.Data.Detail.VideoPlaySeconds = arr[0] * 60 + (arr[1] - 0);
         this.detali = res.Data.Detail;
         this.hasPermission = res.Data.HasPermission;
         this.videoUrl = res.Data.Detail.VideoUrl;
@@ -192,6 +235,57 @@ export default {
         this.isShowAlert = res.Data.IsShow;
       }
     },
+    //音频点击暂停播放
+    audioPlayBack() {
+      let list = { Url: this.detali.VideoUrl, Name: this.detali.Title, PlaySeconds: this.detali.VideoPlaySeconds };
+      if (this.$store.state.audioBg.reportId == this.detali.ArticleId) {
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
+        } else {
+          this.globalBgAudioManager.pause();
+        }
+      } else {
+        this.$store.commit("audioBg/updateAudioTime", 0);
+        this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
+      }
+    },
+    //拖动进度条
+    handleAudioSliderChangeing(e) {
+      this.curTime = e.detail.value;
+    },
+    //拖动进度条
+    handleAudioSliderChange(e) {
+      const value = e.detail.value;
+      this.globalBgAudioManager.seek(value);
+      setTimeout(() => {
+        this.$store.commit("audioBg/setSlide", false);
+      }, 300);
+    },
+    touchstartHandler() {
+      this.$store.commit("audioBg/setSlide", true);
+    },
+    //倍速播放
+    isTimesHandler(i) {
+      let list = { Url: this.detali.VideoUrl, Name: this.detali.Title, PlaySeconds: this.detali.VideoPlaySeconds };
+      let index = i == 3 ? 0 : i + 1;
+      this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+      this.globalBgAudioManager.playbackRate = this.isTimes;
+      this.globalBgAudioManager.startTime = this.curTime;
+      if (this.$store.state.audioBg.reportId != this.detali.ArticleId) {
+        this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
+        this.globalBgAudioManager.play();
+      } else {
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
+        }
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.audioTime ? this.audioTime - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
+    },
   },
   components: {
     statement,
@@ -210,6 +304,13 @@ export default {
     await this.$store.dispatch("checkHandle");
     if (!this.$store.state.isAuth && !this.$store.state.isBind) this.getDetilaiList();
   },
+
+  onShow() {
+    this.showAudioBox = true;
+  },
+  onHide() {
+    this.showAudioBox = false;
+  },
   /**
    * 用户点击分享
    */
@@ -254,44 +355,65 @@ export default {
         color: #3385ff;
       }
     }
-
-    .content-audio {
-      margin: 60rpx 0;
-      width: 682rpx;
-      align-items: center;
-      background: #ffffff;
-      box-shadow: 0rpx 0rpx 12rpx rgba(33, 74, 135, 0.16);
-      opacity: 1;
+    .audio-card {
+      width: 100%;
+      height: 282rpx;
+      background: #f9f9f9;
       border-radius: 16rpx;
-      display: flex;
-      padding: 24rpx 21rpx 18rpx;
-
-      .audio-img {
-        width: 154rpx;
-        height: 154rpx;
-        margin-right: 20rpx;
-
+      margin: 30rpx auto;
+      padding: 30rpx;
+      .slider {
+        width: 100%;
+        margin: 0;
+      }
+      .slider-paly {
+        display: flex;
+        height: 80rpx;
+        align-items: center;
+        padding-left: 20rpx;
+      }
+      .card-title {
+        font-size: 28rpx;
+        padding: 0 40rpx;
+        text-align: center;
+        margin-bottom: 35rpx;
+      }
+      .card-time {
+        display: flex;
+        justify-content: space-between;
+        color: #999999;
+        font-size: 20rpx;
+      }
+      .is-paly-card {
+        width: 70rpx;
+        height: 70rpx;
+        flex-shrink: 0;
+        margin-left: 30rpx;
         image {
-          width: 154rpx;
-          height: 154rpx;
+          width: 70rpx;
+          height: 70rpx;
         }
       }
-
-      .audio-title {
-        font-size: 28rpx;
-        color: #333;
-
-        :first-child {
-          width: 450rpx;
-          overflow: hidden;
-          text-overflow: ellipsis;
-          white-space: nowrap;
-          margin-bottom: 30rpx;
-          font-size: 32rpx;
+      .fast-reverse {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-top: 30rpx;
+        .speed-button {
+          width: 96rpx;
+          height: 47rpx;
+          background: #eaeaea;
+          border-radius: 8rpx;
+          text-align: center;
+          line-height: 47rpx;
+          margin: 0 70rpx;
+        }
+        .speed-img {
+          width: 50rpx;
+          height: 50rpx;
         }
       }
     }
-
     .content-abstract {
       margin-bottom: 30rpx;
       font-size: 32rpx;

+ 192 - 27
reportPages/roadEssence/roadEssence.vue

@@ -13,21 +13,46 @@
           <text>注:请务必阅读</text>
           <text class="statement" @click="isShowStatement = true">免责声明 </text>
         </view>
-        <view class="content-audio">
-          <view class="audio-img">
-            <image
-              @click.stop="audioPlayBack"
-              class=""
-              :src="
-                curVoiceId === detali.ArticleId && !curAudioPaused
-                  ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/suspend_icon.png'
-                  : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/play_icon.png'
-              "
-            ></image>
+        <view class="audio-card">
+          <view class="card-title text_oneLine">
+            {{ detali.VideoName }}
           </view>
-          <view class="audio-title">
-            <text>{{ detali.VideoName }}</text>
-            <text>{{ detali.VideoPlaySeconds }}</text>
+          <view class="slider-paly">
+            <view style="flex: 1; padding-top: 20rpx">
+              <slider
+                activeColor="#3385FF"
+                :max="detali.VideoPlaySeconds"
+                :value="curTime"
+                @touchstart="touchstartHandler"
+                @change="handleAudioSliderChange($event)"
+                @changing="handleAudioSliderChangeing($event)"
+                block-size="16"
+                class="slider"
+              />
+              <view class="card-time">
+                <text class="time">{{ curTime | formatVoiceTime }}</text>
+                <text class="time">{{ detali.VideoPlaySeconds | formatVoiceTime }}</text>
+              </view>
+            </view>
+            <view class="is-paly-card">
+              <image
+                @click.stop="audioPlayBack"
+                :src="
+                  curVoiceId === detali.ArticleId && !curAudioPaused
+                    ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon.gif'
+                    : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/pause_icon.png'
+                "
+              ></image>
+            </view>
+          </view>
+          <view class="fast-reverse">
+            <image @click="speedReverseHandler('reverse')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/fastReverse_icon.png"></image>
+            <block v-for="(item, index) in timesTheSpeed" :key="item.value">
+              <view class="speed-button" v-if="isTimes == item.value" @click="isTimesHandler(index)">
+                {{ item.name }}
+              </view>
+            </block>
+            <image @click="speedReverseHandler('speed')" class="speed-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/speed_icon.png"></image>
           </view>
         </view>
         <view class="content-abstract">
@@ -60,7 +85,9 @@
       </block>
     </view>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
-    <audioModule :showAudioPop="false" />
+    <view v-show="false">
+      <audioModule :showAudioPop="showAudioPop" />
+    </view>
   </view>
 </template>
 
@@ -81,6 +108,14 @@ export default {
       haveAuth: "", //权限判断
       videoUrl: "",
       isShowAlert: false,
+      timesTheSpeed: [
+        { name: "倍速", value: 1 },
+        { name: "1.25倍", value: 1.25 },
+        { name: "1.5倍", value: 1.5 },
+        { name: "2倍", value: 2 },
+      ],
+      showAudioBox: false,
+      curTime: 0,
     };
   },
   computed: {
@@ -92,6 +127,30 @@ export default {
       //当前音频是否暂停状态
       return this.$store.state.audioBg.paused;
     },
+    //几倍的播放数度
+    isTimes() {
+      let isMultiple = this.curVoiceId === this.detali.ArticleId ? this.$store.state.audioBg.multiple : 1;
+      return isMultiple;
+    },
+    showAudioPop() {
+      return this.$store.state.audioBg.show;
+    },
+  },
+  filters: {
+    formatVoiceTime(e) {
+      let m = parseInt(e / 60);
+      let s = parseInt(e % 60);
+      return `${m > 9 ? m : "0" + m}:${s > 9 ? s : "0" + s}`;
+    },
+  },
+  watch: {
+    "$store.state.audioBg.curTime": {
+      handler(newVal) {
+        this.curTime = this.curVoiceId === this.detali.ArticleId ? newVal : 0;
+      },
+      immediate: true,
+      deep: true,
+    },
   },
   methods: {
     async getDetail() {
@@ -99,6 +158,8 @@ export default {
         ArticleId: this.id,
       });
       if (res.Ret === 200) {
+        let arr = res.Data.Detail.VideoPlaySeconds.split(":");
+        res.Data.Detail.VideoPlaySeconds = arr[0] * 60 + (arr[1] - 0);
         this.detali = res.Data.Detail;
         this.haveAuth = res.Data.HasPermission;
         this.videoUrl = res.Data.Detail.VideoUrl;
@@ -143,18 +204,14 @@ export default {
     //音频点击暂停播放
     audioPlayBack() {
       let list = { Url: this.detali.VideoUrl, Name: this.detali.Title, PlaySeconds: this.detali.VideoPlaySeconds };
-      if (this.globalBgAudioManager.src) {
-        if (this.$store.state.audioBg.reportId == this.detali.ArticleId) {
-          if (this.globalBgAudioManager.paused) {
-            this.globalBgAudioManager.play();
-          } else {
-            this.globalBgAudioManager.pause();
-          }
+      if (this.$store.state.audioBg.reportId == this.detali.ArticleId) {
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
         } else {
-          this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
+          this.globalBgAudioManager.pause();
         }
       } else {
-        this.$store.commit("audioBg/removeAudio");
+        this.$store.commit("audioBg/updateAudioTime", 0);
         this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
       }
     },
@@ -169,23 +226,72 @@ export default {
         this.isShowAlert = res.Data.IsShow;
       }
     },
+    // //拖动进度条
+    // handleAudioSliderChange(e) {
+    //   const value = e.detail.value;
+    //   this.globalBgAudioManager.seek(value);
+    // },
+    // handleAudioSliderChangeing(e) {
+    //   this.curTime = e.detail.value;
+    // },
+    //拖动进度条
+    handleAudioSliderChangeing(e) {
+      this.curTime = e.detail.value;
+    },
+    //拖动进度条
+    handleAudioSliderChange(e) {
+      const value = e.detail.value;
+      this.globalBgAudioManager.seek(value);
+      setTimeout(() => {
+        this.$store.commit("audioBg/setSlide", false);
+      }, 300);
+    },
+    touchstartHandler() {
+      this.$store.commit("audioBg/setSlide", true);
+    },
+    //倍速播放
+    isTimesHandler(i) {
+      let list = { Url: this.detali.VideoUrl, Name: this.detali.Title, PlaySeconds: this.detali.VideoPlaySeconds };
+      let index = i == 3 ? 0 : i + 1;
+      this.$store.commit("audioBg/setMultiple", this.timesTheSpeed[index].value);
+      this.globalBgAudioManager.playbackRate = this.isTimes;
+      this.globalBgAudioManager.startTime = this.curTime;
+      if (this.$store.state.audioBg.reportId != this.detali.ArticleId) {
+        this.$store.commit("audioBg/addAudio", { list, reportId: this.detali.ArticleId });
+        this.globalBgAudioManager.play();
+      } else {
+        if (this.globalBgAudioManager.paused) {
+          this.globalBgAudioManager.play();
+        }
+      }
+    },
+    //快进 快退
+    speedReverseHandler(type) {
+      let isTime = type == "reverse" ? this.curTime - 15 : this.curTime + 15;
+      isTime = isTime <= 0 ? 0 : isTime >= this.detali.VideoPlaySeconds ? this.detali.VideoPlaySeconds - 1 : isTime;
+      this.globalBgAudioManager.seek(isTime);
+    },
   },
   components: {
     statement,
     freeCharge,
     audioModule,
   },
-  onLoad(option) {
+  async onLoad(option) {
     this.id = Number(option.id) || "";
     this.userIsShowAlert();
-  },
-  async onShow() {
     await this.$store.dispatch("checkHandle");
     if (!this.$store.state.isAuth && !this.$store.state.isBind) {
       //已授权已绑定
       this.getDetail();
     }
   },
+  onShow() {
+    this.showAudioBox = true;
+  },
+  onHide() {
+    this.showAudioBox = false;
+  },
   /**
    * 用户点击分享
    */
@@ -314,6 +420,65 @@ export default {
     margin: 0 auto 20rpx;
     color: #999999;
   }
+  .audio-card {
+    width: 100%;
+    height: 282rpx;
+    background: #f9f9f9;
+    border-radius: 16rpx;
+    margin: 30rpx auto;
+    padding: 30rpx;
+    .slider {
+      width: 100%;
+      margin: 0;
+    }
+    .slider-paly {
+      display: flex;
+      height: 80rpx;
+      align-items: center;
+      padding-left: 20rpx;
+    }
+    .card-title {
+      font-size: 28rpx;
+      padding: 0 40rpx;
+      text-align: center;
+      margin-bottom: 35rpx;
+    }
+    .card-time {
+      display: flex;
+      justify-content: space-between;
+      color: #999999;
+      font-size: 20rpx;
+    }
+    .is-paly-card {
+      width: 70rpx;
+      height: 70rpx;
+      flex-shrink: 0;
+      margin-left: 30rpx;
+      image {
+        width: 70rpx;
+        height: 70rpx;
+      }
+    }
+    .fast-reverse {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-top: 30rpx;
+      .speed-button {
+        width: 96rpx;
+        height: 47rpx;
+        background: #eaeaea;
+        border-radius: 8rpx;
+        text-align: center;
+        line-height: 47rpx;
+        margin: 0 70rpx;
+      }
+      .speed-img {
+        width: 50rpx;
+        height: 50rpx;
+      }
+    }
+  }
   @import "../jurisdiction.scss";
 }
 </style>

+ 65 - 6
reportPages/secretDetails/secretDetails.vue

@@ -1,5 +1,11 @@
 <template>
   <view class="container container-secret">
+    <view class="tabs-content">
+      <view :class="['item-li', isType == item.value && 'item-active']" v-for="item in tabsList" :key="item.value" @click="tabsHandler(item)">
+        {{ item.name }}
+        <image v-if="isType == item.value" class="border_act" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/border_act.png"></image>
+      </view>
+    </view>
     <view class="collect-ul" v-if="haveData">
       <view class="collect-ltem" v-for="(item, index) in collectList" :key="index" @click="goDetail(item, index)">
         <text class="title text_twoLine"
@@ -47,12 +53,32 @@ export default {
         loading: "加载中",
         nomore: "已经到底了",
       },
+      tabsList: [
+        { name: "本周研究汇总", value: 2 },
+        { name: "上周纪要汇总", value: 3 },
+        { name: "报告精选", value: 1 },
+      ],
     };
   },
   components: {
     freeCharge,
   },
+  computed: {
+    navigationBarTitle() {
+      return this.isType == 1 ? "报告精选" : this.isType == 2 ? "本周研究汇总" : "上周纪要汇总";
+    },
+  },
   methods: {
+    //点击头部的tabs
+    tabsHandler(item) {
+      this.isType = item.value;
+      uni.setNavigationBarTitle({
+        title: this.navigationBarTitle,
+      });
+      this.page_no = 1;
+      this.getList();
+    },
+    //获取数据
     async getList() {
       const res = await Reports.reportListByType({
         PageSize: this.pageSize,
@@ -74,6 +100,7 @@ export default {
         }
       }
     },
+    //跳转详情
     goDetail(item, index) {
       /* 无需授权且已绑定 检验是或否有权限 */
       this.collectList[index].IsRed = false;
@@ -102,10 +129,13 @@ export default {
     this.refresh = true;
     this.getList();
   }),
-  onShareAppMessage(res) {
+  /* 用户点击分享  */
+  onShareAppMessage: function (res) {
     return {
-      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.isType == 2 ? "本周研究汇总" : "上周纪要汇总",
+      title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : this.navigationBarTitle,
       path: "/reportPages/secretDetails/secretDetails?type=" + this.isType,
+      success: (res) => {},
+      fail: (err) => {},
     };
   },
 };
@@ -115,6 +145,35 @@ export default {
 .container-secret {
   background: #f7f7f7;
   padding-bottom: 30rpx;
+  .tabs-content {
+    position: sticky;
+    top: -1rpx;
+    left: 0;
+    background-color: #fff;
+    height: 81rpx;
+    display: flex;
+    font-size: 30rpx;
+    font-weight: 400;
+    padding: 21rpx 35rpx 0;
+    color: #999999;
+    z-index: 99;
+    .item-li {
+      position: relative;
+      margin-right: 60rpx;
+      .border_act {
+        width: 60%;
+        height: 6rpx;
+        position: absolute;
+        bottom: 0rpx;
+        left: 50%;
+        transform: translateX(-50%);
+      }
+    }
+    .item-active {
+      color: #333333;
+      font-weight: 500;
+    }
+  }
   .collect-ul {
     padding-top: 4rpx;
     .collect-ltem {
@@ -167,9 +226,9 @@ export default {
     }
   }
   .title {
-    color: #333333 ;
-    font-size: 30rpx ;
-    font-weight: 400 ;
+    color: #333333;
+    font-size: 30rpx;
+    font-weight: 400;
     width: 100%;
     padding-bottom: 15rpx;
     border-bottom: 1px dashed #ccc;
@@ -178,7 +237,7 @@ export default {
     margin: 20rpx 0 0 30rpx;
     color: #666666;
     font-size: 28rpx;
-    font-weight: 400 ;
+    font-weight: 400;
     padding-right: 10rpx;
   }
 }

+ 22 - 1
store/modules/audioBg.js

@@ -2,15 +2,21 @@
 const audioModules = {
   namespaced: true,
   state: {
+    show: false, //是否显示音频弹窗
     list: [], //[{url:音频地址,time:音频时长,title:音频标题,}]
     activityId: 0, //当前是哪个报告的音频
     reportId: 0,
     paused: true, //当前是否音频正在播放 true暂停状态
     curTime: 0, //当前正在播放的音频播放的时间
     activityTitle: "",
+    multiple: 1, //倍数
+    parseIntShow: false, //
+    isDragSlide:false,//是否在拖动进度条
+    isAudioEnded:false, //
   },
   mutations: {
     addAudio(state, payload) {
+      state.show = true;
       state.list = payload.list;
       state.activityTitle = payload.activityTitle;
       state.activityId = payload.activityId || 0;
@@ -20,16 +26,31 @@ const audioModules = {
     updateAudioPause(state, payload) {
       state.paused = payload;
     },
+    setMultiple(state, payload) {
+      state.multiple = payload;
+    },
     // 更新音频播放进度
     updateAudioTime(state, payload) {
-        state.curTime = payload;
+      state.curTime = Number(payload);
     },
     //删除当前音频播放
     removeAudio(state, payload) {
+      state.show = false;
       state.list = [];
       state.activityId = 0;
+      state.reportId = 0;
+      state.curTime = 0;
       state.paused = true;
     },
+    parseIntAudio(state, payload) {
+      state.parseIntShow = payload;
+    },
+    setSlide(state, payload){
+      state.isDragSlide = payload;
+    },
+    setAudioEnd(state, payload) {
+      state.isAudioEnded = payload;
+    }
   },
 };
 

+ 54 - 0
utils/styleClassify.js

@@ -0,0 +1,54 @@
+export const color_word_bg = {
+  color_bg: [
+    {
+      name: "医药",
+      color: "#EEFFF2",
+    },
+    {
+      name: "科技",
+      color: "#EEF5FF",
+    },
+    {
+      name: "消费",
+      color: "#FFFAF3",
+    },
+    {
+      name: "智造",
+      color: "#F4F0FF",
+    },
+    {
+      name: "策略",
+      color: "#FFFAF2",
+    },
+    {
+      name: "买方严选",
+      color: "#FFEDED",
+    },
+  ],
+  color_word: [
+    {
+      name: "医药",
+      color: "#04CE3D",
+    },
+    {
+      name: "科技",
+      color: "#3385FF",
+    },
+    {
+      name: "消费",
+      color: "#F1BA70",
+    },
+    {
+      name: "智造",
+      color: "#8F72E1",
+    },
+    {
+      name: "策略",
+      color: "#F1925C",
+    },
+    {
+      name: "买方严选",
+      color: "#FF4242",
+    },
+  ],
+};