db 2 년 전
부모
커밋
73bad9c4ec

+ 77 - 0
components/activity/areaCode.vue

@@ -0,0 +1,77 @@
+<template>
+  <view class="select-box">
+    <u-popup v-model="areacodeShow" mode="bottom" @close="cancel">
+      <view class="box" style="color: #333333; font-size: 28rpxrpx">请选择您的国际区号</view>
+      <view class="box" style="color: #2c83ff" @click="areacode('86')">大陆+86</view>
+      <view class="box" style="color: #2c83ff" @click="areacode('852')">香港+852</view>
+      <view class="box" style="color: #2c83ff" @click="areacode('886')">台湾+886</view>
+      <view class="box" style="color: #2c83ff" @click="areacode('1')">美国+1</view>
+      <view class="box" style="color: #2c83ff" @click="areacode('65')">新加坡+65</view>
+      <view class="box box-bottom" style="color: #a9afb8" @click="cancel">取消</view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+import { User } from "@/config/api.js";
+export default {
+  watch: {
+    isAreaCode() {
+      this.areacodeShow = this.isAreaCode;
+    },
+    typesignup() {
+      this.signupType = this.typesignup;
+    },
+  },
+  data() {
+    return {
+      areacodeShow: false,
+    };
+  },
+  props: {
+    isAreaCode: {
+      type: Boolean,
+      default: false,
+    },
+    areaCode: {
+      type: Object,
+    },
+  },
+  methods: {
+    areacode(num) {
+      User.countryCcodeAdd({
+        CountryCode: num,
+      }).then((res) => {
+        if (res.Ret == 200) {
+          this.areacodeShow = false;
+          this.$parent.isAreaCode = false;
+          this.$parent.isNeedAddCountryCode = false;
+          this.$parent.signupAdd(this.areaCode.id, this.areaCode.type);
+        }
+      });
+    },
+    cancel() {
+      this.areacodeShow = false;
+      this.$parent.isAreaCode = false;
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.select-box {
+  width: 100%;
+
+  .box {
+    height: 95prx;
+    line-height: 95rpx;
+    text-align: center;
+    font-size: 32rpx;
+    border-bottom: 1rpx solid #ebebeb;
+  }
+
+  .box-bottom {
+    border-bottom: none !important;
+  }
+}
+</style>

+ 206 - 0
components/activity/index.js

@@ -0,0 +1,206 @@
+import { activity, User } from "@/config/api.js";
+let app = getApp();
+export default {
+  data() {
+    return {
+      listActivityStaus: [], //状态
+      listActivityType: [], //类型
+      listChartPermission: [], //分类
+      listChartPermissionInit: [],
+      activityTypeIds: "", //活动类型id 多个用 , 隔开
+      chartPermissionIds: "", //行业id 多个用 , 隔开
+      chartPermissionName: "所有行业",
+      activityTypeName: "所有类型",
+      selectShow: false,
+      isShowJurisdiction: false,
+      isGain: true,
+      isId: 0,
+      activityIdAdd: "",
+      // 历史搜索列表
+      historySearchList: [],
+      flag: false,
+      activityTimeList: [
+        { Id: 1, IsChoose: false, StatusName: "今日活动" },
+        { Id: 2, IsChoose: false, StatusName: "明日活动" },
+      ],
+      activityTimeStatus: "",
+      keyWord: "",
+      isNeedAddCountryCode: false, //判断是否需要区号
+      isAreaCode: false,
+      areaCode: {
+        id: "",
+        type: "",
+      },
+    };
+  },
+  methods: {
+    // 滑动状态下拉选择的收起
+    closeTheWindow(type) {
+      if (type == "statusstate") {
+        const state = this.activeState ? this.activeState.split(",").map(Number) : [];
+        this.listActivityStaus.forEach((item) => {
+          if (state.indexOf(item.Id) !== -1) {
+            item.IsChoose = true;
+          } else {
+            item.IsChoose = false;
+          }
+        });
+      } else if (type == "genre") {
+        const types = this.activityTypeIds ? this.activityTypeIds.split(",").map(Number) : [];
+        this.listActivityType.forEach((item) => {
+          if (types.includes(item.ActivityTypeId)) {
+            item.IsChoose = true;
+          } else {
+            item.IsChoose = false;
+          }
+        });
+      } else {
+        const chart = this.chartPermissionIds ? this.chartPermissionIds.split(",").map(Number) : [];
+        this.listChartPermission.forEach((item) => {
+          if (chart.includes(item.ChartPermissionId)) {
+            item.IsChoose = true;
+          } else {
+            item.IsChoose = false;
+          }
+        });
+      }
+    },
+    //是否展示有权限的行业
+    isJurisdiction() {
+      if (this.isShowJurisdiction) {
+        this.isId = 2;
+      } else {
+        this.isId = 1;
+      }
+      this.getUserSearchContent("traverse");
+    },
+    /* 新布局产业选项确定按钮 */
+    replacementConfirm(type) {
+      this.page_no = 1;
+      if (type == "statusstate") {
+        const arr = [];
+        const str = [];
+        this.listActivityStaus.forEach((key) => {
+          if (key.IsChoose) {
+            arr.push(key.Id);
+            str.push(key.StatusName);
+          }
+        });
+        this.activeState = arr.join(",");
+        const arrTwo = [];
+        const strTwo = [];
+        this.activityTimeList.forEach((key) => {
+          if (key.IsChoose) {
+            arrTwo.push(key.Id);
+            strTwo.push(key.StatusName);
+          }
+        });
+        this.activityTimeStatus = arrTwo.join(",");
+        if (strTwo.length > 0) {
+          this.activeStateName = strTwo.join(",");
+        } else {
+          if (str.length == this.listActivityStaus.length || str.length <= 0) {
+            this.activeStateName = "所有状态";
+          } else {
+            this.activeStateName = str.join(",");
+          }
+        }
+      } else if (type == "industry") {
+        const arr = [];
+        const str = [];
+        this.listChartPermission.forEach((key) => {
+          if (key.IsChoose) {
+            arr.push(key.ChartPermissionId);
+            str.push(key.PermissionName);
+          }
+        });
+        if ((str.length == 6 && this.listChartPermission.length == 6) || str.length <= 0) {
+          this.chartPermissionName = "所有行业";
+        } else {
+          this.chartPermissionName = str.join(",");
+        }
+        this.chartPermissionIds = arr.join(",");
+      } else {
+        const arr = [];
+        const str = [];
+        this.listActivityType.forEach((key) => {
+          if (key.IsChoose) {
+            arr.push(key.ActivityTypeId);
+            str.push(key.ActivityTypeName);
+          }
+        });
+        if (str.length == this.listActivityType.length || str.length <= 0) {
+          this.activityTypeName = "所有类型";
+        } else {
+          this.activityTypeName = str.join(",");
+        }
+        this.activityTypeIds = arr.join(",");
+      }
+      this.page_no = 1;
+      this.collectList = [];
+      this.dynamicList = [];
+      this.spanIndex = [];
+      this.keyWord = "";
+      this.fastSearchKeWord();
+      this.getList();
+      this.selectComponent(`#${type}`).toggle();
+    },
+    /* 新布局产业选项重置按钮 */
+    replacementBtn(type) {
+      if (type == "statusstate") {
+        this.listActivityStaus.forEach((item) => (item.IsChoose = false));
+        this.activityTimeList.forEach((key) => {
+          key.IsChoose = false;
+        });
+        this.listActivityStaus[0].IsChoose = true;
+        this.activeState = "1";
+        this.activityTimeStatus = "";
+        this.activeStateName = "未开始";
+      } else if (type == "industry") {
+        this.listChartPermission = this.listChartPermissionInit;
+        this.chartPermissionIds = "";
+        this.isShowJurisdiction = false;
+        this.isId = 2;
+        this.listChartPermission.map((item) => (item.IsChoose = false));
+        this.chartPermissionName = "所有行业";
+      } else {
+        this.listActivityType.forEach((item) => (item.IsChoose = false));
+        this.activityTypeIds = "";
+        this.activityTypeName = "所有类型";
+      }
+    },
+    //状态的下拉选择
+    overallBtn(type, item) {
+      this.listActivityStaus.forEach((key) => {
+        if (key.Id == item.Id) {
+          key.IsChoose = !key.IsChoose;
+        }
+      });
+    },
+    // 行业的下拉选择
+    overallClick(type, item) {
+      if (this.isShowJurisdiction) return;
+      this.listChartPermission.forEach((key) => {
+        if (key.ChartPermissionId == item.ChartPermissionId) {
+          key.IsChoose = !key.IsChoose;
+        }
+      });
+    },
+    //类型的下拉选择
+    overallActivity(type, item) {
+      this.listActivityType.forEach((key) => {
+        if (key.ActivityTypeId == item.ActivityTypeId) {
+          key.IsChoose = !key.IsChoose;
+        }
+      });
+    },
+    //今日,明日 活动的选择
+    timeListBtn(type, item) {
+      this.activityTimeList.forEach((key) => {
+        if (key.Id == item.Id) {
+          key.IsChoose = !key.IsChoose;
+        }
+      });
+    },
+  },
+};

+ 359 - 0
components/activity/indexActivity.js

@@ -0,0 +1,359 @@
+import { activity, User } from "@/config/api.js";
+let app = getApp();
+export default {
+  data() {
+    return {
+      page_no: 1,
+      pageSize: 10,
+      collectList: [],
+      status: "loadmore",
+      refresh: false, //正在下拉
+      loadText: {
+        loadmore: "上拉加载更多",
+        loading: "加载中",
+        nomore: "已经到底了",
+      },
+      isNeedAddCountryCode: false, //判断是否需要区号
+      isAreaCode: false,
+      areaCode: {
+        id: "",
+        type: "",
+      },
+      /**/
+      tabsActive: 0,
+      /**/
+      /*  共用的弹框  */
+      isShow: false, //弹框
+      signupType: "", //关注类型
+      goFollow: false, //是否关注公众号
+      signupStatus: "Success", //4个不同的类型提示文案
+      hasPermission: "", //是否有权限
+      jurisdictionList: {
+        SellerMobile: "",
+        PopupMsg: "",
+        OperationMode: "",
+        SellerName: "",
+        ActivityId: "",
+      },
+      editIsShow: false, //外呼莫泰框
+      isCancelShow: false,
+      idTypeCancel: {
+        id: "",
+        type: 1,
+        cutId: "",
+        state: "",
+        isNum: false,
+      },
+      countryCode: "", //外呼区号
+      mobileEdit: "", //外呼手机号
+      goOnNextStep: "", //设置外呼号后弹出哪个
+      isShowhasPermission: false, //拨打销售电话
+      applyForIsShow: false, //潜在用户
+      mailboxBinding: false, //是否绑定邮箱
+    };
+  },
+  methods: {
+    // 我要报名
+    wanttosignup(item) {
+      this.activityIdAdd = item.ActivityId;
+      if (item.YidongActivityId) {
+        this.goDetail(item);
+        return;
+      } else if (item.IsLimitPeople == 1 && item.ActivityTypeName == "公司调研电话会") {
+        this.selectShow = true;
+      } else {
+        this.signupIsAddOfCancel(item, 3);
+      }
+    },
+    //判断是否要绑定区号
+    countryCcode() {
+      User.countryCcode().then((res) => {
+        if (res.Ret == 200) {
+          this.isNeedAddCountryCode = res.Data.IsNeedAddCountryCode;
+        }
+      });
+    },
+    //报名/取消报名
+    signupIsAddOfCancel(item, type, valName = "") {
+      let id = this.activityIdAdd || item.ActivityId;
+      let itemData = item;
+      if (item && item.IsSignup == 1) {
+        const str = item.ActivityTime.replace(/-/g, "/");
+        const date = new Date(str);
+        const times = date.getTime();
+        const num = new Date().getTime();
+        if (times - num <= 3600000) {
+          uni.showModal({
+            confirmText: "知道了",
+            showCancel: false,
+            confirmColor: "#3385FF",
+            content: type == 1 ? "活动开始前1小时内无法取消预约外呼,请联系对口销售处理" : "活动开始前1小时内无法取消报名,请联系对口销售处理",
+          });
+          return;
+        }
+        uni.showModal({
+          content: type == 1 ? "您要取消此次活动预约外呼吗?" : "您要取消此次活动的报名吗?",
+          confirmColor: "#3385FF",
+          cancelColor: "#606266",
+          success: async (res) => {
+            if (res.confirm) {
+              const res = await activity.signupCancel({ ActivityId: item.ActivityId, SignupType: type });
+              if (res.Ret === 200) {
+                item.IsSignup = 0;
+                this.init();
+
+                type == 1
+                  ? uni.showToast({
+                      title: "预约外呼已取消",
+                      duration: 2000,
+                    })
+                  : uni.showToast({
+                      title: "已取消报名",
+                      duration: 2000,
+                    });
+                if (valName === "我的") {
+                  this.getActivityList();
+                }
+              }
+            }
+          },
+        });
+      } else {
+        let timer = null;
+        if (this.flag) return;
+        clearTimeout(timer);
+        this.flag = true;
+        this.selectShow = false;
+        if (this.isNeedAddCountryCode) {
+          this.isAreaCode = true;
+          this.areaCode = {
+            id,
+            type,
+          };
+        } else {
+          activity
+            .signupAdd({
+              ActivityId: id,
+              SignupType: type,
+            })
+            .then((res) => {
+              if (res.Ret == 200) {
+                this.hasPermission = res.Data.HasPermission;
+                this.jurisdictionList.ActivityId = res.Data.ActivityId;
+
+                if (this.hasPermission == 1) {
+                  const index = this.collectList.findIndex((key) => key.ActivityId == id);
+                  this.collectList[index].SignupType = type;
+                  this.signupType = valName == "CClass" ? "CClass" : res.Data.SignupType;
+                  this.signupStatus = res.Data.SignupStatus;
+                  this.countryCode = res.Data.CountryCode;
+                  this.mobileEdit = res.Data.Mobile;
+                  this.goOnNextStep = res.Data.GoFollow;
+                  this.idTypeCancel = {
+                    cutId: res.Data.ActivityId,
+                    state: 1,
+                  };
+                  if (res.Data.GoBindEmail) {
+                    this.mailboxBinding = true;
+                    return;
+                  }
+                  if (res.Data.SignupStatus !== "Success") {
+                    this.isShow = true;
+                  } else {
+                    if (res.Data.GoOutboundMobile) {
+                      this.editIsShow = true;
+                    } else if (res.Data.GoFollow) {
+                      this.goFollow = res.Data.GoFollow;
+                    } else if (res.Data.SignupStatus == "Success") {
+                      this.collectList.findIndex((key) => {
+                        if (key.ActivityId == id) {
+                          key.IsSignup = 1;
+                        }
+                      });
+                      this.isShow = true;
+                    }
+                  }
+                } else if (this.hasPermission == 2) {
+                  this.jurisdictionList.SellerMobile = res.Data.SellerMobile;
+                  this.jurisdictionList.SellerName = res.Data.SellerName;
+                  this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+                  this.isShowhasPermission = true;
+                } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+                  this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+                  this.applyForIsShow = true;
+                }
+              }
+            });
+        }
+        timer = setTimeout(() => {
+          this.flag = false;
+        }, 500);
+      }
+    },
+    // 弹框的初始化
+    init() {
+      this.signupType = "";
+      this.goFollow = false;
+      this.signupStatus = "";
+      this.isShow = false;
+      this.isCancelShow = false;
+    },
+    //添加消息提醒接口
+    meetingReminderAdd(id, type) {
+      if (type != 0) {
+        this.meetingReminderCancel(id);
+        return;
+      }
+      activity
+        .meetingReminderAdd({
+          ActivityId: id,
+        })
+        .then((res) => {
+          if (res.Ret == 200) {
+            this.hasPermission = res.Data.HasPermission;
+            this.jurisdictionList.ActivityId = res.Data.ActivityId;
+            if (this.hasPermission == 1) {
+              if ((res.Data.GoFollow && res.Data.SignupStatus !== "Success") || !res.Data.GoFollow) {
+                this.isShow = true;
+              } else {
+                this.goFollow = res.Data.GoFollow;
+              }
+              this.signupType = 999;
+              this.signupStatus = res.Data.SignupStatus;
+              this.idTypeCancel = {
+                cutId: res.Data.ActivityId,
+                state: 1,
+                name: "conference",
+              };
+              this.collectList.forEach((item) => {
+                if (id == item.ActivityId) {
+                  item.IsCancelMeetingReminder = 1;
+                }
+              });
+            } else if (this.hasPermission == 2) {
+              this.jurisdictionList.SellerMobile = res.Data.SellerMobile;
+              this.jurisdictionList.SellerName = res.Data.SellerName;
+              this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+              this.isShowhasPermission = true;
+            } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+              this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+              this.applyForIsShow = true;
+            }
+          }
+        });
+    },
+    //取消消息提醒接口
+    meetingReminderCancel(id) {
+      activity
+        .meetingReminderCancel({
+          ActivityId: id,
+        })
+        .then((res) => {
+          if (res.Ret == 200) {
+            uni.showModal({
+              confirmText: "知道了",
+              confirmColor: "#3385FF",
+              content: res.Msg,
+              showCancel: false,
+              success: (res) => {
+                if (this.isrefresh) return this.getActivityList();
+                if (res.confirm) {
+                  this.collectList.forEach((item) => {
+                    if (id == item.ActivityId) {
+                      item.IsCancelMeetingReminder = 0;
+                    }
+                  });
+                }
+              },
+            });
+          }
+        });
+    },
+
+    //帮我带问
+    async askingGo(item, type = "") {
+      const res = await activity.checkAskActivity({ ActivityId: item.ActivityId });
+      if (res.Ret == 200) {
+        this.hasPermission = res.Data.HasPermission;
+        this.jurisdictionList.ActivityId = res.Data.ActivityId;
+        if (this.hasPermission == 1) {
+          uni.navigateTo({
+            url: "/pages-activity/generationAsk/generationAsk?id=" + item.ActivityId + "&type=" + type,
+          });
+        } else if (this.hasPermission == 2) {
+          this.jurisdictionList.SellerMobile = res.Data.SellerMobile;
+          this.jurisdictionList.SellerName = res.Data.SellerName;
+          this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+          this.isShowhasPermission = true;
+        } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+          this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+          this.applyForIsShow = true;
+        }
+      }
+    },
+    // 弹框的初始化
+    init() {
+      this.signupType = "";
+      this.goFollow = false;
+      this.signupStatus = "";
+      this.isShow = false;
+      this.isCancelShow = false;
+    },
+    //预约纪要、取消预约纪要
+    async summaryIsHandel(item, type = "") {
+      if (item.IsAppointment == 0) {
+        const res = await activity.postAppointmentAdd({ ActivityId: item.ActivityId });
+        if (res.Ret == 200) {
+          this.hasPermission = res.Data.HasPermission;
+          this.jurisdictionList.ActivityId = res.Data.ActivityId;
+          if (this.hasPermission == 1) {
+            item.IsAppointment = 1;
+            this.signupType = "summaryIsHandel";
+            this.signupStatus = res.Data.SignupStatus;
+            this.goOnNextStep = res.Data.GoFollow;
+            if (res.Data.SignupStatus !== "Success") {
+              this.isShow = true;
+            } else {
+              if (res.Data.GoFollow) {
+                this.goFollow = res.Data.GoFollow;
+              } else if (res.Data.SignupStatus == "Success") {
+                this.isShow = true;
+              }
+            }
+          } else if (this.hasPermission == 2) {
+            this.jurisdictionList.SellerMobile = res.Data.SellerMobile;
+            this.jurisdictionList.SellerName = res.Data.SellerName;
+            this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+            this.isShowhasPermission = true;
+          } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
+            this.jurisdictionList.PopupMsg = res.Data.PopupMsg;
+            this.applyForIsShow = true;
+          }
+        }
+      } else {
+        uni.showModal({
+          content: "确定要取消预约本场调研的纪要吗?",
+          confirmColor: "#3385FF",
+          cancelColor: "#606266",
+          success: async (res) => {
+            if (res.confirm) {
+              const res = await activity.postAppointmentCancel({ ActivityId: item.ActivityId });
+              if (res.Ret === 200) {
+                item.IsAppointment = 0;
+                this.init();
+                if (type === "我的") {
+                  this.getActivityList();
+                }
+              }
+            }
+          },
+        });
+      }
+    },
+    cancelEnsure() {},
+    //去往详情页面
+    goDetail(item) {
+      this.$store.dispatch("checkHandle", "/pages-activity/activityDetail/activityDetail?id=" + item.ActivityId);
+    },
+  },
+};

