zhuohongkui 1 рік тому
батько
коміт
4af60ba8fa
100 змінених файлів з 1125 додано та 2429 видалено
  1. 0 177
      demand.vue
  2. 0 1613
      index.js
  3. 16 45
      src/App.vue
  4. 4 0
      src/assets/css/common.scss
  5. BIN
      src/assets/icon/gouwuche.png
  6. BIN
      src/assets/icon/share-fenxiang.png
  7. 24 0
      src/common/mixin.js
  8. 1 14
      src/common/util.js
  9. 5 1
      src/components/card/activity/my-application-card.vue
  10. 3 3
      src/components/card/card-module/card-answer-content.vue
  11. 2 0
      src/components/card/card-module/card-content.vue
  12. 1 0
      src/components/card/card-module/card-recruit-content.vue
  13. 3 0
      src/components/card/comment-detail-card.vue
  14. 1 1
      src/components/card/demand/my-like-comment-card.vue
  15. 1 1
      src/components/card/demand/my-reply-card.vue
  16. 3 3
      src/components/card/forum/browse-history-card.vue
  17. 4 3
      src/components/card/forum/my-like-card.vue
  18. 3 3
      src/components/card/forum/my-question-card.vue
  19. 1 1
      src/components/card/image-text/like-my-image-text-card.vue
  20. 1 1
      src/components/card/image-text/my-like-comment-card.vue
  21. 1 1
      src/components/card/image-text/my-reply-card.vue
  22. 1 1
      src/components/card/information/like-my-information-card.vue
  23. 1 1
      src/components/card/information/my-like-comment-card.vue
  24. 1 1
      src/components/card/information/my-reply-card.vue
  25. 1 1
      src/components/card/news/my-like-comment-card.vue
  26. 1 1
      src/components/card/news/my-reply-card.vue
  27. 2 2
      src/components/card/search/demand-card.vue
  28. 3 3
      src/components/card/search/forum-card.vue
  29. 2 2
      src/components/card/search/news-card.vue
  30. 2 2
      src/components/card/search/supplier-card.vue
  31. 1 1
      src/components/card/supplier/my-like-comment-card.vue
  32. 1 1
      src/components/card/video/my-like-comment-card.vue
  33. 9 0
      src/components/forum/forum-list-module.vue
  34. 3 3
      src/components/forum/forum-question-card.vue
  35. 4 6
      src/components/layout/Content.vue
  36. 67 0
      src/components/layout/Control.vue
  37. 29 0
      src/components/layout/Dialog.vue
  38. 1 1
      src/components/layout/Footer.vue
  39. 51 13
      src/components/layout/Header.vue
  40. 4 1
      src/components/module/abandon.vue
  41. 16 0
      src/components/module/contact-dialog.vue
  42. 4 2
      src/components/module/detail-desc.vue
  43. 3 3
      src/components/module/detail-title.vue
  44. 21 3
      src/components/module/invoice-header-select.vue
  45. 1 0
      src/components/module/invoice.vue
  46. 14 29
      src/components/module/to-contact.vue
  47. 1 12
      src/components/module/to-contribute.vue
  48. 79 0
      src/components/module/to-share.vue
  49. 51 0
      src/components/module/to-shoppingCart.vue
  50. 0 12
      src/components/module/to-top.vue
  51. 1 1
      src/components/search/search-sort.vue
  52. 1 1
      src/components/supplier/supplier-all-card.vue
  53. 21 8
      src/components/video/video-interactive.vue
  54. 15 1
      src/components/video/video-player.vue
  55. 2 2
      src/components/video/video-sidebar.vue
  56. 1 1
      src/components/vip/order-card.vue
  57. 3 6
      src/main.js
  58. 28 4
      src/router/index.js
  59. 1 1
      src/store/index.js
  60. 1 0
      src/store/popup.js
  61. 2 2
      src/views/activity/activity-detail.vue
  62. 3 1
      src/views/activity/activity-order-detail.vue
  63. 3 2
      src/views/activity/children/my-message.vue
  64. 1 1
      src/views/activity/children/my-order.vue
  65. 19 7
      src/views/activity/components/content.vue
  66. 0 22
      src/views/demand/children/comment-on-my.vue
  67. 0 22
      src/views/demand/children/reply-on-my.vue
  68. 0 22
      src/views/forum/children/answer-on-my.vue
  69. 0 22
      src/views/forum/children/comment-on-my.vue
  70. 0 22
      src/views/forum/children/my-follow.vue
  71. 0 22
      src/views/forum/children/reply-on-my.vue
  72. 10 2
      src/views/forum/forum-answer-item.vue
  73. 74 10
      src/views/forum/forum-question-details.vue
  74. 0 22
      src/views/image-text/children/comment-on-my.vue
  75. 0 22
      src/views/image-text/children/my-chasingFun.vue
  76. 4 4
      src/views/image-text/children/my-collect.vue
  77. 4 4
      src/views/image-text/children/my-like.vue
  78. 0 22
      src/views/image-text/children/reply-on-my.vue
  79. 19 5
      src/views/image-text/components/content.vue
  80. 11 1
      src/views/image-text/image-text-details.vue
  81. 317 28
      src/views/index.vue
  82. 0 22
      src/views/information/children/comment-on-my.vue
  83. 0 22
      src/views/information/children/my-chasingFun.vue
  84. 4 4
      src/views/information/children/my-collect.vue
  85. 4 4
      src/views/information/children/my-like.vue
  86. 0 22
      src/views/information/children/reply-on-my.vue
  87. 8 3
      src/views/information/components/content.vue
  88. 13 2
      src/views/information/information-collection.vue
  89. 11 1
      src/views/information/information-details.vue
  90. 21 2
      src/views/invoice.vue
  91. 1 0
      src/views/login.vue
  92. 0 22
      src/views/news/children/comment-on-my.vue
  93. 0 22
      src/views/news/children/reply-on-my.vue
  94. 16 2
      src/views/news/news-details.vue
  95. 17 7
      src/views/product/components/content.vue
  96. 23 2
      src/views/product/product-refund-apply.vue
  97. 7 5
      src/views/product/product-refund-detail.vue
  98. 7 6
      src/views/product/product-shopping-cart.vue
  99. 0 22
      src/views/recruit/children/my-chasingFun.vue
  100. 4 1
      src/views/search-hot.vue

+ 0 - 177
demand.vue

