Эх сурвалжийг харах

feat: 阳光直采拆条处理:列表页详情页标题不一致修复

cuiyalong 9 сар өмнө
parent
commit
8da06ff303

+ 41 - 1
apps/bigmember_pc/src/views/search/sun/model/base.js

@@ -1,5 +1,5 @@
 import { computed, reactive, ref, toRefs, onMounted,onBeforeMount, onBeforeUnmount, getCurrentInstance, provide } from 'vue'
-import { without, throttle } from 'lodash'
+import { without, throttle, uniqBy } from 'lodash'
 import { useStore } from '@/store'
 import { useRoute, useRouter } from 'vue-router/composables'
 import { MessageBox } from 'element-ui'
@@ -523,6 +523,40 @@ export default function () {
   function goLogin() {
     that.$showLoginDialog()
   }
+
+  function createClickInfoItem(item) {
+    if (!item) {
+      return {}
+    }
+    return {
+      id: item.id,
+      title: item.title || ''
+    }
+  }
+
+  const listArticleInfoStorageKey = 'sun_list_info_clicked'
+  // 处理拆条信息:详情页中需要判断purchasingList长度>1,就使用列表页标题+‘等’。
+  function saveClickItemInfo(item) {
+    const key = listArticleInfoStorageKey
+    const saved = sessionStorage.getItem(key)
+    const info = createClickInfoItem(item)
+    let list = []
+    if (saved) {
+      list = JSON.parse(saved)
+      if (Array.isArray(list)) {
+        list.unshift(info)
+      } else {
+        list = [info]
+      }
+    } else {
+      list = [info]
+    }
+    // 去重
+    list = uniqBy(list, 'id')
+    sessionStorage.setItem(key, JSON.stringify(list))
+  }
+
+
   // 跳转详情页
   function toDetail(item) {
     let aHref = ".html"
@@ -559,6 +593,12 @@ export default function () {
       console.log(e)
     }
 
+    try {
+      saveClickItemInfo(item)
+    } catch (error) {
+      console.log(error) 
+    }
+
 
     if(isLogin.value) {
       const prefix = isInApp.value ? '/article/content/' : '/nologin/content/'

+ 36 - 1
apps/mobile/src/views/search/result/sun/index.vue

@@ -321,7 +321,7 @@
 import qs from 'qs'
 import { mapActions, mapGetters, mapState } from 'vuex'
 import { Button, Cell, Icon, List, Popover, Popup, Tab, Tabs, Tag } from 'vant'
-import { throttle } from 'lodash'
+import { throttle, uniqBy } from 'lodash'
 import AdSingle from '@/components/ad/Ad'
 import BiddingSearchFilters from '@/components/search/sun/filters'
 import SearchFilterHistoryDialog from '@/components/search/bidding/filterHistoryDialog'
@@ -399,6 +399,7 @@ export default {
         // 顶部精简列表/详细列表切换滚动显示隐藏距离
         tabSwitchShowOffset: 150,
         listTabActiveStorageKey: 'sun_listTabActive',
+        listArticleInfoStorageKey: 'sun_list_info_clicked',
         leaveSource: {
           article: 'article_collection'
         },
@@ -1502,6 +1503,11 @@ export default {
         app: `/jyapp/article/content/${id}.html?${qs.stringify(query)}`
       }
       this.saveState()
+      try {
+        this.saveClickItemInfo(item)
+      } catch (error) {
+        console.log(error)
+      }
       if (!this.isLogin) {
         return openLinkOfOther(LINKS.APP登录页.app, {
           query: {
@@ -1511,6 +1517,35 @@ export default {
       }
       openAppOrWxPage(targetMap)
     },
+    createClickInfoItem(item) {
+      if (!item) {
+        return {}
+      }
+      return {
+        id: item.id,
+        title: item.title || ''
+      }
+    },
+    // 处理拆条信息:详情页中需要判断purchasingList长度>1,就使用列表页标题+‘等’。
+    saveClickItemInfo(item) {
+      const key = this.conf.listArticleInfoStorageKey
+      const saved = sessionStorage.getItem(key)
+      const info = this.createClickInfoItem(item)
+      let list = []
+      if (saved) {
+        list = JSON.parse(saved)
+        if (Array.isArray(list)) {
+          list.unshift(info)
+        } else {
+          list = [info]
+        }
+      } else {
+        list = [info]
+      }
+      // 去重
+      list = uniqBy(list, 'id')
+      sessionStorage.setItem(key, JSON.stringify(list))
+    },
     // 保存更多关键词到历史记录中
     saveAdditionalWordsToHistory() {
       const { moreKeywordsMode } = this.filters

+ 27 - 3
data/data-models/modules/article/transform/content.js

@@ -43,7 +43,7 @@ class CommonContentModel extends BaseModel {
 
   formatModel(data) {
     const result = this.createModel()
-    const { baseInfo, detailInfo } = data
+    const { baseInfo, detailInfo, abstract } = data
     result.id = baseInfo.id ? decodeURIComponent(baseInfo.id) : ''
     result.title = baseInfo.title
     result.projectName = baseInfo?.projectName
@@ -67,10 +67,15 @@ class CommonContentModel extends BaseModel {
     result.isCanRead = data?.canRead || false
     result.IsCustomTopNet = data?.topnet || false
     result.publicType = baseInfo.publicType
-    // 是否阳光采购相关的标讯
+    // 是否有阳光直采权限
     result.hasPowerToReadSunPublishContent = data?.purchase // 阳光直采-采购信息
+    // 是否阳光直采相关的标讯
     result.IsSunPublishContent = baseInfo.infoAttribute === 'zc_cgxx' // 阳光直采-采购信息
-    // 是否有阳光直采权限
+
+    if (result.IsSunPublishContent) {
+      // 处理拆条信息
+      this.changeChaiTitle(baseInfo, abstract, result)
+    }
 
     // TDK
     result.tdk.title = baseInfo.title
@@ -192,6 +197,25 @@ class CommonContentModel extends BaseModel {
     }
     return keysList
   }
+
+  // 处理拆条信息:详情页中需要判断purchasingList长度>1,就使用列表页标题+‘等’。
+  changeChaiTitle(baseInfo, abstract, result) {
+    const key = 'sun_list_info_clicked'
+    const purchasingList = abstract?.default?.purchasingList
+    if (Array.isArray(purchasingList) && purchasingList.length > 0) {
+      const saved = sessionStorage.getItem(key)
+      if (saved) {
+        const list = JSON.parse(saved)
+        if (Array.isArray(list)) {
+          const r = list.find(item => item.id === baseInfo.id || item.id === result.id)
+          console.log(r)
+          if (r && r.title) {
+            result.title = r.title + '等'
+          }
+        }
+      }
+    }
+  }
 }
 
 function useCommonContentModel() {