+ 168 - 0
components/activity/indexActivity.scss

@@ -0,0 +1,168 @@
+.collect-ul {
+    padding: 0 34rpx;
+  
+    .collect-ltem {
+      width: 682rpx;
+      height: 390rpx;
+      background: #ffffff;
+      box-shadow: 0rpx 3rpx 6rpx rgba(141, 141, 141, 0.16);
+      border-radius: 16rpx;
+      padding: 0 20rpx 20rpx;
+      margin-top: 30rpx;
+    }
+  
+    .title-date {
+      height: 90rpx;
+      display: flex;
+      align-items: center;
+      font-size: 28rpx;
+      color: #333;
+      border-bottom: 1px solid #e5e5e5;
+  
+      text {
+        background: linear-gradient(264deg, #01baff 0%, #0044ff 100%);
+        width: 95rpx;
+        height: 40rpx;
+        text-align: center;
+        margin-right: 20rpx;
+        font-size: 24rpx;
+        line-height: 40rpx;
+        color: #fff;
+        border-radius: 8rpx;
+      }
+  
+      .xianxia {
+        background: linear-gradient(264deg, #ff8801 0%, #ffb950 100%);
+      }
+    }
+  
+    .item-li {
+      display: flex;
+      padding: 20rpx 0 16rpx;
+      .item-img {
+        flex-shrink: 0;
+        width: 191rpx;
+        height: 254rpx;
+        border-radius: 8rpx;
+        overflow: hidden;
+        position: relative;
+        background: #efefef;
+        image {
+          width: 100%;
+          height: 100%;
+        }
+        .img-type {
+            position: absolute;
+            top: 0;
+            left: 0;
+            color: #fff;
+            height: 100%;
+            width: 100%;
+            image {
+                height: 100%;
+                width: 100%;
+            }
+          }
+        .img-status {
+          position: absolute;
+          top: 0;
+          left: 0;
+          width: 95rpx;
+          height: 40rpx;
+          background: #c9c9c9;
+          border-radius: 8rpx 0rpx 8rpx 0rpx;
+          font-size: 20rpx;
+          text-align: center;
+          line-height: 40rpx;
+          color: #fff;
+          z-index: 5;
+        }
+        .proceed {
+          background-color: #ffb54a;
+        }
+        .begin {
+          background-color: #01a7ff;
+        }
+      }
+  
+      .item {
+        width: 450rpx;
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        padding-left: 20rpx;
+        font-size: 28rpx;
+        color: #666666;
+        .item-text {
+          min-height: 200rpx;
+          .activity-title {
+            color: #333333;
+            font-weight: 700;
+            margin-bottom: 20rpx;
+          }
+        }
+      }
+      .real-time{
+        justify-content: flex-end !important;
+      }
+      .bottom-box {
+        display: flex;
+        justify-content:flex-end;
+        align-items: center;
+        color: #3385FF;
+        overflow: hidden;
+        overflow-x:auto;
+        text {
+          width: 113rpx;
+          height: 42rpx;
+          background: #ffffff;
+          border: 2rpx solid #3385ff;
+          border-radius: 4rpx;
+          text-align: center;
+          line-height: 40rpx;
+          font-size: 24rpx;
+          flex-shrink: 0;
+          margin-right: 20rpx;
+        }
+        text:last-child {
+          margin-right: 0rpx !important;
+        }
+        image {
+          width: 27rpx;
+          height: 32rpx;
+          margin-right: 12rpx;
+        }
+        .button {
+          background: #3385ff;
+          color: #fff;
+        }
+      }
+      .city {
+        justify-content: space-between !important;
+        .city-img {
+          display: flex;
+          align-items: center;
+          width:113rpx ;
+        }
+      }
+    }
+  }
+  .expert-item {
+    justify-content:flex-start !important;
+  }
+  .four-btn {
+    justify-content:space-between !important;
+    text:last-child {
+      margin-right: 20rpx !important;
+    }
+  }
+  .select-box {
+    width: 100%;
+    view {
+      height: 95prx;
+      line-height: 95rpx;
+      text-align: center;
+      font-size: 32rpx;
+      border-bottom: 1rpx solid #ebebeb;
+    }
+  }

+ 6 - 1
config/api.js

@@ -33,6 +33,11 @@ export const Report = {
   articlePdfwatermark: (params) => {
     return getHttp("/article/pdfwatermark", params, 1);
   },
+  /* 报告搜索、资源包搜索接口*/
+  getSearchReportAndResource: (params) => {
+    return getHttp("/report/searchReportAndResource", params, 1);
+  },
+  
 };
 
 /* 用户 */
@@ -172,7 +177,7 @@ export const Search = {
   },
   /* 报告 KeyWord 素材库*/
   getArtAndChartList: (params) => {
-    return getHttp("/search/artAndChart/list", params, 0);
+    return getHttp("/search/artAndChart/listPage", params, 0);
   },
 };
 

+ 6 - 2
mixin/index.js

@@ -1,4 +1,4 @@
-import { FreeButton } from "@/config/api.js";
+import { FreeButton,Reports } from "@/config/api.js";
 export default {
   data() {
     return {
@@ -10,6 +10,8 @@ export default {
         paddingTop: 40 + "px",
         paddingBottom: "4px",
       },
+      searchPlaceholderList: {},
+      wholeShowListData: {}, //
     };
   },
   onShow() {
@@ -32,9 +34,11 @@ export default {
   methods: {
     //免费标签的隐现
     async isShowFreeButton() {
-      const res = await FreeButton.userIsShowFreeButton();
+      const res = await Reports.reportIsShow();
       if (res.Ret === 200) {
+        this.wholeShowListData = res.Data
         this.isShowFree = res.Data.IsShow;
+        this.searchPlaceholderList = res.Data.SearchTxtList
       }
     },
     //判断手机号是否是弘则的

+ 2 - 17
pages-activity/accountsOfficial/accountsOfficial.vue

@@ -1,29 +1,14 @@
 <template>
   <!-- 去往公众号 -->
   <view>
-    <web-view :src="linkUrl"></web-view>
+    <web-view :src="wholeShowListData.LinkWxExplain"></web-view>
   </view>
 </template>
 
 <script>
-import { Reports } from "@/config/api.js";
 export default {
   data() {
-    return {
-      linkUrl: "",
-    };
-  },
-
-  methods: {
-    async getLink() {
-      const res = await Reports.reportIsShow();
-      if (res.Ret === 200) {
-        this.linkUrl = res.Data.LinkWxExplain;
-      }
-    },
-  },
-  onLoad() {
-    this.getLink();
+    return {};
   },
 };
 </script>

+ 0 - 807
pages-my/search/index.vue

@@ -1,807 +0,0 @@
-<template>
-  <view class="search-container container">
-    <view class="sticky-content">
-      <view class="searchTarget-header">
-        <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
-        <icon type="search" size="15" class="sea_ico" />
-        <view class="ipt-right">
-          <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
-          <text class="line">|</text>
-          <text @click="searchHandle" style="color: #3385ff">搜索</text>
-        </view>
-      </view>
-      <view class="radio-content">
-        <van-radio-group :value="radioSelect" @change="onChangeRadio" direction="horizontal">
-          <block v-for="item in radioSelectList" :key="item.Id">
-            <van-radio v-if="item.IsShow" :name="item.Id" icon-size="16">{{ item.Name }}</van-radio>
-          </block>
-        </van-radio-group>
-      </view>
-      <view class="tab-cont" v-if="radioSelect == 2 && isResult">
-        <view :class="['item', item.mode == orderColumn && 'tabs-active text_twoLine']" v-for="item in tabBars" :key="item.mode" @click.stop="toggleTab(item)">
-          {{ item.PermissionName }}
-          <view class="active" v-if="orderColumn === item.mode"></view>
-        </view>
-      </view>
-    </view>
-    <view class="search-cont" v-if="!isResult">
-      <view class="search-cont-top">
-        <view class="cont-tit">
-          <text>热搜关键词:</text>
-        </view>
-        <view class="targetList">
-          <view class="target-item" v-for="(item, index) in hotKeyWord" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
-        </view>
-      </view>
-      <view class="search-cont-top">
-        <view class="cont-tit">
-          <text>推荐关键词:</text>
-        </view>
-        <view class="targetList">
-          <view class="target-item" v-for="(item, index) in keywordList" :key="index" @click="chooseTarget(item)"># {{ item }}</view>
-          <view class="chart-item" v-for="(item, index) in chartWordList" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
-        </view>
-      </view>
-      <view class="search-cont-top" v-if="historySearchList.length">
-        <view class="cont-tit">
-          <text>搜索历史:</text>
-          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico" @click="clearHistory"></image>
-        </view>
-        <view class="targetList">
-          <block v-for="(item, index) in historySearchList" :key="index">
-            <view v-if="index < 8" class="target-item" @click="chooseTarget(item)"># {{ item }}</view>
-          </block>
-        </view>
-      </view>
-    </view>
-    <!-- 内容地方 -->
-    <view class="search-cont" v-else>
-      <block v-if="haveResult">
-        <view class="audio-video-content" v-if="radioSelect == 4">
-          <view :class="item.Type == 1 ? 'audio-item' : 'video-item'" v-for="item in videoAudioList" :key="item.Id">
-            <view class="cover-item" :style="{ 'background-image': 'url(' + item.BackgroundImg + ')' }">
-              <block v-if="item.Type == 2">
-                <video
-                  :id="item.Id"
-                  :src="item.ResourceUrl"
-                  :poster="item.BackgroundImg"
-                  enable-play-gesture
-                  object-fit="contain"
-                  show-mute-btn
-                  autoplay
-                  @ended="handleVideoEnd"
-                  v-if="item.Id == curVideoId"
-                ></video>
-                <image v-else class="img-bg" @click="handelPlay(item)" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon_index.png"></image>
-              </block>
-              <block v-else>
-                <image
-                  class="img-bg"
-                  @click.stop="handelPlay(item)"
-                  :src="
-                    curVoiceId === item.ActivityId && !curAudioPaused
-                      ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_stop_index.png'
-                      : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_group_index.png'
-                  "
-                ></image>
-              </block>
-              <text class="time">{{ item.PublishTime }}</text>
-            </view>
-            <view class="title-share">
-              <view class="title text_twoLine">{{ item.Title }}</view>
-              <view class="share">
-                <view class="share-text" :style="[classifyColor(item.ChartPermissionName)]">
-                  <image :src="classifyIcon(item.ChartPermissionName)"></image>
-                  {{ item.Type == 1 ? "音频" : "视频" }}|{{ item.ChartPermissionName }}
-                </view>
-                <button class="share-icon" open-type="share" :data-item="item">
-                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/share-btn-icon.png"></image>
-                </button>
-              </view>
-            </view>
-          </view>
-        </view>
-        <view class="result-data" v-else>
-          <view class="report-ul">
-            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
-              <view class="item-content-img" v-if="report.BodyHtml">
-                <image :src="report.BodyHtml" mode=""></image>
-              </view>
-              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-              <view class="line"></view>
-              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
-              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
-              <view class="item-createtime chart-tag" v-else>
-                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
-                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
-              </view>
-            </view>
-          </view>
-          <view class="report-ul">
-            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
-              <view class="item-content-img" v-if="report.BodyHtml">
-                <image :src="report.BodyHtml" mode=""></image>
-              </view>
-              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-              <view class="line"></view>
-              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
-              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
-              <view class="item-createtime chart-tag" v-else>
-                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
-                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
-              </view>
-            </view>
-          </view>
-        </view>
-        <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="pageNum > 1" />
-      </block>
-      <view class="nodata" v-else>
-        <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
-        <text>未找到您想搜索的内容</text>
-      </view>
-    </view>
-    <view v-if="showAudioBox">
-      <audioModule :showAudioPop.sync="showAudioPop" />
-    </view>
-    <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
-  </view>
-</template>
-
-<script>
-import { Search, Home } from "@/config/api.js";
-import { Debounce, Throttle } from "@/config/util.js";
-import { color_word_bg, MultimediaIcon } from "@/utils/styleClassify";
-import audioModule from "@/components/audioModule/index";
-import modalDialog from "@/components/modalDialog.vue";
-let app = getApp({ allowDefault: true });
-export default {
-  data() {
-    return {
-      searchTxt: "", //搜索关键字
-      isResult: false, //显示搜索结果
-      haveResult: true, //是否有搜索数据
-      // 历史搜索列表
-      historySearchList: [],
-      // 关键字列表
-      keywordList: [],
-      chartWordList: [],
-      // 搜索结果列表
-      resultList: [],
-      resultDataList: [],
-      indList: [],
-      pageNum: 1,
-      pageSize: 10,
-      totalPage: 0,
-      hotKeyWord: [],
-      radioSelect: 1,
-      radioSelectList: [], //搜索的tabs
-      tabBars: [
-        {
-          PermissionName: "匹配度排序",
-          mode: "Matching",
-        },
-        {
-          PermissionName: "综合排序",
-          mode: "Comprehensive",
-        },
-        {
-          PermissionName: "发布时间排序",
-          mode: "PublishDate",
-        },
-      ],
-      orderColumn: "Matching",
-      status: "loadmore",
-      loadText: {
-        loadmore: "上拉加载更多",
-        loading: "加载中",
-        nomore: "已经到底了",
-      },
-      videoContext: null,
-      showAudioPop: false, //播放音频
-      isShowhasPermission: false, //  联系销售的提交申请
-      applyForIsShow: false, // 提交申请
-      jurisdictionList: {},
-      hasPermission: "", //权限
-      audioShareId: "", //通过分享单个音频点进页面时使用
-      videoShareId: "", //通过分享单个视频点进页面时使用
-      videoAudioList: [], //音频  视频 list
-      curVideoId: 0, //音频Id
-      videoPlayTime: 0, //
-    };
-  },
-  components: { modalDialog, audioModule },
-  computed: {
-    curVoiceId() {
-      //当前正在播放的音频id
-      return this.$store.state.audioBg.indexId;
-    },
-    curAudioPaused() {
-      //当前音频是否暂停状态
-      return this.$store.state.audioBg.paused;
-    },
-    showAudioBox() {
-      return this.$store.state.audioBg.parseIntShow;
-    },
-  },
-  watch: {
-    searchTxt(newVal) {
-      if (newVal.length <= 0) {
-        this.isResult = false;
-        this.orderColumn = "Matching";
-      }
-    },
-  },
-  methods: {
-    //获取顶部导航
-    async getHeaderTab() {
-      const res = await Home.headerTab({
-        SearchPage: 1,
-      });
-      if (res.Ret === 200) {
-        this.radioSelectList = res.Data || [];
-      }
-    },
-    //获取热搜关键词的请求
-    async researchHotKeyWord() {
-      const res = await Search.getKeys();
-      if (res.Ret === 200) {
-        this.hotKeyWord = res.Data.ListHot || [];
-        this.chartWordList = res.Data.List || [];
-        this.keywordList = res.Data.Item ? res.Data.Item.ConfigValue.split(",") : [];
-      }
-    },
-    //点击了搜索的变化
-    onChangeRadio(value) {
-      this.radioSelect = value.detail;
-      this.orderColumn = "Matching";
-      let srt = this.searchTxt.replace(/^\s+|\s+$/g, "");
-      if (!srt) return this.$util.toast("请输入关键字");
-      this.dataInit();
-      this.getDataList();
-    },
-    /* 获取关键词 */
-    getKeyWord() {
-      Search.getKeys().then((res) => {
-        if (res.Ret === 200) {
-          this.keywordList = res.Data.Item.ConfigValue ? res.Data.Item.ConfigValue.split(",") : [];
-        }
-      });
-    },
-    // 选择历史搜索
-    chooseTarget(item) {
-      this.searchTxt = item;
-      this.SecName = item;
-      this.dataInit();
-      this.indList = [];
-      if (!this.historySearchList.includes(this.searchTxt)) {
-        this.historySearchList.unshift(this.searchTxt);
-        this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
-      }
-      this.getDataList();
-    },
-    // 拼接
-    join(str, key) {
-      return str.replace(new RegExp(`${key}`, "g"), `%%${key}%%`).split("%%");
-    },
-    // 搜索数据
-    searchHandle: Debounce(function () {
-      if (this.searchTxt) {
-        //添加搜索记录
-        if (!this.historySearchList.includes(this.searchTxt)) {
-          this.historySearchList.unshift(this.searchTxt);
-          this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
-        }
-        this.indList = [];
-        this.dataInit();
-        this.getDataList();
-      } else {
-        this.$util.toast("请输入关键字");
-      }
-    }),
-    // 查找数据
-    async getDataList() {
-      this.isResult = true;
-      if (this.radioSelect == 4) return this.getAudioVideoList();
-      const res = await Search.getArtAndChartList({
-        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
-        OrderColumn: this.radioSelect == 2 ? this.orderColumn : "",
-        ListType: this.radioSelect,
-      });
-      if (res.Ret === 200) {
-        this.totalPage = res.Data.Paging.Totals;
-        if (this.radioSelect == 1) {
-          if (!res.Data.List.length) {
-            this.resultDataList = res.Data.ChartList || [];
-          } else if (!res.Data.ChartList.length) {
-            this.resultDataList = res.Data.List || [];
-          } else {
-            this.resultDataList.push(res.Data.List.shift());
-            let newArr = [];
-            let newArrTwo = [];
-            for (let i = 0; i < res.Data.List.length; i += 2) {
-              newArr.push(res.Data.List.slice(i, i + 2));
-            }
-            for (let i = 0; i < res.Data.ChartList.length; i += 2) {
-              newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
-            }
-            let arr = [];
-            newArr.forEach((item, index) => {
-              if (newArrTwo[index]) {
-                arr.push(newArrTwo[index], item);
-              } else {
-                arr.push(item);
-              }
-            });
-            this.resultDataList = this.resultDataList.concat(arr.flat(Infinity));
-          }
-          this.haveResult = this.resultDataList.length ? true : false;
-        } else if (this.radioSelect == 2) {
-          this.resultDataList = res.Data.List || [];
-          this.haveResult = this.resultDataList.length ? true : false;
-        } else {
-          this.resultDataList = res.Data.ChartList || [];
-          this.haveResult = this.resultDataList.length ? true : false;
-        }
-        this.resultList = this.haveResult ? this.resultDataList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize) : [];
-      }
-    },
-    async getAudioVideoList() {
-      const res = await Home.microRoadshowList({
-        PageSize: this.pageSize,
-        CurrentIndex: this.pageNum,
-        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
-      });
-      if (res.Ret === 200) {
-        this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
-        if (this.pageNum == 1) {
-          this.videoAudioList = res.Data.List || [];
-          this.haveResult = this.videoAudioList.length > 0 ? true : false;
-        } else {
-          this.videoAudioList = this.videoAudioList.concat(res.Data.List);
-        }
-      }
-    },
-    /* 表单清空 */
-    clearIpt() {
-      this.searchTxt = "";
-      this.dataInit();
-      this.isTabAct = false;
-    },
-    /* 进入详情 校验是否有该品种权限 */
-    goDetail(item) {
-      if (item.Source == 2) {
-        /* 无需授权且已绑定 检验是或否有权限 */
-        this.$store.dispatch("checkHandle", "/pages-my/chartPage/chartPage?id=" + item.ChartId);
-      } else {
-        /* 无需授权且已绑定 检验是或否有权限 */
-        this.$store.dispatch("checkHandle", "/pages-my/reportDetail/reportDetail?id=" + item.ArticleId);
-      }
-    },
-    /* 历史搜索清空 */
-    clearHistory() {
-      this.historySearchList = [];
-      this.$db.del("historySearchList");
-    },
-    //获取数据的初始值
-    dataInit() {
-      this.pageNum = 1;
-      this.resultList = [];
-      this.resultDataList = [];
-      this.videoAudioList = [];
-      this.status = "loadmore";
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-    },
-    //tabs切换事件
-    toggleTab(item) {
-      this.orderColumn = item.mode;
-      this.pageNum = 1;
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-      this.resultList = [];
-      this.getDataList();
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-    },
-    //视频播放结束
-    handleVideoEnd() {
-      // 此处因为如果不调用退出全屏方法 安卓和ios页面均会表现异常,安卓横屏不恢复竖屏,ios底部tabbar渲染异常
-      this.videoContext.exitFullScreen();
-      Home.microAideoHistoryAdd({ VideoId: this.curVideoId, PlaySeconds: Number(this.videoPlayTime) });
-      setTimeout(() => {
-        this.curVideoId = 0;
-        this.videoContext = null;
-      }, 200);
-    },
-    //播放的权限判断
-    handelPlay(item) {
-      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
-        if (item.AuthInfo.HasPermission == 1) {
-          item.Type == 1 ? this.audioPlayBack(item) : this.handelVideoPlay(item);
-        } else {
-          this.hasPermission = item.AuthInfo.HasPermission;
-          this.jurisdictionList.ActivityId = item.Type == 1 ? item.ActivityId : item.Id;
-          this.jurisdictionList.isAudioVideo = item.Type;
-          if (this.hasPermission == 2) {
-            this.jurisdictionList.SellerMobile = item.AuthInfo.SellerMobile;
-            this.jurisdictionList.SellerName = item.AuthInfo.SellerName;
-            this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
-            this.isShowhasPermission = true;
-          } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
-            this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
-            this.applyForIsShow = true;
-          }
-        }
-      } else {
-        this.$store.dispatch("checkHandle");
-      }
-    },
-    //视频的播放事件
-    handelVideoPlay(item) {
-      this.curVideoId = item.Id;
-      this.videoPlayTime = item.PlaySeconds;
-      this.globalBgAudioManager.stop();
-      setTimeout(() => {
-        this.videoContext = wx.createVideoContext(item.toString());
-      }, 300);
-      Home.microAideoHistoryAdd({ VideoId: item.Id });
-    },
-    //音频的播放事件
-    async audioPlayBack(item) {
-      this.curVideoId = 0;
-      this.videoContext && this.videoContext.stop;
-      this.$store.commit("audioBg/parseIntAudio", true);
-      // 判断是否为同一个音频
-      if (this.$store.state.audioBg.indexId == item.ActivityId) {
-        if (this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.play();
-        } else {
-          this.globalBgAudioManager.pause();
-        }
-      } else {
-        let VoiceList = {
-          Url: item.ResourceUrl,
-          Name: item.Title,
-          PlaySeconds: item.PlaySeconds,
-        };
-        this.$store.commit("audioBg/addAudio", { list: VoiceList, indexId: item.ActivityId, activityTitle: item.Title });
-      }
-      this.showAudioPop = true;
-    },
-    //音视频的背景色 文字颜色
-    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, "background-color": back_ground };
-      return _isColor;
-    },
-    //音视频的图标
-    classifyIcon(item) {
-      return MultimediaIcon.find((key) => key.name == item).audio;
-    },
-  },
-  onLoad(options) {
-    wx.hideShareMenu({
-      menus: ["shareAppMessage", "shareTimeline"],
-    });
-    this.getHeaderTab();
-    if (options.text) {
-      this.searchTxt = options.text;
-      this.getDataList();
-    }
-    this.radioSelect = options.isType == 1 ? 2 : Number(options.isType);
-    // 获取历史搜索记录
-    if (this.$db.get("historySearchList")) {
-      let historyList = JSON.parse(this.$db.get("historySearchList"));
-      this.historySearchList = historyList;
-    }
-  },
-  onShow() {
-    this.$store.dispatch("statistics", { PageType: "SummarySearch" });
-    this.getKeyWord();
-    this.researchHotKeyWord();
-    this.$store.commit("audioBg/parseIntAudio", true);
-  },
-  onHide() {
-    this.$store.commit("audioBg/parseIntAudio", false);
-    this.curVideoId = 0;
-  },
-  /** 用户点击分享*/
-  onShareAppMessage: function ({ from, target }) {
-    if (from === "button") {
-      let item = target.dataset.item;
-      let audio_id = item.Type == 1 ? item.Id : "";
-      let video_id = item.Type == 2 ? item.Id : "";
-      return {
-        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "您手边的弘则研究素材检索库",
-        path: "/pages/index/index?topTabsActive=4" + "&audioShareId=" + audio_id + "&videoShareId=" + video_id,
-      };
-    }
-  },
-  // 上拉加载this.resultList
-  onReachBottom: Throttle(function () {
-    if (!this.resultList.length && !this.videoAudioList.length) return;
-    if (this.status === "nomore") return;
-    this.status = "loading";
-    this.pageNum++;
-    if (this.radioSelect == 4) return this.getDataList();
-    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";
-  }),
-};
-</script>
-
-<style lang="scss">
-.search-container {
-  background-color: #fff;
-  padding-bottom: 30rpx;
-  .sticky-content {
-    position: sticky;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: 99;
-    padding-bottom: 10rpx;
-    background-color: #fff;
-  }
-  .searchTarget-header {
-    padding: 0 34rpx;
-    width: 100%;
-    position: relative;
-    padding: 30rpx 0;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    .sea_ipt_placeholder {
-      color: #8d8d8d;
-    }
-    .sea_ipt {
-      width: 682rpx;
-      height: 70rpx;
-      line-height: 70rpx;
-      box-sizing: border-box;
-      border: 1rpx solid #e5e5e5;
-      background-color: rgba(245, 245, 245, 0.2);
-      font-size: 26rpx;
-      color: #4a4a4a;
-      padding: 0 180rpx 0 78rpx;
-      border-radius: 70rpx;
-    }
-    .sea_ico {
-      width: 31rpx;
-      height: 31rpx;
-      position: absolute;
-      left: 68rpx;
-      top: 50%;
-      transform: translateY(-50%);
-    }
-    .ipt-right {
-      display: flex;
-      align-items: center;
-      position: absolute;
-      right: 59rpx;
-      top: 50%;
-      transform: translateY(-50%);
-      color: #3385ff;
-      .line {
-        margin: 0 21rpx;
-        color: #e0e0e0;
-      }
-    }
-  }
-  .radio-content {
-    width: 100%;
-    padding-left: 58rpx;
-    background-color: #fff;
-    display: flex;
-  }
-  .search-cont {
-    .search-cont-top {
-      padding: 0 34rpx 0;
-      margin-bottom: 10rpx;
-      padding-top: 20rpx;
-      &:last-child {
-        margin-bottom: 0;
-      }
-      .cont-tit {
-        font-size: 32rpx;
-        margin-bottom: 20rpx;
-        font-weight: 500;
-        display: flex;
-        justify-content: space-between;
-        .empty_ico {
-          width: 32rpx;
-          height: 33rpx;
-        }
-      }
-      .targetList {
-        display: flex;
-        flex-wrap: wrap;
-        font-size: 28rpx;
-        .target-item {
-          width: 50%;
-          margin-bottom: 20rpx;
-        }
-        .chart-item {
-          width: 100%;
-          margin-bottom: 20rpx;
-        }
-      }
-    }
-    .result-cont {
-      padding: 0 34rpx 0;
-      padding-left: 21rpx;
-      .result-list {
-        display: flex;
-        align-items: center;
-        color: #333;
-        padding-bottom: 30rpx;
-        border-bottom: 1rpx solid #ebedf0;
-        margin-bottom: 30rpx;
-        .result_ico {
-          width: 28rpx;
-          height: 28rpx;
-          margin-right: 20rpx;
-        }
-        text {
-          display: inline;
-        }
-        .highlight {
-          color: #3385ff;
-        }
-      }
-    }
-    .result-data {
-      min-height: calc(100vh - 130rpx);
-      padding: 20rpx 34rpx 40rpx;
-      display: flex;
-      background-color: #f7f7f7;
-      .report-ul {
-        width: 50%;
-        &:first-child {
-          margin-right: 10rpx;
-        }
-        .report-item {
-          padding: 20rpx 20rpx 24rpx 20rpx;
-          margin-bottom: 20rpx;
-          border-radius: 8rpx;
-          box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
-          background: #fff;
-          .item-content {
-            font-size: 24rpx;
-            line-height: 40rpx;
-            color: #7f7f7f;
-            display: -webkit-box;
-            word-break: break-all;
-            text {
-              display: inline;
-            }
-          }
-          .line {
-            margin: 18rpx 0;
-            content: "";
-            width: 100%;
-            height: 1px;
-            padding: 0 32rpx;
-            box-sizing: border-box;
-            background-color: #e5e5e5;
-            -webkit-transform: scale(1, 0.5);
-            transform: scale(1, 0.5);
-            -webkit-transform-origin: center bottom;
-            transform-origin: center bottom;
-          }
-          .item-title {
-            font-size: 28rpx;
-            color: #4a4a4a;
-            margin-bottom: 10rpx;
-            position: relative;
-            text-indent: 0.5em;
-            &::before {
-              content: "";
-              position: absolute;
-              top: 5rpx;
-              left: 0;
-              width: 6rpx;
-              height: 31rpx;
-              background-color: #3385ff;
-            }
-            text {
-              display: inline;
-            }
-          }
-          .chart-title {
-            height: 72rpx;
-            padding-bottom: 10rpx;
-            text-indent: 0em;
-            &::before {
-              display: none;
-            }
-          }
-          .item-abstract {
-            font-size: 26rpx;
-            color: #6a6a6a;
-            margin-bottom: 10rpx;
-            .report_ico {
-              width: 32rpx;
-              height: 26rpx;
-              margin-right: 20rpx;
-              display: inline-block;
-            }
-          }
-          .item-createtime {
-            color: #acacac;
-            font-size: 24rpx;
-          }
-        }
-      }
-      .chart-tag {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        padding-top: 1rpx;
-        height: 36rpx;
-        .tag-item {
-          width: 148rpx;
-          border-radius: 28rpx;
-          border: 2rpx solid rgba(49, 137, 255, 1);
-          overflow: hidden;
-          color: #3385ff;
-          text-align: center;
-          line-height: 32rpx;
-        }
-      }
-      .item-content-img {
-        display: flex;
-        align-items: center;
-        width: 330rpx;
-        margin-left: -15rpx;
-        margin-bottom: -20rpx;
-        image {
-          width: 100%;
-          height: 262rpx;
-          vertical-align: middle;
-        }
-      }
-    }
-  }
-  .tab-cont {
-    width: 100%;
-    display: flex;
-    align-items: center;
-    padding: 20rpx 30rpx 0;
-    font-size: 32rpx;
-    &::-webkit-scrollbar {
-      width: 0;
-      height: 0;
-      display: none;
-    }
-    .item {
-      position: relative;
-      padding-bottom: 16rpx;
-      margin-right: 50rpx;
-      flex-shrink: 0;
-      .active {
-        position: absolute;
-        left: 0;
-        bottom: 0;
-        height: 4rpx;
-        width: 100%;
-        border-radius: 2rpx;
-
-        font-weight: 500;
-        background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
-      }
-    }
-    .tabs-active {
-      color: #3385ff;
-    }
-  }
-  @import "@/components/audioVideo.scss";
-}
-</style>

