Browse Source

Merge branch 'dev/v1.1.17.1_yf' of jianyu/web into hotfix/v1.1.17.1

yangfeng 1 week ago
parent
commit
6b7f5e27cc

+ 40 - 15
apps/bigmember_pc/src/components/article-item/ArticleItem.vue

@@ -53,7 +53,7 @@
           <span
             class="tag tag-user"
             v-if="config.tagUserPublishState && article.publicType"
-            >{{article.publicType}}</span
+            >{{ article.publicType }}</span
           >
           <span
             class="tag tag-user"
@@ -106,7 +106,15 @@
           <span class="tag dpink" v-if="calcBudget && calcBudget !== '0元'">
             {{ calcBudget }}
           </span>
-          <span class="tag border" :class="{'tag-user': !article.signupEnd }" v-if="config.tagSignupEnd && article.signupEnd !== undefined && article.signEndTimeText">
+          <span
+            class="tag border"
+            :class="{ 'tag-user': !article.signupEnd }"
+            v-if="
+              config.tagSignupEnd &&
+              article.signupEnd !== undefined &&
+              article.signEndTimeText
+            "
+          >
             {{ article.signupEnd ? '报名已截止' : '报名未截止' }}
           </span>
         </div>
@@ -219,7 +227,13 @@
             {{ article.buyerPerson }}
             <em v-if="article.buyerPerson">,</em>
             <template v-if="article.buyerTel === maskText">
-              <i :class="{'highlight-text pointer': article.buyerTel === maskText}" @click.stop="leaveInfo">{{ article.buyerTel }}</i>
+              <i
+                :class="{
+                  'highlight-text pointer': article.buyerTel === maskText
+                }"
+                @click.stop="leaveInfo"
+                >{{ article.buyerTel }}</i
+              >
             </template>
             <template v-else>
               {{ article.buyerTel }}
@@ -254,15 +268,13 @@
           <span v-if="article.winnerInfo && article.winnerInfo.length > 0">
             <i class="l-d-item-label">中标单位:</i>
             <em
-              v-for="(w, i) in article.winnerInfo"
-              :key="w.winnerId"
+              v-for="(w, i) in calcWinner"
+              :key="w.winnerId + '_' + i"
               @click.stop="goPortrayal('entDesc', w.winnerId)"
               class="highlight-text pointer"
             >
               {{ w.winner }}
-              <em v-if="i != article.winnerInfo.length - 1" :key="i + '_1'"
-                >、</em
-              >
+              <em v-if="i != calcWinner.length - 1" :key="i + '_1'">、</em>
             </em>
           </span>
           <span v-if="article.winnerTel">
@@ -321,12 +333,8 @@
             <i class="l-d-item-label">报名截止日期:</i>
             {{ article.signEndTimeText }}
           </p>
-
         </div>
-        <div
-          class="l-d-item"
-          v-if="article.deliveryLoc"
-        >
+        <div class="l-d-item" v-if="article.deliveryLoc">
           <p>
             <i class="l-d-item-label">交付地点:</i>
             {{ article.deliveryLoc }}
@@ -472,9 +480,13 @@ export default {
         ['<span class="highlight-text-orange-bd">', '</span>']
       )
       if (this.article.filetext_search) {
-        return this.index ? `${this.index}. ${hightLightedTitle}${this.calcFileText}` : `${hightLightedTitle}${this.calcFileText}`
+        return this.index
+          ? `${this.index}. ${hightLightedTitle}${this.calcFileText}`
+          : `${hightLightedTitle}${this.calcFileText}`
       } else {
-        return this.index ? `${this.index}. ${hightLightedTitle}`: `${hightLightedTitle}`
+        return this.index
+          ? `${this.index}. ${hightLightedTitle}`
+          : `${hightLightedTitle}`
       }
     },
     // 处理正文显示,有匹配词且匹配上才显示正文
@@ -563,6 +575,19 @@ export default {
       }
       v.region = region.join('-')
       return v.region || v.area
