Преглед изворни кода

feat: 推荐模块逻辑完善

cuiyalong пре 1 година
родитељ
комит
3d75768046

+ 0 - 1
apps/mobile/src/composables/quick-monitor/component/QuickMonitor.vue

@@ -314,7 +314,6 @@ export default {
         const { success, msg, data } = await this.doChange()
         loading.clear()
         console.log(msg)
-        debugger
         if (success) {
           // 判断是否开启推送提醒
           if (data?.msg_open) {

+ 9 - 18
apps/mobile/src/views/article/components/ContentBusinessRecommend.vue

@@ -1,37 +1,28 @@
 <template>
   <ContentModuleCard title="商机推荐" class="content-business-recommend">
     <div class="business-list">
-      <RecommendProjectCard
-        class="business-list-item"
-        titleIcon="icon-flexible-selection"
-        title="超前项目推荐"
-      >
-        <span slot="header-actions"></span>
-      </RecommendProjectCard>
-      <RecommendProjectCard
-        class="business-list-item"
-        title="采购单位名称XXX的其他招标动态"
-      ></RecommendProjectCard>
-      <RecommendProjectCard
-        class="business-list-item"
-        title="中标单位名称XXX的其他中标动态"
-      ></RecommendProjectCard>
+      <ContentBusinessRecommendProject class="business-list-item" />
+      <ContentBusinessRecommendBuyer class="business-list-item" />
+      <ContentBusinessRecommendWinner class="business-list-item" />
     </div>
   </ContentModuleCard>
 </template>
 <script>
 import { Icon } from 'vant'
 import ContentModuleCard from '@/views/article/ui/ContentModuleCard.vue'
-import RecommendProjectCard from '@/views/article/components/RecommendProjectCard.vue'
+import ContentBusinessRecommendProject from '@/views/article/components/ContentBusinessRecommendProject.vue'
+import ContentBusinessRecommendBuyer from '@/views/article/components/ContentBusinessRecommendBuyer.vue'
+import ContentBusinessRecommendWinner from '@/views/article/components/ContentBusinessRecommendWinner.vue'
 
 export default {
   name: 'ContentCustomerRecommend',
   components: {
     [Icon.name]: Icon,
     ContentModuleCard,
-    RecommendProjectCard
+    ContentBusinessRecommendProject,
+    ContentBusinessRecommendBuyer,
+    ContentBusinessRecommendWinner
   },
-  created() {},
   methods: {}
 }
 </script>

+ 82 - 0
apps/mobile/src/views/article/components/ContentBusinessRecommendBuyer.vue

@@ -0,0 +1,82 @@
+<template>
+  <RecommendProjectCard
+    titleIcon="icon-flexible-selection"
+    v-if="recommendList.length > 0"
+    :title="recommendMap.title"
+    :totalNumber="recommendMap.total"
+    :showMore="recommendMap.more"
+    :list="recommendList"
+    @toDetail="toDetail"
+    @toMore="toMore"
+  >
+    <div class="header-action" slot="header-actions">
+      <QuickMonitor
+        :id="recommendMap.name"
+        type="client"
+        auto
+        direction="row"
+      />
+    </div>
+  </RecommendProjectCard>
+</template>
+<script>
+import RecommendProjectCard from '@/views/article/components/RecommendProjectCard.vue'
+import QuickMonitor from '@/composables/quick-monitor/component/QuickMonitor.vue'
+import { mapState, mapGetters } from 'vuex'
+import { LINKS } from '@/data'
+import { openAppOrWxPage } from '@/utils/'
+
+export default {
+  name: 'ContentBusinessRecommendBuyer',
+  components: {
+    RecommendProjectCard,
+    QuickMonitor
+  },
+  computed: {
+    ...mapGetters('user', ['isBusiness']),
+    ...mapState({
+      // 推荐项目
+      recommendMap: (state) => state.article.expandModel.recommendBuyers
+    }),
+    recommendList() {
+      const list = this.recommendMap?.list
+      if (Array.isArray(list)) {
+        return list
+      } else {
+        return []
+      }
+    }
+  },
+  methods: {
+    toDetail(item) {
+      // 进入标讯详情页
+      this.$router.push({
+        path: `/article/content/${item.id}.html`
+      })
+    },
+    toMore() {
+      // 锚点到招标动态?
+      this.toBuyerPage(this.recommendMap.name)
+    },
+    toBuyerPage(name, anchor) {
+      if (this.isBusiness) {
+        openAppOrWxPage(LINKS.商机管理采购单位画像页面, {
+          query: {
+            entName: name,
+            anchor: anchor
+          }
+        })
+      } else {
+        openAppOrWxPage(LINKS.大会员超级订阅采购单位画像页面, {
+          query: {
+            entName: name,
+            anchor: anchor
+          }
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 88 - 0
apps/mobile/src/views/article/components/ContentBusinessRecommendProject.vue

@@ -0,0 +1,88 @@
+<template>
+  <RecommendProjectCard
+    titleIcon="icon-flexible-selection"
+    v-if="recommendList.length > 0"
+    :title="recommendMap.title"
+    :totalNumber="recommendMap.total"
+    :showMore="recommendMap.more"
+    :showMask="recommendMap.popup"
+    :list="recommendList"
+    :maskConf="maskConf"
+    @toDetail="toDetail"
+    @toMore="toMore"
+    @maskLearnMore="maskLearnMore"
+    @maskConfirmButtonClick="maskConfirmButtonClick"
+  />
+</template>
+<script>
+import RecommendProjectCard from '@/views/article/components/RecommendProjectCard.vue'
+import { mapState } from 'vuex'
+import { LINKS } from '@/data'
+import { openAppOrWxPage } from '@/utils/'
+
+export default {
+  name: 'ContentBusinessRecommendProject',
+  components: {
+    RecommendProjectCard
+  },
+  data() {
+    return {
+      maskConf: {
+        title: '大会员权益',
+        serviceNameText: '项目提前介入,中标更轻松',
+        serviceDescText:
+          '提前1-3个月获取项目采购计划,获取采购内容、预算金额、预计采购时间等,提前运作提高中标率。',
+        plainButtonShow: false,
+        confirmButtonText: '免费体验'
+      }
+    }
+  },
+  computed: {
+    ...mapState({
+      // 推荐项目
+      recommendMap: (state) => state.article.expandModel.recommendProjects
+    }),
+    recommendList() {
+      const list = this.recommendMap?.list
+      if (Array.isArray(list)) {
+        return list
+      } else {
+        return []
+      }
+    }
+  },
+  methods: {
+    toDetail(item) {
+      // 进入标讯详情页
+      this.$router.push({
+        path: `/article/content/${item.id}.html`
+      })
+    },
+    toMore() {
+      if (this.recommendMap.popup) {
+        this.maskConfirmButtonClick()
+      } else {
+        // 带入筛选条件?
+        this.$router.push({
+          path: '/search/result/bidding',
+          query: {
+            searchGroup: 2
+          }
+        })
+      }
+    },
+    maskLearnMore() {
+      openAppOrWxPage(LINKS.大会员落地页面)
+    },
+    maskConfirmButtonClick() {
+      openAppOrWxPage(LINKS.留资, {
+        query: {
+          source: `${this.$env.platform}_article_cqxmmore`
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 64 - 0
apps/mobile/src/views/article/components/ContentBusinessRecommendWinner.vue

@@ -0,0 +1,64 @@
+<template>
+  <RecommendProjectCard
+    titleIcon="icon-flexible-selection"
+    v-if="recommendList.length > 0"
+    :title="recommendMap.title"
+    :totalNumber="recommendMap.total"
+    :showMore="recommendMap.more"
+    :list="recommendList"
+    @toDetail="toDetail"
+    @toMore="toMore"
+  >
+    <div class="header-action" slot="header-actions">
+      <QuickMonitor :id="recommendMap.id" type="ent" auto direction="row" />
+    </div>
+  </RecommendProjectCard>
+</template>
+<script>
+import RecommendProjectCard from '@/views/article/components/RecommendProjectCard.vue'
+import QuickMonitor from '@/composables/quick-monitor/component/QuickMonitor.vue'
+import { mapState } from 'vuex'
+import { LINKS } from '@/data'
+import { openAppOrWxPage } from '@/utils/'
+
+export default {
+  name: 'ContentBusinessRecommendWinner',
+  components: {
+    RecommendProjectCard,
+    QuickMonitor
+  },
+  computed: {
+    ...mapState({
+      // 推荐项目
+      recommendMap: (state) => state.article.expandModel.recommendWinners
+    }),
+    recommendList() {
+      const list = this.recommendMap?.list
+      if (Array.isArray(list)) {
+        return list
+      } else {
+        return []
+      }
+    }
+  },
+  methods: {
+    toDetail(item) {
+      // 进入标讯详情页
+      this.$router.push({
+        path: `/article/content/${item.id}.html`
+      })
+    },
+    toMore() {
+      // 锚点到中标动态?
+      openAppOrWxPage(LINKS.企业画像页面, {
+        query: {
+          eId: this.recommendMap.winnerId,
+          anchor: ''
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>