+ 0 - 807
pages-my/search/search.vue

@@ -1,807 +0,0 @@
-<template>
-  <view class="search-container container">
-    <view class="sticky-content">
-      <view class="searchTarget-header">
-        <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
-        <icon type="search" size="15" class="sea_ico" />
-        <view class="ipt-right">
-          <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
-          <text class="line">|</text>
-          <text @click="searchHandle" style="color: #3385ff">搜索</text>
-        </view>
-      </view>
-      <view class="radio-content">
-        <van-radio-group :value="radioSelect" @change="onChangeRadio" direction="horizontal">
-          <block v-for="item in radioSelectList" :key="item.Id">
-            <van-radio v-if="item.IsShow" :name="item.Id" icon-size="16">{{ item.Name }}</van-radio>
-          </block>
-        </van-radio-group>
-      </view>
-      <view class="tab-cont" v-if="radioSelect == 2 && isResult">
-        <view :class="['item', item.mode == orderColumn && 'tabs-active text_twoLine']" v-for="item in tabBars" :key="item.mode" @click.stop="toggleTab(item)">
-          {{ item.PermissionName }}
-          <view class="active" v-if="orderColumn === item.mode"></view>
-        </view>
-      </view>
-    </view>
-    <view class="search-cont" v-if="!isResult">
-      <view class="search-cont-top">
-        <view class="cont-tit">
-          <text>热搜关键词:</text>
-        </view>
-        <view class="targetList">
-          <view class="target-item" v-for="(item, index) in hotKeyWord" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
-        </view>
-      </view>
-      <view class="search-cont-top">
-        <view class="cont-tit">
-          <text>推荐关键词:</text>
-        </view>
-        <view class="targetList">
-          <view class="target-item" v-for="(item, index) in keywordList" :key="index" @click="chooseTarget(item)"># {{ item }}</view>
-          <view class="chart-item" v-for="(item, index) in chartWordList" :key="index" @click="chooseTarget(item.KeyWord)"># {{ item.KeyWord }}</view>
-        </view>
-      </view>
-      <view class="search-cont-top" v-if="historySearchList.length">
-        <view class="cont-tit">
-          <text>搜索历史:</text>
-          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/empty_ico.png" class="empty_ico" @click="clearHistory"></image>
-        </view>
-        <view class="targetList">
-          <block v-for="(item, index) in historySearchList" :key="index">
-            <view v-if="index < 8" class="target-item" @click="chooseTarget(item)"># {{ item }}</view>
-          </block>
-        </view>
-      </view>
-    </view>
-    <!-- 内容地方 -->
-    <view class="search-cont" v-else>
-      <block v-if="haveResult">
-        <view class="audio-video-content" v-if="radioSelect == 4">
-          <view :class="item.Type == 1 ? 'audio-item' : 'video-item'" v-for="item in videoAudioList" :key="item.Id">
-            <view class="cover-item" :style="{ 'background-image': 'url(' + item.BackgroundImg + ')' }">
-              <block v-if="item.Type == 2">
-                <video
-                  :id="item.Id"
-                  :src="item.ResourceUrl"
-                  :poster="item.BackgroundImg"
-                  enable-play-gesture
-                  object-fit="contain"
-                  show-mute-btn
-                  autoplay
-                  @ended="handleVideoEnd"
-                  v-if="item.Id == curVideoId"
-                ></video>
-                <image v-else class="img-bg" @click="handelPlay(item)" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/play_icon_index.png"></image>
-              </block>
-              <block v-else>
-                <image
-                  class="img-bg"
-                  @click.stop="handelPlay(item)"
-                  :src="
-                    curVoiceId === item.ActivityId && !curAudioPaused
-                      ? 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_stop_index.png'
-                      : 'https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/back_group_index.png'
-                  "
-                ></image>
-              </block>
-              <text class="time">{{ item.PublishTime }}</text>
-            </view>
-            <view class="title-share">
-              <view class="title text_twoLine">{{ item.Title }}</view>
-              <view class="share">
-                <view class="share-text" :style="[classifyColor(item.ChartPermissionName)]">
-                  <image :src="classifyIcon(item.ChartPermissionName)"></image>
-                  {{ item.Type == 1 ? "音频" : "视频" }}|{{ item.ChartPermissionName }}
-                </view>
-                <button class="share-icon" open-type="share" :data-item="item">
-                  <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/share-btn-icon.png"></image>
-                </button>
-              </view>
-            </view>
-          </view>
-        </view>
-        <view class="result-data" v-else>
-          <view class="report-ul">
-            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
-              <view class="item-content-img" v-if="report.BodyHtml">
-                <image :src="report.BodyHtml" mode=""></image>
-              </view>
-              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-              <view class="line"></view>
-              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
-              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
-              <view class="item-createtime chart-tag" v-else>
-                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
-                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
-              </view>
-            </view>
-          </view>
-          <view class="report-ul">
-            <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
-              <view class="item-content-img" v-if="report.BodyHtml">
-                <image :src="report.BodyHtml" mode=""></image>
-              </view>
-              <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
-              <view class="line"></view>
-              <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
-              <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
-              <view class="item-createtime chart-tag" v-else>
-                <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
-                <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
-              </view>
-            </view>
-          </view>
-        </view>
-        <u-loadmore :status="status" icon-type="flower" :load-text="loadText" margin-top="20" v-if="pageNum > 1" />
-      </block>
-      <view class="nodata" v-else>
-        <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
-        <text>未找到您想搜索的内容</text>
-      </view>
-    </view>
-    <view v-if="showAudioBox">
-      <audioModule :showAudioPop.sync="showAudioPop" />
-    </view>
-    <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
-  </view>
-</template>
-
-<script>
-import { Search, Home } from "@/config/api.js";
-import { Debounce, Throttle } from "@/config/util.js";
-import { color_word_bg, MultimediaIcon } from "@/utils/styleClassify";
-import audioModule from "@/components/audioModule/index";
-import modalDialog from "@/components/modalDialog.vue";
-let app = getApp({ allowDefault: true });
-export default {
-  data() {
-    return {
-      searchTxt: "", //搜索关键字
-      isResult: false, //显示搜索结果
-      haveResult: true, //是否有搜索数据
-      // 历史搜索列表
-      historySearchList: [],
-      // 关键字列表
-      keywordList: [],
-      chartWordList: [],
-      // 搜索结果列表
-      resultList: [],
-      resultDataList: [],
-      indList: [],
-      pageNum: 1,
-      pageSize: 10,
-      totalPage: 0,
-      hotKeyWord: [],
-      radioSelect: 1,
-      radioSelectList: [], //搜索的tabs
-      tabBars: [
-        {
-          PermissionName: "匹配度排序",
-          mode: "Matching",
-        },
-        {
-          PermissionName: "综合排序",
-          mode: "Comprehensive",
-        },
-        {
-          PermissionName: "发布时间排序",
-          mode: "PublishDate",
-        },
-      ],
-      orderColumn: "Matching",
-      status: "loadmore",
-      loadText: {
-        loadmore: "上拉加载更多",
-        loading: "加载中",
-        nomore: "已经到底了",
-      },
-      videoContext: null,
-      showAudioPop: false, //播放音频
-      isShowhasPermission: false, //  联系销售的提交申请
-      applyForIsShow: false, // 提交申请
-      jurisdictionList: {},
-      hasPermission: "", //权限
-      audioShareId: "", //通过分享单个音频点进页面时使用
-      videoShareId: "", //通过分享单个视频点进页面时使用
-      videoAudioList: [], //音频  视频 list
-      curVideoId: 0, //音频Id
-      videoPlayTime: 0, //
-    };
-  },
-  components: { modalDialog, audioModule },
-  computed: {
-    curVoiceId() {
-      //当前正在播放的音频id
-      return this.$store.state.audioBg.indexId;
-    },
-    curAudioPaused() {
-      //当前音频是否暂停状态
-      return this.$store.state.audioBg.paused;
-    },
-    showAudioBox() {
-      return this.$store.state.audioBg.parseIntShow;
-    },
-  },
-  watch: {
-    searchTxt(newVal) {
-      if (newVal.length <= 0) {
-        this.isResult = false;
-        this.orderColumn = "Matching";
-      }
-    },
-  },
-  methods: {
-    //获取顶部导航
-    async getHeaderTab() {
-      const res = await Home.headerTab({
-        SearchPage: 1,
-      });
-      if (res.Ret === 200) {
-        this.radioSelectList = res.Data || [];
-      }
-    },
-    //获取热搜关键词的请求
-    async researchHotKeyWord() {
-      const res = await Search.getKeys();
-      if (res.Ret === 200) {
-        this.hotKeyWord = res.Data.ListHot || [];
-        this.chartWordList = res.Data.List || [];
-        this.keywordList = res.Data.Item ? res.Data.Item.ConfigValue.split(",") : [];
-      }
-    },
-    //点击了搜索的变化
-    onChangeRadio(value) {
-      this.radioSelect = value.detail;
-      this.orderColumn = "Matching";
-      let srt = this.searchTxt.replace(/^\s+|\s+$/g, "");
-      if (!srt) return this.$util.toast("请输入关键字");
-      this.dataInit();
-      this.getDataList();
-    },
-    /* 获取关键词 */
-    getKeyWord() {
-      Search.getKeys().then((res) => {
-        if (res.Ret === 200) {
-          this.keywordList = res.Data.Item.ConfigValue ? res.Data.Item.ConfigValue.split(",") : [];
-        }
-      });
-    },
-    // 选择历史搜索
-    chooseTarget(item) {
-      this.searchTxt = item;
-      this.SecName = item;
-      this.dataInit();
-      this.indList = [];
-      if (!this.historySearchList.includes(this.searchTxt)) {
-        this.historySearchList.unshift(this.searchTxt);
-        this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
-      }
-      this.getDataList();
-    },
-    // 拼接
-    join(str, key) {
-      return str.replace(new RegExp(`${key}`, "g"), `%%${key}%%`).split("%%");
-    },
-    // 搜索数据
-    searchHandle: Debounce(function () {
-      if (this.searchTxt) {
-        //添加搜索记录
-        if (!this.historySearchList.includes(this.searchTxt)) {
-          this.historySearchList.unshift(this.searchTxt);
-          this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
-        }
-        this.indList = [];
-        this.dataInit();
-        this.getDataList();
-      } else {
-        this.$util.toast("请输入关键字");
-      }
-    }),
-    // 查找数据
-    async getDataList() {
-      this.isResult = true;
-      if (this.radioSelect == 4) return this.getAudioVideoList();
-      const res = await Search.getArtAndChartList({
-        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
-        OrderColumn: this.radioSelect == 2 ? this.orderColumn : "",
-        ListType: this.radioSelect,
-      });
-      if (res.Ret === 200) {
-        this.totalPage = res.Data.Paging.Totals;
-        if (this.radioSelect == 1) {
-          if (!res.Data.List.length) {
-            this.resultDataList = res.Data.ChartList || [];
-          } else if (!res.Data.ChartList.length) {
-            this.resultDataList = res.Data.List || [];
-          } else {
-            this.resultDataList.push(res.Data.List.shift());
-            let newArr = [];
-            let newArrTwo = [];
-            for (let i = 0; i < res.Data.List.length; i += 2) {
-              newArr.push(res.Data.List.slice(i, i + 2));
-            }
-            for (let i = 0; i < res.Data.ChartList.length; i += 2) {
-              newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
-            }
-            let arr = [];
-            newArr.forEach((item, index) => {
-              if (newArrTwo[index]) {
-                arr.push(newArrTwo[index], item);
-              } else {
-                arr.push(item);
-              }
-            });
-            this.resultDataList = this.resultDataList.concat(arr.flat(Infinity));
-          }
-          this.haveResult = this.resultDataList.length ? true : false;
-        } else if (this.radioSelect == 2) {
-          this.resultDataList = res.Data.List || [];
-          this.haveResult = this.resultDataList.length ? true : false;
-        } else {
-          this.resultDataList = res.Data.ChartList || [];
-          this.haveResult = this.resultDataList.length ? true : false;
-        }
-        this.resultList = this.haveResult ? this.resultDataList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize) : [];
-      }
-    },
-    async getAudioVideoList() {
-      const res = await Home.microRoadshowList({
-        PageSize: this.pageSize,
-        CurrentIndex: this.pageNum,
-        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
-      });
-      if (res.Ret === 200) {
-        this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
-        if (this.pageNum == 1) {
-          this.videoAudioList = res.Data.List || [];
-          this.haveResult = this.videoAudioList.length > 0 ? true : false;
-        } else {
-          this.videoAudioList = this.videoAudioList.concat(res.Data.List);
-        }
-      }
-    },
-    /* 表单清空 */
-    clearIpt() {
-      this.searchTxt = "";
-      this.dataInit();
-      this.isTabAct = false;
-    },
-    /* 进入详情 校验是否有该品种权限 */
-    goDetail(item) {
-      if (item.Source == 2) {
-        /* 无需授权且已绑定 检验是或否有权限 */
-        this.$store.dispatch("checkHandle", "/pages-my/chartPage/chartPage?id=" + item.ChartId);
-      } else {
-        /* 无需授权且已绑定 检验是或否有权限 */
-        this.$store.dispatch("checkHandle", "/pages-my/reportDetail/reportDetail?id=" + item.ArticleId);
-      }
-    },
-    /* 历史搜索清空 */
-    clearHistory() {
-      this.historySearchList = [];
-      this.$db.del("historySearchList");
-    },
-    //获取数据的初始值
-    dataInit() {
-      this.pageNum = 1;
-      this.resultList = [];
-      this.resultDataList = [];
-      this.videoAudioList = [];
-      this.status = "loadmore";
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-    },
-    //tabs切换事件
-    toggleTab(item) {
-      this.orderColumn = item.mode;
-      this.pageNum = 1;
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-      this.resultList = [];
-      this.getDataList();
-      uni.pageScrollTo({
-        scrollTop: 0,
-        duration: 0,
-      });
-    },
-    //视频播放结束
-    handleVideoEnd() {
-      // 此处因为如果不调用退出全屏方法 安卓和ios页面均会表现异常,安卓横屏不恢复竖屏,ios底部tabbar渲染异常
-      this.videoContext.exitFullScreen();
-      Home.microAideoHistoryAdd({ VideoId: this.curVideoId, PlaySeconds: Number(this.videoPlayTime) });
-      setTimeout(() => {
-        this.curVideoId = 0;
-        this.videoContext = null;
-      }, 200);
-    },
-    //播放的权限判断
-    handelPlay(item) {
-      if (!this.$store.state.isAuth && !this.$store.state.isBind) {
-        if (item.AuthInfo.HasPermission == 1) {
-          item.Type == 1 ? this.audioPlayBack(item) : this.handelVideoPlay(item);
-        } else {
-          this.hasPermission = item.AuthInfo.HasPermission;
-          this.jurisdictionList.ActivityId = item.Type == 1 ? item.ActivityId : item.Id;
-          this.jurisdictionList.isAudioVideo = item.Type;
-          if (this.hasPermission == 2) {
-            this.jurisdictionList.SellerMobile = item.AuthInfo.SellerMobile;
-            this.jurisdictionList.SellerName = item.AuthInfo.SellerName;
-            this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
-            this.isShowhasPermission = true;
-          } else if (this.hasPermission == 3 || this.hasPermission == 4 || this.hasPermission == 5) {
-            this.jurisdictionList.PopupMsg = item.AuthInfo.PopupMsg;
-            this.applyForIsShow = true;
-          }
-        }
-      } else {
-        this.$store.dispatch("checkHandle");
-      }
-    },
-    //视频的播放事件
-    handelVideoPlay(item) {
-      this.curVideoId = item.Id;
-      this.videoPlayTime = item.PlaySeconds;
-      this.globalBgAudioManager.stop();
-      setTimeout(() => {
-        this.videoContext = wx.createVideoContext(item.toString());
-      }, 300);
-      Home.microAideoHistoryAdd({ VideoId: item.Id });
-    },
-    //音频的播放事件
-    async audioPlayBack(item) {
-      this.curVideoId = 0;
-      this.videoContext && this.videoContext.stop;
-      this.$store.commit("audioBg/parseIntAudio", true);
-      // 判断是否为同一个音频
-      if (this.$store.state.audioBg.indexId == item.ActivityId) {
-        if (this.globalBgAudioManager.paused) {
-          this.globalBgAudioManager.play();
-        } else {
-          this.globalBgAudioManager.pause();
-        }
-      } else {
-        let VoiceList = {
-          Url: item.ResourceUrl,
-          Name: item.Title,
-          PlaySeconds: item.PlaySeconds,
-        };
-        this.$store.commit("audioBg/addAudio", { list: VoiceList, indexId: item.ActivityId, activityTitle: item.Title });
-      }
-      this.showAudioPop = true;
-    },
-    //音视频的背景色 文字颜色
-    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, "background-color": back_ground };
-      return _isColor;
-    },
-    //音视频的图标
-    classifyIcon(item) {
-      return MultimediaIcon.find((key) => key.name == item).audio;
-    },
-  },
-  onLoad(options) {
-    wx.hideShareMenu({
-      menus: ["shareAppMessage", "shareTimeline"],
-    });
-    this.getHeaderTab();
-    if (options.text) {
-      this.searchTxt = options.text;
-      this.getDataList();
-    }
-    this.radioSelect = options.isType == 1 ? 2 : Number(options.isType);
-    // 获取历史搜索记录
-    if (this.$db.get("historySearchList")) {
-      let historyList = JSON.parse(this.$db.get("historySearchList"));
-      this.historySearchList = historyList;
-    }
-  },
-  onShow() {
-    this.$store.dispatch("statistics", { PageType: "SummarySearch" });
-    this.getKeyWord();
-    this.researchHotKeyWord();
-    this.$store.commit("audioBg/parseIntAudio", true);
-  },
-  onHide() {
-    this.$store.commit("audioBg/parseIntAudio", false);
-    this.curVideoId = 0;
-  },
-  /** 用户点击分享*/
-  onShareAppMessage: function ({ from, target }) {
-    if (from === "button") {
-      let item = target.dataset.item;
-      let audio_id = item.Type == 1 ? item.Id : "";
-      let video_id = item.Type == 2 ? item.Id : "";
-      return {
-        title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "您手边的弘则研究素材检索库",
-        path: "/pages/index/index?topTabsActive=4" + "&audioShareId=" + audio_id + "&videoShareId=" + video_id,
-      };
-    }
-  },
-  // 上拉加载this.resultList
-  onReachBottom: Throttle(function () {
-    if (!this.resultList.length && !this.videoAudioList.length) return;
-    if (this.status === "nomore") return;
-    this.status = "loading";
-    this.pageNum++;
-    if (this.radioSelect == 4) return this.getDataList();
-    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";
-  }),
-};
-</script>
-
-<style lang="scss">
-.search-container {
-  background-color: #fff;
-  padding-bottom: 30rpx;
-  .sticky-content {
-    position: sticky;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: 99;
-    padding-bottom: 10rpx;
-    background-color: #fff;
-  }
-  .searchTarget-header {
-    padding: 0 34rpx;
-    width: 100%;
-    position: relative;
-    padding: 30rpx 0;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    .sea_ipt_placeholder {
-      color: #8d8d8d;
-    }
-    .sea_ipt {
-      width: 682rpx;
-      height: 70rpx;
-      line-height: 70rpx;
-      box-sizing: border-box;
-      border: 1rpx solid #e5e5e5;
-      background-color: rgba(245, 245, 245, 0.2);
-      font-size: 26rpx;
-      color: #4a4a4a;
-      padding: 0 180rpx 0 78rpx;
-      border-radius: 70rpx;
-    }
-    .sea_ico {
-      width: 31rpx;
-      height: 31rpx;
-      position: absolute;
-      left: 68rpx;
-      top: 50%;
-      transform: translateY(-50%);
-    }
-    .ipt-right {
-      display: flex;
-      align-items: center;
-      position: absolute;
-      right: 59rpx;
-      top: 50%;
-      transform: translateY(-50%);
-      color: #3385ff;
-      .line {
-        margin: 0 21rpx;
-        color: #e0e0e0;
-      }
-    }
-  }
-  .radio-content {
-    width: 100%;
-    padding-left: 58rpx;
-    background-color: #fff;
-    display: flex;
-  }
-  .search-cont {
-    .search-cont-top {
-      padding: 0 34rpx 0;
-      margin-bottom: 10rpx;
-      padding-top: 20rpx;
-      &:last-child {
-        margin-bottom: 0;
-      }
-      .cont-tit {
-        font-size: 32rpx;
-        margin-bottom: 20rpx;
-        font-weight: 500;
-        display: flex;
-        justify-content: space-between;
-        .empty_ico {
-          width: 32rpx;
-          height: 33rpx;
-        }
-      }
-      .targetList {
-        display: flex;
-        flex-wrap: wrap;
-        font-size: 28rpx;
-        .target-item {
-          width: 50%;
-          margin-bottom: 20rpx;
-        }
-        .chart-item {
-          width: 100%;
-          margin-bottom: 20rpx;
-        }
-      }
-    }
-    .result-cont {
-      padding: 0 34rpx 0;
-      padding-left: 21rpx;
-      .result-list {
-        display: flex;
-        align-items: center;
-        color: #333;
-        padding-bottom: 30rpx;
-        border-bottom: 1rpx solid #ebedf0;
-        margin-bottom: 30rpx;
-        .result_ico {
-          width: 28rpx;
-          height: 28rpx;
-          margin-right: 20rpx;
-        }
-        text {
-          display: inline;
-        }
-        .highlight {
-          color: #3385ff;
-        }
-      }
-    }
-    .result-data {
-      min-height: calc(100vh - 130rpx);
-      padding: 20rpx 34rpx 40rpx;
-      display: flex;
-      background-color: #f7f7f7;
-      .report-ul {
-        width: 50%;
-        &:first-child {
-          margin-right: 10rpx;
-        }
-        .report-item {
-          padding: 20rpx 20rpx 24rpx 20rpx;
-          margin-bottom: 20rpx;
-          border-radius: 8rpx;
-          box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
-          background: #fff;
-          .item-content {
-            font-size: 24rpx;
-            line-height: 40rpx;
-            color: #7f7f7f;
-            display: -webkit-box;
-            word-break: break-all;
-            text {
-              display: inline;
-            }
-          }
-          .line {
-            margin: 18rpx 0;
-            content: "";
-            width: 100%;
-            height: 1px;
-            padding: 0 32rpx;
-            box-sizing: border-box;
-            background-color: #e5e5e5;
-            -webkit-transform: scale(1, 0.5);
-            transform: scale(1, 0.5);
-            -webkit-transform-origin: center bottom;
-            transform-origin: center bottom;
-          }
-          .item-title {
-            font-size: 28rpx;
-            color: #4a4a4a;
-            margin-bottom: 10rpx;
-            position: relative;
-            text-indent: 0.5em;
-            &::before {
-              content: "";
-              position: absolute;
-              top: 5rpx;
-              left: 0;
-              width: 6rpx;
-              height: 31rpx;
-              background-color: #3385ff;
-            }
-            text {
-              display: inline;
-            }
-          }
-          .chart-title {
-            height: 72rpx;
-            padding-bottom: 10rpx;
-            text-indent: 0em;
-            &::before {
-              display: none;
-            }
-          }
-          .item-abstract {
-            font-size: 26rpx;
-            color: #6a6a6a;
-            margin-bottom: 10rpx;
-            .report_ico {
-              width: 32rpx;
-              height: 26rpx;
-              margin-right: 20rpx;
-              display: inline-block;
-            }
-          }
-          .item-createtime {
-            color: #acacac;
-            font-size: 24rpx;
-          }
-        }
-      }
-      .chart-tag {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        padding-top: 1rpx;
-        height: 36rpx;
-        .tag-item {
-          width: 148rpx;
-          border-radius: 28rpx;
-          border: 2rpx solid rgba(49, 137, 255, 1);
-          overflow: hidden;
-          color: #3385ff;
-          text-align: center;
-          line-height: 32rpx;
-        }
-      }
-      .item-content-img {
-        display: flex;
-        align-items: center;
-        width: 330rpx;
-        margin-left: -15rpx;
-        margin-bottom: -20rpx;
-        image {
-          width: 100%;
-          height: 262rpx;
-          vertical-align: middle;
-        }
-      }
-    }
-  }
-  .tab-cont {
-    width: 100%;
-    display: flex;
-    align-items: center;
-    padding: 20rpx 30rpx 0;
-    font-size: 32rpx;
-    &::-webkit-scrollbar {
-      width: 0;
-      height: 0;
-      display: none;
-    }
-    .item {
-      position: relative;
-      padding-bottom: 16rpx;
-      margin-right: 50rpx;
-      flex-shrink: 0;
-      .active {
-        position: absolute;
-        left: 0;
-        bottom: 0;
-        height: 4rpx;
-        width: 100%;
-        border-radius: 2rpx;
-
-        font-weight: 500;
-        background: linear-gradient(90deg, #2e85ff 0%, #7eeaf6 100%);
-      }
-    }
-    .tabs-active {
-      color: #3385ff;
-    }
-  }
-  @import "@/components/audioVideo.scss";
-}
-</style>

+ 6 - 7
pages-search/activitySearch/activitySearch.vue

@@ -6,7 +6,7 @@
         <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
         <icon type="search" size="15" class="sea_ico" />
         <view class="ipt-right">
-          <icon type="clear" size="16" color="#E0E0E0" @click="clearIpt" />
+          <icon type="clear" size="16" color="#E0E0E0" v-if="searchTxt" @click="clearIpt" />
           <text class="line">|</text>
           <text @click="searchHandle" style="color: #3385ff">搜索</text>
         </view>
@@ -98,7 +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>
+                    <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>
@@ -175,8 +175,8 @@ import { activity, User, Search } from "@/config/api.js";
 import { Throttle } from "@/config/util.js";
 import modalDialog from "@/components/modalDialog.vue";
 import areaCode from "@/pages-activity/components/areaCode.vue";
-import myMixin from "../components/index.js";
-import myActivityMixin from "../components/indexActivity.js";
+import myMixin from "@/pages-activity/components/index.js";
+import myActivityMixin from "@/pages-activity/components/indexActivity.js";
 import freeCharge from "@/components/freeCharge";
 import audioModule from "@/components/audioModule/index";
 
@@ -435,7 +435,7 @@ export default {
   padding-top: 190rpx;
   padding-bottom: 30rpx;
 }
-@import "../components/indexActivity.scss";
+@import "@/pages-activity/components/indexActivity.scss";
 .activity-search-content {
   background-color: #f7f7f7;
   .ipt-right {
@@ -511,8 +511,7 @@ export default {
         height: 70rpx;
         line-height: 70rpx;
         box-sizing: border-box;
-        border: 1rpx solid #e5e5e5;
-        background-color: rgba(245, 245, 245, 0.2);
+        background: #F9F9F9;
         font-size: 26rpx;
         color: #4a4a4a;
         padding: 0 180rpx 0 78rpx;

+ 384 - 0
pages-search/components/activityBack.vue

@@ -0,0 +1,384 @@
+<template>
+  <view class="activity-content activity-search-content">
+    <!-- 活动列表 -->
+    <view :class="['activity-pages', tabsActiveSearch == 4 && 'content-padding']">
+      <view class="collect-ul">
+        <view class="collect-ltem" v-for="(item, index) in collectLists" :key="index">
+          <view class="title-date" @click="goDetail(item)">
+            <text :class="item.ActivityType == 1 ? '' : 'xianxia'">{{ item.ActivityType == 1 ? "线上" : "线下" }}</text>
+            {{ item.ActivityTimeText }}
+            <view class="audio-back" v-if="item.AudioLink" @click.stop="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>
+          </view>
+          <view class="item-li">
+            <view class="item-img" @click="goDetail(item)">
+              <image :src="item.ImgUrl"> </image>
+              <text v-if="item.ActiveState == 1" class="img-status begin">未开始</text>
+              <text v-else-if="item.ActiveState == 2" class="img-status proceed">进行中</text>
+              <text v-else class="img-status">已结束</text>
+              <view class="img-type">
+                <image :src="item.ImgUrlText" mode=""></image>
+              </view>
+            </view>
+            <view class="item">
+              <view class="item-text" @click="goDetail(item)">
+                <text class="activity-title"> {{ item.ActivityName }} </text>
+                <text class="text_twoLine" v-if="item.Expert">专家背景:{{ item.Expert }} </text>
+                <text class="text_twoLine" v-if="item.DistinguishedGuest">嘉宾:{{ item.DistinguishedGuest }} </text>
+                <text class="text_twoLine" v-if="item.Speaker">主讲人:{{ item.Speaker }}</text>
+              </view>
+              <block v-if="item.ActiveState == 1">
+                <view :class="['bottom-box', item.ActivityTypeId == 1 && item.IsLimitPeople == 0 && 'expert-item', item.City && 'city']">
+                  <view class="city-img" v-if="item.City">
+                    <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png"></image>
+                    {{ item.City }}
+                  </view>
+                  <view style="display: flex">
+                    <text v-if="item.IsShowOutboundCall && item.ActivityTypeId == 1" class="button" @click="signupIsAddOfCancel(item, 1)">{{ item.IsSignup == 1 ? "取消外呼" : "预约外呼" }}</text>
+                    <text v-if="item.IsShowAppointment" @click="summaryIsHandel(item)">{{ item.IsAppointment == 1 ? "取消纪要" : "预约纪要" }}</text>
+                    <text v-if="item.IsShowMeetingReminder" @click="meetingReminderAdd(item.ActivityId, item.IsCancelMeetingReminder)">
+                      {{ item.IsCancelMeetingReminder == 0 ? "消息提醒" : "取消提醒" }}
+                    </text>
+                    <view v-if="item.IsShowHelpSsk" style="width: 130rpx">
+                      <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>
+                      </block>
+                      <block v-else>
+                        <text class="button" v-if="item.IsSignup !== 1" @click="wanttosignup(item.ActivityId)">我要报名</text>
+                        <text class="button" v-else @click="signupIsAddOfCancel(item, 2)">{{ item.SignupType == 1 ? "取消外呼" : "取消报名" }}</text>
+                      </block>
+                    </block>
+                  </view>
+                </view>
+              </block>
+              <block v-else>
+                <view class="bottom-box city" v-if="item.City">
+                  <view class="city-img">
+                    <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/location.png" />
+                    {{ item.City }}
+                  </view>
+                </view>
+                <view class="bottom-box real-time" v-if="item.ActiveState == 2 && item.ActivityTypeId == 1">
+                  <text class="button" @click="askingGo(item, '提问')">实时提问</text>
+                </view>
+              </block>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <!-- 各种自定义弹框 -->
+    <modalDialog
+      :isShow="isShow"
+      :signupType="signupType"
+      :goFollow="goFollow"
+      :signupStatus="signupStatus"
+      :hasPermission="hasPermission"
+      :jurisdictionList="jurisdictionList"
+      :editIsShow="editIsShow"
+      :isCancelShow="isCancelShow"
+      :idTypeCancel="idTypeCancel"
+      @cancelShowBtn="cancelEnsure"
+      :countryCode="countryCode"
+      :mobileEdit="mobileEdit"
+      :goOnNextStep="goOnNextStep"
+      :isShowhasPermission="isShowhasPermission"
+      :applyForIsShow="applyForIsShow"
+      :mailboxBinding="mailboxBinding"
+    />
+    <!-- 选择区号弹出层 -->
+    <areaCode :isAreaCode="isAreaCode" :areaCode="areaCode" />
+    <!-- 参会方式弹出层 -->
+    <view class="select-box">
+      <u-popup v-model="selectShow" mode="bottom">
+        <view style="color: #333333; font-size: 28rpxrpx">请选择参会方式</view>
+        <view style="color: #2c83ff" @click="signupAdd('id', 1)">预约外呼</view>
+        <view style="color: #2c83ff" @click="signupAdd('id', 2)">自主拨入</view>
+        <view style="color: #a9afb8" @click="selectShow = false">取消</view>
+      </u-popup>
+    </view>
+    <view v-if="showAudioBox">
+      <audioModule :showAudioPop.sync="showAudioPop" />
+    </view>
+    <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
+  </view>
+</template>
+
+<script>
+import modalDialog from "@/components/modalDialog.vue";
+import areaCode from "@/components/activity/areaCode.vue";
+import myMixin from "@/components/activity/index.js";
+import myActivityMixin from "@/components/activity/indexActivity.js";
+import freeCharge from "@/components/freeCharge";
+import audioModule from "@/components/audioModule/index";
+
+export default {
+  props: {
+    collectLists: {
+      type: Array,
+      default: [],
+    },
+    tabsActiveSearch: {
+      type: Number,
+    },
+  },
+  data() {
+    return {
+      isShowSearch: false,
+      status: "loadmore",
+      totalPage: "",
+      haveData: true,
+      activeState: 0, //活动进行状态
+      activeStateOption: [
+        {
+          name: "全部",
+          state: 0,
+        },
+        {
+          name: "可回放",
+          state: 1,
+        },
+      ],
+      selectShow: false,
+      showAudioPop: false,
+    };
+  },
+  mixins: [myMixin, myActivityMixin],
+  components: {
+    modalDialog,
+    areaCode,
+    freeCharge,
+    audioModule,
+  },
+  methods: {
+    //获取是否需要填写区号接口
+    countryCcode() {
+      User.countryCcode().then((res) => {
+        if (res.Ret == 200) {
+          this.isNeedAddCountryCode = res.Data.IsNeedAddCountryCode;
+        }
+      });
+    },
+    //点击了回放
+    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.$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;
+      }
+    },
+  },
+  computed: {
+    curVoiceId() {
+      //当前正在播放的音频id
+      return this.$store.state.audioBg.activityId;
+    },
+    curAudioPaused() {
+      //当前音频是否暂停状态
+      return this.$store.state.audioBg.paused;
+    },
+    showAudioBox() {
+      return this.$store.state.audioBg.parseIntShow;
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.activity-pages {
+  padding-bottom: 30rpx;
+}
+@import "@/components/activity/indexActivity.scss";
+.activity-search-content {
+  background-color: #f7f7f7;
+  .ipt-right {
+    z-index: 11;
+  }
+  .collect-ltem {
+    margin-top: 0 !important;
+    margin-bottom: 20rpx !important;
+  }
+  .select-conyent {
+    display: flex;
+    float: right;
+    margin-bottom: 20rpx;
+    height: 51rpx;
+    width: 252rpx;
+    border-radius: 47rpx;
+    overflow: hidden;
+    margin-right: 30rpx;
+    .state-item {
+      width: 126rpx;
+      height: 51rpx;
+      text-align: center;
+      line-height: 51rpx;
+      color: #999999;
+      font-size: 24rpx;
+      background-color: #f8f8fa;
+    }
+    .state-active-item {
+      background: #3385ff;
+      color: #fff;
+      border-radius: 47rpx;
+    }
+  }
+  .title-date {
+    position: relative;
+    .audio-back {
+      position: absolute;
+      right: 0;
+      top: 50%;
+      transform: translateY(-50%);
+      width: 99rpx;
+      height: 39rpx;
+      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;
+      }
+    }
+  }
+  .top-content {
+    width: 100%;
+    position: fixed;
+    top: 0;
+    left: 0;
+    z-index: 99;
+    background-color: #fff;
+    .searchTarget-header {
+      position: relative;
+      width: 100%;
+      background-color: #fff;
+      padding: 20rpx 0;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      .sea_ipt_placeholder {
+        color: #8d8d8d;
+      }
+      .sea_ipt {
+        width: 682rpx;
+        height: 70rpx;
+        line-height: 70rpx;
+        box-sizing: border-box;
+        background: #F9F9F9;
+        font-size: 26rpx;
+        color: #4a4a4a;
+        padding: 0 180rpx 0 78rpx;
+        border-radius: 70rpx;
+      }
+      .sea_ico {
+        width: 31rpx;
+        height: 31rpx;
+        position: absolute;
+        left: 60rpx;
+        top: 50%;
+        transform: translateY(-50%);
+      }
+      .ipt-right {
+        display: flex;
+        align-items: center;
+        position: absolute;
+        right: 59rpx;
+        top: 50%;
+        transform: translateY(-50%);
+        color: #3385ff;
+        .line {
+          margin: 0 21rpx;
+          color: #e0e0e0;
+        }
+      }
+    }
+    .search-cont {
+      height: calc(100vh - 200rpx);
+      padding-bottom: 20rpx;
+      overflow: hidden;
+      overflow-y: auto;
+      background-color: #f7f7f7;
+      .search-cont-top {
+        padding: 0 34rpx 0;
+        margin-bottom: 10rpx;
+        padding-top: 20rpx;
+        &:last-child {
+          margin-bottom: 0;
+        }
+        .cont-tit {
+          font-size: 32rpx;
+          margin-bottom: 20rpx;
+          font-weight: 500;
+          display: flex;
+          justify-content: space-between;
+          .empty_ico {
+            width: 32rpx;
+            height: 33rpx;
+          }
+        }
+        .targetList {
+          display: flex;
+          flex-wrap: wrap;
+          font-size: 28rpx;
+          .target-item {
+            width: 50%;
+            margin-bottom: 20rpx;
+          }
+          .chart-item {
+            width: 100%;
+            margin-bottom: 20rpx;
+          }
+        }
+      }
+    }
+  }
+}
+.content-padding {
+  padding-top: 90rpx !important;
+}
+</style>

+ 305 - 0
pages-search/components/report.vue

@@ -0,0 +1,305 @@
+<template>
+  <view class="container-report-page">
+    <view class="content-list">
+      <block v-if="reportPageData.ListHzResource.length">
+        <view class="resource">
+          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/zybico.jpg"></image>
+          <text>弘则资源包</text>
+        </view>
+        <text style="height: 1rpx; background: #ececec"></text>
+        <view class="list-ui" v-for="item in reportPageData.ListHzResource" :key="item.IndustrialManagementId" @click="themeDetails(item)">
+          <view class="item-title">
+            <text>
+              {{ item.IndustryName }}
+            </text>
+            <view class="publish">
+              {{ item.PublishDate }}更新
+              <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
+            </view>
+          </view>
+          <view class="read-more" v-if="item.IndustrialSubjectList">
+            <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
+              {{ val.SubjectName }}
+            </text>
+          </view>
+        </view>
+      </block>
+      <block v-if="reportPageData.ListYxResource.length">
+        <view class="resource">
+          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/zybico.jpg"></image>
+          <text>买方研选主题</text>
+        </view>
+        <text style="height: 1rpx; background: #ececec"></text>
+        <view class="list-ui" v-for="item in reportPageData.ListYxResource" :key="item.IndustrialManagementId" @click="themeDetails(item)">
+          <view class="item-title">
+            <text>
+              {{ item.IndustryName }}
+            </text>
+            <view class="publish">
+              {{ item.PublishDate }}更新
+              <u-icon name="arrow-right" color="#BDBDBD" size="34"></u-icon>
+            </view>
+          </view>
+          <view class="read-more" @click="themeDetails(item)" v-if="item.IndustrialSubjectList">
+            <text class="text-box text_oneLine" v-for="val in item.IndustrialSubjectList" :key="val.IndustrialSubjectId">
+              {{ val.SubjectName }}
+            </text>
+          </view>
+        </view>
+      </block>
+    </view>
+    <view class="content-report">
+      <block v-if="reportPageData.ListYxReport.length">
+        <view class="resource">
+          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_Yx.png"></image>
+          <text>买方研选报告</text>
+        </view>
+        <text style="height: 1rpx; background: #ececec"></text>
+        <view class="content-item" v-for="item in reportPageData.ListYxReport" :key="item.ArticleId">
+          <view class="item-user">
+            <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/user_report.png"></image>
+            <text> {{ item.NickName }}</text>
+          </view>
+          <view class="item-title">
+            <text style="display: inline" @click="goDetailReport(item)">
+              {{ item.Title }}
+            </text>
+            <text class="item-industry" v-if="item.IndustryName" @click="themeDetails(item)">&nbsp;&nbsp;&nbsp;#{{ item.IndustryName }}</text>
+          </view>
+          <view class="item-more">
+            <text>{{ item.PublishDate }}</text>
+            <view class="pv-ollect">
+              <view>
+                <image class="pv" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/examine_icon.png"></image>
+                {{ item.Pv }}
+              </view>
+              <view @click="collectClick(item)">
+                <image v-if="item.IsCollect" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_act.png"></image>
+                <image v-else src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/collect_ico.png"></image>
+                {{ item.CollectNum }}人收藏
+              </view>
+            </view>
+          </view>
+        </view>
+      </block>
+      <block v-if="reportPageData.ListHzReport.length">
+        <view class="resource">
+          <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/report_Hz.png"></image>
+          <text>弘则报告</text>
+        </view>
+        <text style="height: 1rpx; background: #ececec"></text>
+        <view class="content-item" v-for="item in reportPageData.ListHzReport" :key="item.ArticleId">
+          <view class="item-title">
+            <text style="display: inline" @click="goDetailReport(item)">
+              {{ item.Title }}
+            </text>
+            <text class="item-industry" @click="themeDetails(item)" v-if="item.IndustryName">&nbsp;&nbsp;&nbsp;#{{ item.IndustryName }}</text>
+          </view>
+          <view class="item-more">
+            <text>{{ item.PublishDate }}</text>
+          </view>
+        </view>
+      </block>
+    </view>
+    <u-modal
+      v-model="goFollowShow"
+      :content-style="{ fontSize: '32rpx' }"
+      @confirm="goFollowShowBtn"
+      :show-cancel-button="isCancelBtn"
+      :confirm-text="confirmText"
+      @cancel="isCancelBtn = false"
+      :show-title="false"
+      :cancel-style="{ borderRight: '1rpx solid #EBEBEB' }"
+      :confirm-style="{ fontWeight: '700' }"
+    >
+      <view class="slot-content">
+        <rich-text :nodes="accounts"></rich-text>
+      </view>
+    </u-modal>
+  </view>
+</template>
+
+<script>
+import {Report } from "@/config/api"
+export default {
+  components: {},
+  props: {
+    reportPageData: {
+      type: Object,
+    },
+  },
+  data() {
+    return {
+      goFollowShow: false,
+      confirmText: "知道了",
+      isCancelBtn: false,
+      accounts: "",
+    };
+  },
+  watch: {},
+  methods: {
+    //去往文章详情页面
+    goDetailReport(item) {
+      this.$store.dispatch("checkHandle", "/pages-my/reportDetail/reportDetail?id=" + item.ArticleId);
+    },
+    /* 进入详情 校验是否有该品种权限 */
+    goDetail(item) {
+      uni.navigateTo({
+        url: "/pages-report/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId,
+      });
+    },
+    //去往主题详情
+    themeDetails(item) {
+      if (item.Source === 1) {
+        //非严选
+        this.$store.dispatch("checkHandle", "/pages-report/IndustryReport/IndustryReport?id=" + item.IndustrialManagementId);
+      } else {
+        //严选
+        this.$store.dispatch("checkHandle", "/pages-report/researchTheme/researchTheme?id=" + item.IndustrialManagementId);
+      }
+    },
+    //收藏
+    async collectClick(item) {
+      const res = await Report.collectRpt({ ArticleId: item.ArticleId });
+      if (res.Ret === 200) {
+        item.IsCollect = !item.IsCollect;
+        item.IsCollect
+          ? (item.CollectNum += 1) &&
+            uni.showToast({
+              title: "收藏成功",
+              icon: "none",
+              duration: 2000,
+            })
+          : (item.CollectNum -= 1);
+        !item.IsCollect &&
+          uni.showToast({
+            title: "已取消收藏",
+            icon: "none",
+            duration: 2000,
+          });
+      }
+    },
+    //点击了去关注
+    goFollowShowBtn() {
+      if (this.confirmText == "去关注") {
+        uni.navigateTo({
+          url: "/pages-activity/accountsOfficial/accountsOfficial",
+        });
+      }
+      this.goFollowShow = false;
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.container-report-page {
+  background-color: #f5f6fa;
+  .content-list {
+    .list-ui {
+      background-color: #fff;
+      margin-top: 2rpx;
+    }
+    .item-title {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      height: 100rpx;
+      border-bottom: 1px solid #f6f6f6;
+      padding: 0 30rpx;
+      background-color: #fff;
+      .publish {
+        display: flex;
+        align-items: center;
+        color: #999999;
+        font-style: 26rpx;
+      }
+    }
+    .read-more {
+      margin-top: 20rpx;
+      display: flex;
+      flex-wrap: wrap;
+      margin-left: 30rpx;
+      .text-box {
+        margin-bottom: 27rpx;
+        margin-right: 15rpx;
+        padding: 0;
+        font-size: 24rpx;
+        color: #408fff;
+        width: 216rpx;
+        height: 46rpx;
+        line-height: 46rpx;
+        text-align: center !important;
+        background: url(~@/static/img/report_bg.png) no-repeat;
+        background-size: 100% 100%;
+        text-indent: 0em;
+      }
+    }
+  }
+  .resource {
+    padding: 0 30rpx;
+    background-color: #fff;
+    margin-top: 4rpx;
+    height: 91rpx;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: #333333;
+    font-size: 30rpx;
+    margin-top: 20rpx;
+    image {
+      width: 34rpx;
+      height: 36rpx;
+      margin-right: 10rpx;
+    }
+  }
+  .content-report {
+    .content-item {
+      background-color: #fff;
+      padding: 35rpx 20rpx 0;
+      .item-title {
+        font-weight: 500;
+        .item-industry {
+          margin-left: 10rpx;
+          color: #3385ff;
+          display: inline-block;
+        }
+      }
+      .item-user {
+        display: flex;
+        align-items: center;
+        color: #999999;
+        font-size: 28rpx;
+        margin-bottom: 20rpx;
+        image {
+          width: 23rpx;
+          height: 26rpx;
+          margin-right: 20rpx;
+        }
+      }
+      .item-more {
+        display: flex;
+        justify-content: space-between;
+        color: #cecece;
+        margin: 20rpx 0 0;
+        padding-bottom: 30rpx;
+        border-bottom: 1rpx solid #ececec;
+        .pv-ollect {
+          display: flex;
+          align-items: center;
+          width: 40%;
+          justify-content: space-between;
+          image {
+            width: 22rpx;
+            height: 21rpx;
+            margin-right: 10rpx;
+          }
+          .pv {
+            height: 16rpx;
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 166 - 0
pages-search/components/summaryChart.vue

@@ -0,0 +1,166 @@
+<template>
+    <view :class="['result-data-search-summary', 'content-padding']">
+      <view class="report-ul">
+        <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 === 0" @click="goDetail(report)">
+          <view class="item-content-img" v-if="report.BodyHtml">
+            <image :src="report.BodyHtml" mode=""></image>
+          </view>
+          <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
+          <view class="line"></view>
+          <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
+          <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
+          <view class="item-createtime chart-tag" v-else>
+            <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+            <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
+          </view>
+        </view>
+      </view>
+      <view class="report-ul">
+        <view class="report-item" v-for="(report, index) in resultList" :key="index" v-if="index % 2 !== 0" @click="goDetail(report)">
+          <view class="item-content-img" v-if="report.BodyHtml">
+            <image :src="report.BodyHtml" mode=""></image>
+          </view>
+          <view class="item-content" v-else><u-parse :html="report.Body[0] + '...'"></u-parse></view>
+          <view class="line"></view>
+          <view :class="['item-title', report.Source != 1 && 'chart-title text_twoLine']"><u-parse :html="report.Title"></u-parse></view>
+          <text class="item-createtime" v-if="report.Source == 1">{{ report.PublishDate }}</text>
+          <view class="item-createtime chart-tag" v-else>
+            <text class="tag-item" v-if="report.PtagName">{{ report.PtagName }}</text>
+            <text class="tag-item" v-if="report.CtagName">{{ report.CtagName }}</text>
+          </view>
+        </view>
+      </view>
+    </view>
+</template>
+
+<script>
+export default {
+  props: {
+    resultList: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {};
+  },
+  methods: {},
+};
+</script>
+
+<style lang="scss">
+.result-data-search-summary {
+  padding: 0rpx 34rpx;
+  display: flex;
+  background-color: #f5f6fa;
+  .report-ul {
+    width: 50%;
+    &:first-child {
+      margin-right: 10rpx;
+    }
+    .report-item {
+      padding: 20rpx 20rpx 24rpx 20rpx;
+      margin-bottom: 20rpx;
+      border-radius: 8rpx;
+      box-shadow: 0 3rpx 6rpx rgba($color: #000000, $alpha: 0.16);
+      background: #fff;
+      .item-content {
+        font-size: 24rpx;
+        line-height: 40rpx;
+        color: #7f7f7f;
+        display: -webkit-box;
+        word-break: break-all;
+        text {
+          display: inline !important;
+        }
+      }
+      .line {
+        margin: 18rpx 0;
+        content: "";
+        width: 100%;
+        height: 1px;
+        padding: 0 32rpx;
+        box-sizing: border-box;
+        background-color: #e5e5e5;
+        -webkit-transform: scale(1, 0.5);
+        transform: scale(1, 0.5);
+        -webkit-transform-origin: center bottom;
+        transform-origin: center bottom;
+      }
+      .item-title {
+        font-size: 28rpx;
+        color: #4a4a4a;
+        margin-bottom: 10rpx;
+        position: relative;
+        text-indent: 0.5em;
+        &::before {
+          content: "";
+          position: absolute;
+          top: 5rpx;
+          left: 0;
+          width: 6rpx;
+          height: 31rpx;
+          background-color: #3385ff;
+        }
+        text {
+          display: inline;
+        }
+      }
+      .chart-title {
+        height: 72rpx;
+        padding-bottom: 10rpx;
+        text-indent: 0em;
+        &::before {
+          display: none;
+        }
+      }
+      .item-abstract {
+        font-size: 26rpx;
+        color: #6a6a6a;
+        margin-bottom: 10rpx;
+        .report_ico {
+          width: 32rpx;
+          height: 26rpx;
+          margin-right: 20rpx;
+          display: inline-block;
+        }
+      }
+      .item-createtime {
+        color: #acacac;
+        font-size: 24rpx;
+      }
+    }
+  }
+  .chart-tag {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding-top: 1rpx;
+    height: 36rpx;
+    .tag-item {
+      width: 148rpx;
+      border-radius: 28rpx;
+      border: 2rpx solid rgba(49, 137, 255, 1);
+      overflow: hidden;
+      color: #3385ff;
+      text-align: center;
+      line-height: 32rpx;
+    }
+  }
+  .item-content-img {
+    display: flex;
+    align-items: center;
+    width: 330rpx;
+    margin-left: -15rpx;
+    margin-bottom: -20rpx;
+    image {
+      width: 100%;
+      height: 262rpx;
+      vertical-align: middle;
+    }
+  }
+}
+.content-padding {
+  padding-top: 90rpx !important;
+}
+</style>

+ 343 - 13
pages-search/indedxSearch/indedxSearch.vue

@@ -2,7 +2,16 @@
   <view class="container search-container">
     <view class="sticky-content">
       <view class="searchTarget-header">
-        <input type="text" placeholder="请输入关键字" placeholder-class="sea_ipt_placeholder" class="sea_ipt" v-model="searchTxt" focus="true" confirm-type="search" @confirm="searchHandle" />
+        <input
+          type="text"
+          :placeholder="searchPlaceholderList.TabSearch"
+          placeholder-class="sea_ipt_placeholder"
+          class="sea_ipt"
+          v-model="searchTxt"
+          focus="true"
+          confirm-type="search"
+          @confirm="searchHandle"
+        />
         <icon type="search" size="15" class="sea_ico" />
         <view class="ipt-right">
           <icon type="clear" size="16" color="#E0E0E0" v-show="searchTxt" @click="clearIpt" />
@@ -16,7 +25,31 @@
           <view class="item-act" v-if="tabsActive === item.id"></view>
         </view>
       </view>
+      <block v-if="searchTxt">
+        <view class="more-summary more-box" v-if="tabsActive === 1 || tabsActive === 2">
+          <view>
+            <text class="more-text" v-if="tabsActive === 1"> 纪要/图表 </text>
+          </view>
+          <view style="display: flex; align-items: center">
+            <view class="summary-select">
+              <text @click="summarySelectHandler(item, '纪要')" :class="['select-item', summarySelectActive == item.value && 'active-item']" v-for="item in summarySelect" :key="item.value">{{
+                item.name
+              }}</text>
+            </view>
+            <view v-if="tabsActive === 1" class="more-rivet" @click="tabsActiveMore(2)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
+          </view>
+        </view>
+        <view class="activity-select" style="display: flex; align-items: center; justify-content: flex-end" v-if="tabsActive == 4">
+          <view class="summary-select">
+            <text @click="summarySelectHandler(item, '活动')" :class="['select-item', activitySelectActive == item.value && 'active-item']" v-for="item in activitySelect" :key="item.value">
+              {{ item.name }}
+            </text>
+          </view>
+          <view v-if="tabsActive === 1" class="more-rivet" @click="tabsActiveMore(2)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
+        </view>
+      </block>
     </view>
+
     <view class="search-cont" v-if="!searchTxt">
       <view class="history" v-for="key in keywordList" :key="key.title">
         <view class="history-title title">
@@ -34,8 +67,25 @@
       </view>
     </view>
     <view v-else class="content">
-      <block v-if="1 == 1">
-        <view> </view>
+      <block v-if="haveResult">
+        <view>
+          <summary-chart :resultList="resultList" v-if="resultList.length && (tabsActive == 2 || tabsActive == 1)" />
+          <view class="more-report more-box" v-if="tabsActive === 1">
+            <text class="more-text"> 资源包/报告 </text>
+            <view>
+              <view class="more-rivet" @click="tabsActiveMore(3)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
+            </view>
+          </view>
+          <reportPage :reportPageData="reportPageData" v-if="Object.keys(reportPageData).length && (tabsActive == 3 || tabsActive == 1)" />
+
+          <view class="more-activity more-box" v-if="tabsActive === 1">
+            <text class="more-text"> 活动 </text>
+            <view>
+              <view class="more-rivet" @click="tabsActiveMore(4)"> 更多 <u-icon name="arrow-right" color="#3385FF" size="28"></u-icon> </view>
+            </view>
+          </view>
+          <activityBack :collectLists="collectList" :tabsActiveSearch="tabsActive" v-if="collectList.length && (tabsActive == 4 || tabsActive == 1)" />
+        </view>
       </block>
       <view class="nodata" v-else>
         <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/act_search.png" mode="" class="nodata_ico"></image>
@@ -46,16 +96,39 @@
 </template>
 
 <script>
-import { KeywordList, TabsList } from "./searchList";
-import { Search } from "@/config/api";
+import { KeywordList, TabsList, SummarySelect, ActivitySelect } from "./searchList";
+import { Search, activity, Report } from "@/config/api";
+import { Debounce, Throttle } from "@/config/util.js";
+import summaryChart from "../components/summaryChart.vue";
+import activityBack from "../components/activityBack.vue";
+import reportPage from "../components/report.vue";
+
 export default {
+  components: { summaryChart, activityBack, reportPage },
   data() {
     return {
-      searchTxt: "1",
+      searchTxt: "",
       historySearchList: [], //历史搜索
       hotKeyWord: [], //热搜关键词
       wordList: [], //推荐关键词
       tabsActive: 1, //搜索的筛选条件
+      resultList: [], //纪要与图表
+      resultDataList: [], ////纪要与图表
+      collectList: [], //活动的数据
+      reportPageData: {}, //报告的数据
+      haveResult: true, //是否有搜索数据
+      summarySelectActive: "Matching",
+      activitySelectActive: "0",
+      refresh: false, //正在下拉
+      pageNum: 1,
+      pageSize: null,
+      totalPage: 0,
+      status: "loadmore",
+      loadText: {
+        loadmore: "上拉加载更多",
+        loading: "加载中",
+        nomore: "已经到底了",
+      },
     };
   },
   computed: {
@@ -65,13 +138,42 @@ export default {
     tabsList() {
       return TabsList;
     },
+    summarySelect() {
+      return SummarySelect;
+    },
+    activitySelect() {
+      return ActivitySelect;
+    },
+  },
+  watch: {
+    tabsActive: {
+      handler(val) {
+        val == 1 ? (this.pageSize = 5) : (this.pageSize = 10);
+        console.log(val, this.pageSize);
+      },
+      deep: true,
+      immediate: true,
+    },
   },
   methods: {
     //搜索事件
-    searchHandle() {},
+    searchHandle() {
+      if (this.tabsActive) {
+        if (!this.historySearchList.includes(this.tabsActive)) {
+          this.historySearchList.unshift(this.tabsActive);
+          this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
+        }
+        this.getListInit();
+        this.getDataList();
+      } else {
+        this.$util.toast("请输入关键字");
+      }
+    },
     //清除搜索关键字
     clearIpt() {
       this.searchTxt = "";
+      this.tabsActive = 1;
+      this.getListInit();
     },
     //关键词 遍历的依赖
     relyOn(val) {
@@ -80,6 +182,8 @@ export default {
     //点击了筛选项目
     tabsHandel(item) {
       this.tabsActive = item.id;
+      this.getListInit();
+      this.getDataList();
     },
     //获取热搜关键词的请求
     async researchHotKeyWord() {
@@ -96,6 +200,143 @@ export default {
         this.historySearchList.unshift(item);
         this.$db.set("historySearchList", JSON.stringify(this.historySearchList));
       }
+      this.getListInit();
+      this.getDataList();
+    },
+    //搜索
+    getDataList() {
+      if (this.tabsActive == 1) {
+        this.synthesiz();
+        this.getReportList();
+        this.getActivityBackList();
+      } else if (this.tabsActive == 2) {
+        this.synthesiz();
+      } else if (this.tabsActive == 3) {
+        this.getReportList();
+      } else if (this.tabsActive == 4) {
+        this.getActivityBackList();
+      }
+    },
+    //纪要 图表的搜索
+    async synthesiz() {
+      const res = await Search.getArtAndChartList({
+        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
+        OrderColumn: this.summarySelectActive,
+        PageSize: this.pageSize,
+        CurrentIndex: this.pageNum,
+        ListType: 1,
+      });
+      if (res.Ret === 200) {
+        this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
+        this.totalPage = res.Data.Paging.Totals;
+        if (res.Data.List.length && res.Data.ChartList.length) {
+          if (this.pageNum == 1) {
+            this.resultDataList.push(res.Data.List.shift());
+            this.haveResult = this.resultDataList.length ? true : false;
+            if (this.refresh) {
+              uni.stopPullDownRefresh();
+              this.refresh = false;
+            }
+          }
+          let newArr = [];
+          let newArrTwo = [];
+          for (let i = 0; i < res.Data.List.length; i += 2) {
+            newArr.push(res.Data.List.slice(i, i + 2));
+          }
+          for (let i = 0; i < res.Data.ChartList.length; i += 2) {
+            newArrTwo.push(res.Data.ChartList.slice(i, i + 2));
+          }
+          let arr = [];
+          newArr.forEach((item, index) => {
+            if (newArrTwo[index]) {
+              arr.push(newArrTwo[index], item);
+            } else {
+              arr.push(item);
+            }
+          });
+          this.resultDataList = this.resultDataList.concat(arr.flat(Infinity));
+        } else if (!res.Data.List.length) {
+          res.Data.ChartList.length && this.resultDataList.push(...res.Data.ChartList);
+        } else if (!res.Data.ChartList.length) {
+          res.Data.List.length && this.resultDataList.push(...res.Data.List);
+        }
+        this.resultList = this.resultDataList;
+      }
+    },
+    //活动回放的接口获取列表
+    async getActivityBackList() {
+      const res = await activity.getActivityListNew({
+        PageSize: this.pageSize,
+        CurrentIndex: this.pageNum,
+        KeyWord: this.searchTxt,
+        ActiveState: "1,2,3", //活动进行状态
+        PlayBack: Number(this.activitySelectActive),
+      });
+      if (res.Ret !== 200) return;
+      this.status = this.pageNum < res.Data.Paging.Pages ? "loadmore" : "nomore";
+      this.totalPage = res.Data.Paging.Pages; //总页数
+      if (this.pageNum === 1) {
+        this.collectList = res.Data.List || [];
+        this.haveResult = this.collectList.length ? true : false;
+        console.log(this.haveResult);
+        if (this.refresh) {
+          uni.stopPullDownRefresh();
+          this.refresh = false;
+        }
+      } else {
+        this.collectList.push(...res.Data.List);
+      }
+    },
+    //获取报告的
+    async getReportList() {
+      const res = await Report.getSearchReportAndResource({
+        KeyWord: this.searchTxt.replace(/^\s+|\s+$/g, ""),
+        PageSize: this.tabsActive == 1 ? 5 : "",
+      });
+      if (res.Ret === 200) {
+        if (this.refresh) {
+          uni.stopPullDownRefresh();
+          this.refresh = false;
+        }
+        this.reportPageData = res.Data || {};
+        this.haveResult = Object.keys(this.reportPageData).length ? true : false;
+      }
+    },
+    //点击了更多
+    tabsActiveMore(val) {
+      this.tabsActive = val;
+      this.getListInit();
+      this.getDataList();
+    },
+    //纪要、图标的筛选
+    summarySelectHandler(item, type) {
+      this.pageNum = 1;
+      if (type == "纪要") {
+        this.summarySelectActive = item.value;
+        this.resultList = [];
+        this.resultDataList = [];
+        this.synthesiz();
+      } else {
+        this.activitySelectActive = item.value;
+        this.collectList = [];
+        this.getActivityBackList();
+      }
+    },
+    getListInit() {
+      uni.pageScrollTo({
+        scrollTop: 0,
+        duration: 300,
+      });
+      this.pageNum = 1;
+      this.pageSize = this.tabsActive == 1 ? 5 : 10;
+      this.totalPage = 0;
+      this.summarySelectActive = "Matching";
+      this.activitySelectActive = "0";
+      this.status = "loadmore";
+      this.resultList = [];
+      this.resultDataList = [];
+      this.collectList = [];
+      this.reportPageData = {};
     },
   },
   onLoad(options) {
@@ -105,20 +346,35 @@ export default {
     }
   },
   onShow() {},
+  /* 下拉刷新 */
+  onPullDownRefresh: Throttle(function () {
+    this.page_no = 1;
+    this.refresh = true;
+    this.getDataList();
+  }),
+  // 上拉加载this.resultList
+  onReachBottom: Throttle(function () {
+    if (this.tabsActive == 1) return;
+    if (this.status === "nomore") return;
+    this.status = "loading";
+    this.pageNum++;
+    this.getDataList();
+  }),
 };
 </script>
 
 <style lang="scss" scoped>
 .search-container {
-  background-color: #fff;
-  padding-bottom: 30rpx;
+  background-color: #f5f6fa;
+  padding: 200rpx 0 0rpx;
+  min-height: 100vh;
+  box-sizing: border-box;
   .sticky-content {
-    position: sticky;
+    position: fixed;
     top: 0;
     left: 0;
     width: 100%;
     z-index: 99;
-    padding-bottom: 10rpx;
     background-color: #fff;
   }
   .searchTarget-header {
@@ -137,8 +393,7 @@ export default {
       height: 70rpx;
       line-height: 70rpx;
       box-sizing: border-box;
-      border: 1rpx solid #e5e5e5;
-      background-color: rgba(245, 245, 245, 0.2);
+      background: #f9f9f9;
       font-size: 26rpx;
       color: #4a4a4a;
       padding: 0 180rpx 0 78rpx;
@@ -169,7 +424,11 @@ export default {
   .search-cont {
     padding: 32rpx;
     font-size: 24rpx;
+    margin-top: -80rpx;
     color: #666666;
+    background-color: #fff;
+    height: calc(100vh - 135rpx);
+    overflow: hidden;
     .title {
       font-size: 32rpx;
       font-weight: 500;
@@ -211,6 +470,7 @@ export default {
     overflow: hidden;
     overflow-x: auto;
     background-color: #fff;
+    margin-bottom: 10rpx;
     .tabs-item {
       margin-right: 50rpx;
       flex-shrink: 0;
@@ -251,5 +511,75 @@ export default {
       margin: 50rpx auto;
     }
   }
+  .more-box {
+    display: flex;
+    height: 88rpx;
+    padding: 0 30rpx;
+    align-items: center;
+    justify-content: space-between;
+    font-size: 28rpx;
+    background-color: #f5f6fa;
+    position: sticky;
+    left: 0;
+    z-index: 99;
+    .more-text {
+      font-weight: 500;
+      color: #333333;
+      &::before {
+        content: "";
+        display: inline-block;
+        height: 20rpx;
+        width: 4rpx;
+        background-color: #3189ff;
+        margin-right: 20rpx;
+      }
+    }
+    .more-rivet {
+      color: #3385ff;
+      margin-left: 20rpx;
+    }
+  }
+  .summary-select {
+    display: flex;
+    align-items: center;
+    width: 252rpx;
+    background-color: #f9f9f9;
+    color: #999999;
+    font-size: 24rpx;
+    height: 51rpx;
+    border-radius: 47rpx;
+    box-shadow: 0rpx 0rpx 4rpx 0rpx rgba(0, 0, 0, 0.09);
+    overflow: hidden;
+    .select-item {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 50%;
+      height: 100%;
+      border-radius: 47rpx;
+    }
+    .active-item {
+      background-color: #3385ff;
+      color: #fff;
+    }
+  }
+  .activity-select {
+    padding-right: 34rpx;
+    height: 88rpx;
+    position: sticky;
+    top: 184rpx;
+    left: 0;
+    z-index: 99;
+    background-color: #f5f6fa;
+  }
+  .more-summary {
+    top: 184rpx;
+  }
+  .more-report {
+    top: 272rpx;
+  }
+  .more-activity {
+    top: 360rpx;
+  }
 }
 </style>

+ 9 - 0
pages-search/indedxSearch/searchList.js

@@ -31,3 +31,12 @@ export const TabsList = [
     id: 4,
   },
 ];
+
+export const SummarySelect = [
+  { name: "匹配度", value: "Matching" },
+  { name: "发布时间", value: "PublishDate" },
+];
+export const ActivitySelect = [
+  { name: "全部", value: "0" },
+  { name: "可回放", value: "1" },
+];

+ 2 - 3
pages-report/reportSearch/reportSearch.vue → pages-search/reportSearch/reportSearch.vue

@@ -412,7 +412,7 @@ export default {
   onShareAppMessage: function (res) {
     return {
       title: this.isHorzMobile ? "好友向您推荐此内容,上传名片享查研观向免费月卡!" : "报告",
-      path: "/pages-report/reportSearch/reportSearch?text=" + this.searchTxt,
+      path: "/pages-search/reportSearch/reportSearch?text=" + this.searchTxt,
       success: (res) => {},
       fail: (err) => {},
     };
@@ -444,8 +444,7 @@ export default {
       height: 70rpx;
       line-height: 70rpx;
       box-sizing: border-box;
-      border: 1rpx solid #e5e5e5;
-      background-color: rgba(245, 245, 245, 0.2);
+      background: #F9F9F9;
       font-size: 26rpx;
       color: #4a4a4a;
       padding: 0 180rpx 0 78rpx;

+ 6 - 6
pages.json

@@ -123,12 +123,6 @@
     {
       "root": "pages-report",
       "pages": [
-        {
-          "path": "reportSearch/reportSearch",
-          "style": {
-            "navigationBarTitleText": "搜索"
-          }
-        },
         {
           "path": "industrialReport/industrialReport",
           "style": {
@@ -338,6 +332,12 @@
             "navigationBarTitleText": "搜索",
             "enablePullDownRefresh": false
           }
+        },
+        {
+          "path": "reportSearch/reportSearch",
+          "style": {
+            "navigationBarTitleText": "搜索"
+          }
         }
       ]
     }

+ 4 - 5
pages/activity/activity.vue

@@ -8,8 +8,8 @@
             活动回放
           </view>
           <view class="activity-search" @click="goSearch">
-            <icon type="search" size="15" class="search_ico" />
-            活动搜索
+            <icon type="search" size="15" class="search_ico" style="margin-right: 10rpx" />
+            {{ searchPlaceholderList.ActivitySearch }}
           </view>
         </view>
       </view>
@@ -365,14 +365,13 @@ export default {
           margin-left: 20rpx;
           width: 46%;
           height: 62rpx;
-          color: #999999;
-          font-size: 26rpx;
+          color: #8D8D8D;
+          font-size: 30rpx;
           display: flex;
           align-items: center;
           padding-left: 20rpx;
           background: #f3f3f3;
           border-radius: 82rpx;
-          border: 1px solid #dcdfe6;
         }
       }
     }

+ 7 - 20
pages/index/index.vue

@@ -4,13 +4,13 @@
       <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
         <view class="content" @click="goSearch">
           <icon type="search" size="15" class="search_ico" />
-          <text class="sea_ipt">搜索您想要的素材</text>
+          <text class="sea_ipt">{{ searchPlaceholderList.SummarySearch }}</text>
         </view>
       </view>
       <view class="top-tabs">
         <view :class="['item', item.val == topTabsActive && 'tabs-active']" v-for="(item, index) in topTabBars" :key="item.Id" @click="topTabsChange(item)">
           {{ item.Name }}
-          <block v-if="index === 2 && isShowChart">
+          <block v-if="index === 2 && wholeShowListData.IsShowChart">
             <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
           </block>
           <view class="active" v-if="item.Id == topTabsActive"></view>
@@ -20,7 +20,7 @@
         <view class="second-tabs" v-if="topTabsActive == '2' || topTabsActive == '3'">
           <view :class="['item', item.ChartPermissionId == secondActive && 'tabs-active']" v-for="(item, index) in secondBars" :key="item.ChartPermissionId" @click="handleClickTopSub(item)">
             {{ item.PermissionName }}
-            <block v-if="isShowResearch && index === secondBars.length - 1 && topTabsActive == '2'">
+            <block v-if="wholeShowListData.IsShowResearch && index === secondBars.length - 1 && topTabsActive == '2'">
               <image class="limit-img tabs-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/limit_icon.png" mode=""></image>
             </block>
             <view class="active" v-if="item.ChartPermissionId == secondActive"></view>
@@ -228,7 +228,7 @@
     <view v-if="showAudioBox">
       <audioModule :showAudioPop.sync="showAudioPop" />
     </view>
-    <suspenButton v-if="reportShow" />
+    <suspenButton v-if="wholeShowListData.IsShow" />
     <modalDialog :isShowhasPermission="isShowhasPermission" :applyForIsShow="applyForIsShow" :jurisdictionList="jurisdictionList" :hasPermission="hasPermission" />
   </view>
 </template>
@@ -266,9 +266,6 @@ export default {
         nomore: "已经到底了",
       },
       showTransition: false, //点击绝密后的隐现
-      reportShow: false, //绝密标签的隐现
-      isShowChart: false, //图表限免
-      isShowResearch: false, //研选限免
       isBindingMobile: true, //图表我的收藏是否绑定手机号
       videoContext: null,
       showAudioPop: false, //播放音频
@@ -310,7 +307,6 @@ export default {
       this.getTabs();
     }
     this.initNavBar();
-    this.reportIsShow();
     this.getReportList();
     this.$store.dispatch("checkHandle", "noGO");
   },
@@ -586,15 +582,6 @@ export default {
     goSearch() {
       this.$store.dispatch("checkHandle", "/pages-search/indedxSearch/indedxSearch?isType=" + this.topTabsActive);
     },
-    /* 绝密标签的隐现 */
-    async reportIsShow() {
-      const res = await Reports.reportIsShow();
-      if (res.Ret === 200) {
-        this.reportShow = res.Data.IsShow;
-        this.isShowChart = res.Data.IsShowChart;
-        this.isShowResearch = res.Data.IsShowResearch;
-      }
-    },
     /* 绑定联系方式 */
     bindingMobile() {
       uni.navigateTo({
@@ -792,7 +779,7 @@ export default {
   .nav-bar-wrap {
     background-color: #fff;
     width: 100%;
-    padding-left: 60rpx;
+    padding-left: 35rpx;
     display: flex;
     align-items: center;
     .content {
@@ -802,11 +789,11 @@ export default {
       width: 70%;
       height: 63rpx;
       font-size: 30rpx;
-      color: #707070;
+      color: #8D8D8D;
       background-color: #f6f6f6;
       padding-left: 33rpx;
       border-radius: 70rpx;
-      border: 1rpx solid #e5e5e5;
+      // border: 1rpx solid #e5e5e5;
       .sea_ipt {
         padding-left: 15rpx;
       }

+ 5 - 14
pages/purchaser/purchaser.vue

@@ -3,10 +3,10 @@
     <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
       <view class="content" @click="goSearch">
         <icon type="search" size="15" class="search_ico" />
-        <text class="sea_ipt">搜索您想要的报告</text>
+        <text class="sea_ipt"> {{ searchPlaceholderList.YanXuanSearch }}</text>
       </view>
     </view>
-    <view class="notice-content" v-if="yanXuan_Explain">
+    <view class="notice-content" v-if="wholeShowListData.YanXuan_Explain">
       <view class="notice">
         <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/placard_icon.png"></image>
         <view class="notice-bar">
@@ -151,7 +151,6 @@ export default {
       accounts: "",
       isCancelBtn: false,
       goFollowShow: false,
-      yanXuan_Explain:false,  
     };
   },
   mounted() {
@@ -187,13 +186,6 @@ export default {
         paddingTop: menuButtonInfo.top + "px",
         paddingBottom: "4px",
       };
-    },
-        /* 绝密标签的隐现 */
-    async reportIsShow() {
-      const res = await Reports.reportIsShow();
-      if (res.Ret === 200) {
-        this.yanXuan_Explain = res.Data.YanXuan_Explain;
-      }
     },
     //近期更新主题
     async researchNewList() {
@@ -307,13 +299,12 @@ export default {
     },
     /* 搜索 */
     async goSearch() {
-      await this.$store.dispatch("checkHandle", "/pages-report/reportSearch/reportSearch?id=研选");
+      await this.$store.dispatch("checkHandle", "/pages-search/reportSearch/reportSearch?id=研选");
     },
   },
   onLoad() {
     this.researchNewList();
     this.initNavBar();
-    this.reportIsShow()
   },
   /* 下拉刷新 */
   onPullDownRefresh: Throttle(function () {
@@ -349,11 +340,11 @@ export default {
     width: 70%;
     height: 63rpx;
     font-size: 30rpx;
-    color: #707070;
+    color: #8D8D8D;
     background-color: #f6f6f6;
     padding-left: 33rpx;
     border-radius: 70rpx;
-    border: 1rpx solid #e5e5e5;
+    // border: 1rpx solid #e5e5e5;
     .sea_ipt {
       padding-left: 15rpx;
     }

+ 1 - 2
pages/reportForm/index.scss

@@ -23,10 +23,9 @@
         height: 70rpx;
         font-size: 30rpx;
         color: #707070;
-        background-color: #f6f6f6;
+        background: #F9F9F9;
         padding: 0 34rpx 0 70rpx;
         border-radius: 70rpx;
-        border: 1rpx solid #e5e5e5;
       }
 
       .search_ico {

+ 6 - 20
pages/reportForm/reportForm.vue

@@ -2,13 +2,13 @@
   <view class="reportForm-container">
     <view class="nav-bar-wrap" :style="{ height: navBarStyle.height, paddingTop: navBarStyle.paddingTop, paddingBottom: navBarStyle.paddingBottom }">
       <view class="content">
-        <view class="hot-top" @click="goHot" v-if="isShowHot">
+        <view class="hot-top" @click="goHot" v-if="wholeShowListData.IsShowList">
           <image class="hot-img" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/czbk/hot_icon_report.png"></image>
           <text class="sea_ipt">榜单</text>
         </view>
         <view class="search-box" @click="goSearch">
           <icon type="search" size="15" class="search_ico" />
-          <text class="sea_ipt">搜索产业资源包</text>
+          <text class="sea_ipt">{{ searchPlaceholderList.ReportSearch }}</text>
         </view>
       </view>
       <view class="second-tabs">
@@ -133,7 +133,7 @@
       </view>
     </u-modal>
     <freeCharge class="free-charge" :isShowFreeBtn="isShowFree" />
-    <suspenButton v-if="reportShow" />
+    <suspenButton v-if="wholeShowListData.IsShow" />
   </view>
 </template>
 
@@ -184,15 +184,12 @@ export default {
       deepCoverFocus: [], //深度覆盖 //推荐关注
       isScrollShow: false,
       isGuideShow: false,
-      limitIsShow: false, //限免显示隐藏
       goFollowShow: false,
       accounts: "",
       confirmText: "知道了",
       isCancelBtn: false,
       scrollLeft: 0,
       showTransition: false, //点击绝密后的隐现
-      reportShow: false, //绝密标签的隐现
-      isShowHot: false, //榜单的隐现
     };
   },
   onLoad(option) {
@@ -259,15 +256,6 @@ export default {
         });
       }
     },
-    /* 绝密标签的隐现 */
-    async reportIsShow() {
-      const res = await Reports.reportIsShow();
-      if (res.Ret === 200) {
-        this.reportShow = res.Data.IsShow;
-        this.limitIsShow = res.Data.IsShowResearch;
-        this.isShowHot = res.Data.IsShowList;
-      }
-    },
     scrollMove(e) {
       this.scrollLeft = e.detail.scrollLeft;
     },
@@ -385,7 +373,7 @@ export default {
     },
     /* 搜索 */
     async goSearch() {
-      await this.$store.dispatch("checkHandle", "/pages-report/reportSearch/reportSearch?id=报告");
+      await this.$store.dispatch("checkHandle", "/pages-search/reportSearch/reportSearch?id=报告");
     },
     /* 初始 */
     initList() {
@@ -414,8 +402,6 @@ export default {
         this.strategyIndex = 5;
       }
       this.getClassify();
-      this.reportIsShow();
-
       this.$db.set("guideSole", 1); //新手指引
     },
     goSecretDetail(type) {
@@ -532,11 +518,11 @@ export default {
         flex: 1;
         height: 100%;
         font-size: 30rpx;
-        color: #707070;
+        color: #8D8D8D;
         background-color: #f6f6f6;
         padding-left: 33rpx;
         border-radius: 70rpx;
-        border: 1rpx solid #e5e5e5;
+        // border: 1rpx solid #e5e5e5;
       }
       .sea_ipt {
         padding-left: 15rpx;