@@ -1,177 +0,0 @@
-<!--需求 -->
-<template>
-  <div class="wrap">
-    <header-search
-      tabName="需求"
-      :type="8"
-      :tab-idx="1"
-      :bg-img="require('@/assets/bg-21.png')"
-    />
-    <div class="tab" :class="{ 'tab-fixed': scrollTop >= 50 }">
-      <div
-        class="tab-item"
-        v-for="item in tabList"
-        :class="{ current: item.value == params.is_over }"
-        @click="changeTab(item)"
-      >
-        {{ item.label }}
-      </div>
-    </div>
-    <div
-      class="box"
-      :style="{ 'margin-top': scrollTop >= 50 ? '48px' : '13px' }"
-    >
-      <DemandTabulation
-        ref="tabulation"
-        :list="list"
-        :loading="loading"
-        :finished="finished"
-        @onRefresh="onRefresh"
-        @getList="getList"
-      />
-    </div>
-
-    <!-- 发布 -->
-    <publish :list="publishList" />
-
-    <!-- 回到顶部 -->
-    <to-top display-height="0" :toTop="toTop" />
-  </div>
-</template>
-
-<script>
-import { DemandService } from "@/common/service";
-import HeaderSearch from "@/components/header-search.vue";
-import DemandTabulation from "./components/demand-tabulation.vue";
-import Publish from "@/components/publish.vue";
-import ToTop from "@/components/to-top.vue";
-
-export default {
-  components: { HeaderSearch, DemandTabulation, Publish, ToTop },
-  data() {
-    return {
-      scrollTop: 0,
-      params: {
-        is_over: 0, // 是否解决或开源【0否,1是,2开源】
-        page: 1, // 页数
-        page_num: 10, // 每页数
-      },
-      list: [],
-      loading: false,
-      finished: false,
-      currentTab: 0,
-      tabList: [
-        { label: "待解决", value: 0 },
-        { label: "已解决", value: 1 },
-        { label: "开源项目", value: 2 },
-      ],
-      publishList: [
-        {
-          title: "发布需求/项目",
-          path: "/contact-online",
-          icon: require("@/assets/icon-95.png"),
-          class: "",
-        },
-      ],
-    };
-  },
-  mounted() {
-    window.addEventListener("scroll", this.onScroll);
-    this.getList();
-  },
-  beforeDestroy() {
-    window.removeEventListener("scroll", this.onScroll);
-  },
-  methods: {
-    toTop() {
-      window.scrollTo(0, 0);
-    },
-    onScroll() {
-      let scrollPos;
-      if (window.pageYOffset) {
-        scrollPos = window.pageYOffset;
-      } else if (document.compatMode && document.compatMode !== "BackCompat") {
-        scrollPos = document.documentElement.scrollTop;
-      } else if (document.body) {
-        scrollPos = document.body.scrollTop;
-      }
-      this.scrollTop = scrollPos;
-    },
-    onRefresh() {
-      this.params.page = 1;
-      this.finished = false;
-      this.getList();
-    },
-    changeTab(item) {
-      this.params.is_over = item.value;
-      this.onRefresh();
-    },
-    getList() {
-      this.loading = true;
-      DemandService.getRecommendList(this.params)
-        .then(({ data }) => {
-          const list = data.list;
-          this.list = this.params.page === 1 ? list : [...this.list, ...list];
-          if (list.length < this.params.page_num) {
-            this.finished = true;
-          } else {
-            this.params.page++;
-          }
-        })
-        .catch(() => {
-          this.finished = true;
-        })
-        .finally(() => {
-          this.loading = false;
-          this.$refs["tabulation"].refreshLoading = false;
-        });
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.wrap {
-  width: 100%;
-  display: flex;
-  flex-direction: column;
-  box-sizing: border-box;
-  min-height: 100vh;
-  background: #f5f5f5;
-  .tab {
-    height: 40px;
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    font-weight: 400;
-    color: #444444;
-    padding: 0 15px;
-    position: relative;
-    .tab-item {
-      width: 30%;
-      padding: 5px 10px;
-      font-size: 14px;
-      background-color: white;
-      border-radius: 5px;
-      text-align: center;
-    }
-    .current {
-      font-weight: 500;
-      color: #2a63f3;
-    }
-  }
-  .tab-fixed {
-    position: fixed;
-    left: 0;
-    right: 0;
-    top: 44px;
-    z-index: 999;
-    background-image: url("~@/assets/bg-3.png");
-    background-size: 100% auto;
-    background-position: 0 -44px;
-  }
-  .box {
-    width: 100%;
-  }
-}
-</style>

+ 0 - 1613
index.js

@@ -1,1613 +0,0 @@
-import VueRouter from "vue-router";
-import { getUrlCode } from "@/common/wxjssdk.util";
-import { setCopyFlag } from "@/common/util";
-import { informationRoutes } from "@/router/information-routes";
-import { imageTextRoutes } from "@/router/image-text-routes";
-import { videoRoutes } from "@/router/video-routes";
-import { supplierRoutes } from "@/router/supplier-routes";
-import { activityRoutes } from "@/router/activity-routes";
-import { forumRoutes } from "@/router/forum-routes";
-import { newsRoutes } from "@/router/news-routes";
-import { demandRoutes } from "@/router/demand-routes";
-import { recruitRoutes } from "@/router/recruit-routes";
-import { productRoutes } from "@/router/product-routes";
-const routes = [
-  // 新版设计-视频模块路由
-  ...videoRoutes,
-  // 新版设计-图文模块路由
-  ...imageTextRoutes,
-  // 新版设计-资料模块路由
-  ...informationRoutes,
-  // 新版设计-供应商模块路由
-  ...supplierRoutes,
-  // 新版设计-活动模块路由
-  ...activityRoutes,
-  // 新版设计-问答模块路由
-  ...forumRoutes,
-  // 新版设计-新闻模块路由
-  ...newsRoutes,
-  // 新版设计-需求模块路由
-  ...demandRoutes,
-  // 新版设计-招聘模块路由
-  ...recruitRoutes,
-  // 新版设计-商品模块路由
-  ...productRoutes,
-  {
-    path: "/",
-    redirect: "/index",
-  },
-  // 首页
-  {
-    path: "/home",
-    component: () => import("../views/Home.vue"),
-    meta: {
-      title: "首页", // 页面标题ti.footer-wrap>button tle
-    },
-  },
-  // 首页
-  {
-    path: "/index",
-    component: () => import("../views/index.vue"),
-    meta: {
-      title: "首页", // 页面标题title
-      showTabbar: true, // 显示tabbar
-      keepAlive: true, // 默认开启缓存,防止第一次缓存失败
-    },
-  },
-  // 我的
-  {
-    path: "/my",
-    component: () => import("../views/my.vue"),
-    meta: {
-      title: "我的", // 页面标题title
-      showTabbar: true, // 显示tabbar
-      keepAlive: true, // 默认开启缓存,防止第一次缓存失败
-    },
-  },
-  // 登录
-  {
-    path: "/login",
-    component: () => import("../views/login.vue"),
-    meta: {
-      title: "登录", // 页面标题title
-    },
-  },
-  // 个人信息
-  {
-    path: "/personal-information",
-    component: () => import("../views/personal-information.vue"),
-    meta: {
-      title: "个人信息", // 页面标题title
-    },
-  },
-  // 会员
-  {
-    path: "/member",
-    component: () => import("../views/member.vue"),
-    meta: {
-      title: "会员", // 页面标题title
-    },
-  },
-  // 无偿资料
-  {
-    path: "/free-information",
-    component: () => import("../views/free-information.vue"),
-    meta: {
-      title: "无偿资料", // 页面标题title
-    },
-  },
-  // 有偿投稿视频
-  {
-    path: "/paid-contribution-video",
-    component: () => import("../views/paid-contribution-video.vue"),
-    meta: {
-      title: "有偿投稿视频", // 页面标题title
-    },
-  },
-  // 举报
-  {
-    path: "/report",
-    component: () => import("../views/report.vue"),
-    meta: {
-      title: "举报", // 页面标题title
-    },
-  },
-  // 举报-结果
-  {
-    path: "/report-result",
-    component: () => import("../views/report-result.vue"),
-    meta: {
-      title: "举报结果", // 页面标题title
-    },
-  },
-  // 投稿-结果
-  {
-    path: "/submission-result",
-    component: () => import("../views/submission-result.vue"),
-    meta: {
-      title: "投稿结果", // 页面标题title
-    },
-  },
-  // // 稿件管理
-  // {
-  // 	path: '/manuscript-management',
-  // 	component: () => import('../views/manuscript-management.vue'),
-  // 	meta: {
-  // 		title: '稿件管理', // 页面标题title
-  // 	},
-  // },
-  // 搜索
-  {
-    path: "/search",
-    // component: () => import('../views/search.vue'),
-    component: () => import("../views/search/search.vue"),
-    meta: {
-      title: "搜索", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/search-result"],
-    },
-  },
-  // 搜索结果
-  {
-    path: "/search-result",
-    // component: () => import('../views/search-result.vue'),
-    component: () => import("../views/search/search-result.vue"),
-    meta: {
-      title: "搜索结果", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/video-details", "/report", "/feedback"],
-    },
-  },
-  // // h5/视频
-  // {
-  // 	path: '/video',
-  // 	component: () => import('../views/video.vue'),
-  // 	meta: {
-  // 		title: 'h5/视频', // 页面标题title
-  // 		keepAlive: true, // 开启缓存
-  // 		// 仅前往这些页面时缓存
-  // 		toPagesKeep: [
-  // 			'/video-classification',
-  // 			'/video-details',
-  // 			'/report',
-  // 			'/search',
-  // 			'/free-information',
-  // 			'/paid-contribution-video',
-  // 		],
-  // 	},
-  // },
-  // // 视频-分类
-  // {
-  // 	path: '/video-classification',
-  // 	component: () => import('../views/video-classification.vue'),
-  // 	meta: {
-  // 		title: '视频', // 页面标题title
-  // 		keepAlive: true, // 开启缓存
-  // 		// 仅前往这些页面时缓存
-  // 		toPagesKeep: [
-  // 			// '/video',
-  // 			'/video-details',
-  // 			'/report',
-  // 			'/search',
-  // 			'/free-information',
-  // 			'/paid-contribution-video',
-  // 		],
-  // 	},
-  // },
-  // // 视频详情
-  // {
-  // 	path: '/video-details',
-  // 	component: () => import('../views/video-details.vue'),
-  // 	meta: {
-  // 		title: '视频详情', // 页面标题title
-  // 		toTop: true, // 显示回到顶部
-  // 	},
-  // },
-  // 意见反馈
-  {
-    path: "/feedback",
-    component: () => import("../views/feedback.vue"),
-    meta: {
-      title: "意见反馈", // 页面标题title
-    },
-  },
-  // 意见反馈-结果
-  {
-    path: "/feedback-result",
-    component: () => import("../views/feedback-result.vue"),
-    meta: {
-      title: "意见反馈", // 页面标题title
-    },
-  },
-  // 各种协议页面
-  {
-    path: "/agreement",
-    component: () => import("../views/agreement.vue"),
-    meta: {
-      title: "协议", // 页面标题title
-    },
-  },
-  // // 视频
-  // {
-  // 	path: '/video-tab-list',
-  // 	component: () => import('../views/video-tab-list.vue'),
-  // 	meta: {
-  // 		title: '视频', // 页面标题title
-  // 	},
-  // },
-  // 文件下载
-  {
-    path: "/file-download",
-    component: () => import("../views/file-download.vue"),
-    meta: {
-      title: "文件下载", // 页面标题title
-    },
-  },
-  // 资料
-  // {
-  // 	path: '/information',
-  // 	component: () => import('../views/information.vue'),
-  // 	meta: {
-  // 		title: '资料', // 页面标题title
-  // 		keepAlive: true, // 开启缓存
-  // 		// 仅前往这些页面时缓存
-  // 		toPagesKeep: [
-  // 			'/information-series',
-  // 			'/report',
-  // 			'/paid-contribution-video',
-  // 			'/information-details',
-  // 			'/information-search',
-  // 		],
-  // 	},
-  // },
-  // // 资料
-  // {
-  // 	path: '/information-tab-list',
-  // 	component: () => import('../views/information-tab-list.vue'),
-  // 	meta: {
-  // 		title: '资料', // 页面标题title
-  // 	},
-  // },
-  // // 资料
-  // {
-  // 	path: '/information-release',
-  // 	component: () => import('../views/information-release.vue'),
-  // 	meta: {
-  // 		title: '无偿投稿资料', // 页面标题title
-  // 	},
-  // },
-  // 资料-系列
-  {
-    path: "/information-series",
-    component: () => import("../views/information-series.vue"),
-    meta: {
-      title: "资料-系列", // 页面标题title
-    },
-  },
-  // 资料-详情
-  {
-    path: "/information-details",
-    component: () => import("../views/information-details.vue"),
-    meta: {
-      title: "资料-详情", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/information-series", "/report"],
-    },
-  },
-  // 资料-搜索
-  {
-    path: "/information-search",
-    component: () => import("../views/information-search.vue"),
-    meta: {
-      title: "资料-搜索", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/information-details", "/report", "/feedback"],
-    },
-  },
-  // 图文
-  // {
-  // 	path: '/image-text',
-  // 	component: () => import('../views/image-text.vue'),
-  // 	meta: {
-  // 		title: '图文', // 页面标题title
-  // 		keepAlive: true, // 开启缓存
-  // 		// 仅前往这些页面时缓存
-  // 		toPagesKeep: [
-  // 			'/report',
-  // 			'/image-text-search',
-  // 			'/image-text-details',
-  // 			'/free-information',
-  // 			'/paid-contribution-video',
-  // 		],
-  // 	},
-  // },
-  // 图文-列表
-  {
-    path: "/image-text-list",
-    component: () => import("../views/image-text-list.vue"),
-    meta: {
-      title: "图文-列表", // 页面标题title
-    },
-  },
-  // 图文-搜索
-  {
-    path: "/image-text-search",
-    component: () => import("../views/image-text-search.vue"),
-    meta: {
-      title: "图文-搜索", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/image-text-details", "/report", "/feedback"],
-    },
-  },
-  // // 图文-详情
-  // {
-  // 	path: '/image-text-details',
-  // 	component: () => import('../views/image-text-details.vue'),
-  // 	meta: {
-  // 		title: '图文-详情', // 页面标题title
-  // 		toTop: true,
-  // 	},
-  // },
-  // 无偿投稿文章
-  {
-    path: "/free-articles",
-    component: () => import("../views/free-articles.vue"),
-    meta: {
-      title: "无偿投稿文章", // 页面标题title
-    },
-  },
-  // // 资料-我的发布
-  // {
-  // 	path: '/informationmy-my-release',
-  // 	component: () => import('../views/informationmy-my-release.vue'),
-  // 	meta: {
-  // 		title: '资料-我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 图文-我的发布
-  // {
-  // 	path: '/image-text-my-release',
-  // 	component: () => import('../views/image-text-my-release.vue'),
-  // 	meta: {
-  // 		title: '图文-我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 图文
-  // {
-  // 	path: '/image-text-tab-list',
-  // 	component: () => import('../views/image-text-tab-list.vue'),
-  // 	meta: {
-  // 		title: '图文', // 页面标题title
-  // 	},
-  // },
-  // // 论坛
-  // {
-  //   path: "/forum",
-  //   component: () => import("../views/forum/forum.vue"),
-  //   meta: {
-  //     title: "论坛", // 页面标题title
-  //     showTabbar: true, // 显示tabbar
-  //     keepAlive: true, // 开启缓存
-  //     // 仅前往这些页面时缓存
-  //     toPagesKeep: [
-  //       "/forum-question-details",
-  //       "/forum-message",
-  //       "/forum-release-issues",
-  //       "/search",
-  //     ],
-  //   },
-  // },
-  // {
-  //   path: "/forum-answer-item",
-  //   name: "forum-answer-item",
-  //   component: () => import("../views/forum/forumAnswerItem.vue"),
-  //   meta: {
-  //     title: "回答详情", // 页面标题title
-  //     showTabbar: true, // 显示tabbar
-  //     keepAlive: false, // 开启缓存
-  //   },
-  // },
-  // // 论坛-列表
-  // {
-  //   path: "/forum-tab-list",
-  //   component: () => import("../views/forum/forum-tab-list.vue"),
-  //   meta: {
-  //     title: "我的问答", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的关注
-  // {
-  //   path: "/forum-attention",
-  //   component: () => import("../views/forum/forum-attention.vue"),
-  //   meta: {
-  //     title: "论坛-我的关注", // 页面标题title
-  //   },
-  // },
-  // // 论坛-点赞我的
-  // {
-  //   path: "/forum-like-me",
-  //   component: () => import("../views/forum/forum-like-me.vue"),
-  //   meta: {
-  //     title: "论坛-点赞我的", // 页面标题title
-  //   },
-  // },
-  // // 论坛-浏览记录
-  // {
-  //   path: "/forum-history",
-  //   component: () => import("../views/forum/forum-history.vue"),
-  //   meta: {
-  //     title: "论坛-浏览记录", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的点赞
-  // {
-  //   path: "/forum-my-like",
-  //   component: () => import("../views/forum/forum-my-like.vue"),
-  //   meta: {
-  //     title: "论坛-我的点赞", // 页面标题title
-  //     keepAlive: true, // 开启缓存
-  //   },
-  // },
-  // // 论坛-消息
-  // {
-  //   path: "/forum-message",
-  //   component: () => import("../views/forum/forum-message.vue"),
-  //   meta: {
-  //     title: "论坛-消息", // 页面标题title
-  //   },
-  // },
-  // // 论坛-问题详情
-  // {
-  //   path: "/forum-question-details",
-  //   component: () => import("../views/forum/forum-question-details.vue"),
-  //   meta: {
-  //     title: "论坛-问题详情", // 页面标题title
-  //   },
-  // },
-  // // 论坛-举报
-  // {
-  //   path: "/forum-report",
-  //   component: () => import("../views/forum/forum-report.vue"),
-  //   meta: {
-  //     title: "论坛-举报", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的提问
-  // {
-  //   path: "/forum-my-question",
-  //   component: () => import("../views/forum/forum-my-question.vue"),
-  //   meta: {
-  //     title: "论坛-我的提问", // 页面标题title
-  //   },
-  // },
-  // // 论坛-回复我的
-  // {
-  //   path: "/forum-reply-to-me",
-  //   component: () => import("../views/forum/forum-reply-to-me.vue"),
-  //   meta: {
-  //     title: "论坛-回复我的", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的回答
-  // {
-  //   path: "/forum-my-reply",
-  //   component: () => import("../views/forum/forum-my-reply.vue"),
-  //   meta: {
-  //     title: "论坛-我的回答", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的回复
-  // {
-  //   path: "/forum-my-reply-comment",
-  //   component: () => import("../views/forum/forum-my-reply-comment.vue"),
-  //   meta: {
-  //     title: "论坛-我的回复", // 页面标题title
-  //   },
-  // },
-  // // 论坛-回答我的
-  // {
-  //   path: "/forum-answer-me",
-  //   component: () => import("../views/forum/forum-answer-me.vue"),
-  //   meta: {
-  //     title: "论坛-回答我的", // 页面标题title
-  //   },
-  // },
-  // // 论坛-我的评论
-  // {
-  //   path: "/forum-my-comments",
-  //   component: () => import("../views/forum/forum-my-comments.vue"),
-  //   meta: {
-  //     title: "论坛-我的评论", // 页面标题title
-  //   },
-  // },
-  // // 论坛-评论我的
-  // {
-  //   path: "/forum-comment-on-my",
-  //   component: () => import("../views/forum/forum-comment-on-my.vue"),
-  //   meta: {
-  //     title: "论坛-评论我的", // 页面标题title
-  //   },
-  // },
-  // // 论坛-搜索
-  // {
-  //   path: "/forum-search",
-  //   component: () => import("../views/forum/forum-search.vue"),
-  //   meta: {
-  //     title: "论坛-搜索", // 页面标题title
-  //     keepAlive: true, // 开启缓存
-  //     // 仅前往这些页面时缓存
-  //     toPagesKeep: ["/forum-question-details", "/contact-online"],
-  //   },
-  // },
-  // // 论坛-发布问题
-  // {
-  //   path: "/forum-release-issues",
-  //   name: "forum-release-issues",
-  //   component: () => import("../views/forum/forum-release-issues.vue"),
-  //   meta: {
-  //     title: "论坛-发布问题", // 页面标题title
-  //   },
-  // },
-  // // 论坛-回答问题
-  // {
-  //   path: "/forum-question-answering",
-  //   component: () => import("../views/forum/forum-question-answering.vue"),
-  //   meta: {
-  //     title: "论坛-回答问题", // 页面标题title
-  //   },
-  // },
-  // 活动
-  {
-    path: "/activity",
-    component: () => import("../views/activity.vue"),
-    meta: {
-      title: "活动", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/activity-sign-up", "/search", "/contact"],
-    },
-  },
-  // 活动
-  {
-    path: "/activity-tab-list",
-    component: () => import("../views/activity-tab-list.vue"),
-    meta: {
-      title: "活动", // 页面标题title
-    },
-  },
-  // 活动-我的发布
-  {
-    path: "/activit-my-release",
-    component: () => import("../views/activit-my-release.vue"),
-    meta: {
-      title: "活动-我的发布", // 页面标题title
-    },
-  },
-  // 活动-我的报名
-  {
-    path: "/activit-my-registration",
-    component: () => import("../views/activit-my-registration.vue"),
-    meta: {
-      title: "活动-我的报名", // 页面标题title
-    },
-  },
-  // 活动-我的收藏
-  {
-    path: "/activit-my-collection",
-    component: () => import("../views/activit-my-collection.vue"),
-    meta: {
-      title: "活动-我的收藏", // 页面标题title
-    },
-  },
-  // 活动-我的点赞
-  {
-    path: "/activit-my-likes",
-    component: () => import("../views/activit-my-likes.vue"),
-    meta: {
-      title: "活动-我的点赞", // 页面标题title
-    },
-  },
-  // 活动-浏览记录
-  {
-    path: "/activit-browse-records",
-    component: () => import("../views/activit-browse-records.vue"),
-    meta: {
-      title: "活动-浏览记录", // 页面标题title
-    },
-  },
-  // 活动-立即报名
-  {
-    path: "/activity-sign-up",
-    component: () => import("../views/activity-sign-up.vue"),
-    meta: {
-      title: "活动-立即报名", // 页面标题title
-    },
-  },
-  // 活动-立即报名-信息
-  {
-    path: "/activity-sign-up-information",
-    component: () => import("../views/activity-sign-up-information.vue"),
-    meta: {
-      title: "完善信息", // 页面标题title
-    },
-  },
-  // 活动-搜索
-  {
-    path: "/activity-search",
-    component: () => import("../views/activity-search.vue"),
-    meta: {
-      title: "搜索", // 页面标题title
-    },
-  },
-  // 活动-发布
-  {
-    path: "/activit-release",
-    component: () => import("../views/activit-release.vue"),
-    meta: {
-      title: "发布活动", // 页面标题title
-    },
-  },
-  // // 招聘
-  // {
-  // 	path: '/recruit-tab-list',
-  // 	component: () => import('../views/recruit-tab-list.vue'),
-  // 	meta: {
-  // 		title: '招聘', // 页面标题title
-  // 	},
-  // },
-  // // 招聘-详情
-  // {
-  // 	path: '/recruit-details',
-  // 	component: () => import('../views/recruit-details.vue'),
-  // 	meta: {
-  // 		title: '招聘-详情', // 页面标题title
-  // 	},
-  // },
-  // // 招聘-联系HR
-  // {
-  // 	path: '/recruit-contact',
-  // 	component: () => import('../views/recruit-contact.vue'),
-  // 	meta: {
-  // 		title: '联系HR', // 页面标题title
-  // 	},
-  // },
-  // // 招聘-搜索
-  // {
-  // 	path: '/recruit-search',
-  // 	component: () => import('../views/recruit-search.vue'),
-  // 	meta: {
-  // 		title: '搜索', // 页面标题title
-  // 	},
-  // },
-  // // 招聘
-  // {
-  // 	path: '/recruit',
-  // 	component: () => import('../views/recruit.vue'),
-  // 	meta: {
-  // 		title: '招聘', // 页面标题title
-  // 		keepAlive: true, // 开启缓存
-  // 		// 仅前往这些页面时缓存
-  // 		toPagesKeep: [
-  // 			'/recruit-details',
-  // 			'/search',
-  // 			'/contact',
-  // 		],
-  // 	},
-  // },
-  // // 招聘-我的发布
-  // {
-  // 	path: '/recruit-my-release',
-  // 	component: () => import('../views/recruit-my-release.vue'),
-  // 	meta: {
-  // 		title: '招聘-我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 招聘-我的收藏
-  // {
-  // 	path: '/recruit-my-collection',
-  // 	component: () => import('../views/recruit-my-collection.vue'),
-  // 	meta: {
-  // 		title: '招聘-我的收藏', // 页面标题title
-  // 	},
-  // },
-  // // 招聘-浏览记录
-  // {
-  // 	path: '/recruit-browse-records',
-  // 	component: () => import('../views/recruit-browse-records.vue'),
-  // 	meta: {
-  // 		title: '招聘-浏览记录', // 页面标题title
-  // 	},
-  // },
-  // // 商品
-  // {
-  //   path: "/product",
-  //   component: () => import("../views/product.vue"),
-  //   meta: {
-  //     title: "商品", // 页面标题title
-  //   },
-  // },
-  // // 商品
-  // {
-  //   path: "/product-tab-list",
-  //   component: () => import("../views/product-tab-list.vue"),
-  //   meta: {
-  //     title: "商品", // 页面标题title
-  //   },
-  // },
-  // // 商品-确认订单
-  // {
-  //   path: "/product-confirm-order",
-  //   component: () => import("../views/product-confirm-order.vue"),
-  //   meta: {
-  //     title: "确认订单", // 页面标题title
-  //   },
-  // },
-  // // 商品-购物车确认订单
-  // {
-  //   path: "/product-cart-confirm-order",
-  //   component: () => import("../views/product-cart-confirm-order.vue"),
-  //   meta: {
-  //     title: "确认订单", // 页面标题title
-  //   },
-  // },
-  // // 商品-收货地址
-  // {
-  //   path: "/product-address",
-  //   component: () => import("../views/product-address.vue"),
-  //   meta: {
-  //     title: "收货地址", // 页面标题title
-  //   },
-  // },
-  // // 商品-收货地址-添加
-  // {
-  //   path: "/product-address-add",
-  //   component: () => import("../views/product-address-add.vue"),
-  //   meta: {
-  //     title: "收货地址-添加", // 页面标题title
-  //   },
-  // },
-  // // 商品-购物车
-  // {
-  //   path: "/product-address-shopping-cart",
-  //   component: () => import("../views/product-address-shopping-cart.vue"),
-  //   meta: {
-  //     title: "购物车", // 页面标题title
-  //   },
-  // },
-  // // 商品详情
-  // {
-  //   path: "/product-details",
-  //   component: () => import("../views/product-details.vue"),
-  //   meta: {
-  //     title: "商品详情", // 页面标题title
-  //   },
-  // },
-  // // 商品-搜索
-  // {
-  //   path: "/product-search",
-  //   component: () => import("../views/product-search.vue"),
-  //   meta: {
-  //     title: "搜索", // 页面标题title
-  //     keepAlive: true, // 开启缓存
-  //     // 仅前往这些页面时缓存
-  //     toPagesKeep: ["/product-details"],
-  //   },
-  // },
-  // // 商品-客服
-  // {
-  //   path: "/product-customer-service",
-  //   component: () => import("../views/product-customer-service.vue"),
-  //   meta: {
-  //     title: "客服", // 页面标题title
-  //   },
-  // },
-  // // 商品-联系我们
-  // {
-  //   path: "/product-contact",
-  //   component: () => import("../views/product-contact.vue"),
-  //   meta: {
-  //     title: "联系我们", // 页面标题title
-  //   },
-  // },
-  // // 商品-订单详情
-  // {
-  //   path: "/product-order-details",
-  //   component: () => import("../views/product-order-details.vue"),
-  //   meta: {
-  //     title: "订单详情", // 页面标题title
-  //   },
-  // },
-  // // 商品-我的收藏
-  // {
-  //   path: "/product-my-collection",
-  //   component: () => import("../views/product-my-collection.vue"),
-  //   meta: {
-  //     title: "我的收藏", // 页面标题title
-  //   },
-  // },
-  // // 商品-浏览记录
-  // {
-  //   path: "/product-browse-records",
-  //   component: () => import("../views/product-browse-records.vue"),
-  //   meta: {
-  //     title: "浏览记录", // 页面标题title
-  //   },
-  // },
-  // // 商品-我的发布
-  // {
-  //   path: "/product-my-release",
-  //   component: () => import("../views/product-my-release.vue"),
-  //   meta: {
-  //     title: "我的发布", // 页面标题title
-  //   },
-  // },
-  // // 商品-订单
-  // {
-  //   path: "/product-order",
-  //   component: () => import("../views/product-order.vue"),
-  //   meta: {
-  //     title: "订单", // 页面标题title
-  //   },
-  // },
-
-  // // 新闻
-  // {
-  // 	path: '/news',
-  // 	component: () => import('../views/news.vue'),
-  // 	meta: {
-  // 		title: '新闻', // 页面标题title
-  // 	},
-  // },
-  // // 新闻
-  // {
-  // 	path: '/news-tab-list',
-  // 	component: () => import('../views/news-tab-list.vue'),
-  // 	meta: {
-  // 		title: '新闻', // 页面标题title
-  // 	},
-  // },
-  // // 举报
-  // {
-  // 	path: '/news-report',
-  // 	component: () => import('../views/news-report.vue'),
-  // 	meta: {
-  // 		title: '举报', // 页面标题title
-  // 	},
-  // },
-  // // 新闻详情
-  // {
-  // 	path: '/news-details',
-  // 	component: () => import('../views/news-details.vue'),
-  // 	meta: {
-  // 		title: '新闻详情', // 页面标题title
-  // 		toTop: true,
-  // 	},
-  // },
-  // // 新闻搜索
-  // {
-  // 	path: '/news-search',
-  // 	component: () => import('../views/news-search.vue'),
-  // 	meta: {
-  // 		title: '搜索', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-我的收藏
-  // {
-  // 	path: '/news-my-collection',
-  // 	component: () => import('../views/news-my-collection.vue'),
-  // 	meta: {
-  // 		title: '我的收藏', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-浏览记录
-  // {
-  // 	path: '/news-browse-records',
-  // 	component: () => import('../views/news-browse-records.vue'),
-  // 	meta: {
-  // 		title: '浏览记录', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-我的评论
-  // {
-  // 	path: '/news-my-comments',
-  // 	component: () => import('../views/news-my-comments.vue'),
-  // 	meta: {
-  // 		title: '我的评论', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-评论我的
-  // {
-  // 	path: '/news-comments-to-my',
-  // 	component: () => import('../views/news-comments-to-my.vue'),
-  // 	meta: {
-  // 		title: '评论我的', // 页面标题title
-  // 	},
-  // },
-  // // 联系我们
-  // {
-  // 	path: '/news-contact',
-  // 	component: () => import('../views/news-contact.vue'),
-  // 	meta: {
-  // 		title: '联系我们', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-我的回复
-  // {
-  // 	path: '/news-my-reply',
-  // 	component: () => import('../views/news-my-reply.vue'),
-  // 	meta: {
-  // 		title: '新闻-我的回复', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-回复我的
-  // {
-  // 	path: '/news-reply-to-me',
-  // 	component: () => import('../views/news-reply-to-me.vue'),
-  // 	meta: {
-  // 		title: '新闻-回复我的', // 页面标题title
-  // 	},
-  // },
-  // // 新闻-我的点赞
-  // {
-  // 	path: '/news-my-likes',
-  // 	component: () => import('../views/news-my-likes.vue'),
-  // 	meta: {
-  // 		title: '新闻-我的点赞', // 页面标题title
-  // 	},
-  // },
-  // 热搜
-  {
-    path: "/hot-search",
-    component: () => import("../views/hot-search/hot-search.vue"),
-    meta: {
-      title: "热搜", // 页面标题title
-      showTabbar: true, // 显示tabbar
-      // keepAlive: true, // 默认开启缓存,防止第一次缓存失败
-    },
-  },
-  // {
-  //   path: "/hot-search",
-  //   component: () => import("../views/hot-search.vue"),
-  //   meta: {
-  //     title: "热搜", // 页面标题title
-  //     showTabbar: true, // 显示tabbar
-  //     // keepAlive: true, // 默认开启缓存,防止第一次缓存失败
-  //   },
-  // },
-  // // 需求
-  // {
-  // 	path: '/demand',
-  // 	component: () => import('../views/demand.vue'),
-  // 	meta: {
-  // 		title: '需求', // 页面标题title
-  // 	},
-  // },
-  // // 需求
-  // {
-  // 	path: '/demand-tab-list',
-  // 	component: () => import('../views/demand-tab-list.vue'),
-  // 	meta: {
-  // 		title: '需求', // 页面标题title
-  // 	},
-  // },
-  // // 需求-搜索
-  // {
-  // 	path: '/demand-search',
-  // 	component: () => import('../views/demand-search.vue'),
-  // 	meta: {
-  // 		title: '搜索', // 页面标题title
-  // 	},
-  // },
-  // // 需求-发布
-  // {
-  // 	path: '/demand-release',
-  // 	component: () => import('../views/demand-release.vue'),
-  // 	meta: {
-  // 		title: '发布需求', // 页面标题title
-  // 	},
-  // },
-  // // 需求-发布-填写
-  // {
-  // 	path: '/demand-release-write',
-  // 	component: () => import('../views/demand-release-write.vue'),
-  // 	meta: {
-  // 		title: '发布需求-填写', // 页面标题title
-  // 	},
-  // },
-  // // 需求-结果
-  // {
-  // 	path: '/demand-result',
-  // 	component: () => import('../views/demand-result.vue'),
-  // 	meta: {
-  // 		title: '发布结果', // 页面标题title
-  // 	},
-  // },
-  // // 需求-详情
-  // {
-  // 	path: '/demand-details',
-  // 	component: () => import('../views/demand-details.vue'),
-  // 	meta: {
-  // 		title: '需求详情', // 页面标题title
-  // 	},
-  // },
-  // // 需求-详情-我的
-  // {
-  // 	path: '/demand-details-my',
-  // 	component: () => import('../views/demand-details-my.vue'),
-  // 	meta: {
-  // 		title: '需求详情', // 页面标题title
-  // 	},
-  // },
-  // // 需求-浏览记录
-  // {
-  // 	path: '/demand-browse-records',
-  // 	component: () => import('../views/demand-browse-records.vue'),
-  // 	meta: {
-  // 		title: '浏览记录', // 页面标题title
-  // 	},
-  // },
-  // // 需求-我的发布
-  // {
-  // 	path: '/demand-my-release',
-  // 	component: () => import('../views/demand-my-release.vue'),
-  // 	meta: {
-  // 		title: '我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 需求-我的收藏
-  // {
-  // 	path: '/demand-my-collection',
-  // 	component: () => import('../views/demand-my-collection.vue'),
-  // 	meta: {
-  // 		title: '我的收藏', // 页面标题title
-  // 	},
-  // },
-  // // 需求-我的评论
-  // {
-  // 	path: '/demand-my-comments',
-  // 	component: () => import('../views/demand-my-comments.vue'),
-  // 	meta: {
-  // 		title: '需求-我的评论', // 页面标题title
-  // 	},
-  // },
-  // // 需求-评论我的
-  // {
-  // 	path: '/demand-comment-on-my',
-  // 	component: () => import('../views/demand-comment-on-my.vue'),
-  // 	meta: {
-  // 		title: '需求-评论我的', // 页面标题title
-  // 	},
-  // },
-  // 全局搜索
-  {
-    path: "/global-search",
-    component: () => import("../views/global-search.vue"),
-    meta: {
-      title: "全局搜索", // 页面标题title
-    },
-  },
-  // 联系我们
-  {
-    path: "/contact-us",
-    component: () => import("../views/contact-us.vue"),
-    meta: {
-      title: "联系我们", // 页面标题title
-    },
-  },
-  // 我的反馈
-  {
-    path: "/feedback-my",
-    component: () => import("../views/feedback-my.vue"),
-    meta: {
-      title: "我的反馈", // 页面标题title
-    },
-  },
-  // 反馈情况
-  {
-    path: "/feedback-situation",
-    component: () => import("../views/feedback-situation.vue"),
-    meta: {
-      title: "反馈情况", // 页面标题title
-    },
-  },
-  // 消息
-  {
-    path: "/message",
-    component: () => import("../views/message.vue"),
-    meta: {
-      title: "消息", // 页面标题title
-      keepAlive: true, // 开启缓存
-      // 仅前往这些页面时缓存
-      toPagesKeep: ["/message-info"],
-    },
-  },
-  // 消息
-  {
-    path: "/message-info",
-    component: () => import("../views/message-info.vue"),
-    meta: {
-      title: "消息详情", // 页面标题title
-    },
-  },
-  // // 学习服务-图文-历史
-  // {
-  // 	path: '/learning-services-image-text-history',
-  // 	component: () => import('../views/learning-services-image-text-history.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-历史', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-回复我的
-  // {
-  // 	path: '/learning-services-image-text-reply-to-me',
-  // 	component: () => import('../views/learning-services-image-text-reply-to-me.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-历史', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的回复
-  // {
-  // 	path: '/learning-services-image-text-my-reply',
-  // 	component: () => import('../views/learning-services-image-text-my-reply.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的回复', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的已购
-  // {
-  // 	path: '/learning-services-image-text-my-purchased',
-  // 	component: () => import('../views/learning-services-image-text-my-purchased.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的已购', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的评论
-  // {
-  // 	path: '/learning-services-image-text-my-comments',
-  // 	component: () => import('../views/learning-services-image-text-my-comments.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的评论', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的收藏
-  // {
-  // 	path: '/learning-services-image-text-my-collection',
-  // 	component: () => import('../views/learning-services-image-text-my-collection.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的收藏', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的发布
-  // {
-  // 	path: '/learning-services-image-text-my-release',
-  // 	component: () => import('../views/learning-services-image-text-my-release.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-我的点赞
-  // {
-  // 	path: '/learning-services-image-text-my-likes',
-  // 	component: () => import('../views/learning-services-image-text-my-likes.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-我的点赞', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-图文-评论我的
-  // {
-  // 	path: '/learning-services-comment-on-my',
-  // 	component: () => import('../views/learning-services-comment-on-my.vue'),
-  // 	meta: {
-  // 		title: '学习服务-图文-评论我的', // 页面标题title
-  // 	},
-  // },
-  // 学习服务-视频-我的下载
-  {
-    path: "/learning-services-video-my-downloads",
-    component: () =>
-      import("../views/learning-services-video-my-downloads.vue"),
-    meta: {
-      title: "学习服务-视频-我的下载", // 页面标题title
-    },
-  },
-  // // 学习服务-视频-我的点赞
-  // {
-  // 	path: '/learning-services-video-my-likes',
-  // 	component: () => import('../views/learning-services-video-my-likes.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的点赞', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-学习历史
-  // {
-  // 	path: '/learning-services-video-history',
-  // 	component: () => import('../views/learning-services-video-history.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-学习历史', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-回复我的
-  // {
-  // 	path: '/learning-services-video-reply-to-me',
-  // 	component: () => import('../views/learning-services-video-reply-to-me.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-回复我的', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-我的回复
-  // {
-  // 	path: '/learning-services-video-my-reply',
-  // 	component: () => import('../views/learning-services-video-my-reply.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的回复', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-我的已购
-  // {
-  // 	path: '/learning-services-video-my-purchased',
-  // 	component: () => import('../views/learning-services-video-my-purchased.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的已购', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-我的收藏
-  // {
-  // 	path: '/learning-services-video-my-collection',
-  // 	component: () => import('../views/learning-services-video-my-collection.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的收藏', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-我的评论
-  // {
-  // 	path: '/learning-services-video-my-comments',
-  // 	component: () => import('../views/learning-services-video-my-comments.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的评论', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-我的发布
-  // {
-  // 	path: '/learning-services-video-my-release',
-  // 	component: () => import('../views/learning-services-video-my-release.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-我的发布', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-视频-评论我的
-  // {
-  // 	path: '/learning-services-video-comment-on-my',
-  // 	component: () => import('../views/learning-services-video-comment-on-my.vue'),
-  // 	meta: {
-  // 		title: '学习服务-视频-评论我的', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-资料-我的下载
-  // {
-  // 	path: '/learning-services-information-my-downloads',
-  // 	component: () => import('../views/learning-services-information-my-downloads.vue'),
-  // 	meta: {
-  // 		title: '学习服务-资料-我的下载', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-资料-学习历史
-  // {
-  // 	path: '/learning-services-information-history',
-  // 	component: () => import('../views/learning-services-information-history.vue'),
-  // 	meta: {
-  // 		title: '学习服务-资料-学习历史', // 页面标题title
-  // 	},
-  // },
-  // // 学习服务-资料-我的收藏
-  // {
-  // 	path: '/learning-services-information-my-collection',
-  // 	component: () => import('../views/learning-services-information-my-collection.vue'),
-  // 	meta: {
-  // 		title: '学习服务-资料-我的收藏', // 页面标题title
-  // 	},
-  // },
-  // 学习服务-资料-我的发布
-  {
-    path: "/learning-services-information-my-release",
-    component: () =>
-      import("../views/learning-services-information-my-release.vue"),
-    meta: {
-      title: "学习服务-资料-我的发布", // 页面标题title
-    },
-  },
-  // 联系我们
-  {
-    path: "/contact",
-    component: () => import("../views/contact.vue"),
-    meta: {
-      title: "联系我们", // 页面标题title
-    },
-  },
-  // 在线客服
-  {
-    path: "/contact-online",
-    component: () => import("../views/contact-online.vue"),
-    meta: {
-      title: "在线客服", // 页面标题title
-    },
-  },
-  // PPT预览
-  {
-    path: "/ppt-view",
-    component: () => import("../views/ppt-view.vue"),
-    meta: {
-      title: "PPT预览", // 页面标题title
-    },
-  },
-  // 富文本编辑
-  {
-    path: "/app-rich-text",
-    component: () => import("../views/app-rich-text.vue"),
-    meta: {
-      title: "富文本编辑", // 页面标题title
-    },
-  },
-  // 富文本编辑
-  {
-    path: "/rich-text-view",
-    component: () => import("../views/rich-text-view.vue"),
-    meta: {
-      title: "富文本", // 页面标题title
-    },
-  },
-  // // PDF预览
-  {
-    path: "/pdf-view",
-    component: () => import("../views/pdf.vue"),
-    meta: {
-      title: "PDF预览", // 页面标题title
-    },
-  },
-  // PDF预览
-  // {
-  //   path: "/pdf-view",
-  //   component: () => import("../views/pdf/pdf-view-radius.vue"),
-  //   meta: {
-  //     title: "PDF预览", // 页面标题title
-  //   },
-  // },
-
-  // // 图文模块-合集列表
-  // {
-  // 	path: '/image-text-collection-list',
-  // 	component: () => import('../views/image-text-collection-list.vue'),
-  // 	meta: {
-  // 		title: '合集列表', // 页面标题title
-  // 	},
-  // },
-
-  // // 资料模块-合集列表
-  // {
-  // 	path: '/information-collection-list',
-  // 	component: () => import('../views/information-collection-list.vue'),
-  // 	meta: {
-  // 		title: '合集列表', // 页面标题title
-  // 	},
-  // },
-
-  // 资料模块-压缩包打开
-  {
-    path: "/compressed-package-open",
-    component: () => import("../views/compressed-package-open.vue"),
-    meta: {
-      title: "压缩包打开", // 页面标题title
-    },
-  },
-  // 全局搜索新(资料,图文,视频)
-  {
-    path: "/global-search2",
-    component: () => import("../views/global-search2.vue"),
-    meta: {
-      title: "搜索结果", // 页面标题title
-    },
-  },
-  // 企业用户请绑定手机号
-  {
-    path: "/bind-mobile-phone-number",
-    component: () => import("../views/bind-mobile-phone-number.vue"),
-    meta: {
-      title: "企业用户请绑定手机号", // 页面标题title
-    },
-  },
-  // // 个人中心-资料-我的订阅
-  // {
-  // 	path: '/learning-services-information-my-subscriptions',
-  // 	component: () => import('../views/learning-services-information-my-subscriptions.vue'),
-  // 	meta: {
-  // 		title: '我的订阅', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-图文-我的订阅
-  // {
-  // 	path: '/learning-services-image-text-my-subscriptions',
-  // 	component: () => import('../views/learning-services-image-text-my-subscriptions.vue'),
-  // 	meta: {
-  // 		title: '我的订阅', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-视频-我的追番
-  // {
-  // 	path: '/learning-services-video-my-catch-up',
-  // 	component: () => import('../views/learning-services-video-my-catch-up.vue'),
-  // 	meta: {
-  // 		title: '我的追番', // 页面标题title
-  // 	},
-  // },
-  // 首页
-  {
-    path: "/pdf",
-    component: () => import("../views/pdf/index.vue"),
-    meta: {
-      title: "PDF", // 页面标题ti.footer-wrap>button tle
-    },
-  },
-  // // 个人中心-资料-点赞我的
-  // {
-  // 	path: '/learning-services-information-like-me',
-  // 	component: () => import('../views/learning-services-information-like-me.vue'),
-  // 	meta: {
-  // 		title: '点赞我的', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-资料-回复我的
-  // {
-  // 	path: '/learning-services-information-reply-to-me',
-  // 	component: () => import('../views/learning-services-information-reply-to-me.vue'),
-  // 	meta: {
-  // 		title: '回复我的', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-资料-评论我的
-  // {
-  // 	path: '/learning-services-information-comment-on-my',
-  // 	component: () => import('../views/learning-services-information-comment-on-my.vue'),
-  // 	meta: {
-  // 		title: '评论我的', // 页面标题title
-  // 	},
-  // },
-  // 新增
-  // // 个人中心-资料-我的点赞
-  // {
-  // 	path: '/learning-services-information-my-likes',
-  // 	component: () => import('../views/learning-services-information-my-likes.vue'),
-  // 	meta: {
-  // 		title: '我的点赞', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-资料-我的回复
-  // {
-  // 	path: '/learning-services-information-my-reply',
-  // 	component: () => import('../views/learning-services-information-my-reply.vue'),
-  // 	meta: {
-  // 		title: '我的回复', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-资料-我的评论
-  // {
-  // 	path: '/learning-services-information-my-comments',
-  // 	component: () => import('../views/learning-services-information-my-comments.vue'),
-  // 	meta: {
-  // 		title: '我的评论', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-图文-点赞我的
-  // {
-  // 	path: '/learning-services-image-text-like-me',
-  // 	component: () => import('../views/learning-services-image-text-like-me.vue'),
-  // 	meta: {
-  // 		title: '点赞我的', // 页面标题title
-  // 	},
-  // },
-  // // 个人中心-视频-点赞我的
-  // {
-  // 	path: '/learning-services-video-like-me',
-  // 	component: () => import('../views/learning-services-video-like-me.vue'),
-  // 	meta: {
-  // 		title: '点赞我的', // 页面标题title
-  // 	},
-  // },
-  // 全局搜索最新
-  {
-    path: "/global-search-new",
-    component: () => import("../views/global-search-new.vue"),
-    meta: {
-      title: "搜索结果", // 页面标题title
-    },
-  },
-];
-
-const router = new VueRouter({
-  mode: "hash",
-  // mode: 'history',
-  routes,
-});
-
-let disabledKeydown = false;
-export const disabledKeydownFn = (bl) => (disabledKeydown = bl);
-document.addEventListener("keydown", (e) => {
-  if (disabledKeydown) {
-    e.preventDefault();
-  }
-});
-router.beforeEach((to, from, next) => {
-  /* 路由发生变化修改页面title */
-
-  // 判断连接是否带token
-  if (to.query.token) {
-    localStorage.setItem("token", to.query.token);
-  }
-
-  // 判断是否APP打开
-  if (to.query.platform) {
-    localStorage.setItem("APP_OPEN", to.query.platform);
-  }
-
-  if (to.meta.title) {
-    document.title = to.meta.title;
-  }
-  if (to.path === "/forum-release-issues") {
-    setCopyFlag(true);
-  } else {
-    setCopyFlag(false);
-  }
-  if (to.path === "/login") {
-    to.params.from_path = from.path;
-  }
-  disabledKeydown = [
-    "/image-text-details", // 图文
-    "/information-details", // 资料
-    "/ppt-view", // 查看ppt
-  ].includes(to.path);
-  // 监听路由中的code
-  getUrlCode(location.href);
-  if (!to.meta.keepAlive) window.scrollTo(0, 0);
-  next();
-});
-
-// 重写back()方法,没有页面时则返回首页
-router.back = () => {
-  const currentPage = location.hash.split("#").join("").split("?")[0];
-  if (localStorage.getItem("APP_OPEN")) {
-    const openPages = [
-      "/video-tab-list",
-      "/image-text-tab-list",
-      "/information-tab-list",
-      "/video-my-release",
-      "/image-text-my-release",
-      "/informationmy-my-releaset",
-    ];
-    try {
-      if (
-        localStorage.getItem("APP_OPEN") === "ios" &&
-        openPages.includes(currentPage)
-      ) {
-        window.webkit.messageHandlers.h5PageBack.postMessage("h5_page_back");
-      }
-    } catch (e) {
-      console.error(e);
-    }
-    setTimeout(() => {
-      window.history.back();
-    }, 100);
-    return;
-  }
-  if (
-    window.history &&
-    (window.history.length <= 1 || window.history.state === null)
-  ) {
-    router.push("/");
-  } else {
-    router.go(-1);
-  }
-};
-export default router;

+ 16 - 45
src/App.vue

@@ -4,12 +4,8 @@
     <Navbar v-if="!showNavbar" class="Navbar" />
     <Content class="Content" />
     <Footer class="Footer" v-if="routePath == '/index'" />
-    <Abandon v-model="abandon.show" />
-    <isLogin v-model="is_login.show" />
-    <ConfirmPopup />
-    <ToTop class="FixedBtn" :style="{ left: btnLeft + 'rem' }" />
-    <ToContribute class="FixedBtn" :style="{ left: btnLeft + 'rem' }" />
-    <ToContact class="FixedBtn" :style="{ left: btnLeft + 'rem' }" />
+    <Dialog />
+    <Control v-if="window_scale" />
   </div>
 </template>
 
@@ -18,13 +14,8 @@ import Header from "@/components/layout/Header.vue";
 import Navbar from "@/components/layout/Navbar.vue";
 import Content from "@/components/layout/Content.vue";
 import Footer from "@/components/layout/Footer.vue";
-
-import Abandon from "@/components/module/abandon.vue"; // 放弃投稿
-import IsLogin from "@/components/module/is-login.vue"; // 未登录
-import ConfirmPopup from "@/components/module/confirm-popup.vue"; // 确认-通用
-import ToTop from "@/components/module/to-top.vue"; // 回到顶部
-import ToContribute from "@/components/module/to-contribute.vue"; // 发布投稿
-import ToContact from "@/components/module/to-contact.vue";
+import Dialog from "@/components/layout/Dialog.vue";
+import Control from "@/components/layout/Control.vue";
 import { mapState } from "vuex";
 
 export default {
@@ -34,21 +25,16 @@ export default {
     Navbar,
     Content,
     Footer,
-    Abandon,
-    IsLogin,
-    ConfirmPopup,
-    ToTop,
-    ToContribute,
-    ToContact,
+    Dialog,
+    Control,
   },
   data() {
     return {
-      isLogin: true,
-      btnLeft: 0,
+      window_scale: 0,
     };
   },
   computed: {
-    ...mapState(["abandon", "is_login", "routePath"]),
+    ...mapState(["routePath"]),
     showHeader() {
       return this.$route.meta.empty
         ? this.$route.meta.empty.includes("Header")
@@ -63,8 +49,8 @@ export default {
   mounted() {
     this.setRem();
     window.onresize = () => {
+      this.setRem();
       this.$resizeListenerList.forEach((fn) => fn());
-      this.setBtnPosition();
     };
   },
   methods: {
@@ -72,15 +58,7 @@ export default {
       const html = document.querySelector("html"),
         max_width = window.screen.availWidth;
       html.style.fontSize = (max_width / 1920) * 16 + "px";
-      window.$window_scale = max_width / 1920;
-      this.setBtnPosition();
-    },
-    setBtnPosition() {
-      let btnRight = 100 + 8;
-      this.btnLeft =
-        window.innerWidth - btnRight > 1097
-          ? (window.innerWidth - btnRight) / window.$window_scale / 16
-          : 1097 / window.$window_scale / 16;
+      this.window_scale = window.$window_scale = max_width / 1920;
     },
   },
 };
@@ -119,18 +97,11 @@ body {
 .Footer {
   float: left;
 }
-.FixedBtn {
-  z-index: 50;
-}
 
-@media (max-width: 75rem) {
-  .Header {
-    // position: absolute;
-    // top: var(--scrollTop) !important;
-  }
-  .FixedBtn {
-    position: absolute !important;
-    top: calc(var(--scrollTop) + var(--windowHeight) - 5rem) !important;
-  }
-}
+// @media (max-width: 75rem) {
+//   .Header {
+//      position: absolute;
+//      top: var(--scrollTop) !important;
+//   }
+// }
 </style>

+ 4 - 0
src/assets/css/common.scss

@@ -730,6 +730,10 @@ span {
   line-height: 1em;
 }
 
+img {
+  width: 100%;
+}
+
 $body-width-100: calc(100vw - #{$scrollbarWidth}px);
 $body-width-min: 1000px;
 $body-height-100: calc(100vh - (#{$scrollbarHeight}px * 2));

BIN
src/assets/icon/gouwuche.png


BIN
src/assets/icon/share-fenxiang.png


+ 24 - 0
src/common/mixin.js

@@ -5,6 +5,7 @@ let mixin = {
     };
   },
   methods: {
+    // 确认弹窗
     showConfirmPopup(info, config) {
       return new Promise((res) => {
         const confirm_popup = this.$store.state.confirm_popup;
@@ -14,6 +15,29 @@ let mixin = {
         config ? Object.assign(confirm_popup.config, config) : "";
       });
     },
+    // 下一条未读
+    toNext() {
+      let current_index, next;
+      current_index = 0;
+      this.list.forEach((item, index) => {
+        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
+        if (top > -170 && top <= 100) {
+          current_index = index;
+          return;
+        }
+      });
+      if (!this.list.length || !this.list.find((item) => !item.is_read))
+        return this.$message.info("没有未读消息!");
+      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
+      if (!next) next = this.list.find((item) => !item.is_read);
+      // if (!next) return this.$message.info("没有下一条未读消息!");
+      window.scrollTo(
+        0,
+        window.scrollY +
+          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
+          100
+      );
+    },
   },
   mounted() {
     const path = this.TouchBottom && this.$route ? this.$route.path : "";

+ 1 - 14
src/common/util.js

@@ -234,21 +234,8 @@ export const getFileIcon = (fileType) => INFORMATION_ICON[fileType];
  * @param str
  * @returns {*}
  */
-export const formatRichText1 = (str) => {
-  return str
-    .replace(/\n/g, "<br/>")
-    .replace(/\n/g, "<br>")
-    .replace(/\n/g, "<br />")
-    .replace(/<\/?(img)[^>]*>/gi, "")
-    .replace(/<\/?(video)[^>]*>/gi, "");
-};
 export const formatRichText = (str) => {
-  return str
-    .replace(/\n/g, "<br/>")
-    .replace(
-      /<img/gi,
-      '<img style="max-width:100%!important; height:auto; display: block"'
-    );
+  return str.replace(/<[^>]+>/g, "");
 };
 //获取设备唯一标识
 export const getUniqueCode = () => {

+ 5 - 1
src/components/card/activity/my-application-card.vue

@@ -2,7 +2,11 @@
   <div class="card">
     <CardBox style="padding: 15px 20px" :btnList="btnList" v-on="$listeners">
       <div class="is_normal" v-if="!info.is_normal">已失效</div>
-      <div class="content" :style="{ opacity: !info.is_normal ? '0.5' : '1' }">
+      <div
+        class="content"
+        :style="{ opacity: !info.is_normal ? '0.5' : '1' }"
+        @click="info.is_normal ? $emit('handleToDetail') : ''"
+      >
         <CardActivityContent :info="info" :showMark="true" />
       </div>
       <div

+ 3 - 3
src/components/card/card-module/card-answer-content.vue

@@ -3,7 +3,7 @@
     <div class="top">
       <img class="icon" src="@/assets/icon/answer.png" v-if="showIcon" />
       <div class="content" v-if="!showVip">
-        {{ replaceTag(formatRichText1(content)) }}
+        {{ replaceTag(formatRichText(content)) }}
       </div>
     </div>
     <div class="view-answer" v-if="!showVip" @click="$emit('handleToDetail')">
@@ -14,7 +14,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 export default {
   name: "CardAnswerContent",
   props: {
@@ -31,7 +31,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
     replaceTag(val) {
       return val.replace("<p>", "").replace("</p>", "");
     },

+ 2 - 0
src/components/card/card-module/card-content.vue

@@ -65,6 +65,8 @@ export default {
     z-index: -1;
   }
   .content {
+    font-size: 16px;
+    line-height: 1.5em;
   }
   .hide {
     width: calc(100% - 5em);

+ 1 - 0
src/components/card/card-module/card-recruit-content.vue

@@ -66,6 +66,7 @@ export default {
     align-items: center;
     padding: 0 20px;
     box-sizing: border-box;
+    overflow: hidden;
     .tag {
       height: 26px;
       line-height: 26px;

+ 3 - 0
src/components/card/comment-detail-card.vue

@@ -321,6 +321,9 @@ export default {
     }
     .parent-box {
       margin-top: 15px;
+      background: #f6f6f6;
+      border-radius: 10px;
+      padding: 10px 10px 20px;
     }
   }
 }

+ 1 - 1
src/components/card/demand/my-like-comment-card.vue

@@ -13,7 +13,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 1 - 1
src/components/card/demand/my-reply-card.vue

@@ -15,7 +15,7 @@
       <div class="target" @click="$emit('handleToDetail')">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${info.user_name}:${info.parent_comment.content}`"
+          :content="`@${info.parent_comment.name}:${info.parent_comment.content}`"
         />
         <CardCoverDetail
           :info="{

+ 3 - 3
src/components/card/forum/browse-history-card.vue

@@ -12,7 +12,7 @@
         <img class="icon" src="@/assets/icon/question.png" alt="" />
         {{ info.title }}
       </div>
-      <div class="content" v-html="formatRichText1(info.content) || ''"></div>
+      <div class="content" v-html="formatRichText(info.content) || ''"></div>
       <div class="tag">
         <div class="tag-item" v-for="tag in info.label_name">{{ tag }}</div>
       </div>
@@ -31,7 +31,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 import CardBox from "../card-module/card-box.vue";
 
 export default {
@@ -51,7 +51,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 4 - 3
src/components/card/forum/my-like-card.vue

@@ -33,7 +33,8 @@
         />
         <div
           class="content-question-content"
-          v-html="formatRichText1(info.content) || ''"
+          @click="$emit('handleToDetail', 'question')"
+          v-html="formatRichText(info.content) || ''"
         ></div>
         <CardAnswerContent
           v-if="cardType == 'answer'"
@@ -73,7 +74,7 @@ import CardContent from "../card-module/card-content.vue";
 import CardAnswerContent from "../card-module/card-answer-content.vue";
 import CardQuestionContent from "../card-module/card-question-content.vue";
 import { mapState } from "vuex";
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 
 export default {
   name: "CommentMyCard",
@@ -111,7 +112,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 3 - 3
src/components/card/forum/my-question-card.vue

@@ -5,7 +5,7 @@
         <img class="icon" src="@/assets/icon/question.png" alt="" />
         {{ info.title }}
       </div>
-      <div class="content" v-html="formatRichText1(info.content) || ''"></div>
+      <div class="content" v-html="formatRichText(info.content) || ''"></div>
       <div class="tag">
         <div class="tag-item" v-for="tag in info.label_name">{{ tag }}</div>
       </div>
@@ -21,7 +21,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 import CardBox from "../card-module/card-box.vue";
 export default {
   name: "MyQuestionCard",
@@ -44,7 +44,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 1 - 1
src/components/card/image-text/like-my-image-text-card.vue

@@ -11,7 +11,7 @@
         />
       </div>
       <div class="content">
-        <CardContent :content="`点赞了这个视频`" />
+        <CardContent :content="`点赞了这个图文`" />
       </div>
       <div class="target" @click="$emit('handleToDetail')">
         <CardCoverDetail :info="info" />

+ 1 - 1
src/components/card/image-text/my-like-comment-card.vue

@@ -12,7 +12,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 1 - 1
src/components/card/image-text/my-reply-card.vue

@@ -15,7 +15,7 @@
       <div class="target" @click="$emit('handleToDetail')">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${info.user_name}:${info.parent_comment.content}`"
+          :content="`@${info.parent_comment.name}:${info.parent_comment.content}`"
         />
         <CardCoverDetail
           :info="{

+ 1 - 1
src/components/card/information/like-my-information-card.vue

@@ -11,7 +11,7 @@
         />
       </div>
       <div class="content">
-        <CardContent :content="`点赞了这个视频`" />
+        <CardContent :content="`点赞了这个资料`" />
       </div>
       <div class="target" @click="$emit('handleToDetail')">
         <CardFileDetail :info="info" />

+ 1 - 1
src/components/card/information/my-like-comment-card.vue

@@ -12,7 +12,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 1 - 1
src/components/card/information/my-reply-card.vue

@@ -15,7 +15,7 @@
       <div class="target" @click="$emit('handleToDetail')">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${info.user_name}:${info.parent_comment.content}`"
+          :content="`@${info.parent_comment.name}:${info.parent_comment.content}`"
         />
         <CardFileDetail
           :info="{

+ 1 - 1
src/components/card/news/my-like-comment-card.vue

@@ -13,7 +13,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 1 - 1
src/components/card/news/my-reply-card.vue

@@ -15,7 +15,7 @@
       <div class="target" @click="$emit('handleToDetail')">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${info.user_name}:${info.parent_comment.content}`"
+          :content="`@${info.parent_comment.name}:${info.parent_comment.content}`"
         />
         <CardCoverDetail
           :info="{

+ 2 - 2
src/components/card/search/demand-card.vue

@@ -37,7 +37,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 export default {
   name: "DemandCard",
   props: {
@@ -46,7 +46,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 3 - 3
src/components/card/search/forum-card.vue

@@ -11,7 +11,7 @@
       <img class="icon" src="@/assets/icon/question.png" alt="" />
       <span v-html="info.title"></span>
     </div>
-    <div class="content" v-html="formatRichText1(info.content) || ''"></div>
+    <div class="content" v-html="formatRichText(info.content) || ''"></div>
     <div class="tag">
       <div
         class="tag-item"
@@ -34,7 +34,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 import Report from "@/components/module/report.vue";
 
 export default {
@@ -53,7 +53,7 @@ export default {
     };
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 2 - 2
src/components/card/search/news-card.vue

@@ -27,7 +27,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 export default {
   name: "NewsCard",
   props: {
@@ -36,7 +36,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 2 - 2
src/components/card/search/supplier-card.vue

@@ -27,7 +27,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 export default {
   name: "SupplierCard",
   props: {
@@ -36,7 +36,7 @@ export default {
     },
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 1 - 1
src/components/card/supplier/my-like-comment-card.vue

@@ -12,7 +12,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 1 - 1
src/components/card/video/my-like-comment-card.vue

@@ -12,7 +12,7 @@
       <div class="content">
         <CardContent
           style="margin-bottom: 10px"
-          :content="`@${userInfo.name}:${info.content}`"
+          :content="`${userInfo.name}:${info.content}`"
         />
       </div>
       <div class="target" @click="$emit('handleToDetail')">

+ 9 - 0
src/components/forum/forum-list-module.vue

@@ -44,7 +44,16 @@
             <img class="icon" src="@/assets/icon/report.png" />
             <span>举报</span>
           </div>
+          <div
+            class="tag-btn"
+            v-if="type == 'answer' && info.user_id == userInfo.id"
+            @click="$emit('handleDelete')"
+          >
+            <img class="icon" src="@/assets/icon/shanchu.png" />
+            <span>删除</span>
+          </div>
         </div>
+
         <div class="btn-box" v-if="type == 'question'">
           <div
             class="btn"

+ 3 - 3
src/components/forum/forum-question-card.vue

@@ -11,7 +11,7 @@
       <img class="icon" src="@/assets/icon/question.png" alt="" />
       {{ info.title }}
     </div>
-    <div class="content" v-html="formatRichText1(info.content) || ''"></div>
+    <div class="content" v-html="formatRichText(info.content) || ''"></div>
     <div class="tag">
       <div class="tag-item" v-for="tag in info.label_name">{{ tag }}</div>
     </div>
@@ -29,7 +29,7 @@
 </template>
 
 <script>
-import { formatRichText1 } from "@/common/util";
+import { formatRichText } from "@/common/util";
 
 export default {
   name: "ForumQuestionCard",
@@ -44,7 +44,7 @@ export default {
     return {};
   },
   methods: {
-    formatRichText1,
+    formatRichText,
   },
 };
 </script>

+ 4 - 6
src/components/layout/Content.vue

@@ -1,5 +1,8 @@
 <template>
-  <div :class="isFill ? 'router-content-fill' : 'router-content'">
+  <div
+    :class="$route.meta.fill ? 'router-content-fill' : 'router-content'"
+    ref="wrap"
+  >
     <keep-alive v-if="$route.meta.keepAlive">
       <router-view :key="$route.fullPath"></router-view
     ></keep-alive>
@@ -10,11 +13,6 @@
 <script>
 export default {
   name: "Content",
-  computed: {
-    isFill() {
-      return this.$route.meta.fill;
-    },
-  },
 };
 </script>
 

+ 67 - 0
src/components/layout/Control.vue

@@ -0,0 +1,67 @@
+<template>
+  <div class="Control" :style="{ left: btnLeft + 'rem' }">
+    <ToTop />
+    <ToContribute />
+    <ToContact />
+    <ToShare />
+    <ToShoppingCart />
+  </div>
+</template>
+
+<script>
+import ToTop from "@/components/module/to-top.vue"; // 回到顶部
+import ToContribute from "@/components/module/to-contribute.vue"; // 发布投稿
+import ToContact from "@/components/module/to-contact.vue"; // 客服
+import ToShoppingCart from "@/components/module/to-shoppingCart.vue"; // 购物车
+import ToShare from "@/components/module/to-share.vue"; // 分享
+export default {
+  components: {
+    ToTop,
+    ToContribute,
+    ToContact,
+    ToShoppingCart,
+    ToShare,
+  },
+  data() {
+    return {
+      btnLeft: 0,
+    };
+  },
+  mounted() {
+    this.setBtnPosition();
+    this.$resizeListenerList.push(this.setBtnPosition);
+  },
+  methods: {
+    setBtnPosition() {
+      let btnRight = 100 + 8;
+      this.btnLeft =
+        window.innerWidth - btnRight > 1097
+          ? (window.innerWidth - btnRight) / window.$window_scale / 16
+          : 1097 / window.$window_scale / 16;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.Control {
+  width: 50px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  z-index: 50;
+  bottom: 30px;
+  position: fixed;
+  :not(:last-child) {
+    margin-bottom: 10px;
+  }
+}
+
+@media (max-width: 75rem) {
+  .Control {
+    position: absolute !important;
+    top: calc(var(--scrollTop) + var(--windowHeight) - 5rem) !important;
+    transform: translate(0, -100%);
+  }
+}
+</style>

+ 29 - 0
src/components/layout/Dialog.vue

@@ -0,0 +1,29 @@
+<template>
+  <div class="Dialog">
+    <Abandon v-model="abandon.show" />
+    <isLogin v-model="is_login.show" />
+    <ConfirmPopup />
+  </div>
+</template>
+
+<script>
+import Abandon from "@/components/module/abandon.vue"; // 放弃投稿
+import IsLogin from "@/components/module/is-login.vue"; // 未登录
+import ConfirmPopup from "@/components/module/confirm-popup.vue"; // 确认-通用
+import { mapState } from "vuex";
+export default {
+  components: {
+    Abandon,
+    IsLogin,
+    ConfirmPopup,
+  },
+  data() {
+    return {};
+  },
+  computed: {
+    ...mapState(["abandon", "is_login", "routePath"]),
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 1 - 1
src/components/layout/Footer.vue

@@ -41,7 +41,7 @@ export default {
         {
           label: "客服中心",
           key: "customer_service",
-          click: () => this.$router.push("contact-online"),
+          click: () => this.$store.commit("OPEN_CONTACT"),
         },
         {
           label: "会员说明",

+ 51 - 13
src/components/layout/Header.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="header">
-    <div class="header-icon" @click="$router.push('/index')">GYXQCDZ</div>
+    <div class="header-icon" @click="handleLogoClick">GYXQCDZ</div>
     <div class="header-search">
       <el-popover
         width="500"
@@ -63,9 +63,9 @@
             @focus="hotShow(true)"
             @blur="hotShow(false)"
           />
-          <div class="hot" @click="$router.push('/search-hot')">
+          <div class="hot" @click="handleToHot">
             <img src="@/assets/icon/resoubang.png" />
-            <span>热搜</span>
+            <span>热搜</span>
           </div>
           <div class="btn" @click="handleSearch">
             <i class="el-icon-search"></i>
@@ -84,7 +84,7 @@
         />
         <div class="hot" @click="$router.push('/search-hot')">
           <img src="@/assets/icon/resoubang.png" />
-          <span>热搜</span>
+          <span>热搜</span>
         </div>
         <div class="btn" @click="handleSearch">
           <i class="el-icon-search"></i>
@@ -116,11 +116,7 @@
             :src="
               userInfo.headimg ? userInfo.headimg : '@/assets/icon/avatar.png'
             "
-            @click="
-              vipPath.includes(routePath)
-                ? $router.push('/vip')
-                : handlePersonal()
-            "
+            @click="handlePersonal()"
           />
           <div class="mark" v-if="centerMarkNum">{{ centerMarkNum }}</div>
         </div>
@@ -240,6 +236,9 @@ export default {
     personalPath() {
       let childPath = "comment-on-my";
       switch (this.handleFilter()) {
+        case "forum":
+          childPath = "answer-on-my";
+          break;
         case "recruit":
           childPath = "my-release";
           break;
@@ -284,6 +283,26 @@ export default {
   },
   mounted() {},
   methods: {
+    // 点击logo
+    handleLogoClick() {
+      let isChildren = this.$route.meta && this.$route.meta.children,
+        pathList = [
+          "/forum",
+          "/video",
+          "/image-text",
+          "/information",
+          "/news",
+          "/supplier",
+          "/demand",
+          "/recruit",
+          "/activity",
+          "/product",
+        ];
+      let path = pathList.find((item) => {
+        return this.routePath.includes(item);
+      });
+      this.$router.push(isChildren && path ? path : "/index");
+    },
     // 跳转登录
     handleLogin() {
       this.$router.push({ name: "login" });
@@ -303,8 +322,12 @@ export default {
     },
     // 跳转个人中心
     handlePersonal() {
+      if (this.vipPath.includes(this.routePath))
+        return this.$router.push("/vip");
       if (!this.handleFilter()) return;
-      if (this.routePath == this.personalPath) return;
+      // if (this.routePath == this.personalPath) return;
+      if (this.$route.meta.children && this.routePath !== "/vip")
+        return this.$router.push("/vip");
       // this.$router.open(this.personalPath);
       this.$router.push(this.personalPath);
     },
@@ -323,12 +346,23 @@ export default {
     },
     // 搜索
     handleSearch() {
-      this.$store.commit("setSearchState", {
-        type: this.handleFilter(),
-      });
+      this.$store.commit(
+        "setSearchState",
+        this.routePath == "/search"
+          ? {}
+          : {
+              type: this.handleFilter(),
+            }
+      );
+      this.hot_visible = false;
       if (this.routePath == "/search") return;
       this.$router.push(`/search`);
     },
+    // 跳转热搜
+    handleToHot() {
+      this.$router.push("/search-hot?type=" + this.handleFilter());
+    },
+    // 历史搜素
     historySearch(history) {
       this.searchState.value = history.title;
       this.handleSearch();
@@ -535,6 +569,10 @@ export default {
       flex-wrap: wrap;
       align-items: center;
       .history-item {
+        max-width: 100%;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
         min-height: 26px;
         padding: 0 10px;
         background: #f4f4f4;

+ 4 - 1
src/components/module/abandon.vue

@@ -38,7 +38,10 @@ export default {
   methods: {
     confirm() {
       this.abandon.show = false;
-      this.$router.push(this.abandon.next);
+      this.$router.push({
+        path: this.abandon.next,
+        query: this.abandon.query,
+      });
       this.abandon.next = "";
     },
     cancel() {

+ 16 - 0
src/components/module/contact-dialog.vue

@@ -51,6 +51,22 @@ export default {
     prop: "visible",
     event: "visible",
   },
+  data() {
+    return {
+      path: "",
+    };
+  },
+  watch: {
+    "$route.path": {
+      handler: function (val) {
+        if (val != this.path) this.$emit("visible", false);
+      },
+      deep: true,
+    },
+  },
+  mounted() {
+    this.path = this.$route.path;
+  },
   methods: {
     // 复制
     handleCopy(value) {

+ 4 - 2
src/components/module/detail-desc.vue

@@ -2,11 +2,13 @@
   <el-dialog
     v-if="visible"
     :title="title"
-    width="360px"
+    width="30rem"
     :visible.sync="visible"
     :before-close="(_) => $emit('visible', false)"
   >
-    <pre v-if="type == 'value'">{{ content }}</pre>
+    <pre style="white-space: pre-wrap" v-if="type == 'value'">{{
+      content
+    }}</pre>
     <div v-if="type == 'html'" v-html="content"></div>
   </el-dialog>
 </template>

+ 3 - 3
src/components/module/detail-title.vue

@@ -19,14 +19,14 @@
           <img src="@/assets/icon/jianjie_fill_blue.png" alt="" />
           <span>简介</span>
         </div>
-        <!-- <div
+        <div
           class="item"
           v-if="info.goods_id"
-          @click="$message.success('敬请期待')"
+          @click="$emit('toSupplierDetail')"
         >
           <img src="@/assets/icon/chanpin_fill_blue.png" alt="" />
           <span>相关产品</span>
-        </div> -->
+        </div>
         <div class="item" v-if="info.video_id" @click="$emit('toVideoDetail')">
           <img src="@/assets/icon/shipin_blue.png" alt="" />
           <span>相关视频</span>

+ 21 - 3
src/components/module/invoice-header-select.vue

@@ -19,7 +19,8 @@
             >
               <div class="left">
                 <div class="top">{{ item.header }}</div>
-                <div class="bottom">{{ item.identify_number }}</div>
+                <div class="center">{{ item.identify_number }}</div>
+                <div class="bottom">{{ item.email || "-" }}</div>
               </div>
               <div class="right" @click.stop="openEdit('edit', item)">编辑</div>
             </div>
@@ -62,6 +63,13 @@
               placeholder="请填写单位税号"
               v-model="header_params.identify_number"
             />
+            <div class="form-label">邮箱</div>
+            <input
+              class="form-input"
+              type="text"
+              placeholder="请填写邮箱"
+              v-model="header_params.email"
+            />
           </div>
         </div>
         <div class="content-footer">
@@ -96,6 +104,7 @@ export default {
       header_params: {
         header: "",
         identify_number: "",
+        email: "",
       },
       current: "",
     };
@@ -134,6 +143,10 @@ export default {
         this.$message.error("请填写单位税号");
         return false;
       }
+      if (!this.header_params.email) {
+        this.$message.error("请填写邮箱");
+        return false;
+      }
       return true;
     },
     // 添加/修改抬头
@@ -182,7 +195,7 @@ export default {
         overflow-y: auto;
         .list-item {
           width: 660px;
-          height: 80px;
+          height: 100px;
           padding: 0 20px;
           background: #ffffff;
           border-radius: 10px;
@@ -192,7 +205,7 @@ export default {
           align-items: center;
           justify-content: space-between;
           .left {
-            height: 55px;
+            height: 75px;
             display: flex;
             flex-direction: column;
             justify-content: space-between;
@@ -201,6 +214,11 @@ export default {
               font-weight: 400;
               color: #000000;
             }
+            .center {
+              font-size: 14px;
+              font-weight: 400;
+              color: #999999;
+            }
             .bottom {
               font-size: 14px;
               font-weight: 400;

+ 1 - 0
src/components/module/invoice.vue

@@ -124,6 +124,7 @@ export default {
     handleSelect(item) {
       this.params.header = item.header;
       this.params.identify_number = item.identify_number;
+      this.params.email = item.email;
     },
   },
 };

+ 14 - 29
src/components/module/to-contact.vue

@@ -1,9 +1,7 @@
 <template>
   <div class="to-contact" v-if="show" @click="$store.commit('OPEN_CONTACT')">
-    <div class="contact-box">
-      <img src="@/assets/icon/kefu.png" alt="" />
-      <div class="mark" v-if="contactNum > 0"></div>
-    </div>
+    <img src="@/assets/icon/kefu.png" alt="" />
+    <div class="mark" v-if="contactNum > 0"></div>
   </div>
 </template>
 
@@ -29,32 +27,19 @@ export default {
 
 <style lang="scss" scoped>
 .to-contact {
-  position: fixed;
-  .contact-box {
-    position: relative;
-    img {
-      width: 50px;
-      height: 50px;
-    }
-    .mark {
-      width: 12px;
-      height: 12px;
-      background: #ff3535;
-      border-radius: 50%;
-      position: absolute;
-      top: 0;
-      right: 0;
-    }
+  position: relative;
+  img {
+    width: 50px;
+    height: 50px;
   }
-}
-@media (min-width: 75rem) {
-  .to-contact {
-    bottom: 30px;
-  }
-}
-@media (max-width: 75rem) {
-  .to-contact {
-    top: calc(var(--scrollTop) + var(--windowHeight) - 90px) !important;
+  .mark {
+    width: 12px;
+    height: 12px;
+    background: #ff3535;
+    border-radius: 50%;
+    position: absolute;
+    top: 0;
+    right: 0;
   }
 }
 </style>

+ 1 - 12
src/components/module/to-contribute.vue

@@ -31,7 +31,7 @@ export default {
     // 取值
     handleFilter() {
       let path = "";
-      ["video", "image-text", "information"].forEach((item) => {
+      ["video", "image-text", "information", "forum"].forEach((item) => {
         if (
           !this.routePath.includes("contribute") &&
           this.routePath.includes(item)
@@ -47,20 +47,9 @@ export default {
 
 <style lang="scss" scoped>
 .to-contribute {
-  position: fixed;
   img {
     width: 50px;
     height: 50px;
   }
 }
-@media (min-width: 75rem) {
-  .to-contribute {
-    bottom: 100px;
-  }
-}
-@media (max-width: 75rem) {
-  .to-contribute {
-    top: calc(var(--scrollTop) + var(--windowHeight) - 160px) !important;
-  }
-}
 </style>

+ 79 - 0
src/components/module/to-share.vue

@@ -0,0 +1,79 @@
+<template>
+  <el-popover
+    placement="bottom"
+    v-model="forward_visible"
+    v-if="$route.path == '/product-details'"
+  >
+    <div class="to-share" slot="reference">
+      <img src="@/assets/icon/share-fenxiang.png" alt="" />
+    </div>
+    <div class="forward">
+      <div class="content">{{ forword_url }}</div>
+      <div class="btn" @click="handleCopy()">复制链接</div>
+    </div>
+  </el-popover>
+</template>
+
+<script>
+import { copy } from "@/common/util";
+export default {
+  name: "ToShare",
+  data() {
+    return {
+      forward_visible: false,
+      forword_url: location.href,
+    };
+  },
+  methods: {
+    // 分享
+    handleCopy() {
+      // ForumService.forumTransmit({ forum_id: this.info.id }).then(({ msg }) => {
+      //   this.$message.success(msg);
+      copy(location.href);
+      this.$message.success("复制成功");
+      // });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.to-share {
+  img {
+    width: 50px;
+    height: 50px;
+  }
+}
+.forward {
+  width: 320px;
+  height: 35px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #f4f4f4;
+  border-radius: 17px;
+  user-select: none;
+  .content {
+    width: calc(100% - 100px);
+    padding-left: 20px;
+    font-size: 14px;
+    font-weight: 400;
+    color: #151625;
+    overflow: hidden;
+    white-space: nowrap;
+    user-select: none;
+  }
+  .btn {
+    width: 80px;
+    height: 35px;
+    background: #0054f7;
+    border-radius: 0px 17px 17px 0px;
+    text-align: center;
+    font-size: 12px;
+    font-weight: 400;
+    color: #ffffff;
+    line-height: 35px;
+    cursor: pointer;
+  }
+}
+</style>

+ 51 - 0
src/components/module/to-shoppingCart.vue

@@ -0,0 +1,51 @@
+<template>
+  <div
+    class="to-shoppingCart"
+    v-if="show"
+    @click="$router.push('/product-shopping-cart')"
+  >
+    <img src="@/assets/icon/gouwuche.png" alt="" />
+    <div class="mark" v-if="cartNum > 0">{{ cartNum }}</div>
+  </div>
+</template>
+
+<script>
+import { mapState } from "vuex";
+export default {
+  name: "ToShoppingCart",
+  computed: {
+    ...mapState({
+      cartNum: (state) => state.mark_num.productMarkNum.trolley_num,
+    }),
+    show() {
+      let show_list = ["/product", "/product-details"];
+      return (
+        !this.$route.meta.children &&
+        show_list.includes(this.$route.path) &&
+        localStorage.getItem("user_info")
+      );
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.to-shoppingCart {
+  position: relative;
+  img {
+    width: 50px;
+    height: 50px;
+  }
+  .mark {
+    width: 12px;
+    padding: 0 6px;
+    background: #ff3535;
+    border-radius: 6px;
+    position: absolute;
+    top: 0;
+    left: 30px;
+    text-align: center;
+    color: white;
+  }
+}
+</style>

+ 0 - 12
src/components/module/to-top.vue

@@ -41,21 +41,9 @@ export default {
 
 <style lang="scss" scoped>
 .to-top {
-  position: fixed;
   img {
     width: 50px;
     height: 50px;
   }
 }
-
-@media (min-width: 75rem) {
-  .to-top {
-    bottom: 170px;
-  }
-}
-@media (max-width: 75rem) {
-  .to-top {
-    top: calc(var(--scrollTop) + var(--windowHeight) - 230px) !important;
-  }
-}
 </style>

+ 1 - 1
src/components/search/search-sort.vue

@@ -53,7 +53,7 @@ export default {
     display: flex;
     align-items: center;
     cursor: pointer;
-    .img {
+    img {
       height: 14px;
       width: 14px;
     }

+ 1 - 1
src/components/supplier/supplier-all-card.vue

@@ -4,7 +4,7 @@
       <img class="logo" :src="info.logo" alt="" />
       <div class="name">{{ info.title }}</div>
     </div>
-    <div class="view-more">查看更多</div>
+    <div class="view-more">点击查看</div>
   </div>
 </template>
 

+ 21 - 8
src/components/video/video-interactive.vue

@@ -12,7 +12,7 @@
         />
         <span>{{ currentVideo.praise_num || 0 }}</span>
       </div>
-      <div class="tags" @click="userCollect">
+      <div class="tags" @click="handleCollect">
         <img
           :src="
             require(currentVideo.is_collect === 0
@@ -56,7 +56,7 @@
     <div class="right">
       <div class="related" v-if="currentVideo.pdf_clear" @click="toPPT">
         <img src="@/assets/icon/ppt.png" alt="" />
-        <span>查看ppt</span>
+        <span>查看PPT</span>
       </div>
       <div class="related" v-if="currentVideo.article_id" @click="toImageText">
         <img src="@/assets/icon/tuwen_white.png" alt="" />
@@ -66,17 +66,21 @@
         <img src="@/assets/icon/ziliao_white.png" alt="" />
         <span>相关资料</span>
       </div>
-      <!-- <div class="related" v-if="currentVideo.goods_id">
+      <div
+        class="related"
+        v-if="currentVideo.goods_id"
+        @click="toSupplierDetail"
+      >
         <img src="@/assets/icon/chanpin.png" alt="" />
         <span>相关产品</span>
-      </div> -->
+      </div>
     </div>
     <Report :type="1" :info="currentVideo" v-model="reportVisible" />
   </div>
 </template>
 
 <script>
-import { VideoService, CollectService, GeneralService } from "@/common/service";
+import { VideoService, GeneralService } from "@/common/service";
 import { OSS_URL } from "@/common/config";
 import Report from "@/components/module/report.vue";
 
@@ -133,10 +137,10 @@ export default {
       });
     },
     // 收藏
-    userCollect() {
+    handleCollect() {
       const video = this.currentVideo;
-      CollectService.userCollect({
-        coll_type: 1,
+      VideoService.videoCollect({
+        coll_type: 1 - this.currentVideo.is_collect,
         coll_id: video.id,
       }).then(({ msg, data }) => {
         this.$message.success(msg);
@@ -221,6 +225,15 @@ export default {
         });
       }
     },
+    // 跳转产品
+    toSupplierDetail() {
+      this.$router.open({
+        path: "/supplier-details",
+        query: {
+          id: this.currentVideo.goods_id,
+        },
+      });
+    },
   },
 };
 </script>

+ 15 - 1
src/components/video/video-player.vue

@@ -61,7 +61,8 @@
             (!videoIsVip || (videoIsVip && isLogin && isVip))
           ) ||
           !aliPlayerInitEnd ||
-          !!ali_vid === false
+          !!ali_vid === false ||
+          !browseCheck()
         "
       >
         <div v-if="!aliPlayerTrue">当前浏览器不支持DRM播放请前往APP观看</div>
@@ -70,6 +71,9 @@
           >暂无视频资源</span
         >
         <span v-else-if="videoIsVip && !isVip">您还不是会员,请购买后观看</span>
+        <span v-else-if="!browseCheck()"
+          >视频资源仅可使用Edge浏览器与Safari浏览器查看</span
+        >
       </div>
     </div>
     <IsVip ref="isLoginVip" v-model="vipVisible" />
@@ -409,6 +413,16 @@ export default {
       this.videoPlay();
       this.aliPlayer && this.aliPlayer.dispose();
     },
+    // 校验浏览器
+    browseCheck() {
+      const userAgent = navigator.userAgent;
+      return (
+        // Edge
+        /Edg/.test(userAgent) ||
+        // Safari
+        (/Safari/.test(userAgent) && !/Chrome/.test(userAgent))
+      );
+    },
   },
 };
 </script>

+ 2 - 2
src/components/video/video-sidebar.vue

@@ -28,11 +28,11 @@
             @click="switchSet"
           >
             <img src="@/assets/icon/dingyue_file_blue.png" alt="" />
-            <span>订阅</span>
+            <span>追番</span>
           </div>
           <div class="subscribe select" v-else @click="switchSet">
             <img src="@/assets/icon/dingyue_file_white.png" alt="" />
-            <span>已订阅</span>
+            <span>已追番</span>
           </div>
         </div>
         <div class="bottom">

+ 1 - 1
src/components/vip/order-card.vue

@@ -22,7 +22,7 @@
             : "申请开票"
         }}
       </div>
-      <div class="btn" @click="$router.push('contact-online')">联系客服</div>
+      <div class="btn" @click="$store.commit('OPEN_CONTACT')">联系客服</div>
     </div>
   </div>
 </template>

+ 3 - 6
src/main.js

@@ -39,12 +39,9 @@ window.onkeydown =
   window.onkeyup =
   window.onkeypress =
     function (event) {
-      // 禁用除f的ctrl事件
-      if (
-        (event.ctrlKey || event.metaKey) &&
-        event.key !== "f" &&
-        event.key !== "0"
-      ) {
+      // 禁用ctrl事件
+      let eventList = ["a", "x", "c", "v", "f", "z", "0"];
+      if ((event.ctrlKey || event.metaKey) && !eventList.includes(event.key)) {
         // 阻止默认事件
         event.preventDefault();
         window.event.returnValue = false;

+ 28 - 4
src/router/index.js

@@ -224,6 +224,7 @@ function leavePage(to, from) {
   if (contributeList.includes(from.path) && !store.state.contribute) {
     // 离开当前页面确认弹窗
     store.state.abandon.show = true;
+    store.state.abandon.query = to.query;
     store.state.abandon.next = to.path;
   }
   return contributeList.includes(from.path);
@@ -231,6 +232,8 @@ function leavePage(to, from) {
 
 // 跳转详情打开新窗口
 function openNewWindow(to, from) {
+  if (to.path == "/agreement")
+    return router.open({ path: "/agreement", query: to.query });
   return false;
   if (from.path == "/") return false;
   if (detailList.includes(to.path)) {
@@ -256,6 +259,19 @@ function browseCheck() {
   );
 }
 
+// 登录继续查看
+function isLogin(path, next) {
+  if (loginPath.includes(path) && !localStorage.getItem("user_info")) {
+    store.state.confirm_popup.show = true;
+    store.state.confirm_popup.info = "视频、图文、资料资源需登录后查看";
+    store.state.confirm_popup.res = () => {
+      next("/login");
+      setTimeout("console.clear()", 300);
+    };
+    return false;
+  } else return true;
+}
+
 // 离开当前窗口确认页
 const contributeList = [
   "/video-contribute",
@@ -271,15 +287,23 @@ const detailList = [
   "/forum-question-details",
 ];
 
+// 登录查看页
+const loginPath = [
+  "/video-details",
+  "/image-text-details",
+  "/information-details",
+];
+
 router.beforeEach((to, from, next) => {
   /* 路由发生变化修改页面title */
   initStore();
   clearStore(from);
   is_pc_open();
-  if (!browseCheck()) {
-    next("/index");
-    return alert("仅可使用Edge浏览器与Safari浏览器访问该网站");
-  }
+  // if (!browseCheck()) {
+  //   next("/index");
+  //   return alert("仅可使用Edge浏览器与Safari浏览器访问该网站");
+  // }
+  if (!isLogin(to.path, next)) return;
 
   if (to.path.split("/").length > 2) {
     to.meta.children = true;

+ 1 - 1
src/store/index.js

@@ -1,7 +1,6 @@
 import Vue from "vue";
 import Vuex from "vuex";
 import popup from "./popup";
-import { search } from "core-js/fn/symbol";
 Vue.use(Vuex);
 
 const modulesFiles = require.context("./modules", true, /\.js$/);
@@ -24,6 +23,7 @@ export default new Vuex.Store({
       searchState: {
         status: false,
         value: "",
+        type: "",
       },
 
       // 发布状态

+ 1 - 0
src/store/popup.js

@@ -2,6 +2,7 @@ export default {
   abandon: {
     show: false,
     next: "",
+    query: {},
   },
   is_login: { show: false },
   confirm_popup: {

+ 2 - 2
src/views/activity/activity-detail.vue

@@ -206,8 +206,8 @@
           </div>
           <div class="sponsor-btn">
             <div class="btn" @click="contact_visible = true">联系主办方</div>
-            <div class="btn" @click="desc_visible = true">公司简介</div>
-            <div class="btn">主办方</div>
+            <div class="btn" @click="desc_visible = true">主办方简介</div>
+            <!-- <div class="btn">主办方</div> -->
           </div>
         </div>
         <div class="time-place card">

+ 3 - 1
src/views/activity/activity-order-detail.vue

@@ -33,7 +33,9 @@
         <div class="ticket-title">门票信息</div>
         <div class="ticket-list">
           <div class="ticket-item" v-for="item in info.item_list">
-            <div class="title">{{ item.ladder_title }}</div>
+            <div class="title">
+              {{ item.ladder_title }} 第{{ item.code }}张参会信息
+            </div>
             <div class="line"></div>
             <div class="name">
               <span>{{ item.name }}</span>

+ 3 - 2
src/views/activity/children/my-message.vue

@@ -26,7 +26,7 @@
               :info="item"
               @handleDelete="handleDelete([item])"
               @handleToDetail="
-                handleRead([item], 1 - item.is_read);
+                handleRead([item], 1);
                 handleToDetail(item);
               "
               @handleRead="handleRead([item], 1 - item.is_read)"
@@ -130,10 +130,11 @@ export default {
     handleToDetail(item) {
       // type_id 类型标识:1活动报名,2活动变更,3活动提醒,4活动订单,5订单发票
       // children_id 	相关详情id【type_id等于1或3是票的id,type_id等于2是活动id,type_id=4是订单id,type_id=5是申请发票记录id】
+      if (!item.is_normal) return this.$message.info("活动已下架。");
       switch (item.type_id) {
         case 1:
         case 3:
-          this.showConfirmPopup("此订单仅支持手机端查询。").then().catch();
+          this.showConfirmPopup("门票信息仅支持手机端查询。").then().catch();
           break;
         case 2:
           this.$router.push("/activity-detail?id=" + item.children_id);

+ 1 - 1
src/views/activity/children/my-order.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="wrap">
     <div class="wrap-title">
-      <TitleControl title="我的发布" @handleSearch="handleSearch">
+      <TitleControl title="我的订单" @handleSearch="handleSearch">
         <div slot="bottom" class="switch-box">
           <div
             class="btn"

+ 19 - 7
src/views/activity/components/content.vue

@@ -80,6 +80,7 @@ export default {
   mounted() {
     window.scrollTo(0, 0);
     this.getRecommendList();
+    this.setCardStyle();
     this.$resizeListenerList.push(this.setCardStyle);
     if (localStorage.getItem("user_info"))
       this.$store.dispatch("getMarkNum", "activity");
@@ -97,13 +98,24 @@ export default {
         ? (this.$refs["cardList"].offsetWidth - 10) / window.$window_scale / 16
         : 30; // 90左右
 
-      this.cardRow = Math.floor(contentWidth / 30);
-      this.cardWidth =
-        this.cardRow == 1
-          ? "30rem"
-          : (contentWidth - (this.cardRow - 1) * this.cardMargin) /
-              this.cardRow +
-            "rem";
+      setTimeout(() => {
+        let confirmWidth = this.$refs["cardList"]
+          ? (this.$refs["cardList"].offsetWidth - 10) /
+            window.$window_scale /
+            16
+          : 30;
+        if (contentWidth == confirmWidth) {
+          this.cardRow = Math.floor(contentWidth / 30);
+          this.cardWidth =
+            this.cardRow == 1
+              ? "30rem"
+              : (contentWidth - (this.cardRow - 1) * this.cardMargin) /
+                  this.cardRow +
+                "rem";
+        } else {
+          this.setCardStyle();
+        }
+      }, 100);
     },
     // tab切换
     changeTab(i) {

+ 0 - 22
src/views/demand/children/comment-on-my.vue

@@ -227,28 +227,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/demand/children/reply-on-my.vue

@@ -225,28 +225,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/forum/children/answer-on-my.vue

@@ -232,28 +232,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/forum/children/comment-on-my.vue

@@ -310,28 +310,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/forum/children/my-follow.vue

@@ -323,28 +323,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/forum/children/reply-on-my.vue

@@ -281,28 +281,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 10 - 2
src/views/forum/forum-answer-item.vue

@@ -7,6 +7,7 @@
     </div>
     <div class="content">
       <div class="info">
+        <div class="question-title">{{ info.forum_title }}</div>
         <div class="header">
           <div class="user">
             <img class="avatar" :src="info.headimg" alt="" />
@@ -15,7 +16,8 @@
         </div>
         <div class="question-content" slot="content">
           <div class="title">{{ info.title }}</div>
-          <div
+          <div class="detail" v-html="info.content"></div>
+          <!-- <div
             class="detail"
             v-html="info.content"
             :class="{ hide: !detail_show }"
@@ -28,7 +30,7 @@
                 transform: `rotate(${detail_show ? '270deg' : '90deg'})`,
               }"
             />
-          </div>
+          </div> -->
         </div>
         <div class="footer">
           <div class="btn-box">
@@ -308,6 +310,12 @@ export default {
     padding: 15px 15px 30px;
     background-color: white;
     .info {
+      .question-title {
+        font-size: 24px;
+        font-weight: 500;
+        color: #222222;
+        margin: 10px 0;
+      }
       .header {
         display: flex;
         align-items: center;

+ 74 - 10
src/views/forum/forum-question-details.vue

@@ -8,9 +8,16 @@
         <div class="back" @click="$router.back()">
           <img src="@/assets/icon/back.png" /><span>返回</span>
         </div>
-        <div class="share" @click="handleShare">
-          <img src="@/assets/icon/share.png" /><span>分享</span>
-        </div>
+
+        <el-popover placement="bottom" v-model="forward_visible">
+          <div class="share" slot="reference">
+            <img src="@/assets/icon/share.png" /><span>分享</span>
+          </div>
+          <div class="forward">
+            <div class="content">{{ forword_url }}</div>
+            <div class="btn" @click="handleCopy()">复制链接</div>
+          </div>
+        </el-popover>
       </div>
       <div class="question">
         <ForumListModule
@@ -27,7 +34,8 @@
         >
           <div class="question-content" slot="content">
             <div class="title">{{ info.title }}</div>
-            <div
+            <div class="detail" v-html="info.content"></div>
+            <!-- <div
               class="detail"
               v-html="info.content"
               :class="{ hide: !detail_show }"
@@ -40,7 +48,7 @@
                   transform: `rotate(${detail_show ? '270deg' : '90deg'})`,
                 }"
               />
-            </div>
+            </div> -->
           </div>
         </ForumListModule>
       </div>
@@ -59,11 +67,12 @@
             :info="item"
             :option="comment_option"
             @openAllComment="openAllComment('answer', item)"
+            @handleDelete="handleDelete(item)"
           >
             <div class="answer-content" slot="content">
               <div
                 class="detail"
-                v-html="formatRichText1(item.content)"
+                v-html="formatRichText(item.content)"
                 v-if="
                   userInfo.level_id ||
                   !info.level ||
@@ -106,7 +115,7 @@ import ForumListModule from "@/components/forum/forum-list-module.vue";
 import ForumAllComment from "@/components/forum/forum-all-comment.vue";
 import { mapState } from "vuex";
 import { ForumService, GeneralService } from "@/common/service";
-import { formatRichText1, copy } from "@/common/util";
+import { formatRichText, copy } from "@/common/util";
 export default {
   components: { ChildNavbar, ForumListModule, ForumAllComment },
   data() {
@@ -176,7 +185,9 @@ export default {
       list: [],
       loading: false,
       finished: false,
-      all_comment: false,
+      all_comment: false, // 所有评论
+      forword_url: location.href, // 分享链接
+      forward_visible: false, // 分享弹窗
     };
   },
   computed: {
@@ -221,7 +232,7 @@ export default {
       this.$store.dispatch("getMarkNum", "forum");
   },
   methods: {
-    formatRichText1,
+    formatRichText,
     // 触底
     TouchBottom() {
       if (this.loading || this.finished) return;
@@ -267,12 +278,28 @@ export default {
       );
     },
     // 分享
-    handleShare() {
+    handleCopy() {
       ForumService.forumTransmit({ forum_id: this.info.id }).then(({ msg }) => {
         this.$message.success(msg);
         copy(location.href);
       });
     },
+    // 删除答案
+    handleDelete(item) {
+      this.showConfirmPopup("确定要删除该答案?")
+        .then(() => {
+          ForumService.batchesDel({ id: item.id, type: 7 }).then(({ msg }) => {
+            this.list = [...this.list]
+              .map((i) => {
+                return i.id != item.id ? i : null;
+              })
+              .filter((i) => i);
+            this.info.replay_num = Number(this.info.replay_num) - 1;
+            this.$message.success(msg);
+          });
+        })
+        .catch((_) => {});
+    },
     // 打开全部评论弹窗
     openAllComment(type, info) {
       this.$refs["forumAllComment"].open(type, info);
@@ -426,6 +453,11 @@ export default {
             font-size: 16px;
             font-weight: 400;
             color: #222222;
+            display: -webkit-box;
+            -webkit-line-clamp: 4;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            -webkit-box-orient: vertical;
           }
           .view-answer {
             margin: 25px auto;
@@ -467,4 +499,36 @@ export default {
     }
   }
 }
+.forward {
+  width: 320px;
+  height: 35px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #f4f4f4;
+  border-radius: 17px;
+  user-select: none;
+  .content {
+    width: calc(100% - 100px);
+    padding-left: 20px;
+    font-size: 14px;
+    font-weight: 400;
+    color: #151625;
+    overflow: hidden;
+    white-space: nowrap;
+    user-select: none;
+  }
+  .btn {
+    width: 80px;
+    height: 35px;
+    background: #0054f7;
+    border-radius: 0px 17px 17px 0px;
+    text-align: center;
+    font-size: 12px;
+    font-weight: 400;
+    color: #ffffff;
+    line-height: 35px;
+    cursor: pointer;
+  }
+}
 </style>

+ 0 - 22
src/views/image-text/children/comment-on-my.vue

@@ -230,28 +230,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/image-text/children/my-chasingFun.vue

@@ -297,28 +297,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 4 - 4
src/views/image-text/children/my-collect.vue

@@ -75,7 +75,7 @@
 import MyCollectCard from "@/components/card/image-text/my-collect-card.vue";
 import TitleControl from "@/components/module/title-control.vue";
 import CommentAll from "@/components/module/comment-all.vue";
-import { ArticleService, CollectService } from "@/common/service";
+import { ArticleService } from "@/common/service";
 export default {
   components: { MyCollectCard, TitleControl, CommentAll },
   data() {
@@ -232,9 +232,9 @@ export default {
     },
     // 收藏
     handleCollect(item) {
-      CollectService.userCollect({
-        coll_id: item.url_id,
-        coll_type: 1,
+      ArticleService.articleCollect({
+        article_id: item.article_id,
+        item_id: item.item_id,
       }).then(({ data }) => {
         item.is_collect = data.status;
         item.collect_num = data.status

+ 4 - 4
src/views/image-text/children/my-like.vue

@@ -115,7 +115,7 @@ import MyLikeCommentCard from "@/components/card/image-text/my-like-comment-card
 import TitleControl from "@/components/module/title-control.vue";
 import CommentAll from "@/components/module/comment-all.vue";
 import Reply from "@/components/module/reply.vue";
-import { ArticleService, CollectService } from "@/common/service";
+import { ArticleService } from "@/common/service";
 export default {
   components: {
     MyLikeImageTextCard,
@@ -302,9 +302,9 @@ export default {
     },
     // 收藏
     handleCollect(item) {
-      CollectService.userCollect({
-        coll_id: item.url_id,
-        coll_type: 1,
+      ArticleService.articleCollect({
+        article_id: item.article_id,
+        item_id: item.item_id,
       }).then(({ data }) => {
         item.is_collect = data.status;
         item.collect_num = data.status

+ 0 - 22
src/views/image-text/children/reply-on-my.vue

@@ -229,28 +229,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 19 - 5
src/views/image-text/components/content.vue

@@ -53,8 +53,14 @@
       <div class="sort">
         <Sort :current="listParams.sort_type" @changeSort="changeSort" />
       </div>
-      <div class="card-item" v-for="item in allList" @click="toDetail(item.id)">
-        <ImageTextAllCard :info="item" />
+      <div class="all-list">
+        <div
+          class="card-item"
+          v-for="item in allList"
+          @click="toDetail(item.id)"
+        >
+          <ImageTextAllCard :info="item" />
+        </div>
       </div>
     </div>
   </div>
@@ -266,7 +272,7 @@ export default {
 .content {
   width: calc(100% - 3rem);
   margin-left: 3rem;
-  min-width: 750px;
+  min-width: 1000px;
   padding-left: 10px;
   box-sizing: border-box;
   .tab {
@@ -293,8 +299,16 @@ export default {
     .sort {
       margin: 30px 0;
     }
-    .card-item {
-      margin-bottom: 20px;
+    .all-list {
+      display: flex;
+      flex-wrap: wrap;
+      > :nth-child(2n) {
+        margin-left: 20px;
+      }
+      .card-item {
+        width: calc((100% - 20px) / 2);
+        margin-bottom: 20px;
+      }
     }
   }
   .loading {

+ 11 - 1
src/views/image-text/image-text-details.vue

@@ -6,6 +6,7 @@
         :series_info="article_info"
         @handleSwitch="handleSwitch"
         @toVideoDetail="toVideoDetail"
+        @toSupplierDetail="toSupplierDetail"
         @toInformationDetail="toInformationDetail"
         @toCollection="toCollection"
       />
@@ -116,7 +117,7 @@ export default {
       this.$store.dispatch("getMarkNum", "imageText");
   },
   mounted() {
-    this.handleRead();
+    // this.handleRead();
   },
   activated() {
     window.scrollTo(0, 0);
@@ -188,6 +189,15 @@ export default {
         });
       }
     },
+    // 跳转产品
+    toSupplierDetail() {
+      this.$router.open({
+        path: "/supplier-details",
+        query: {
+          id: this.info.goods_id,
+        },
+      });
+    },
     // 评论
     handleComment() {
       this.visible = true;

+ 317 - 28
src/views/index.vue

@@ -15,10 +15,44 @@
     <div class="content">
       <div class="search" @click="toSearch">
         <div class="search-content">
-          <div class="hot">
-            <img src="@/assets/icon/resoubang.png" />
-            <span>热搜榜</span>
-          </div>
+          <el-popover width="50%" trigger="click" placement="bottom-end">
+            <div class="histroy-hot">
+              <div class="history" v-if="history_list.length">
+                <div class="module-title">
+                  搜索历史
+                  <span @click="clearHistory">删除记录</span>
+                </div>
+                <div class="history-list">
+                  <div
+                    class="history-item"
+                    v-for="history in history_list"
+                    @click="historySearch(history)"
+                  >
+                    {{ history.title }}
+                  </div>
+                </div>
+              </div>
+              <div class="hot">
+                <div class="module-title">热搜榜单</div>
+                <div class="hot-list">
+                  <div
+                    class="hot-item"
+                    v-for="(hot, hot_index) in hot_list"
+                    @click="hotToDetail(hot, hot.module)"
+                  >
+                    <div class="index" :class="['index-' + (hot_index + 1)]">
+                      {{ hot_index + 1 }}
+                    </div>
+                    <div class="title">{{ hot.title }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div class="hot-btn" slot="reference" @click.stop>
+              <img src="@/assets/icon/resoubang.png" />
+              <span>热搜</span>
+            </div>
+          </el-popover>
           <div class="search-btn">搜索</div>
         </div>
       </div>
@@ -93,7 +127,8 @@
 
 <script>
 import GradientBorder from "@/components/module/gradient-border.vue";
-import { ExpediteService } from "@/common/service";
+import { ExpediteService, GeneralService } from "@/common/service";
+import { mapState } from "vuex";
 export default {
   components: { GradientBorder },
   data() {
@@ -166,10 +201,81 @@ export default {
           href: "/product",
         },
       ],
-      bannerList: [],
+      detailDict: {
+        video: {
+          // 视频
+          detail_link: "/video-details",
+          first_id: "id",
+          second_id: "videoArrId",
+        },
+        article: {
+          // 图文
+          detail_link: "/image-text-details",
+          collection_link: "/image-text-collection",
+          first_id: "id",
+          second_id: "item_id",
+        },
+        datum: {
+          // 资料
+          detail_link: "/information-details",
+          collection_link: "/information-collection",
+          first_id: "id",
+          second_id: "url_id",
+        },
+        activity: {
+          // 视活动
+          detail_link: "/activity-detail",
+          first_id: "id",
+          second_id: "",
+        },
+        demand: {
+          // 需求
+          detail_link: "/demand-details",
+          first_id: "id",
+          second_id: "",
+        },
+        forum: {
+          // 问答
+          detail_link: "/forum-question-details",
+          first_id: "forum_id",
+          second_id: "",
+        },
+        press: {
+          // 新闻
+          detail_link: "/news-details",
+          first_id: "press_id",
+          second_id: "",
+        },
+        supplier: {
+          // 供应商
+          detail_link: "/supplier-details",
+          first_id: "id",
+          second_id: "",
+        },
+        recruit: {
+          // 招聘
+          detail_link: "/recruit-details",
+          first_id: "id",
+          second_id: "",
+        },
+        mall: {
+          // 商品
+          detail_link: "/product-details",
+          first_id: "id",
+          second_id: "",
+        },
+        service: {
+          // 客服
+          detail_link: "",
+        },
+      },
+      bannerList: [], // 轮播图
+      history_list: [], // 搜索历史
+      hot_list: [], // 热搜
     };
   },
   computed: {
+    ...mapState(["searchState"]),
     card_list() {
       return this.card.map((item) => {
         return item.name
@@ -192,6 +298,8 @@ export default {
   },
   mounted() {
     this.getBannerList();
+    this.getHistoryList();
+    this.getHotList();
   },
   methods: {
     // 获取轮播图
@@ -202,34 +310,137 @@ export default {
         this.bannerList = data.list;
       });
     },
+    // 获取搜索历史
+    getHistoryList() {
+      GeneralService.getSearchHistory({
+        page: 1,
+        page_num: 30,
+        type: "",
+      }).then(({ data }) => {
+        this.history_list = data.list;
+      });
+    },
+    // 获取热搜
+    getHotList() {
+      ExpediteService.getTopSearch({
+        page: 1,
+        page_num: 10,
+        module: "",
+      }).then(({ data }) => {
+        this.hot_list = data.list;
+      });
+    },
+    // 搜索
+    handleSearch() {
+      this.$store.commit("setSearchState", {
+        type: "",
+      });
+      this.$router.push(`/search`);
+    },
+    // 历史搜素
+    historySearch(history) {
+      this.searchState.value = history.title;
+      this.handleSearch();
+      this.hotShow(false);
+    },
+    // 清除历史记录
+    clearHistory() {
+      GeneralService.delSearchHistory().then(({ msg }) => {
+        this.$message.success(msg);
+        this.getHistoryList();
+      });
+    },
+    // 热搜跳转详情
+    hotToDetail(item, type) {
+      let query = {},
+        tabList = [
+          // tab项
+          {
+            type: 0,
+            value: "",
+            key: "",
+          },
+          {
+            type: 5,
+            value: "forum",
+            key: "forum",
+            detailKey: ["id", "forum_id"],
+          },
+          {
+            type: 1,
+            value: "video",
+            key: "video",
+            detailKey: ["id", "videoArrId"],
+          },
+          {
+            type: 3,
+            value: "article",
+            key: "image-text",
+            detailKey: ["id", "item_id"],
+          },
+          {
+            type: 2,
+            value: "datum",
+            key: "information",
+            detailKey: ["id", "url_id"],
+          },
+          {
+            type: 4,
+            value: "press",
+            key: "news",
+            detailKey: ["id", "press_id"],
+          },
+          {
+            type: 9,
+            value: "supplier_goods",
+            key: "supplier",
+            detailKey: ["id", "id"],
+          },
+          {
+            type: 11,
+            value: "demand",
+            key: "demand",
+            detailKey: ["id", "id"],
+          },
+          {
+            type: 8,
+            value: "recruit",
+            key: "recruit",
+            detailKey: ["id", "id"],
+          },
+          {
+            type: 7,
+            value: "activity",
+            key: "activity",
+            detailKey: ["id", "id"],
+          },
+
+          {
+            type: 6,
+            value: "goods",
+            key: "product",
+            detailKey: ["id", "id"],
+          },
+        ],
+        cardType = tabList.find((i) => i.value == type);
+      query[cardType.detailKey[0]] = item.series_id;
+      query[cardType.detailKey[1]] = item.rel_id;
+      this.$router.push({ path: `/${cardType.key}-details`, query });
+    },
     // 轮播图跳转详情
     toDetail(item) {
-      let detailDict = {
-        video: {
-          detail_link: "/video-details",
-          first_id: "id",
-          second_id: "videoArrId",
-        },
-        article: {
-          detail_link: "/image-text-details",
-          collection_link: "/image-text-collection",
-          first_id: "id",
-          second_id: "item_id",
-        },
-        datum: {
-          detail_link: "/information-details",
-          collection_link: "/information-collection",
-          first_id: "id",
-          second_id: "url_id",
-        },
-      };
-      let place = detailDict[item.place],
+      let place = this.detailDict[item.place],
         query = {};
       if (!place || !item.is_normal) return;
       query[place.first_id] = item.first_id;
       query[place.second_id] = item.second_id;
+      if (!place.detail_link) return this.$store.commit("OPEN_CONTACT");
       this.$router.push({
-        path: item.second_id ? place.detail_link : collection_link,
+        path: place.second_id
+          ? item.second_id
+            ? place.detail_link
+            : place.collection_link
+          : place.detail_link,
         query,
       });
     },
@@ -315,8 +526,9 @@ $width: $body-width-100;
           border-radius: 60px;
           margin: 4px;
         }
-        .hot {
+        .hot-btn {
           position: absolute;
+          top: 28px;
           right: 150px;
           font-size: 14px;
           font-weight: 400;
@@ -521,6 +733,83 @@ $width: $body-width-100;
     }
   }
 }
+.histroy-hot {
+  padding: 0 10px;
+  .module-title {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    font-size: 16px;
+    font-weight: 500;
+    color: #141414;
+    margin-bottom: 10px;
+    span {
+      font-size: 12px;
+      font-weight: 400;
+      color: #666666;
+      cursor: pointer;
+    }
+  }
+  .history {
+    margin-bottom: 5px;
+    .history-list {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      .history-item {
+        max-width: 100%;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        min-height: 26px;
+        padding: 0 10px;
+        background: #f4f4f4;
+        border-radius: 4px;
+        font-size: 14px;
+        font-weight: 400;
+        color: #2b2b2b;
+        line-height: 26px;
+        margin-right: 10px;
+        margin-bottom: 10px;
+        cursor: pointer;
+      }
+    }
+  }
+  .hot {
+    .hot-list {
+      .hot-item {
+        display: flex;
+        align-items: center;
+        margin-bottom: 10px;
+        cursor: pointer;
+        .index {
+          font-size: 14px;
+          font-weight: 500;
+          color: #999999;
+          width: 25px;
+        }
+        .index-1 {
+          color: #ff0000;
+        }
+        .index-2 {
+          color: #ff4f0c;
+        }
+        .index-3 {
+          color: #ff9d20;
+        }
+        .title {
+          width: calc(100% - 30px);
+          font-size: 15px;
+          font-weight: 400;
+          color: #2b2b2b;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          white-space: nowrap;
+        }
+      }
+    }
+  }
+}
 @media (min-width: 2560px) {
   .card-3 {
     width: 30%;

+ 0 - 22
src/views/information/children/comment-on-my.vue

@@ -227,28 +227,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/information/children/my-chasingFun.vue

@@ -296,28 +296,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 4 - 4
src/views/information/children/my-collect.vue

@@ -75,7 +75,7 @@
 import MyCollectCard from "@/components/card/information/my-collect-card.vue";
 import TitleControl from "@/components/module/title-control.vue";
 import CommentAll from "@/components/module/comment-all.vue";
-import { DatumService, CollectService } from "@/common/service";
+import { DatumService } from "@/common/service";
 export default {
   components: { MyCollectCard, TitleControl, CommentAll },
   data() {
@@ -233,9 +233,9 @@ export default {
     },
     // 收藏
     handleCollect(item) {
-      CollectService.userCollect({
-        coll_id: item.url_id,
-        coll_type: 1,
+      DatumService.datumCollect({
+        datum_id: item.datum_id,
+        url_id: item.url_id,
       }).then(({ data }) => {
         item.is_collect = data.status;
         item.collect_num = data.status

+ 4 - 4
src/views/information/children/my-like.vue

@@ -115,7 +115,7 @@ import MyLikeCommentCard from "@/components/card/information/my-like-comment-car
 import TitleControl from "@/components/module/title-control.vue";
 import CommentAll from "@/components/module/comment-all.vue";
 import Reply from "@/components/module/reply.vue";
-import { DatumService, CollectService } from "@/common/service";
+import { DatumService } from "@/common/service";
 export default {
   components: {
     MyLikeInformationCard,
@@ -303,9 +303,9 @@ export default {
     },
     // 收藏
     handleCollect(item) {
-      CollectService.userCollect({
-        coll_id: item.url_id,
-        coll_type: 1,
+      DatumService.datumCollect({
+        url_id: item.url_id,
+        datum_id: item.datum_id,
       }).then(({ data }) => {
         item.is_collect = data.status;
         item.collect_num = data.status

+ 0 - 22
src/views/information/children/reply-on-my.vue

@@ -227,28 +227,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 8 - 3
src/views/information/components/content.vue

@@ -3,7 +3,7 @@
     <div class="tab">
       <ContentTab
         :current="current"
-        :showRefresh="!current"
+        :showRefresh="true"
         :text="['为你推荐', '专栏']"
         @changeTab="changeTab"
         @handleRefresh="handleRefresh"
@@ -128,8 +128,13 @@ export default {
     handleRefresh() {
       this.loading = false;
       this.finished = false;
-      this.recommendParams.page = 1;
-      this.getRecommendList();
+      if (!this.current) {
+        this.recommendParams.page = 1;
+        this.getRecommendList();
+      } else {
+        this.listParams.page = 1;
+        this.getInformationList();
+      }
     },
     // 更改筛选条件
     changeCurrent(first, second) {

+ 13 - 2
src/views/information/information-collection.vue

@@ -71,7 +71,7 @@
       <div
         class="item"
         v-if="!manageType && info.goods_id"
-        @click="$message.success('敬请期待')"
+        @click="toSupplierDetail"
       >
         <img src="@/assets/icon/chanpin_fill_blue.png" alt="" />
         <span>相关产品</span>
@@ -215,6 +215,15 @@ export default {
         });
       }
     },
+    // 跳转产品
+    toSupplierDetail() {
+      this.$router.open({
+        path: "/supplier-details",
+        query: {
+          id: this.info.goods_id,
+        },
+      });
+    },
     // 下载
     handleClick() {
       if (this.download_list.filter((item) => item.checked).length == 0)
@@ -235,7 +244,9 @@ export default {
             datum_id: this.info.id,
             url_id: item.id,
           }).then(() => {
-            downloadLocalFile(item.url, item.title);
+            downloadLocalFile(item.url, item.title).then(() => {
+              this.manageType = false;
+            });
           });
         }
       });

+ 11 - 1
src/views/information/information-details.vue

@@ -7,6 +7,7 @@
         :series_info="datum_info"
         @handleSwitch="handleSwitch"
         @toVideoDetail="toVideoDetail"
+        @toSupplierDetail="toSupplierDetail"
         @toImageTextDetail="toImageTextDetail"
         @toCollection="toCollection"
       />
@@ -129,7 +130,7 @@ export default {
       this.$store.dispatch("getMarkNum", "information");
   },
   mounted() {
-    this.handleRead();
+    // this.handleRead();
   },
   activated() {
     window.scrollTo(0, 0);
@@ -205,6 +206,15 @@ export default {
         });
       }
     },
+    // 跳转产品
+    toSupplierDetail() {
+      this.$router.open({
+        path: "/supplier-details",
+        query: {
+          id: this.info.goods_id,
+        },
+      });
+    },
     // 评论
     handleComment() {
       this.visible = true;

+ 21 - 2
src/views/invoice.vue

@@ -29,6 +29,7 @@
         <div class="content">
           <div class="header-value">{{ item.header }}</div>
           <div class="identify-number">{{ item.identify_number }}</div>
+          <div class="email">{{ item.email || "-" }}</div>
         </div>
       </div>
     </div>
@@ -57,6 +58,13 @@
               placeholder="请填写单位税号"
               v-model="header_params.identify_number"
             />
+            <div class="form-label">邮箱</div>
+            <input
+              class="form-input"
+              type="text"
+              placeholder="请填写邮箱"
+              v-model="header_params.email"
+            />
           </div>
         </div>
         <div class="content-footer">
@@ -82,6 +90,7 @@ export default {
       header_params: {
         header: "",
         identify_number: "",
+        email: "",
       },
     };
   },
@@ -100,6 +109,11 @@ export default {
       this.edit_visible = true;
     },
     handleConfirm() {
+      if (!this.header_params.header)
+        return this.$message.error("请填写发票抬头");
+      if (!this.header_params.identify_number)
+        return this.$message.error("请填写单位税号");
+      if (!this.header_params.email) return this.$message.error("请填写邮箱");
       BillService.selBillHeader(this.header_params).then(() => {
         this.$message.success(this.edit_type + "成功");
         this.edit_visible = false;
@@ -150,7 +164,7 @@ export default {
     width: 70%;
     margin-top: 20px;
     .list-item {
-      height: 138px;
+      height: 158px;
       background: #ffffff;
       border: 1px solid #cecece;
 
@@ -180,7 +194,7 @@ export default {
         }
       }
       .content {
-        height: 90px;
+        height: 110px;
         padding: 10px 20px;
         display: flex;
         flex-direction: column;
@@ -196,6 +210,11 @@ export default {
           font-weight: 400;
           color: #141414;
         }
+        .email {
+          font-size: 16px;
+          font-weight: 400;
+          color: #141414;
+        }
       }
     }
   }

+ 1 - 0
src/views/login.vue

@@ -297,6 +297,7 @@ export default {
   justify-content: center;
   align-items: center;
   overflow: hidden;
+  margin-top: -$headerHeight;
   .gradient-font {
     background: linear-gradient(to left, #32e2e2, #3b59f8, #ff9991);
     -webkit-background-clip: text;

+ 0 - 22
src/views/news/children/comment-on-my.vue

@@ -226,28 +226,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 0 - 22
src/views/news/children/reply-on-my.vue

@@ -225,28 +225,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 16 - 2
src/views/news/news-details.vue

@@ -8,6 +8,7 @@
         @toVideoDetail="toVideoDetail"
         @toImageTextDetail="toImageTextDetail"
         @toInformationDetail="toInformationDetail"
+        @toSupplierDetail="toSupplierDetail"
       />
     </div>
     <div class="line"></div>
@@ -18,6 +19,10 @@
     <div class="interactive">
       <DetailInteractive
         :info="info"
+        :dict="{
+          is_like: 'is_praise',
+          like_num: 'praise_num',
+        }"
         @handleComment="handleComment"
         @handleLike="handleLike"
         @handleCollect="handleCollect"
@@ -167,6 +172,15 @@ export default {
         });
       }
     },
+    // 跳转产品
+    toSupplierDetail() {
+      this.$router.open({
+        path: "/supplier-details",
+        query: {
+          id: this.info.goods_id,
+        },
+      });
+    },
     // 评论
     handleComment() {
       this.visible = true;
@@ -231,8 +245,8 @@ export default {
     background: #e2e2e2;
   }
   .content {
-    width: calc(100% - 120px);
-    padding: 30px 60px;
+    width: calc(100% - 60px);
+    padding: 30px;
     background-color: white;
     font-size: 16px;
   }

+ 17 - 7
src/views/product/components/content.vue

@@ -137,6 +137,7 @@ export default {
     window.scrollTo(0, 0);
     this.getRecommendList();
     this.getCateTree();
+    this.setCardStyle();
     this.$resizeListenerList.push(this.setCardStyle);
     if (localStorage.getItem("user_info"))
       this.$store.dispatch("getMarkNum", "product");
@@ -156,13 +157,22 @@ export default {
           16
         : 30; // 90左右
 
-      this.cardRow = Math.floor(contentWidth / 30);
-      this.cardWidth =
-        this.cardRow == 1
-          ? "30rem"
-          : (contentWidth - (this.cardRow - 1) * this.cardMargin) /
-              this.cardRow +
-            "rem";
+      setTimeout(() => {
+        let confirmWidth = this.$refs["RecommendList"]
+          ? (this.$refs["RecommendList"].offsetWidth - 10) /
+            window.$window_scale /
+            16
+          : 30;
+        if (contentWidth == confirmWidth) {
+          this.cardRow = Math.floor(contentWidth / 30);
+          this.cardWidth =
+            this.cardRow == 1
+              ? "30rem"
+              : (contentWidth - (this.cardRow - 1) * this.cardMargin) /
+                  this.cardRow +
+                "rem";
+        } else this.setCardStyle();
+      }, 100);
     },
     // tab切换
     changeTab(i) {

+ 23 - 2
src/views/product/product-refund-apply.vue

@@ -138,7 +138,16 @@
         </div>
         <div class="order-item">
           <div class="label">订单编号</div>
-          <div class="value">{{ info.order_no }}</div>
+          <div class="value">
+            <span>
+              {{ info.order_no }}
+            </span>
+            <img
+              class="icon"
+              src="@/assets/icon/copy.png"
+              @click="handleCopy(info.order_no)"
+            />
+          </div>
         </div>
         <div class="order-item">
           <div class="label">订单总价</div>
@@ -151,6 +160,7 @@
 
 <script>
 import { OrderService, uploadFile } from "@/common/service.js";
+import { copy } from "@/common/util";
 export default {
   data() {
     return {
@@ -177,7 +187,7 @@ export default {
       OrderService.getOrderDetail({ order_id }).then(({ data }) => {
         this.info = data.detail;
         this.params.order_id = order_id;
-        this.params.refund_type = this.info.express_state == 2 ? 1 : 2;
+        this.params.refund_type = this.info.express_state == 2 ? 2 : 1;
       });
     },
     // 获取退款理由
@@ -208,6 +218,11 @@ export default {
         this.$router.back();
       });
     },
+    // 复制订单号
+    handleCopy(value) {
+      copy(value);
+      this.$message.success("复制成功");
+    },
   },
 };
 </script>
@@ -571,6 +586,12 @@ export default {
         align-items: center;
         font-size: 14px;
         color: #222222;
+        .icon {
+          width: 15px;
+          height: 15px;
+          margin-left: 5px;
+          cursor: pointer;
+        }
       }
     }
   }

+ 7 - 5
src/views/product/product-refund-detail.vue

@@ -66,10 +66,10 @@
         <div class="consult">
           <div class="title">协商历史</div>
           <div class="consult-item" v-if="refund_info.refund_time">
-            <img class="logo" :src="userInfo.headimg" alt="" />
+            <img class="logo" :src="info.member_headimg" alt="" />
             <div class="info">
               <div class="top">
-                <div class="name">{{ userInfo.name }}</div>
+                <div class="name">{{ userInfo.member_name }}</div>
                 <div class="time">{{ refund_info.refund_time }}</div>
               </div>
               <div class="value">
@@ -93,11 +93,11 @@
             </div>
           </div>
           <div class="line" v-if="refund_info.express_time"></div>
-          <div class="consult-item">
-            <img class="logo" :src="userInfo.headimg" alt="" />
+          <div class="consult-item" v-if="refund_info.examine_time">
+            <img class="logo" :src="info.member_headimg" alt="" />
             <div class="info">
               <div class="top">
-                <div class="name">{{ userInfo.name }}</div>
+                <div class="name">{{ info.member_name }}</div>
                 <div class="time">{{ refund_info.create_at }}</div>
               </div>
               <div class="value">
@@ -247,6 +247,8 @@ export default {
     getDetail(order_id) {
       OrderService.getOrderDetail({ order_id }).then(({ data }) => {
         this.info = data.detail;
+        this.info.member_headimg = this.info.order_item[0].member_headimg;
+        this.info.member_name = this.info.order_item[0].member_name;
         this.refund_info = data.detail.order_refund;
         this.edit_params.id = data.detail.order_refund.id;
       });

+ 7 - 6
src/views/product/product-shopping-cart.vue

@@ -107,7 +107,7 @@
           </el-table-column>
           <el-table-column label="操作">
             <div class="goods-control" slot-scope="{ row }">
-              <span>删除</span>
+              <span @click="handleDelete(row.id)">删除</span>
             </div>
           </el-table-column>
         </el-table>
@@ -149,7 +149,7 @@
               class="delete"
               :class="{ disabled: !selection_list.length }"
               :style="{ cursor: selection_list.length ? 'pointer' : 'no-drop' }"
-              @click="handleDelete"
+              @click="handleDelete(selection_list.map((i) => i.id).join(','))"
             >
               删除
             </div>
@@ -205,15 +205,15 @@ export default {
       });
     },
     // 删除
-    handleDelete() {
-      let that = this,
-        ids = this.selection_list.map((i) => i.id).join(",");
+    handleDelete(ids) {
+      let that = this;
       if (!ids) return;
       this.showConfirmPopup("确认删除!")
         .then(() => {
-          TrolleyService.delTicket({ ids }).then(({ msg }) => {
+          TrolleyService.cancelTrolleyList({ ids }).then(({ msg }) => {
             that.$message.success(msg);
             that.getList();
+            that.$store.dispatch("getMarkNum", "product");
           });
         })
         .catch((_) => {});
@@ -491,6 +491,7 @@ export default {
             font-size: 18px;
             font-weight: 400;
             color: #ffffff;
+            margin-left: 10px;
           }
           .collect {
             width: 126px;

+ 0 - 22
src/views/recruit/children/my-chasingFun.vue

@@ -319,28 +319,6 @@ export default {
         this.list_copy = "";
       }
     },
-    // 下一条未读
-    toNext() {
-      let current_index, next;
-      current_index = 0;
-      this.list.forEach((item, index) => {
-        let { top } = this.$refs["card-" + item.id][0].getBoundingClientRect();
-        if (top > -170 && top <= 100) {
-          current_index = index;
-          return;
-        }
-      });
-      if (current_index == this.list.length - 1 || !this.list.length)
-        return this.$message.info("没有下一条未读消息!");
-      next = this.list.slice(current_index + 1).find((item) => !item.is_read);
-      if (!next) return this.$message.info("没有下一条未读消息!");
-      window.scrollTo(
-        0,
-        window.scrollY +
-          this.$refs["card-" + next.id][0].getBoundingClientRect().top -
-          100
-      );
-    },
   },
 };
 </script>

+ 4 - 1
src/views/search-hot.vue

@@ -125,7 +125,10 @@ export default {
     };
   },
   mounted() {
-    this.currentType = this.tabList[0];
+    this.currentType = this.$route.query.type
+      ? this.tabList.find((item) => item.key == this.$route.query.type)
+      : this.tabList[0];
+    window.history.replaceState(null, null, location.href.split("?type=")[0]);
     this.getList();
   },
   methods: {

Деякі файли не було показано, через те що забагато файлів було змінено