+    },
+    // 正式环境问题:招标搜索多个中标企业中存在重复的企业(多包段标讯中标单位会中标多次,数据未去重),导致前端循环出现重复key,页面报错卡死。
+    // 排查中标讯搜索、收藏、订阅推送等页面都使用该组件,数据无法处理,后端接口需改动很多,因此放在前端处理
+    calcWinner() {
+      const arr = this.article.winnerInfo
+      if (!arr) return
+      const uniqueArr = arr.filter((item, index) => {
+        return (
+          arr.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) ===
+          index
+        )
+      })
+      return uniqueArr
     }
   },
   data() {

+ 3 - 2
apps/bigmember_pc/src/router/router-interceptors.js

@@ -20,7 +20,7 @@ const powerCheckPathWhiteRegList = [
   /doc\/api/,
   /data_pack/,
   /giftrecord/,
-  /manage/,
+  /manage/
 ]
 // 权限控制白名单-路由名
 const powerCheckWhiteList = [
@@ -63,7 +63,8 @@ const powerCheckWhiteList = [
   'api-doc',
   'zhima',
   'ent_report_year',
-  'materialDetail'
+  'materialDetail',
+  'ZhiMaAnalysisReport'
 ]
 
 const regListCheck = function (regList, path) {

+ 31 - 7
apps/mobile/src/views/collection/index.vue

@@ -113,7 +113,7 @@
                 <span
                   class="winner-item highlight-text link-clickable j-splitter"
                   data-j-splitter="、"
-                  v-for="(winner, index) in item.children"
+                  v-for="(winner, index) in getCalcWinner(item.children)"
                   @click.stop="toToEntProfile(winner.id)"
                   :key="index"
                   >{{ winner.text }}</span
@@ -642,7 +642,7 @@ export default {
     dateFormatter,
     replaceKeyword,
     // 获取个人标签列表
-    async getAjaxGetKeepLabels () {
+    async getAjaxGetKeepLabels() {
       const { error_code: code, data } = await ajaxGetKeepLabels()
       if (code === 0 && data) {
         data.forEach((item) => {
@@ -713,7 +713,10 @@ export default {
       }
     },
     initDefaultFilterState() {
-      Object.assign(this.filters, JSON.parse(JSON.stringify(this.defaultFilterState)))
+      Object.assign(
+        this.filters,
+        JSON.parse(JSON.stringify(this.defaultFilterState))
+      )
     },
     onNoLoginInit() {
       if (this.isLogin) return
@@ -931,7 +934,17 @@ export default {
         FilterHistoryViewModel2AjaxModel.formatAreaCity(this.filters.area)
       const infoType = InfoTypeTransform.listToMap(this.filters.infoType)
       const infoTypeText = InfoTypeTransform.formatMapToList(infoType)
-      const { price, moreKeywordsMode, publishTime, selectTime, label, buyerClass, winnerConcat, buyerConcat, industry } = this.filters
+      const {
+        price,
+        moreKeywordsMode,
+        publishTime,
+        selectTime,
+        label,
+        buyerClass,
+        winnerConcat,
+        buyerConcat,
+        industry
+      } = this.filters
       // 整理wordsMode和additionalWords
       // let additionalWords
       // if (moreKeywordsMode) {
@@ -1366,7 +1379,9 @@ export default {
         city,
         district,
         keyWords: moreKeywordsMode,
-        industry: FilterHistoryViewModel2AjaxModel.formatIndustry(this.filters.industry), // 行业
+        industry: FilterHistoryViewModel2AjaxModel.formatIndustry(
+          this.filters.industry
+        ), // 行业
         minprice: this.filters.price.start,
         maxprice: this.filters.price.end,
         publishTime: FilterHistoryViewModel2AjaxModel.formatTime(
@@ -1415,7 +1430,7 @@ export default {
           path: '/common/order/create/dataexport',
           query: {
             source: 'd',
-            id:data._id
+            id: data._id
           }
         })
       } catch (error) {
@@ -1510,7 +1525,7 @@ export default {
           listState: this.listState,
           pageState: this.pageState,
           BIInfo: this.BIInfo,
-          toggleSearchBlurData: this.toggleSearchBlurData,
+          toggleSearchBlurData: this.toggleSearchBlurData
         },
         { storage: sessionStorage }
       )
@@ -1587,6 +1602,15 @@ export default {
         this.pageState.tabSwitchShow = true
       }
       this.scrollStatus = scrollTop < 60
+    },
+    getCalcWinner(arr) {
+      const uniqueArr = arr.filter((item, index) => {
+        return (
+          arr.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) ===
+          index
+        )
+      })
+      return uniqueArr
     }
   }
 }

+ 10 - 1
apps/mobile/src/views/search/result/bidding-custom/index.vue

@@ -155,7 +155,7 @@
               </template>
               <template #winnerText="{ item }">
                 <span
-                  v-for="(winner, index) in item.children"
+                  v-for="(winner, index) in getCalcWinner(item.children)"
                   :key="index"
                   class="winner-item j-splitter"
                   data-j-splitter="、"
@@ -1311,6 +1311,15 @@ export default {
         keyStr,
         `<span class="highlight-text-orange-bd">${keyStr}</span>`
       )
+    },
+    getCalcWinner(arr) {
+      const uniqueArr = arr.filter((item, index) => {
+        return (
+          arr.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) ===
+          index
+        )
+      })
+      return uniqueArr
     }
   }
 }

+ 12 - 2
apps/mobile/src/views/search/result/bidding/index.vue

@@ -234,7 +234,7 @@
             </template>
             <template #winnerText="{ item }">
               <span
-                v-for="(winner, index) in item.children"
+                v-for="(winner, index) in getCalcWinner(item.children)"
                 :key="index"
                 class="winner-item highlight-text link-clickable j-splitter"
                 data-j-splitter="、"
@@ -321,7 +321,7 @@
               </template>
               <template #winnerText="{ item }">
                 <span
-                  v-for="(winner, index) in item.children"
+                  v-for="(winner, index) in getCalcWinner(item.children)"
                   :key="index"
                   class="winner-item highlight-text link-clickable j-splitter"
                   data-j-splitter="、"
@@ -3272,6 +3272,16 @@ export default {
           this.doCollection(item, index)
         }
       }
+    },
+    // 中标单位去重
+    getCalcWinner(arr) {
+      const uniqueArr = arr.filter((item, index) => {
+        return (
+          arr.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) ===
+          index
+        )
+      })
+      return uniqueArr
     }
   }
 }

+ 11 - 3
apps/mobile/src/views/tabbar/Subscribe.vue

@@ -239,7 +239,7 @@
               </template>
               <template #winnerText="{ item }">
                 <span
-                  v-for="(winner, index) in item.children"
+                  v-for="(winner, index) in getCalcWinner(item.children)"
                   :key="index"
                   class="winner-item highlight-text link-clickable j-splitter"
                   data-j-splitter="、"
@@ -3145,6 +3145,15 @@ export default {
         // 已完成订阅向导再弹修改订阅条件弹框
         this.getGuideInfo()
       }
+    },
+    getCalcWinner(arr) {
+      const uniqueArr = arr.filter((item, index) => {
+        return (
+          arr.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) ===
+          index
+        )
+      })
+      return uniqueArr
     }
   }
 }
@@ -3336,8 +3345,7 @@ export default {
   border-radius: 8px;
   border: 1px solid transparent;
   background-clip: padding-box, border-box;
-  background-image:
-    linear-gradient(#e8ffff 40%, #ffffff 100%),
+  background-image: linear-gradient(#e8ffff 40%, #ffffff 100%),
     linear-gradient(to right, #2abed1, #4de4f84c, #2abed1);
   background-origin: padding-box, border-box;