Procházet zdrojové kódy

Merge branch 'feature/v4.8.39' into dev/v4.8.39_wmh

wenmenghao321 před 2 roky
rodič
revize
d5106cbae6
42 změnil soubory, kde provedl 1474 přidání a 86 odebrání
  1. 2 1
      src/jfw/filter/phonefilter.go
  2. 6 1
      src/jfw/front/shorturl.go
  3. 1 1
      src/jfw/front/swordfish.go
  4. 5 0
      src/jfw/modules/app/src/app/front/shorturl.go
  5. 4 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/ent_portrait.css
  6. 14 9
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  7. 22 5
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  8. 16 4
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  9. 37 0
      src/jfw/modules/app/src/web/templates/big-member/page_report_analysis.html
  10. 26 14
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  11. 9 6
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  12. 10 4
      src/jfw/modules/bigmember/src/entity/marketAnalysis/commonSearch.go
  13. 5 0
      src/jfw/modules/bigmember/src/entity/marketAnalysis/marketAnalysisEntity.go
  14. 1 1
      src/jfw/modules/bigmember/src/entity/marketAnalysis/scaleRefineQuery.go
  15. 1 1
      src/jfw/modules/bigmember/src/entity/portrait.go
  16. 1 3
      src/jfw/modules/bigmember/src/filter/sessionfilter.go
  17. 11 0
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  18. 2 0
      src/jfw/modules/bigmember/src/service/report/marketAnalysis.go
  19. 4 1
      src/phoneFilter.json
  20. 57 1
      src/web/staticres/common-module/bidstatus-update/js/bid-status-update.js
  21. binární
      src/web/staticres/common-module/collection/image/bg/qy-gk-bg.png
  22. binární
      src/web/staticres/common-module/collection/image/bg/qy-gk.png
  23. binární
      src/web/staticres/common-module/collection/image/buyer/09.png
  24. binární
      src/web/staticres/common-module/collection/image/buyer/10.png
  25. binární
      src/web/staticres/common-module/collection/image/buyer/11.png
  26. binární
      src/web/staticres/common-module/collection/image/buyer/cg-gk-bg.png
  27. binární
      src/web/staticres/common-module/collection/image/buyer/cg-gk.png
  28. binární
      src/web/staticres/common-module/collection/image/buyer/cg-zbdt-bg.jpg
  29. binární
      src/web/staticres/common-module/collection/image/buyer/cg-zbdt.png
  30. 20 6
      src/web/staticres/common-module/collection/js/buyer-example.js
  31. 11 9
      src/web/staticres/common-module/collection/js/ent_portrait.js
  32. 8 0
      src/web/staticres/common-module/collection/js/keyword-mobile.js
  33. 9 0
      src/web/staticres/common-module/collection/js/vip-dialog.js
  34. 15 0
      src/web/staticres/common-module/diy-report/js/report-list.js
  35. 51 1
      src/web/staticres/common-module/report-analysis/js/report_analysis.js
  36. 37 0
      src/web/templates/big-member/wx/page_report_analysis.html
  37. 216 0
      src/web/templates/frontRouter/wx/bigmember/free/exhibition_info.html
  38. 846 0
      src/web/templates/frontRouter/wx/bigmember/free/perfect_info_exhibition.html
  39. 12 5
      src/web/templates/frontRouter/wx/userMerge/free/confirm.html
  40. 2 2
      src/web/templates/frontRouter/wx/userMerge/free/index.html
  41. 5 5
      src/web/templates/pc/index.html
  42. 8 6
      src/web/templates/weixin/wxinfocontent_rec.html

+ 2 - 1
src/jfw/filter/phonefilter.go

@@ -57,6 +57,7 @@ func (l *phoneFilter) Do() bool {
 		if flag, _ := config.Sysconfig["phoneFilterFlag"].(bool); !flag {
 			return true
 		}
+		//会展活动 未绑定手机号 不用到绑定手机号页面
 		for _, v := range bindurl {
 			if v.MatchString(l.R.URL.Path) && !strings.Contains(l.R.URL.Path, "bidedoc") && !strings.Contains(l.R.URL.Path, "squeeze") && !strings.Contains(l.R.URL.Path, "partner") {
 				return true
@@ -147,7 +148,7 @@ func (l *phoneFilter) Do() bool {
 //	return int(t.Unix() - t2.Unix())
 //}
 
-//文章三级页跳转设置cookie
+// 文章三级页跳转设置cookie
 func SetCookie(value string, timeout int, w http.ResponseWriter) {
 	c := &http.Cookie{
 		Name:     "article",

+ 6 - 1
src/jfw/front/shorturl.go

@@ -141,7 +141,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		s.Redirect("/not/nottype", 302)
 		return nil
 	} else if stype == "content" || stype == "bdcontent" || stype == "advancedProject" {
-		if userId == "" {
+		if userId == "" && bm {
 			if s.GetString("state") == "wx" {
 				//微信跳回来的
 				if code := s.GetString("code"); code != "" {
@@ -1074,6 +1074,11 @@ func otherFilter(obj map[string]interface{}, isLogin bool) map[string]interface{
 		obj[dk] = mosaicText
 	}
 	if obj["subtype"] == "拟建" {
+		for k := range projectinfo {
+			if _, ok := otherMosaic[k]; !ok {
+				delete(projectinfo, k)
+			}
+		}
 		obj["projectinfo"] = projectinfo
 	}
 	obj["detail"] = detail

+ 1 - 1
src/jfw/front/swordfish.go

@@ -789,7 +789,7 @@ func pcVRT(sid, industry, content string, isPayUser bool) (po, bo, wo []map[stri
 			objdata = obj
 			queryStr := ""
 			commonQuery := func(mustquery string) *[]map[string]interface{} {
-				return elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
+				return nil //elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
 			}
 			//同一个项目的其他招标信息
 			projectName, _ := obj["projectname"].(string)

+ 5 - 0
src/jfw/modules/app/src/app/front/shorturl.go

@@ -396,6 +396,11 @@ func otherFilter(obj map[string]interface{}, isLogin bool) map[string]interface{
 		obj[dk] = mosaicText
 	}
 	if obj["subtype"] == "拟建" {
+		for k := range projectinfo {
+			if _, ok := otherMosaic[k]; !ok {
+				delete(projectinfo, k)
+			}
+		}
 		obj["projectinfo"] = projectinfo
 	}
 	obj["detail"] = detail

+ 4 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/ent_portrait.css

@@ -517,3 +517,7 @@
 .win-analyse .high-link > span {
     margin-right: .08rem;
 }
+.win-analyse .default {
+    color: #999;
+}
+

+ 14 - 9
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js

@@ -407,6 +407,9 @@ var vNode = {
     },
     // 获取画像信息
     getEntPortrait: function (callback) {
+      if(!this.isLogin) {
+        return
+      }
       var storageSet = JSON.parse(sessionStorage.getItem('winner_high_set'))
       var _this = this
       var data = {
@@ -789,15 +792,8 @@ var vNode = {
                 // 获取企业情报历史记录-12
                 _this.conf._12 = true
               }
-              // follow的权限:4.12.13只要有一个就可以
-              if (res.data.memberStatus > 0 && (power.indexOf(4) != -1 || power.indexOf(12) != -1 || power.indexOf(13) != -1)) {
-                _this.getEntFollowState()
-              } else {
-                _this.entInfo.followSearchFinish = true
-                _this.entInfo.entExist = false
-                // _this.getEntVisits()
-                _this.portrait = 'winnerVip'
-              }
+              // 所有身份均可关注(除未登录)
+              // _this.getEntFollowState()
               _this.singleTab = false
             }
 
@@ -868,6 +864,8 @@ var vNode = {
         success: function (res) {
           if(res && res.userId) {
             _this.isLogin = true
+            // 所有身份均可关注(除未登录)
+            _this.getEntFollowState()
           }
         },error:function (e) {
           _this.isLogin = false
@@ -1425,6 +1423,9 @@ var vNode = {
     },
     // 高级分析设置
     goHighSet () {
+      if(!this.isLogin) {
+        return
+      }
       sessionStorage.setItem('is-click-set', 1)
       location.href = './free_high_set?header=中标信息高级分析设置&eid=' + utils.getParam('eId')
       // var url = this.getProjectNewsUrl()
@@ -1450,6 +1451,10 @@ var vNode = {
     goOpenVip: function () {
       // location.href = "/jyapp/vipsubscribe/vipsubscribe_new"
       location.href = '/jy_mobile/common/order/create/svip?type=buy'
+    },
+    // 跳转登录页
+    goLogin: function () {
+      window.location.href = "/jyapp/free/login?to=back";
     }
   }
 }

+ 22 - 5
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -19,7 +19,7 @@ var vNode = {
       ], false
     ), '#FF9F40']
     return {
-      chartLoading: true,
+      chartLoading: false,
       showAll: false,
       buyer: {
         name: '',
@@ -190,7 +190,7 @@ var vNode = {
       // 免费用户是否查看过该画像
       var freeTrial = info.isFree && info.freeBuyerPort < 0 && this.freeTrial
       // 免费用户无体验次数的、超级订阅用户无剩余次数的、没有大会员浏览权限的 显示遮罩
-      return !isFreeAuth && !isVipAuth && !isMember && !freeTrial && !vipTrial
+      return (!isFreeAuth && !isVipAuth && !isMember && !freeTrial && !vipTrial) || !this.userInfo.isLogin
     },
     // 展示免费用户体验
     getfreeBuyerPort: function () {
@@ -256,7 +256,9 @@ var vNode = {
   },
   created () {
     this.getUserSimpleInfo()
-    this.getPowerInfo()
+    setTimeout(() => {
+      this.getPowerInfo()
+    }, 1000)
     setTimeout(() => {
       this.getIsSc()
     }, 1000)
@@ -386,9 +388,13 @@ var vNode = {
             if (res.data.power.indexOf(5) === -1) {
               _this.getBuried(userType)
             }
+            if( _this.userInfo.isLogin) {
+              _this.getNewMsg(); // 中标动态
+              _this.getChartData(); // 企业画像
+            }
             _this.getUsage(); // 超级订阅用户剩余次数
-            _this.getNewMsg(); // 中标动态
-            _this.getChartData(); // 企业画像
+            // _this.getNewMsg(); // 中标动态
+            // _this.getChartData(); // 企业画像
           } else {
             _this.userInfo.isLogin = false
           }
@@ -711,6 +717,7 @@ var vNode = {
         buyer: decodeURIComponent(utils.getParam('entName'))
       }
       var isMember = this.bigStatus > 0 && this.power.indexOf(5) > -1
+      that.chartLoading = true;
       $.ajax({
         type: 'POST',
         url: isMember ? '/bigmember/portrait/buyer/getData' : '/bigmember/subVipPortrait/buyer/getData',
@@ -733,10 +740,13 @@ var vNode = {
                 that.chartLoading = false;
               }
             }
+          } else {
+            that.chartLoading = false;
           }
           that.getUsage(); // 超级订阅用户剩余次数
         },
         error: function (err) {
+          that.chartLoading = false;
           console.log(err)
           // setTimeout(function() {
           //   that.getChartData()
@@ -747,6 +757,7 @@ var vNode = {
     // 分段获取画像数据
     getSectionChartData: function (type) {
       var that = this;
+      that.chartLoading = true;
       $.ajax({
         type: 'POST',
         url: '/bigmember/portrait/buyer/getData',
@@ -775,9 +786,12 @@ var vNode = {
                 that.chartLoading = false;
               }
             }
+          } else {
+            that.chartLoading = false;
           }
         },
         error: function (err) {
+          that.chartLoading = false;
           console.log(err)
         }
       })
@@ -1715,6 +1729,9 @@ var vNode = {
       return maxIndex
     },
     goHighSet: function () {
+      if(!this.userInfo.isLogin) {
+        return
+      }
       sessionStorage.setItem('is-click-set', 1)
       location.href = './free_high_set?header=采购单位高级分析设置&entName=' + decodeURIComponent(utils.getParam('entName'))
     },

+ 16 - 4
src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html

@@ -241,7 +241,7 @@
       <span class="j-icon icon-company"></span>
       <span class="ent-title">${ entInfo.name }</span>
       <span style="margin-right: .32rem;" class="j-icon" :class="!!entInfo.follow ? 'icon-favorite' : 'icon-add-favorite'"
-            @click="changeFollowState" v-if="!isLogin || entInfo.followSearchFinish && entInfo.entExist"></span>
+            @click="changeFollowState" v-if="!isLogin || (entInfo.followSearchFinish && entInfo.entExist)"></span>
       <van-loading v-if="isLogin && !entInfo.followSearchFinish" size="24px"></van-loading>
       <forwardshare :params="entParams" :show-text="false" v-if="isLogin" ></forwardshare>
     </div>
@@ -382,9 +382,9 @@
           <!-- </van-sticky> -->
         </div>
         <!-- 高级分析 -->
-        <div class="win-analyse" ref="setRef" v-if="isLogin">
+        <div class="win-analyse" ref="setRef">
           <span class="win-bid-title">中标分析</span>
-          <div class="high-link" @click="goHighSet">
+          <div class="high-link" :class="isLogin ? '' : 'default'" @click="goHighSet">
             <span>高级分析设置</span>
             <van-icon name="arrow"></van-icon>
           </div>
@@ -394,7 +394,8 @@
           <div class="go-text"> 免费赠送1次【企业中标分析】权益体验机会!</div>
           <div class="go-btn" @click="goGiveAnalysis">去解锁</div>
         </div>
-        <div class="bg-white tab-card">
+        <!-- 中标信息统计结果-->
+        <div class="bg-white tab-card" v-if="isLogin">
           <div class="tab-card-title" style="padding: 0.16rem .32rem .12rem;">中标信息统计结果</div>
           <div class="card-row zb-info">
             <div class="card-column">
@@ -427,6 +428,17 @@
                 : '至今'}</span>
           </div>
         </div>
+        <!-- 中标信息统计结果--未登录-->
+        <div class="bg-white tab-card"  style="margin-bottom: 10px;" v-if="!isLogin">
+            <div class="vip_component" v-if="getStatus && hideDt"
+                 style="height:6.56rem;background:url('/common-module/collection/image/bg/qy-gk-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%;padding-top:.5rem;"
+            key="dt">
+            <vip-component @tabactive="tabActive" :power="conf" type="item_10" :can-free-exp="canFreeExp"
+                           :entvisit="entvisit" :newvip="isVip" :islogin="isLogin"
+                           imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/bg/qy-gk.png?v={{Msg "seo" "version"}}'>
+            </vip-component>
+        </div>
+        </div>
         <div class="jy-empty" v-show="allNot && !getStatus">
           <div class="jy-empty-img"></div>
           <p class="jy-empty-text">对不起,没有匹配到相关信息, <br>修改时间范围或换个搜索词试试吧</p>

+ 37 - 0
src/jfw/modules/app/src/web/templates/big-member/page_report_analysis.html

@@ -92,6 +92,7 @@
                         </div>
                         <van-cell-group class="filters-list">
                             <van-cell center title="分析内容" is-link value-class="ellipsis" :value="resolveSelected('keys')" @click="clickCell('keys')"></van-cell>
+                            <van-cell center title="匹配方式" is-link value-class="ellipsis" :value="resolveSelected('matchway')" @click="clickCell('matchway')"></van-cell>
                             <van-cell center title="区域" is-link value-class="ellipsis" :value="resolveSelected('area')" @click="clickCell('area')"></van-cell>
                             <van-cell center title="行业" is-link value-class="ellipsis" :value="resolveSelected('industry')" @click="clickCell('industry')"></van-cell>
                             <van-cell center title="采购单位类型" value-class="ellipsis" is-link :value="resolveSelected('buyerclass')" @click="clickCell('buyerclass')"></van-cell>
@@ -551,6 +552,42 @@
                 </div>
             </div>
         </van-popup>
+        <van-popup
+            v-model="filterDialogShow.matchway"
+            closeable
+            round
+            position="bottom"
+            close-icon="clear"
+            class="j-popup collection"
+            overlay-class="j-overlay"
+            :lazy-render="false"
+            :style="{ height: '36%' }"
+            get-container="body">
+            <div class="j-container matchway-popup">
+                <div class="popup-header header-title">请选择匹配方式</div>
+                <div class="j-main">
+                    <van-radio-group v-model="filtersCache.matchway">
+                        <van-cell-group>
+                          <van-cell
+                            v-for="item in matchWayList"
+                            :key="item.label"
+                            :title="item.name"
+                            clickable
+                            @click="filtersCache.matchway = item.label">
+                            <template #right-icon>
+                              <van-radio checked-color="#2ABED1" :name="item.label" />
+                            </template>
+                          </van-cell>
+                    </van-radio-group>
+                </div>
+                <div class="j-footer">
+                    <div class="j-button-group">
+                        <button class="j-button-cancel" @click="filtersCache.matchway = 'title'">重置</button>
+                        <button class="j-button-confirm" @click="filters.matchway = filtersCache.matchway;filterDialogShow.matchway = false">确认</button>
+                      </div>
+                </div>
+            </div>
+        </van-popup>
         <van-popup
             v-model="filterDialogShow.area"
             closeable

+ 26 - 14
src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html

@@ -227,6 +227,9 @@
     .vip_openDialog{
         margin-top:.3rem;
     }
+    .win-analyse .default {
+        color: #999;
+    }
 
   </style>
 </head>
@@ -283,12 +286,12 @@
         <!-- 高级分析 -->
         <div class="win-analyse" ref="setRefs">
           <span class="win-bid-title">采购单位分析</span>
-          <div class="high-link" @click="goHighSet" v-if="isLogin">
+          <div class="high-link" :class="{default: !userInfo.isLogin}" @click="goHighSet">
             <span>高级分析设置</span>
             <van-icon name="arrow"></van-icon>
           </div>
         </div>
-        <div class="buyer-statistic">
+        <div class="buyer-statistic" v-if="userInfo.isLogin">
           <div class="statistic-title">统计信息</div>
           <div class="buyer-info">
             <div class="bi-item">
@@ -319,7 +322,7 @@
           <p class="jy-empty-text">对不起,没有匹配到相关信息, <br>修改时间范围或换个搜索词试试吧</p>
         </div>
         <!-- 招标动态 -->
-        <div class="dynamic" v-if="isShow.showDynamic">
+        <div class="dynamic" v-if="isShow.showDynamic && userInfo.isLogin">
           <!--                <div class="d_title">招标动态</div>-->
           <div class="selected-export-box">
             <div class="selected-export">
@@ -616,26 +619,35 @@
         </div>
         <!-- 遮罩部分 -->
         <div v-if="getStatus">
+<!--            招标动态-->
+          <div class="vip_component" style="height:8.8rem;background:#fff url('/common-module/collection/image/buyer/cg-zbdt-bg.jpg?v={{Msg "seo" "version"}}') no-repeat center 50px;background-size:100% 100%;">
+             <p class="example-title">招标动态</p>
+             <buyer-example style="margin-top:1rem;"  :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_14" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/cg-zbdt.png?v={{Msg "seo" "version"}}'></buyer-example>
+          </div>
+<!--            统计信息-->
+         <div class="vip_component" style="height:6.56rem;background:url('/common-module/collection/image/buyer/cg-gk-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
+            <buyer-example style="margin-top:1rem;"  :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_13" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/cg-gk.png?v={{Msg "seo" "version"}}'></buyer-example>
+         </div>
           <!-- 历史项目联系人 -->
-          <!-- <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/01-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
-                <p class="example-title">历史项目联系方式</p>
-                <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_1" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/01.png?v={{Msg "seo" "version"}}'></buyer-example>
-              </div> -->
+<!--           <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/01-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">-->
+<!--                <p class="example-title">历史项目联系方式</p>-->
+<!--                <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_1" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/01.png?v={{Msg "seo" "version"}}'></buyer-example>-->
+<!--              </div>-->
           <!-- 合作企业注册资本分布 -->
-          <!-- <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/09-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
+          <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/09-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
                 <p class="example-title">合作企业注册资本分布</p>
                 <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_9" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/09.png?v={{Msg "seo" "version"}}'></buyer-example>
-              </div> -->
+          </div>
           <!-- 合作企业年龄分布 -->
-          <!-- <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/10-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
+           <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/10-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
                 <p class="example-title">合作企业年龄分布</p>
                 <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_10" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/10.png?v={{Msg "seo" "version"}}'></buyer-example>
-              </div> -->
+           </div>
           <!-- 合作企业注册地分布 -->
-          <!-- <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/11-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
-                <p class="example-title">合作企业注册地分布</p>
+          <div class="vip_component" style="height:10.8rem;background:url('/common-module/collection/image/buyer/11-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">
+<!--                <p class="example-title">合作企业注册地分布</p>-->
                 <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" :power="power" type="item_11" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/11.png?v={{Msg "seo" "version"}}'></buyer-example>
-              </div> -->
+          </div>
           <!-- 年度项目统计 -->
           <div class="vip_component"
             style="height:10.8rem;background:url('/common-module/collection/image/buyer/02-bg.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%">

+ 9 - 6
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -1429,11 +1429,14 @@
         // 显示隐藏
         if (!canRead) {
             // $(".prebuilt").remove()
-            $('#tab2').hide() // 摘要tab1+正文tab2
-            $(".tab-ct").hide() // 正文信息
-            $(".abs").hide() // 阅读原文和意见反馈
-            $(".atta-list").hide() // 附件列表
-            $(".mask-zz").removeClass("hidden");
+            if(subtype != '拟建') {
+              $('#tab2').hide() // 摘要tab1+正文tab2
+              $(".tab-ct").hide() // 正文信息
+              $(".abs").hide() // 阅读原文和意见反馈
+              $(".atta-list").hide() // 附件列表
+              $(".mask-zz").removeClass("hidden");
+            }
+
         } else {
             $(".prebuilt").css('height', 'unset')
             if(userId) {
@@ -1445,7 +1448,7 @@
     }
   // 是否展示详情上方的广告位
   function showTopAd () {
-    if((!canRead || !userId) && subtype == '拟建') {
+    if(!canRead && userId && subtype == '拟建') {
       $('.big-ad-img').show()
       $('.nj-ad').show()
     }

+ 10 - 4
src/jfw/modules/bigmember/src/entity/marketAnalysis/commonSearch.go

@@ -7,7 +7,6 @@ import (
 )
 
 const (
-	localMultiMatch     = `{"multi_match": {"query": %s,"type": "phrase", "fields": ["purchasing","projectname.pname"]}}`
 	query_bool_must_and = `{"bool": {"must": [%s]%s}}`
 	PSearch_DecMust     = `"bidstatus": ["中标","成交","合同","单一"]`
 	query_bool_must     = `{"terms": {%s}}`
@@ -41,7 +40,7 @@ func (mae *MarketAnalysisEntity) GetCommonQuerySql() string {
 	musts = append(musts, fmt.Sprintf(query_bool_must, PSearch_DecMust))
 	//订阅词
 	for _, v := range getAllKeywordArr(mae.FormatParam.KeysItems) {
-		if sql := getKeyWordSql(v); sql != "" {
+		if sql := getKeyWordSql(v, mae.BaseParam.MatchingMode); sql != "" {
 			bools = append(bools, sql)
 		}
 	}
@@ -92,8 +91,15 @@ func getAllKeywordArr(res []keyWordGroup) (rData []viewKeyWord) {
 	return
 }
 
-func getKeyWordSql(v viewKeyWord) string {
-	var shoulds, must_not []string
+func getKeyWordSql(v viewKeyWord, matchingMode string) string {
+	var (
+		shoulds, must_not []string
+		//默认查询项目名称与标的物
+		localMultiMatch = `{"multi_match": {"query": %s,"type": "phrase", "fields": ["purchasing","projectname.pname"]}}`
+	)
+	if matchingMode == "title" { //只匹配项目名称
+		localMultiMatch = `{"multi_match": {"query": %s,"type": "phrase", "fields": ["projectname.pname"]}}`
+	}
 	//附加词
 	for _, vv := range v.Keyword {
 		vv = strings.TrimSpace(vv)

+ 5 - 0
src/jfw/modules/bigmember/src/entity/marketAnalysis/marketAnalysisEntity.go

@@ -53,6 +53,7 @@ type AnalysisRequestParam struct {
 	PageSize       int    //默认每页10条
 	PageNum        int    //默认当前第一页
 	IsDetail       bool   //是否是项目明细请求
+	MatchingMode   string //匹配方式 title:标题 content:项目名称/标的物
 }
 
 type viewKeyWord struct {
@@ -239,6 +240,7 @@ func (mae *MarketAnalysisEntity) SaveAnalysisRecord() error {
 		"s_area":           mae.BaseParam.Area,
 		"s_industry":       mae.BaseParam.Industry,
 		"s_buyerClass":     mae.BaseParam.BuyerClass,
+		"s_matchingMode":   mae.BaseParam.MatchingMode,
 		"s_userId":         mae.UId,
 		"s_parentId":       mae.Pid,
 		"l_createTime":     time.Now().Unix(),
@@ -273,6 +275,7 @@ func (mae *MarketAnalysisEntity) GetAnalysisFromMgoDb() error {
 	mae.BaseParam.Area, _ = (*res)["s_area"].(string)
 	mae.BaseParam.Industry, _ = (*res)["s_industry"].(string)
 	mae.BaseParam.BuyerClass, _ = (*res)["s_buyerClass"].(string)
+	mae.BaseParam.MatchingMode, _ = (*res)["s_matchingMode"].(string)
 	return nil
 }
 
@@ -324,6 +327,7 @@ func (mae *MarketAnalysisEntity) GetRecordList(pageNum, PageSize int) (total int
 			"rangeTime":        qutil.ObjToString(row["s_rangeTime"]),
 			"s_rangeTimeExtra": qutil.ObjToString(row["s_rangeTimeExtra"]),
 			"createTime":       qutil.Int64All(row["l_createTime"]),
+			"matchingMode":     qutil.ObjToString(row["s_matchingMode"]), //项目匹配方式
 		})
 	}
 	return
@@ -338,6 +342,7 @@ func (mae *MarketAnalysisEntity) getQueryItem() (map[string]interface{}, error)
 		"buyerclass":       mae.BaseParam.BuyerClass,
 		"rangeTime":        mae.BaseParam.RangeTime,
 		"s_rangeTimeExtra": mae.BaseParam.RangeTimeExtra,
+		"matchingMode":     mae.BaseParam.MatchingMode,
 	}, nil
 }
 

+ 1 - 1
src/jfw/modules/bigmember/src/entity/marketAnalysis/scaleRefineQuery.go

@@ -89,7 +89,7 @@ func (mae *MarketAnalysisEntity) marketScaleRefineQuery() (rMap map[string]inter
 	for _, group := range mae.FormatParam.KeysItems {
 		var bools []string
 		for _, v := range getGroupKeywordArr(group.A_Key) {
-			if sql := getKeyWordSql(v); sql != "" {
+			if sql := getKeyWordSql(v, mae.BaseParam.MatchingMode); sql != "" {
 				bools = append(bools, sql)
 			}
 		}

+ 1 - 1
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -141,7 +141,7 @@ func NoLoginAssociatedInfo(entId string) []map[string]interface{} {
 // int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
 func CreateSubVipPortraitManager(userid string, pageFlag, searchValue string, isWinner bool, session *httpsession.Session) (*Portrait, int, error, bool) {
 	if userid == "" {
-		if pageFlag == "entPortrait" || pageFlag == "entDetail" { //未登录用户获取基本信息 与基础分析信息
+		if pageFlag == "entDetail" { //未登录用户获取基本信息 与基础分析信息
 			return &Portrait{userid, session}, 1, nil, true
 		}
 		return nil, -1, errors.New("未登录"), true

+ 1 - 3
src/jfw/modules/bigmember/src/filter/sessionfilter.go

@@ -51,9 +51,7 @@ func (l *sessionfilter) Do(w http.ResponseWriter, req *http.Request) bool {
 		return true
 	}
 	//企业画像部分免费功能接口开放
-	if strings.Contains(req.URL.Path, "/bigmember/portrait/subVipPortrait/winner") || //分析接口
-		strings.Contains(req.URL.Path, "/bigmember/portrait/subVipPortrait/entDetail") { //超级订阅页面基本信息接口
-		//strings.Contains(req.URL.Path, "/bigmember/portrait/winner/getNewMsg") { //项目动态
+	if strings.Contains(req.URL.Path, "/bigmember/portrait/subVipPortrait/entDetail") { //超级订阅页面基本信息接口
 		return true
 	}
 	bigMeg := jy.GetBigVipUserBaseMsg(session, *config.Middleground)

+ 11 - 0
src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go

@@ -332,6 +332,9 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		if buyer == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+		if userId == "" {
+			return nil, fmt.Errorf("未登录")
+		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
@@ -451,6 +454,7 @@ func (this *SubVipPortrait) BuyerPortrait() {
 		if buyerName == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+
 		cepm, power, err, isFree := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyerName, false, this.Session())
 		cepm.Session = this.Session()
 		if err != nil {
@@ -478,6 +482,13 @@ func (this *SubVipPortrait) BuyerPortrait() {
 		if power == 3 {
 			rData["onTrial"] = true
 		}
+		if userId == "" { //未登录用户限制字段
+			rData = map[string]interface{}{
+				"city":       rData["city"],
+				"buyerclass": rData["buyerclass"],
+				"province":   rData["province"],
+			}
+		}
 		return rData, nil
 	}()
 	if errMsg != nil {

+ 2 - 0
src/jfw/modules/bigmember/src/service/report/marketAnalysis.go

@@ -53,6 +53,7 @@ func (this *MarketAnalysis) ProjectInfo() {
 			BuyerClass:     this.GetString("buyerclass"),     //采购单位类型【字符串】多个采购单位类型用逗号拼接
 			Buyer:          this.GetString("buyer"),          //采购单位
 			Winner:         this.GetString("winner"),         //中标单位
+			MatchingMode:   this.GetString("matchingMode"),   //匹配方式
 			Sort:           sort,                             //排序
 			PageSize:       pageSize,                         //每页数据量
 			PageNum:        pageNum,                          //当前页码
@@ -123,6 +124,7 @@ func (this *MarketAnalysis) DoAnalysis() {
 			Area:           this.GetString("area"),           //省份【字符串】多个省份用逗号拼接
 			Industry:       this.GetString("industry"),       //行业【字符串】多个行业用逗号拼接
 			BuyerClass:     this.GetString("buyerclass"),     //采购单位类型【字符串】多个采购单位类型用逗号拼接
+			MatchingMode:   this.GetString("matchingMode"),   //匹配方式
 		}
 		mae := &marketAnalysis.MarketAnalysisEntity{BaseParam: bParam, UId: userId, Pid: pid}
 		if err := mae.ForMatData(); err != nil {

+ 4 - 1
src/phoneFilter.json

@@ -19,7 +19,10 @@
 		"^/orgstructure/invpage",
 		"^/orgpc/(.*)",
     "^/weixin/pay/checkout_*",
-    "^/weixin/(\\w+)/paySuccess"
+    "^/weixin/(\\w+)/paySuccess",
+    "^/stl/exhibitionActive",
+    "^/swordfish/SingleLogin",
+    "^/weixin/frontPage/bigmember/free/perfect_info_exhibition"
 	],
 	"sessUrl":{
 		"/jyTreasureBox/treasureBox":"",

+ 57 - 1
src/web/staticres/common-module/bidstatus-update/js/bid-status-update.js

@@ -246,6 +246,7 @@ var bidStatusNode = {
     showBidStatus: {
       handler (newval) {
         this.resetUpdate()
+        this.getBidContent()
       },
       immediate: true
     }
@@ -306,7 +307,7 @@ var bidStatusNode = {
           type: 'POST',
           url: '/bigmember/follow/project/detail',
           data: {
-              sid: _this.projectCellInfo.sid || _this.projectCellInfo._id,
+              sid: _this.projectCellInfo.sid || _this.projectCellInfo.id || _this.projectCellInfo._id,
               // fid: _this.fid
           },
           success: function (res) {
@@ -494,6 +495,61 @@ var bidStatusNode = {
         this.bidParams.isWin = ''
       }
     },
+    // 获取投标状态信息
+    getBidContent: function () {
+      const _this = this
+      const params = {
+        sid: _this.projectCellInfo.sid || _this.projectCellInfo.id || _this.projectCellInfo._id,
+      }
+      $.ajax({
+        type: 'POST',
+        url: '/jyapi/jybx/core/participate/content',
+        contentType: 'application/json',
+        data: JSON.stringify(params),
+        success: function(res) {
+          if(res.error_code === 0 && res.data) {
+            if (Object.keys(res.data).length > 0) {
+              _this.editBtnStatus.show = true
+              _this.editBtnStatus.status = 1
+              const { bidStage, bidType, channelName, channelPerson, channelPhone, isWin, winner} = res.data
+              let getParams = {
+                bidType: '',
+                bidStage: '',
+                isWin: '',
+                channelName: channelName,
+                channelPerson: channelPerson,
+                channelPhone: channelPhone,
+                winner: winner
+              }
+              if (bidStage && bidStage.length > 0) {
+                _this.checkedList = bidStage
+                getParams.bidStage = bidStage.join('、')
+              }
+              if (isWin == 1) {
+                getParams.isWin = '是'
+              } else if(isWin == 2) {
+                getParams.isWin = '否'
+              } else {
+                getParams.isWin = ''
+              }
+              if(bidType == 1) {
+                getParams.bidType = '直接投标'
+                _this.showChannel = false
+                _this.formSchemaOptions.checkedListMap[1] = [].concat(bidStage || [])
+              } else {
+                getParams.bidType = '渠道投标'
+                _this.showChannel = true
+                _this.formSchemaOptions.checkedListMap[2] = [].concat(bidStage || [])
+              }
+              if (res.data) {
+                Object.assign(_this.copyBidParams, res.data)
+              }
+              _this.bidParams = getParams
+            }
+          }
+        }
+      })
+    },
     // 获取参标状态
     getCanBiaoInfo: function() {
       const _this = this

binární
src/web/staticres/common-module/collection/image/bg/qy-gk-bg.png


binární
src/web/staticres/common-module/collection/image/bg/qy-gk.png


binární
src/web/staticres/common-module/collection/image/buyer/09.png


binární
src/web/staticres/common-module/collection/image/buyer/10.png


binární
src/web/staticres/common-module/collection/image/buyer/11.png


binární
src/web/staticres/common-module/collection/image/buyer/cg-gk-bg.png


binární
src/web/staticres/common-module/collection/image/buyer/cg-gk.png


binární
src/web/staticres/common-module/collection/image/buyer/cg-zbdt-bg.jpg


binární
src/web/staticres/common-module/collection/image/buyer/cg-zbdt.png


+ 20 - 6
src/web/staticres/common-module/collection/js/buyer-example.js

@@ -148,22 +148,22 @@ var buyerExample = {
         }
           // 合作企业注册资本分布
         case 'item_9': {
-          textMap.headText.top = '通过分析合作企业注册资本、采购项目规模、'
-          textMap.headText.bot = '利润率,全面洞察采购单位合作企业!'
+          textMap.headText.top = '深入分析采购单位合作企业规模情况,辅助'
+          textMap.headText.bot = '投标决策'
           textMap.source = 'buyer_portrait_withCapitalData_freeuser'
           break
         }
          // 合作企业年龄分布
         case 'item_10': {
-          textMap.headText.top = '通过分析合作企业年龄、数量、规模分布情况,'
-          textMap.headText.bot = '全面洞察采购单位合作企业!'
+          textMap.headText.top = '洞察采购单位合作企业成立时间,预判企业'
+          textMap.headText.bot = '实力'
           textMap.source = 'buyer_portrait_withEstablishData_freeuser'
           break
         }
         // 合作企业注册地分布
         case 'item_11': {
-          textMap.headText.top = '通过分析合作企业的地址、数量、采购规模,'
-          textMap.headText.bot = '了解采购单位营商环境,辅助投标决策!'
+          textMap.headText.top = '获取采购单位合作企业注册地详情,了解业务'
+          textMap.headText.bot = '分布情况'
           textMap.source = 'buyer_portrait_withAreaData_freeuser'
           break
         }
@@ -174,6 +174,20 @@ var buyerExample = {
           textMap.source = 'buyer_portrait_topAgencyData_freeuser'
           break
         }
+        // 统计信息
+        case 'item_13': {
+          textMap.headText.top = '精准分析采购单位历史运作项目,'
+          textMap.headText.bot = '采购动态一目了然'
+          textMap.source = 'buyer_portrait_topAgencyData_freeuser'
+          break
+        }
+        // 招标动态
+        case 'item_14': {
+          textMap.headText.top = '查看采购单位最新招标动态,及时跟踪采'
+          textMap.headText.bot = '购需求'
+          textMap.source = 'buyer_portrait_topAgencyData_freeuser'
+          break
+        }
       }
       return textMap
     },

+ 11 - 9
src/web/staticres/common-module/collection/js/ent_portrait.js

@@ -774,15 +774,17 @@ var vNode = {
                 // 获取企业情报历史记录-12
                 _this.conf._12 = true
               }
-              // follow的权限:4.12.13只要有一个就可以
-              if (res.data.memberStatus > 0 && (power.indexOf(4) != -1 || power.indexOf(12) != -1 || power.indexOf(13) != -1)) {
-                _this.getEntFollowState()
-              } else {
-                _this.entInfo.followSearchFinish = true
-                _this.entInfo.entExist = false
-                _this.getEntVisits()
-                _this.portrait = 'winnerVip'
-              }
+              // // follow的权限:4.12.13只要有一个就可以
+              // if (res.data.memberStatus > 0 && (power.indexOf(4) != -1 || power.indexOf(12) != -1 || power.indexOf(13) != -1)) {
+              //   _this.getEntFollowState()
+              // } else {
+              //   _this.entInfo.followSearchFinish = true
+              //   _this.entInfo.entExist = false
+              //   _this.getEntVisits()
+              //   _this.portrait = 'winnerVip'
+              // }
+              // 所有身份均有权限关注
+              _this.getEntFollowState()
               // 新版超级订阅用户获取访问量
               if (newVip && (res.data.memberStatus <= 0 || res.data.power.indexOf(4) == -1)) {
                 _this.getEntVisits()

+ 8 - 0
src/web/staticres/common-module/collection/js/keyword-mobile.js

@@ -349,12 +349,20 @@ var keywordComponent = {
             _this.setInitList(_this.tablist)
           }
           _this.checkNoKey()
+          _this.emitRequestRes(res)
         },
         error: function(err){
           console.log(err)
         }
       })
     },
+    emitRequestRes: function (res) {
+      try {
+        if (res && res.data) {
+          subscribeRequestSuccess && subscribeRequestSuccess(res.data)
+        }
+      } catch (error) {}
+    },
     setInitList: function(arr) {
       arr.forEach((v) => {
         const ownKey = {

+ 9 - 0
src/web/staticres/common-module/collection/js/vip-dialog.js

@@ -223,6 +223,15 @@ var vipComponent = {
           textMap.source = 'ent_portrait_contacts'
           break
         }
+        // 统计信息-概况
+        case 'item_10': {
+          textMap.titleText = ''
+          textMap.btnText = '登录查看'
+          textMap.headText.top = '全面透视企业历史中标项目、中标'
+          textMap.headText.bot = '金额、客户数量'
+          textMap.source = 'ent_portrait_changeList'
+          break
+        }
         default: {
           textMap.headText.top = '通过实时监控项目的招标、中标、合同等'
           textMap.headText.bot = '信息,全面挖掘更多潜在商机!'

+ 15 - 0
src/web/staticres/common-module/diy-report/js/report-list.js

@@ -31,6 +31,13 @@ var reportListTemplate = `
                             v-html="formatKeys(item.keysItems, item.open)">
                         </div>
                     </div>
+                    <div class="info-flex-r-box filters">
+                        <span class="info-content-label">匹配方式:</span>
+                        <div class="info-content-box"
+                            :class="{'van-ellipsis': !item.open}"
+                            v-html="formatMatchWay(item.matchingMode, item.open)">
+                        </div>
+                    </div>
                     <div class="info-flex-r-box filters">
                         <span class="info-content-label">时间:</span>
                         <div class="info-content-box" :class="{'van-ellipsis': !item.open}">
@@ -187,6 +194,14 @@ var reportListMobileComponent = {
                 }.bind(this)
             })
         },
+        formatMatchWay: function (m, open) {
+            var map = {
+                title: '按标题匹配',
+                content: '按全文匹配'
+            }
+            const text = map[m] || map.content
+            return text
+        },
         formatKeys: function (keys, open) {
             var tempStr = '-'
             if (!keys) return tempStr

+ 51 - 1
src/web/staticres/common-module/report-analysis/js/report_analysis.js

@@ -1,6 +1,10 @@
 function dateFormatter (date, pattern) {
   return new Date(date).pattern(pattern)
 }
+function subscribeRequestSuccess (res) {
+  vm.subscribeInfo = res
+}
+
 var vm = new Vue({
   delimiters: ['${', '}'],
   el: '#analysis',
@@ -25,6 +29,7 @@ var vm = new Vue({
   data: {
     sessStorageKey: '$data-report_analysis',
     tabActiveName: 'analysis', // analysis/history
+    subscribeInfo: {},
     tabList: [
       {
         label: '市场分析报告',
@@ -35,6 +40,16 @@ var vm = new Vue({
         name: 'history'
       }
     ],
+    matchWayList: [
+      {
+        name: '按标题匹配',
+        label: 'title'
+      },
+      {
+        name: '按全文匹配',
+        label: 'content'
+      }
+    ],
     tabConf: {
       titleActiveColor: '#2ABED1',
       titleInactiveColor: '#5F5E64',
@@ -70,8 +85,12 @@ var vm = new Vue({
     ],
     scrollTop: 0,
     filtersPageShow: true,
+    filtersCache: {
+      matchway: 'title'
+    },
     filters: {
       selectKeysArr: [], // 关键词简单数组,用于恢复选择状态
+      matchway: 'title',
       keys: [], // 关键词详细数组,用于提交数据
       area: {},
       industry: [],
@@ -85,6 +104,7 @@ var vm = new Vue({
     },
     filterDialogShow: {
       keys: false,
+      matchway: false,
       area: false,
       industry: false,
       buyerclass: false,
@@ -343,7 +363,12 @@ var vm = new Vue({
           this.calcStickyOffset()
         }
       }
-    }
+    },
+    subscribeInfo (n) {
+      if (!this.rid && n && n.member_jy && n.member_jy.i_matchway) {
+        this.setDefaultMatchWay(n.member_jy.i_matchway)
+      }
+    },
   },
   created () {
     this.calcLastTimeText()
@@ -373,6 +398,17 @@ var vm = new Vue({
     utils.iosBackRefresh()
   },
   methods: {
+    setDefaultMatchWay: function (matchWay) {
+      // matchWay 1按标题匹配title 2按全文匹配content
+      var map = {
+        1: 'title',
+        2: 'content'
+      }
+      var defaultMatchWay = map[matchWay]
+      if (defaultMatchWay) {
+        this.filters.matchway = defaultMatchWay
+      }
+    },
     // 设置排序方式
     setsortType (data) {
       this.sections.areaScatter.sortType = data
@@ -622,9 +658,18 @@ var vm = new Vue({
         text = this.resolveSelectIndustryText(filters.industryDetail)
       } else if (type === 'buyerclass') {
         text = this.resolveSelectBuyerclassText(filters.buyerclass)
+      } else if (type === 'matchway') {
+        text = this.resolveSelectMatchWayText(filters.matchway)
       }
       return prefix + text
     },
+    resolveSelectMatchWayText: function (m) {
+      var map = {
+        title: '按标题匹配',
+        content: '按全文匹配'
+      }
+      return map[m]
+    },
     resolveSelectKeysText: function (keys) {
       if (Array.isArray(keys)) {
         if (keys.length === 0) {
@@ -748,6 +793,8 @@ var vm = new Vue({
         setTimeout(function () {
           _this.$refs.industrySelector.setState()
         }, 0)
+      } else if (key = 'matchway') {
+        this.filtersCache[key] = this.filters[key]
       }
       dialog[key] = true
     },
@@ -800,6 +847,7 @@ var vm = new Vue({
 
       const query = {
         keysItems: this.getSelectedKeys(),
+        matchingMode: this.filters.matchway,
         rangeTime: `${parseInt(this.filters.rangeTime.start / 1000)}-${parseInt(this.filters.rangeTime.end / 1000)}`,
         rangeTimeExtra: this.filters.rangeTime.exact,
         area: JSON.stringify(this.filters.area),
@@ -1067,6 +1115,8 @@ var vm = new Vue({
         this.reportFilters.buyerclass = data.buyerclass.split(',')
         this.filters.buyerclass = this.reportFilters.buyerclass
       }
+      console.log(data)
+      this.filters.matchway = data.matchingMode || 'content'
     },
     // 市场概况
     sortMarketOverview (profile) {

+ 37 - 0
src/web/templates/big-member/wx/page_report_analysis.html

@@ -100,6 +100,7 @@
                       </div>
                       <van-cell-group class="filters-list">
                           <van-cell center title="分析内容" is-link value-class="ellipsis" :value="resolveSelected('keys')" @click="clickCell('keys')"></van-cell>
+                          <van-cell center title="匹配方式" is-link value-class="ellipsis" :value="resolveSelected('matchway')" @click="clickCell('matchway')"></van-cell>
                           <van-cell center title="区域" is-link value-class="ellipsis" :value="resolveSelected('area')" @click="clickCell('area')"></van-cell>
                           <van-cell center title="行业" is-link value-class="ellipsis" :value="resolveSelected('industry')" @click="clickCell('industry')"></van-cell>
                           <van-cell center title="采购单位类型" value-class="ellipsis" is-link :value="resolveSelected('buyerclass')" @click="clickCell('buyerclass')"></van-cell>
@@ -559,6 +560,42 @@
               </div>
           </div>
       </van-popup>
+      <van-popup
+            v-model="filterDialogShow.matchway"
+            closeable
+            round
+            position="bottom"
+            close-icon="clear"
+            class="j-popup collection"
+            overlay-class="j-overlay"
+            :lazy-render="false"
+            :style="{ height: '36%' }"
+            get-container="body">
+            <div class="j-container matchway-popup">
+                <div class="popup-header header-title">请选择匹配方式</div>
+                <div class="j-main">
+                    <van-radio-group v-model="filtersCache.matchway">
+                        <van-cell-group>
+                          <van-cell
+                            v-for="item in matchWayList"
+                            :key="item.label"
+                            :title="item.name"
+                            clickable
+                            @click="filtersCache.matchway = item.label">
+                            <template #right-icon>
+                              <van-radio checked-color="#2ABED1" :name="item.label" />
+                            </template>
+                          </van-cell>
+                    </van-radio-group>
+                </div>
+                <div class="j-footer">
+                    <div class="j-button-group">
+                        <button class="j-button-cancel" @click="filtersCache.matchway = 'title'">重置</button>
+                        <button class="j-button-confirm" @click="filters.matchway = filtersCache.matchway;filterDialogShow.matchway = false">确认</button>
+                      </div>
+                </div>
+            </div>
+      </van-popup>
       <van-popup
           v-model="filterDialogShow.area"
           closeable

+ 216 - 0
src/web/templates/frontRouter/wx/bigmember/free/exhibition_info.html

@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+
+<head>
+    <title>剑鱼标讯介绍</title>
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="format-detection" content="telephone=yes"/>
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta name="referrer" content="always">
+    <!--引入公共资源头部-->
+    {{include "/big-member/meta.html"}}
+    <script src="{{Msg "seo" "cdn"}}/js/jquery-3.2.1.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="/big-member/js/rem.js"></script>
+    {{include "/common/weixin.html"}}
+
+    <!--S-当前页必定需要预加载的资源-->
+   <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/swiper.min.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/public.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
+    <!--E-当前页必定需要预加载的资源-->
+
+    <!--S-当前页面的css资源-->
+    <!--E-当前页面的css资源-->
+  <style>
+    html,
+    body {
+      position: relative;
+      height: 100%;
+    }
+
+    body {
+      background: #eee;
+      font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
+      font-size: 14px;
+      color: #000;
+      margin: 0;
+      padding: 0;
+    }
+
+    .swiper {
+      width: 100%;
+      height: 100%;
+    }
+
+    .swiper-slide {
+      text-align: center;
+      font-size: 18px;
+      background: #fff;
+
+      /* Center slide text vertically */
+      display: -webkit-box;
+      display: -ms-flexbox;
+      display: -webkit-flex;
+      display: flex;
+      -webkit-box-pack: center;
+      -ms-flex-pack: center;
+      -webkit-justify-content: center;
+      justify-content: center;
+      -webkit-box-align: center;
+      -ms-flex-align: center;
+      -webkit-align-items: center;
+      align-items: center;
+    }
+
+    .swiper-slide img {
+      display: block;
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
+    }
+    #skip-button {
+      position: fixed;
+      z-index: 2;
+      top: 0.32rem;
+      right: 0.32rem;
+      color: rgba(255, 255, 255, 0.90);
+      font-size: 12px;
+      font-weight: 400;
+      line-height: 18px;
+      display: inline-flex;
+      padding: 4px 12px;
+      justify-content: center;
+      align-items: center;
+      border-radius: 4px;
+      background: transparent;
+      border: 1px solid rgba(255, 255, 255, 0.50);
+    }
+    #go-button {
+      position: fixed;
+      z-index: 2;
+      bottom: 0.84rem;
+      left: 50%;
+      transform: translateX(-50%);
+      width: 5.82rem;
+      height: 0.92rem;
+      color: #2ABED1;
+      text-align: center;
+      font-size: 0.36rem;
+      font-style: normal;
+      font-weight: 500;
+      line-height: 0.52rem;
+      border-radius: 0.46rem;
+      background: #FFF;
+    }
+
+    @keyframes LoopPlayback {
+      0% {
+        opacity: 0;
+        transform: translateY(30%);
+      }
+
+      80% {
+        transform: translateY(0);
+        opacity: 1;
+      }
+
+      100% {
+        opacity: 0.2;
+        transform: translateY(-30%);
+      }
+    }
+    .next-page-arrow {
+      position: fixed;
+      z-index: 2;
+      bottom: 0.72rem;
+      left: 50%;
+      margin-left: -0.24rem;
+      width: 0.48rem;
+      height: 0.48rem;
+      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAlCAYAAAAqXEs9AAAACXBIWXMAABCcAAAQnAEmzTo0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACtSURBVHgB7dZBCkMhDATQHDU38d982sKHlmLLRMfoIgOuxPjAxWhWqRwQAP5adkKekIZ3mu3MF2Yv6gdmD6qDue6Vj+phPvZyUf8w6SgGk4aKYJajRjDLUDMYOUqBkaGiGBBdNoy6h0cwjb2kg3ILgi7jMSMoNybkE/QwLEr7XUF12QAmHQVUl+kwy1AzGDlKgZGhlJhpFIJdNoly5hDdZQKUs4e0XZM8v1I5Kg9VMuHOIxrkSAAAAABJRU5ErkJggg==) no-repeat center center;
+      background-size: 0.48rem 0.48rem;
+      animation: LoopPlayback 2s infinite ease-in;
+    }
+  </style>
+</head>
+
+<body>
+<div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div class="j-main">
+      <!-- Swiper -->
+      <div class="swiper mySwiper">
+        <div class="swiper-wrapper" id="imgs-box"></div>
+      </div>
+      <button class="action-button" id="skip-button">跳过</button>
+      <button style="display: none" class="action-button" id="go-button">立即使用剑鱼</button>
+      <div class="next-page-arrow"></div>
+    </div>
+</div>
+
+<script src='{{Msg "seo" "cdn"}}/js/swiper.min.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/public/js/utils.js'></script>
+{{include "/big-member/commonjs.html"}}
+<script>
+
+  function renderSwiper (adInfo) {
+    var appendHTML = ''
+    adInfo.forEach(function (ad) {
+      appendHTML += '<div class="swiper-slide"><img src="'+ad.s_pic+'"></div>'
+    })
+    $('#imgs-box').append(appendHTML)
+
+    var goLink = adInfo[0].s_link
+    $('button.action-button').attr('data-href', goLink)
+
+    var goButton = $('#go-button')
+    var nextIcon = $('.next-page-arrow')
+
+
+    var swiper = new Swiper(".mySwiper", {
+      direction: "vertical",
+      on: {
+        slideChangeTransitionStart: function () {
+          var isEndPage = this.slides.length - this.activeIndex === 1
+          if (isEndPage) {
+            nextIcon.hide()
+            goButton.fadeIn(1200)
+          } else {
+            goButton.hide()
+            nextIcon.show()
+          }
+        }
+      }
+    });
+
+    $('button.action-button').on('click', function () {
+      location.href = $(this).attr('data-href')
+    })
+  }
+
+  var sourceCode = utils.getParam('ad')
+  $.ajax({
+    url: '/publicapply/free/getJyAdList',
+    type: 'POST',
+    headers: {
+      'Content-Type': 'application/json'
+    },
+    data: JSON.stringify({codes: [sourceCode]}),
+    success: function (res) {
+      if (res && res.data) {
+        const adInfo = res.data[sourceCode]
+        renderSwiper(adInfo)
+      }
+    }
+  })
+
+</script>
+
+{{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 846 - 0
src/web/templates/frontRouter/wx/bigmember/free/perfect_info_exhibition.html

@@ -0,0 +1,846 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+
+<head>
+    <title>完善信息</title>
+    <meta name="viewport"
+          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="format-detection" content="telephone=yes"/>
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta name="referrer" content="always">
+    <!--引入公共资源头部-->
+    {{include "/big-member/meta.html"}}
+    <script src="{{Msg "seo" "cdn"}}/js/jquery-3.2.1.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="/big-member/js/rem.js"></script>
+    {{include "/common/weixin.html"}}
+
+    <!--S-当前页必定需要预加载的资源-->
+    <link rel="preload" as="style" href='//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/lib/index.css'/>
+    <link rel="preload" as="style" href='//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/lib/icon/local.css'/>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/public.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
+    <!--E-当前页必定需要预加载的资源-->
+
+
+    <!--S-当前页面的css资源-->
+    <link rel="stylesheet" href='//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/lib/index.css'/>
+    <link rel="stylesheet" href='//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/lib/icon/local.css'/>
+    <link rel="stylesheet"
+          href='{{Msg "seo" "cdn"}}/common-module/perfect-info/index.css?v={{Msg "seo" "version"}}'/>
+    <style>
+      .exhibition-page .van-field__control,
+      .exhibition-page .sendbtn {
+        font-size: 0.32rem;
+        font-style: normal;
+        font-weight: 500;
+        line-height: 0.48rem;
+        color: #5F5E64;
+      }
+      .exhibition-page .van-field__control::placeholder {
+        color: #C0C4CC;
+      }
+
+      .exhibition-page .sendbtn.canNextSend {
+        color: #2ABED1;
+      }
+      .exhibition-page .top-banner-group img {
+        width: 100%;
+        height: 100%;
+      }
+      .exhibition-page .van-cell {
+        font-size: 0.3rem;
+        font-style: normal;
+        font-weight: 500;
+        line-height: 0.44rem;
+        color: #5F5E64;
+        padding: 0.3rem 0.32rem;
+      }
+      .exhibition-page .top-banner-group {
+        max-height: 1.6rem;
+      }
+    </style>
+    <!--E-当前页面的css资源-->
+    <script>
+      try {
+        window.JyObj.hiddenBottom('0')
+      } catch (e) {
+        console.log('error: app not function')
+      }
+    </script>
+</head>
+
+<body>
+<div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div class="j-main perfect-info-group exhibition-page" id="perfect-info-page" v-cloak>
+      <div class="j-container">
+          <div class="j-main info-collect">
+              <div class="top-banner-group" @click="openTopBanner" v-if="topBannerInfo.s_pic">
+                  <img :src="topBannerInfo.s_pic" :alt="topBannerInfo.s_picalt || '完善信息-顶部广告展示'">
+              </div>
+              <div class="form-card-group">
+                  <div class="form-title">基本信息</div>
+                  <div class="form-content-card">
+                      <van-field v-model.trim="infoMap.name" label="姓名" @focus="infoCheckMap.name = ''" @blur="getCheckMap('name')"
+                                 :error-message="infoCheckMap.name" required placeholder="请输入姓名"></van-field>
+                      <van-field @input="getInputPhone" v-model.trim="infoMap.phone" label="手机号" @focus="infoCheckMap.phone = ''"
+                                 @blur="getCheckMap('phone')" :error-message="infoCheckMap.phone" required
+                                 placeholder="请输入准确的手机号"></van-field>
+                      <van-field v-if="setcodeShow" v-model.trim="infoMap.vercode" label="验证码" @focus="infoCheckMap.vercode = ''"
+                                 @blur="getCheckMap('vercode')" :error-message="infoCheckMap.vercode" required
+                                 @input="getCheckCode"
+                                 placeholder="请输入短信验证码">
+                        <template #button>
+                          <span v-show="sendShow" style="font-size: .28rem;" class="sendbtn" :class="{'canNextSend': canNextSend}" @click="sendMsg">发送验证码</span>
+                          <span class="timedown" v-show="!sendShow"></span>
+                        </template>
+                      </van-field>
+                      <van-field v-model.trim="infoMap.email" label="邮箱" @focus="infoCheckMap.email = ''" @blur="getCheckMap('email')"
+                                 :error-message="infoCheckMap.email" placeholder="请输入邮箱"></van-field>
+                  </div>
+              </div>
+              <div class="form-card-group">
+                  <div class="form-title">公司信息</div>
+                  <div class="form-content-card">
+                      <div class="associate-ent-group" v-show="isAssociateShow">
+                          <div class="associate-ent-item" @click="selectEnt(item)" v-for="(item, i) in searchList" v-bind:key="i" v-html="highlightText(item, infoMap.company)"></div>
+                      </div>
+                      <van-field @input="entOnChange('input')" @blur="getCheckMap('company')" @focus="infoCheckMap.company = ''"
+                                 :error-message="infoCheckMap.company" required v-model.trim="infoMap.company" label="公司名称" placeholder="请输入准确的公司名称"></van-field>
+                      <van-field v-model="infoMap.companyType" label="公司类型"
+                                 @click="openPop('公司类型')" readonly is-link placeholder="请选择公司类型"></van-field>
+                      <van-field :class="{'hide-border': infoMap.position === '其他'}"  @blur="getCheckMap('position')"  v-model="infoMap.position" label="职位" @click="openPop('职位')" readonly is-link
+                                 placeholder="请选择职位"></van-field>
+                      <van-field class="other-input-group" @focus="infoCheckMap.position_other = ''"
+                                 :error-message="infoCheckMap.position_other" v-model.trim="infoMap.position_other" v-show="infoMap.position === '其他'" required label="职位" placeholder="请输入职位"></van-field>
+                      <van-field v-if="showBranch" :error-message="infoCheckMap.branch" v-model="infoMap.branch"  @blur="getCheckMap('branch')" label="部门" @click="openPop('部门')" readonly is-link placeholder="请选择部门"></van-field>
+                  </div>
+              </div>
+              <div class="warm-prompt">
+                <span class="icon-warning"></span>
+                <span class="warm-text">温馨提示:请提供准确的信息,我们将为您推荐更准确、更个性化的商机和服务</span>
+              </div>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <button class="j-button-confirm" :data-cl-event="submitElEvent" :disabled="isSubmitDisabled" @click="submitForm">提交</button>
+              </div>
+          </div>
+          <van-popup class="prefect-pop-group" v-model="popInfo.show" round position="bottom"
+                     :style="{ height: getPopHeight }">
+              <div class="j-container">
+                  <div class="j-header">
+                      <div class="pop-title-group">
+                          <span>@@popInfo.title@@</span>
+                          <div class="close-padding-box" @click="popInfo.show = false">
+                              <i class="j-icon base-icon icon-delete-gray"></i>
+                          </div>
+                      </div>
+                  </div>
+                  <div class="j-main" v-show="conditionMap[popInfo.label]">
+                      <div class="condition-select-group" :class="{more: isMoreSelect}">
+                          <div class="condition-select-item" @click="onSelectItem(item, popInfo.label)" v-for="(item,i) in conditionMap[popInfo.label]" :class="{checked: item.checked}">
+                              <div>@@item.title@@</div>
+                              <i v-if="!isMoreSelect" class="j-icon base-icon icon-tick"></i>
+                              <div class="more-icon-box" v-else>
+                                  <i  class="j-icon base-icon icon-tick-circle"></i>
+                                  <i  class="j-icon base-icon icon-tick-circle-fill"></i>
+                              </div>
+                          </div>
+                      </div>
+                  </div>
+                  <div class="j-footer">
+                      <div class="j-button-group">
+                          <button class="j-button-confirm" :disabled="isNextDisabled" @click="submitPop">确认</button>
+                      </div>
+                  </div>
+              </div>
+          </van-popup>
+      </div>
+      <van-popup v-model="commitshow" class="commitdialog" :close-on-click-overlay="overlayShow">
+        <div class="j-container">
+          <div class="j-header com-header">
+            <span class="infor-icon-close"></span>
+          </div>
+          <div class="j-main com-main">
+            <div class="img-duihao">
+              <img src="/structuredata/mobile/image/choose.png" alt="">
+            </div>
+            <div class="commit_success">提交成功</div>
+            <div class="commit_tip">我们稍后将以邮件的形式发送数据样例</div>
+            <div class="commit_know">
+              <button class="commit_btn" @click="history.back()">我知道了</button>
+            </div>
+            <div class="data_exportclick">
+              <img @click="location.href = '/front/wx_dataExport/toSieve'" src='{{Msg "seo" "cdn"}}/common-module/perfect-info/image/dataimg.png' alt="">
+            </div>
+          </div>
+          <div class="j-footer com-footer"></div>
+        </div>
+      </van-popup>
+  </div>
+</div>
+
+<script rel="preload" as="script" src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+<script rel="preload" as="script" src=//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/vant.min.js></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.8.2/vant.min.js></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/public/js/utils.js'></script>
+{{include "/big-member/commonjs.html"}}
+
+<script>
+  var vNode = {
+    delimiters: ['@@', '@@'],
+    el: '#perfect-info-page',
+    data: {
+      sendShow: true, // 倒计时切换
+      vercodecor: false, // 验证码是否正确
+      setcodeShow: true, // 验证码输入框是否显示
+      commitshow: false, // 提交成功显示弹窗
+      overlayShow: false,
+      searchList: [],
+      isAssociateShow: false,
+      isAssociateUpTime: -1,
+      infoMap: {
+        name: '',
+        phone: '',
+        vercode: '',
+        email: '',
+        company: '',
+        companyType: '',
+        position: '',
+        position_other: '',
+        branch: ''
+      },
+      infoCheckMap: {
+        name: '',
+        phone: '',
+        vercode: '',
+        email: '',
+        company: '',
+        position: '',
+        position_other: '',
+        branch: ''
+      },
+      isEchoInfoLoading: true,
+      popInfo: {
+        show: false,
+        label: '',
+        title: ''
+      },
+      conditionMap: {
+        '公司类型': [{
+            title: '投标企业',
+            checked: false
+          },
+          {
+            title: '招标采购单位',
+            checked: false
+          },
+          {
+            title: '厂商',
+            checked: false
+          },
+          {
+            title: '招标代理机构',
+            checked: false
+          },
+          {
+            title: '经销商',
+            checked: false
+          },
+          {
+            title: '服务提供商',
+            checked: false
+          },
+          {
+            title: '其他',
+            checked: false
+          }
+        ],
+        '职位': [
+          {
+            title: '总裁',
+            checked: false
+          },
+          {
+            title: '总经理',
+            checked: false
+          },
+          {
+            title: '总监',
+            checked: false
+          },
+          {
+            title: '经理',
+            checked: false
+          },
+          {
+            title: '主管',
+            checked: false
+          },
+          {
+            title: '职员',
+            checked: false
+          }
+        ],
+        '部门': [
+          {
+            title: '市场',
+            checked: false
+          },
+          {
+            title: '产品',
+            checked: false
+          },
+          {
+            title: '销售',
+            checked: false
+          },
+          {
+            title: '渠道',
+            checked: false
+          },
+          {
+            title: '其他',
+            checked: false
+          }
+        ]
+      },
+      ajaxParams: {
+        "name": "",
+        "phone": "",
+        "source": utils.getParam('source'), // 推送消息点进来的
+        "mail": "",
+        "company": "",
+        "companyType": "",
+        "position": "",
+        "branch": '',
+        origin: location.origin
+      },
+      jobJson: [
+        '总裁',
+        '总经理',
+        '总监',
+        '经理',
+        '主管',
+        '职员'
+      ],
+      topBannerInfo: {
+        s_pic: ""
+      }
+    },
+    mounted() {
+      // source=message_bigmember app消息大会员留资地
+      // source=message_structeddata app消息结构化数据留资地
+      this.ajaxGetEchoInfo()
+    },
+    computed: {
+      canNextSend: function () {
+        return this.checkPhone
+      },
+      submitElEvent: function () {
+        var type = 'structeddata'
+        return 'c_wx_' + type + '_submit_buttonclick'
+      },
+      getPopHeight () {
+        return this.popInfo.label === '受雇类型' ?  '5.42rem' : '8.36rem'
+      },
+      checkName () {
+        if (this.infoMap.name.length > 10) {
+          return false
+        }
+        var namereg = /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/;//中英文或加.的少数民族名字
+        return namereg.test(this.infoMap.name)
+      },
+      checkPhone () {
+        return /^1[3-9]\d{9}$/.test(this.infoMap.phone)
+      },
+      checkEmail () {
+        if (this.infoMap.email === '') return true
+        if (this.infoMap.email.length > 50) {
+          return false
+        }
+        return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(this.infoMap.email)
+      },
+      checkEntName () {
+        if (this.infoMap.company.trim().length > 50 || this.infoMap.company.trim().length < 2) {
+          return false
+        }
+        return true
+      },
+      checkEntType() {
+        if (this.infoMap.companyType === '') {
+          return false
+        }
+        return true
+      },
+      isMoreSelect () {
+        return this.popInfo.label === '公司类型'
+      },
+      checkPosition () {
+        if (this.infoMap.position !== "" && this.infoMap.position !== '其他') {
+          return true
+        }
+        if (this.infoMap.position_other.length > 50) {
+          return false
+        }
+        var namereg = /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/;
+        return namereg.test(this.infoMap.position_other)
+      },
+      checkBranch(){
+        if(this.infoMap.position.indexOf('总裁') > -1 || this.infoMap.position.indexOf('总经理') > -1){
+          return false
+        } else if(this.infoMap.branch !== ""){
+          return false
+        }else{
+          return true
+        }
+      },
+      isSubmitDisabled () {
+        return !this.checkName || !this.checkPhone || !this.checkEmail || !this.checkEntName || !this.vercodecor
+      },
+      isNextDisabled () {
+        var type = this.popInfo.label
+        var result = false
+        switch (type) {
+          case '职位': {
+            result = this.conditionMap[type].filter(v => v.checked).length
+            break
+          }
+          case '部门': {
+            result = this.conditionMap[type].filter(v => v.checked).length
+            break
+          }
+          case '公司类型': {
+            result = this.conditionMap[type].filter(v => v.checked).length
+            break
+          }
+        }
+        return !result
+      },
+      showBranch () {
+        // 切换到总裁或总经理之后 把之前选择的部门清空
+        if (this.infoMap.position.indexOf('总裁') > -1 || this.infoMap.position.indexOf('总经理') > -1) {
+          this.infoMap.branch = ''
+          this.conditionMap['部门'].forEach(v => {
+            v.checked = false
+          })
+        }
+        var zc = this.infoMap.position.indexOf('总裁') > -1
+        var zjl = this.infoMap.position.indexOf('总经理') > -1
+        return !(zc || zjl) && this.infoMap.position
+      }
+    },
+    methods: {
+      // 顶部广告
+      openTopBanner: function () {
+        location.href = this.topBannerInfo.s_link
+      },
+      // 手机号输入事件
+      getInputPhone: function(value) {
+        let exhibition_phone = sessionStorage.getItem('exhibition_phone')
+        if(value === exhibition_phone) {
+          // this.setcodeShow = false
+        } else {
+          // this.setcodeShow = true
+        }
+      },
+      // 点击发送验证码
+      sendMsg: function () {
+        let _this = this
+        if(!this.checkPhone) return
+        $.ajax({
+          type: 'POST',
+          url: '/salesLeads/sendMsg',
+          data: {
+            phoneNum: _this.infoMap.phone,
+            source: this.ajaxParams.source
+          },
+          success:function(res) {
+            console.log(res)
+            if(res.data.success) {
+              _this.countdown()
+            }else{
+              if (res.data.msg.indexOf("phoneErr")>-1){
+                _this.showToast("手机号错误")
+              }else if (res.data.msg.indexOf("sended")>-1){
+                _this.showToast("验证码已发送")
+              }else{
+                _this.showToast(res.data.msg)
+              }
+            }
+          }
+        })
+      },
+      // 验证码输入事件
+      getCheckCode: function() {
+        let _this = this
+        if(this.infoMap.vercode.length == 6){
+          $.ajax({
+              url:'/salesLeads/checkCode',
+              type:'POST',
+              data:{
+                  phoneNum:_this.infoMap.phone,
+                  code:_this.infoMap.vercode
+              },
+              success:function(res) {
+                if(res.error_code == 0) {
+                  _this.vercodecor = res.data.flag
+                  if(res.data.flag) {
+                    _this.$toast('验证码正确')
+                  }else{
+                    _this.$toast('验证码错误')
+                  }
+                  _this.getCheckMap('vercode')
+                }
+              },
+              error:function(err) {
+                  console.log(err)
+              }
+          })
+        } else {
+          _this.getCheckMap('vercode')
+        }
+      },
+      ajaxFn: function (url, data, callback, type) {
+        return $.ajax({
+          type: 'post',
+          url: url,
+          contentType: type ? 'application/x-www-form-urlencoded' : "application/json;charset=utf-8",
+          data: type ? data : JSON.stringify(data),
+          dataType: "json",
+          success: typeof callback === 'function' ? callback.bind(this) : new Function()
+        })
+      },
+      // 倒计时
+      countdown() {
+        let _this = this
+        this.sendShow = false
+        var time=60;
+        setTime=setInterval(function(){
+            if(time<=0){
+              _this.sendShow = true
+              time=59
+              clearInterval(setTime);
+              return;
+            }
+            time--;
+            $(".timedown").text(time+'s');
+        },1000);
+      },
+      ajaxGetEchoInfo() {
+        this.isEchoInfoLoading = true
+        this.ajaxFn('/salesLeads/retainedCapital' + '?source=' + this.ajaxParams.source, {source: this.ajaxParams.source}, function (r) {
+          this.isEchoInfoLoading = false
+          if (r && r.info) {
+            r.data = r.info
+          }
+          // 广告及手机号是否绑定相关业务逻辑
+          var needVerifyBindPhone = false
+          if (r && r.active) {
+            this.topBannerInfo = r.active.adList[0] || {}
+            needVerifyBindPhone = r.active.bindOrNot
+          }
+          // 原留资业务
+          if (r && r.error_msg === '' && r.data) {
+            if(r.data.phone != '' && !needVerifyBindPhone) {
+              this.vercodecor = true
+              this.setcodeShow = false
+              sessionStorage.setItem('exhibition_phone', r.data.phone)
+            } else {
+              this.setcodeShow = true
+            }
+            this.setEchoInfo(r.data)
+            // var result = checkRequiredKeys(['name', 'phone', 'company', 'companyType', 'mail', 'position', 'branch'], r.data)
+            // if (result) {
+            //   var skipAuto = ['jyarticle_see3', 'article_collection', 'article_original', 'jypush_see10']
+            //   var _this = this
+            //   var canAuto = !skipAuto.some(function (v) {
+            //     return _this.ajaxParams.source.indexOf(v) > -1
+            //   })
+            //   this.submitForm(canAuto)
+            // }
+          }
+        })
+      },
+      highlightText (value, keyStr) {
+        return utils.replaceKeyword(value, keyStr, '<span class="highlight-text">' + keyStr + '</span>')
+      },
+      entOnChange (type) {
+        if (type === 'blur') {
+          this.getCheckMap('company')
+          setTimeout(() => {
+            this.isAssociateShow = false
+            this.searchList = []
+          }, 300)
+        } else {
+          clearTimeout(this.isAssociateUpTime)
+          this.isAssociateUpTime = setTimeout(() => {
+            this.ajaxEntList(this.infoMap.company)
+          }, 200)
+        }
+      },
+      selectEnt (item) {
+        console.log('item', item)
+        this.infoMap.company = item
+        this.isAssociateShow = false
+        this.searchList = []
+      },
+      ajaxEntList (str) {
+        if (str.length <= 2) {
+          return
+        }
+        this.ajaxFn('/jypay/user/company/association', { name: str,companyCount:10 }, function (r) {
+          if (r && r.error_msg === '' && r.data) {
+            this.isAssociateShow = true
+            this.searchList = r.data
+          }
+        }, true)
+      },
+      setEchoInfo (data) {
+        if (data.companyType) {
+          this.setCheckForData('companyType', 'companyType', data.companyType, '公司类型')
+        }
+        if (data.position) {
+          this.setCheckForData('position', 'position', data.position, '职位')
+        }
+        if (data.name) {
+          this.setCheckForData('name', 'name', data.name)
+        }
+        if (data.phone) {
+          this.setCheckForData('phone', 'phone', data.phone)
+        }
+        if (data.mail) {
+          this.setCheckForData('mail', 'email', data.mail)
+        }
+        if (data.company) {
+          this.setCheckForData('company', 'company', data.company)
+        }
+        if (data.branch) {
+          this.setCheckForData('branch', 'branch', data.branch, '部门')
+        }
+      },
+      setCheckForData (aKey, iKey, cKey, label) {
+        this.ajaxParams[aKey] = cKey
+        this.infoMap[iKey] = cKey
+        if (label === '职位' && this.jobJson.indexOf(cKey) === -1) {
+            // this.infoMap[iKey] = '其他'
+            // this.infoMap.position_other = cKey.split('/')[1]
+            this.infoMap[iKey] = ''
+            this.infoMap.position_other = ''
+        }
+        if (label) {
+          var checkDatas = [cKey]
+          if (label === '公司类型') {
+            checkDatas = cKey.split(',')
+          }
+          this.conditionMap[label].forEach(v => {
+            if (checkDatas.indexOf(v.title) !== -1) {
+              v.checked = true
+            }
+          })
+        }
+      },
+      submitPop() {
+        var type = this.popInfo.label
+        switch (type) {
+          case '职位': {
+            var tempData = this.conditionMap[type].filter(v => v.checked)
+            this.setCheckForData('position', 'position', tempData[0].title)
+            break
+          }
+          case '部门': {
+            var tempData = this.conditionMap[type].filter(v => v.checked)
+            this.setCheckForData('branch', 'branch', tempData[0].title)
+            break
+          }
+          case '公司类型': {
+            var tempData = this.conditionMap[type].filter(v => v.checked).map(v => v.title)
+            this.setCheckForData('companyType', 'companyType', tempData.join(','))
+            break
+          }
+        }
+        this.popInfo.show = false
+      },
+      openPop(type) {
+        switch (type) {
+          case '职位': {
+            this.popInfo.title = '职位'
+            break
+          }
+          case '部门': {
+            this.popInfo.title = '部门'
+            break
+          }
+          case '公司类型': {
+            this.popInfo.title = '公司类型'
+            break
+          }
+        }
+        this.popInfo.label = type
+        this.popInfo.show = true
+      },
+      onSelectItem (item, index) {
+        if (this.isMoreSelect) {
+          item.checked = !item.checked
+        } else {
+          this.conditionMap[index].forEach(function (v) {
+            v.checked = false
+          })
+          item.checked = true
+        }
+      },
+      getCheckMap (type) {
+        switch (type) {
+            case 'name': {
+              this.infoCheckMap.name = this.infoMap.name === '' ? '姓名为必填项' : ''
+              if (this.infoCheckMap.name === '' && !this.checkName) {
+                this.infoCheckMap.name = '请输入正确格式的姓名'
+              }
+              break
+            }
+            case 'phone': {
+              this.infoCheckMap.phone = this.infoMap.phone === '' ? '手机号码为必填项' : ''
+              if (this.infoCheckMap.phone === '' && !this.checkPhone) {
+                this.infoCheckMap.phone = '请输入正确格式的手机号码'
+              }
+              break
+            }
+            case 'vercode': {
+              this.infoCheckMap.vercode = this.infoMap.vercode === '' ? '验证码为必填项' : ''
+              if (this.infoMap.vercode.length != 6 || !this.vercodecor) {
+                this.infoCheckMap.vercode = '请输入正确的验证码'
+              } else {
+                this.infoCheckMap.vercode = ''
+              }
+              break
+            }
+            case 'email': {
+              if (this.infoMap.email !== '') {
+                if (!this.checkEmail) {
+                  this.infoCheckMap.email = '请输入正确格式的邮箱'
+                }
+              } else {
+                this.infoCheckMap.email = ''
+              }
+              break
+            }
+            case 'company': {
+              this.infoCheckMap.company = this.infoMap.company === '' ? '公司名称为必填项' : ''
+              if (this.infoCheckMap.company === '' && !this.checkEntName) {
+                this.infoCheckMap.company = '请输入正确格式的公司名称'
+                if (this.infoMap.company.length < 2) {
+                  this.infoCheckMap.company = '公司名称至少输入2个字'
+                }
+                if (this.infoMap.company.length > 50) {
+                  this.infoCheckMap.company = '公司名称最多输入50个字'
+                }
+              }
+              break
+            }
+            case 'position': {
+              var isOther = this.infoMap.position === '其他' && this.infoMap.position_other === ''
+              this.infoCheckMap.position_other =  isOther ? '职位为必填项' : ''
+              if (this.infoCheckMap.position_other === '' && !this.checkPosition) {
+                this.infoCheckMap.position_other = '请输入正确格式的职位'
+              }
+              break
+            }
+        }
+      },
+      cancelForm () {
+        setTimeout(() => {
+          this.$dialog.confirm({
+            title: ' ',
+            message: '您可以通过剑鱼标讯提供的全国招投标数据自助导出功能,指定关键词、发布时间、地区或行业等筛选条件,以Excel表格的形式打包下载,精准获取所需数据。',
+            className: 'ent-search-dialog no-infor',
+            overlayClass: 'z-2030',
+            showCancelButton: false,
+            getContainer: '.perfect-info-group',
+            confirmButtonText: '数据自助导出',
+          }).then(function () {
+            location.href = '/front/wx_dataExport/toSieve'
+          }).catch(function () {
+            history.back()
+          });
+        },300)
+        setTimeout(() => {
+          const htmlclose = `<span class="infor-icon-close"></span>`
+          $('.no-infor .van-dialog__header').html(htmlclose)
+        },400)
+      },
+      submitForm () {
+        this.ajaxParams.name = this.infoMap.name
+        this.ajaxParams.phone = this.infoMap.phone
+        this.ajaxParams.mail = this.infoMap.email
+        this.ajaxParams.company = this.infoMap.company
+        this.ajaxParams.companyType = this.infoMap.companyType
+        this.ajaxParams.position = this.infoMap.position
+        if(this.setcodeShow) {
+          this.ajaxParams.code = this.infoMap.vercode
+        }
+        if (this.infoMap.position === '其他') {
+          this.ajaxParams.position = '其他/' + this.infoMap.position_other
+        }
+        this.ajaxParams.branch = this.infoMap.branch.indexOf('总裁') > -1 || this.infoMap.branch.indexOf('总经理') > -1 ?  '' : this.infoMap.branch
+        var _this = this
+        var loading = _this.showLoading()
+        $.ajax({
+          type: 'POST',
+          url: '/salesLeads/collectInfo',
+          contentType: "application/json;charset=utf-8",
+          data: JSON.stringify(_this.ajaxParams),
+          success: function(r) {
+            loading.clear()
+            if (r.error_msg === '' || r.data) {
+              if (r.activeHref!==""){
+                location.href = r.activeHref
+              }else{
+                location.href = "/"
+              }
+              // _this.commitshow = true
+            } else {
+              _this.showToast(r.error_msg || '提交失败')
+            }
+          },
+          error: function(err) {
+            loading.clear()
+            _this.showToast('提交失败')
+          }
+        })
+      },
+      showLoading: function () {
+        var loading = this.$toast.loading({
+          duration: 0,
+          forbidClick: true,
+          message: '提交中...',
+        })
+        return loading
+      },
+      showToast: function (message) {
+        this.$toast({
+          duration: 1500,
+          forbidClick: true,
+          message: message,
+        })
+      }
+    }
+  }
+  var vPerfect = new Vue(vNode)
+</script>
+<script>
+    $(function () {
+        $("#perfect-info-page").on('click tap', '.infor-icon-close', function(e) {
+            e.stopPropagation()
+            history.back()
+        })
+    })
+</script>
+{{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 12 - 5
src/web/templates/frontRouter/wx/userMerge/free/confirm.html

@@ -247,11 +247,18 @@
                     this.confirmRequest(this.successCallback)
                 },
                 successCallback: function () {
-                    if(history && history.length<=2){
-                      location.replace("/jy_mobile/tabbar/me")
-                    }else{
-                      history.go(-2)
-                    }
+                  // 展会留资业务支持
+                  var goLink = utils.getParam('toDirect')
+                  if (goLink) {
+                    location.replace(goLink)
+                    return
+                  }
+                  // 原合并后业务逻辑
+                  if(history && history.length<=2){
+                    location.replace("/jy_mobile/tabbar/me")
+                  }else{
+                    history.go(-2)
+                  }
                 },
                 noticeHandle: function(){
                     var html = '<p>合并须知:</p><p>1.账号合并为手机号和微信号进行合并绑定,两个账号内功能、剑鱼币、优惠券等均可合并。</p><p>2.账号信息将根据您选择的账号进行保留,未被选择的账号信息将被舍弃,请慎重选择。</p><p>3.账号合并后,您使用微信或手机号进行登录,将看到并使用相同的功能设置,共同使用账号内的功能、剑鱼币、优惠券等。</p><p>4.如您选择确认合并,则默认为您已阅读并同意此须知。</p>'

+ 2 - 2
src/web/templates/frontRouter/wx/userMerge/free/index.html

@@ -185,9 +185,9 @@
                     }
                 },
                 nextStep: function () {
-                    var url = './confirm'
+                    var url = './confirm' + '?toDirect=' + utils.getParam('toDirect')
                     if (this.token) {
-                        url = './confirm?token=' + this.token
+                        url = './confirm?token=' + this.token + '&toDirect=' + utils.getParam('toDirect')
                     }
                     location.href = url
                 },

+ 5 - 5
src/web/templates/pc/index.html

@@ -93,11 +93,11 @@
                 {{else}}
                 <a href="/list/stype/NJXM.html">拟建项目</a>
                 {{end}}
-                {{if .T.hasLogin}}
-                <a href="/page_workDesktop/work-bench/page?link=/jylab/supsearch/index.html?subtype=采购意向">采购意向</a>
-                {{else}}
-                <a href="/list/stype/ZBCGYX.html">采购意向</a>
-                {{end}}
+<!--                {{if .T.hasLogin}}-->
+<!--                <a href="/page_workDesktop/work-bench/page?link=/jylab/supsearch/index.html?subtype=采购意向">采购意向</a>-->
+<!--                {{else}}-->
+<!--                <a href="/list/stype/ZBCGYX.html">采购意向</a>-->
+<!--                {{end}}-->
                 <a data-href="/succbi/nzj/app/nzj.app/nzj_search_1.spg" data-type="work-bench">拟在建项目</a>
                 <a href="/swordfish/page_big_pc/forecast_list">潜在项目预测</a>
               </div>

+ 8 - 6
src/web/templates/weixin/wxinfocontent_rec.html

@@ -1851,12 +1851,14 @@ function checkShowDialog () {
 	// 显示隐藏
 	if (!canRead) {
 		// $(".prebuilt").remove()
-		$('#tab2').hide() // 摘要tab1+正文tab2
-		$(".tab-ct").hide() // 正文信息
-		$(".abs").hide() // 阅读原文和意见反馈
-		$(".atta-list").hide() // 附件列表
-		// $(".mask-zz").removeClass("hidden");
-		$(".reward").hide();
+       if(subtype != '拟建') {
+         $('#tab2').hide() // 摘要tab1+正文tab2
+         $(".tab-ct").hide() // 正文信息
+         $(".abs").hide() // 阅读原文和意见反馈
+         $(".atta-list").hide() // 附件列表
+         $(".mask-zz").removeClass("hidden");
+         $(".reward").hide();
+       }
 	} else {
 		$(".prebuilt").css('height', 'unset')
 		$('.third-party-verify').show()