Ver Fonte

Merge branch 'master' into feature/v4.9.14

lianbingjie há 1 ano atrás
pai
commit
0f883d540f
44 ficheiros alterados com 1918 adições e 504 exclusões
  1. 1 1
      src/config.json
  2. 1 1
      src/go.mod
  3. 2 2
      src/go.sum
  4. 2 0
      src/jfw/front/login.go
  5. 1 1
      src/jfw/front/org_structure.go
  6. 2 0
      src/jfw/front/otherAct.go
  7. 1 0
      src/jfw/front/pchelper.go
  8. 20 16
      src/jfw/front/searchOptimize.go
  9. 3 0
      src/jfw/front/shorturl.go
  10. 2 2
      src/jfw/modules/app/src/app/front/errLogsReceive.go
  11. 3 0
      src/jfw/modules/app/src/app/front/shorturl.go
  12. 1 1
      src/jfw/modules/app/src/config.json
  13. 1 1
      src/jfw/modules/app/src/go.mod
  14. 2 2
      src/jfw/modules/app/src/go.sum
  15. 4 0
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js
  16. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html
  17. 3 0
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_index_new.html
  18. 1 1
      src/jfw/modules/bigmember/src/go.mod
  19. 93 88
      src/jfw/modules/bigmember/src/service/use/use.go
  20. 1 1
      src/jfw/modules/publicapply/src/go.mod
  21. 2 2
      src/jfw/modules/publicapply/src/go.sum
  22. 1 0
      src/jfw/modules/publicapply/src/oneclick/entity/entity.go
  23. 15 10
      src/jfw/modules/publicapply/src/subscribe/entity/entity.go
  24. 10 9
      src/jfw/modules/publicapply/src/subscribePush/entity/historyPush.go
  25. 91 68
      src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go
  26. 1 0
      src/jfw/modules/publicapply/src/subscribePush/entity/setting.go
  27. 11 15
      src/jfw/modules/publicapply/src/subscribePush/entity/vrew.go
  28. 22 20
      src/jfw/modules/publicapply/src/subscribePush/service/subscribe.go
  29. 2 10
      src/jfw/modules/subscribepay/src/go.mod
  30. 2 12
      src/jfw/modules/subscribepay/src/go.sum
  31. 4 1
      src/jfw/modules/subscribepay/src/service/userAccountInfo.go
  32. 3 0
      src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go
  33. 70 66
      src/jfw/modules/weixin/src/go.mod
  34. 841 40
      src/jfw/modules/weixin/src/go.sum
  35. 1 0
      src/jfw/modules/weixin/src/wx/wx.go
  36. 13 1
      src/web/staticres/common-module/collection/js/date-mobile.js
  37. 113 1
      src/web/staticres/common-module/vipsubscribe/css/vip-subscribe-set-template.css
  38. BIN
      src/web/staticres/common-module/vipsubscribe/image/icon/jy-icon-amount.png
  39. 518 115
      src/web/staticres/common-module/vipsubscribe/js/vip-subscribe-set-template.js
  40. 4 4
      src/web/staticres/css/dev2/biddingSearch.css
  41. 5 5
      src/web/staticres/css/dev2/newBidSearch.css
  42. 20 0
      src/web/staticres/js/common.js
  43. 21 7
      src/web/staticres/js/superSearch.js
  44. 3 0
      src/web/staticres/vipsubscribe/js/vip_index_new.js

+ 1 - 1
src/config.json

@@ -423,7 +423,7 @@
   "pcIndexHotKeyLimit":32,
   "executionNum": 10,
   "awaitNum": 10,
-  "detailMosaic":"免费注册即可查看",
+  "detailMosaic":"登录即可免费查看",
   "detailNeedMosaic":{
     "buyerperson":true,
     "buyertel":true,

+ 1 - 1
src/go.mod

@@ -6,7 +6,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.14.8
+	app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0

+ 2 - 2
src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.14.8 h1:jWQUPuTYrTFJnr7rDOUJInHTKVXbtNvDjNipfJ6O3kQ=
-app.yhyue.com/moapp/jypkg v1.14.8/go.mod h1:ZdrY5aTfeb2HrgLGKyNIETiHS28DNclpGGBSUpdOrx8=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b h1:qGe2niBqodJAP/yjwappd1XE98WAXpPxrGhmUbbKoi8=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 2 - 0
src/jfw/front/login.go

@@ -199,6 +199,8 @@ func (l *Login) Login() error {
 					}
 					_id := mongodb.Save("user", data)
 					if _id != "" {
+						//用户日志保存
+						jy.SaveUserLog(mongodb, _id, phone, "phone", "pc", source, "", "", "", qutil.GetIp(l.Request), l.UserAgent(), l.Site(), "")
 						jy.ClearPhoneIdentSession(l.Session())
 						ok, _, userInfo := afterLogin(phone, l.Session(), false)
 						userInfo["isNewUser"] = true

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

@@ -195,7 +195,7 @@ func (this *OrgStructure) AutoLogon() error {
 			}); resp != nil && resp.Data.Id > 0 {
 				data["base_user_id"] = resp.Data.Id
 				if id := mongodb.Save("user", data); id != "" {
-
+					jy.SaveUserLog(mongodb, id, openId, "wx", "pc", source, openId, "", "", util.GetIp(this.Request), this.UserAgent(), this.Site(), "")
 					nsqPath, _ := config.Sysconfig["nsq"].(string)
 					nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", id, jy.Jyweb_node2, map[string]interface{}{

+ 2 - 0
src/jfw/front/otherAct.go

@@ -148,6 +148,8 @@ func (f *Front) Lpsubmit() error {
 			}
 			_id := mongodb.Save("user", data)
 			if _id != "" {
+				//用户日志保存
+				jy.SaveUserLog(mongodb, _id, phone, "phone", "pc", "landPage", "", "", "", util.GetIp(f.Request), f.UserAgent(), f.Site(), "")
 				deleteIdentSession(f.Session())
 				return "y"
 			}

+ 1 - 0
src/jfw/front/pchelper.go

@@ -152,6 +152,7 @@ func (l *PcHelper) Login() error {
 						}
 						_id := mongodb.Save("user", data)
 						if _id != "" {
+							jy.SaveUserLog(mongodb, _id, phone, "phone", "pc", "pc", "", "", "", util.GetIp(l.Request), l.UserAgent(), l.Site(), "")
 							jy.ClearPhoneIdentSession(l.Session())
 							reToken = getUToken(mac, phone)
 							reOpenId = phone

+ 20 - 16
src/jfw/front/searchOptimize.go

@@ -3,7 +3,6 @@ package front
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/config"
 	"jy/src/jfw/jyutil"
 	"log"
@@ -12,6 +11,8 @@ import (
 	"strings"
 	"time"
 
+	"github.com/gogf/gf/v2/util/gconv"
+
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	elastic "app.yhyue.com/moapp/jybase/es"
@@ -333,16 +334,17 @@ func (so *SearchOptimize) GetBidSearchList(isCache bool) (count, total int64, li
 			Fields = BidSearchDomainField
 		}
 		biddingSearch := SearchByES{
-			Index:      esIndex,
-			IType:      esType,
-			Query:      so.GetSearchQuery(so.GetBidSearchQuery()),
-			FindFields: util.If(isCache, "title", "detail").(string),
+			Index: esIndex,
+			IType: esType,
+			Query: so.GetSearchQuery(so.GetBidSearchQuery()),
+			//FindFields: util.If(isCache, "title", "detail").(string),
+			FindFields: so.SelectType,
 			Order:      BidSearchSort,
 			Fields:     Fields, //BidField ===医疗领域化数据
 			Start:      util.If(isCache, 0, start).(int),
-			Limit:      util.If(isCache, util.If(so.IsPay, bidsearch.SearchMaxPageCount_PAYED, bidsearch.SearchMaxPageCount_PC).(int), so.PageSize).(int), //缓存数据: 付费或未登录用户一次性5000条,100页数据;免费用户一次性500条,10页数据;实时数据:每页50条数据请求
-			Count:      util.If(strings.Contains(so.SelectType, "detail"), 115, 0).(int),                                                                  //高亮正文数量
-			HighLight:  util.If(strings.Contains(so.SelectType, "detail"), true, false).(bool),                                                            //是否高亮正文
+			Limit:      util.If(isCache, util.If(so.IsPay, bidsearch.SearchMaxPageCount_PAYED, bidsearch.SearchMaxPageCount_PC).(int), so.PageSize).(int),                  //缓存数据: 付费或未登录用户一次性5000条,100页数据;免费用户一次性500条,10页数据;实时数据:每页50条数据请求
+			Count:      300,                                                                                                                                                //高亮正文数量
+			HighLight:  util.If(strings.Contains(so.SelectType, "detail"), true, false).(bool) || util.If(strings.Contains(so.SelectType, "filetext"), true, false).(bool), //是否高亮正文
 			State: func(userId string, isPay bool) (state int) {
 				state = 1
 				if userId != "" {
@@ -1000,15 +1002,17 @@ func (e *SearchByES) GetAllByNgramWithCount() (int64, *[]map[string]interface{})
 // SearchListFormat  格式化数据
 func SearchListFormat(industry, subinformation, propertyForm string, repl []map[string]interface{}, b bool, bidField string) (list []*map[string]interface{}) {
 	for _, v := range repl {
-		//正文
-		if b {
-			//正文匹配检索关键词
-			highlight, _ := v["highlight"].(map[string][]string)
-			detail := ""
-			for _, val := range highlight["detail"] {
-				detail += jy.ClearHtml.ReplaceAllString(val, "")
+		if highlight, ok := v["highlight"].(map[string][]string); ok {
+			if b { // 正文
+				detail := ""
+				for _, val := range highlight["detail"] {
+					detail += jy.ClearHtml.ReplaceAllString(val, "")
+				}
+				v["detail"] = detail
+			}
+			if highlight["filetext"] != nil && len(highlight["filetext"]) > 0 {
+				v["filetext_search"] = true
 			}
-			v["detail"] = detail
 		}
 		v["_id"] = encrypt.EncodeArticleId2ByCheck(util.ObjToString(v["_id"]))                                     //加密信息id
 		v["s_subscopeclass"] = IndustryFormat(industry, strings.Trim(util.ObjToString(v["s_subscopeclass"]), ",")) //行业

+ 3 - 0
src/jfw/front/shorturl.go

@@ -107,6 +107,9 @@ func (s *Short) ClearCache() {
 		cacheIndex = []byte{}
 	}
 	log.Println("after cacheIndex:", string(cacheIndex))
+	s.ServeJson(map[string]interface{}{
+		"state": len(cacheIndex),
+	})
 }
 
 func (s *Short) WhiteList() error {

+ 2 - 2
src/jfw/modules/app/src/app/front/errLogsReceive.go

@@ -1,10 +1,10 @@
 package front
 
 import (
-	"encoding/json"
+	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jypkg/public"
-	qutil "app.yhyue.com/moapp/jybase/common"
+	"encoding/json"
 )
 
 type ErrLogServer struct {

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

@@ -88,6 +88,9 @@ func (s *Short) ClearCache() {
 		cacheIndex = []byte{}
 	}
 	log.Println("after cacheIndex:", string(cacheIndex))
+	s.ServeJson(map[string]interface{}{
+		"state": len(cacheIndex),
+	})
 }
 
 func (s *Short) WhiteList() error {

+ 1 - 1
src/jfw/modules/app/src/config.json

@@ -216,7 +216,7 @@
     "expurasingtime":true,
     "winnerMap":true
   },
-  "detailMosaic":"免费注册即可查看",
+  "detailMosaic":"登录即可免费查看",
   "detailNeedMosaic":{
     "buyerperson":true,
     "buyertel":true,

+ 1 - 1
src/jfw/modules/app/src/go.mod

@@ -5,7 +5,7 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.14.6
+	app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.6.2

+ 2 - 2
src/jfw/modules/app/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
-app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b h1:qGe2niBqodJAP/yjwappd1XE98WAXpPxrGhmUbbKoi8=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 4 - 0
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js

@@ -404,8 +404,11 @@ $(function () {
               res.data.area = bigres.o_area
               res.data.industry = bigres.a_buyerclass
               res.data.items = bigres.a_items
+              res.data.amount = bigres.amount
               res.data.matchway = bigres.i_matchway
+              res.data.switch = bigres.i_switch
               res.data.infotype = bigres.a_infotype
+              res.data.matchmode = bigres.i_matchmode
               res.data.projectmatch = bigres.i_projectmatch
               res.data.ratemode = bigres.i_ratemode
               res.data.buyAreaCount = bigres.i_areacount  // 购买的省份数量
@@ -414,6 +417,7 @@ $(function () {
               res.data.area = {}
               res.data.industry = null
               res.data.items = []
+              res.data.amount = ''
               res.data.matchway = null
               res.data.infotype = null
               res.data.projectmatch = null

+ 1 - 1
src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html

@@ -350,7 +350,7 @@
                 <div class="timebox collection" v-show="tabActiveName == 'fwl'">
                     <van-dropdown-menu ref="dropdownRef" :close-on-click-overlay="false" :close-on-click-outside="false">
                         <van-dropdown-item title="合同到期时间" @opened="openDateDropdown"  ref="dateDropdownRef" class="date-selector">
-                            <date-component ref="dateSelector" popup-container="body" :diy="false" :times="timeOptions" @confirm="dateConfirm" @cancel="dateCancel"></date-component>
+                            <date-component ref="dateSelector" popup-container="body" :picker-max-date="null" :diy="false" :times="timeOptions" @confirm="dateConfirm" @cancel="dateCancel"></date-component>
                         </van-dropdown-item>
                         <van-dropdown-item title="项目地区" @opened="openAreaDropdown" ref="areaDropdownRef" class="area-selector">
                             <area-three-component  ref="areaSelector" :filter-area-obj="subscribeArea" :can-empty-select="true" @confirm="areaConfirm"></area-three-component>

+ 3 - 0
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_index_new.html

@@ -123,6 +123,9 @@
     .j-button-confirm:nth-child(1){
       margin-right: .16rem;
     }
+    .common-selector-layout .j-button-confirm {
+      margin-right: 0;
+    }
     .switchicon {
       display: flex;
       width: .48rem;

+ 1 - 1
src/jfw/modules/bigmember/src/go.mod

@@ -6,6 +6,7 @@ require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.0.16
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231219095433-7e7d4aa59822
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2
@@ -18,7 +19,6 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231219095433-7e7d4aa59822 // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect

+ 93 - 88
src/jfw/modules/bigmember/src/service/use/use.go

@@ -206,95 +206,100 @@ func (u *Use) Add() {
 // 用户大会员信息
 func (u *Use) Info() {
 	r := func() Result {
-		userid := qu.ObjToString(u.GetSession("userId"))
-		if userid == "" {
-			return Result{Data: M{"status": -1}, Error_msg: "未登录"}
-		}
-		mainid, _, _ := util.MainUserId(u.Session())
-		if mainid == "" {
-			mainid = userid
-		}
-		d := map[string]interface{}{
-			"member_status": 0,
-		}
-		data := config.Compatible.Select(mainid, `{"i_member_starttime":1,"i_member_endtime":1,"i_member_status":1,"o_member_jy":1,"l_registedate":1}`)
-		i_member_status := qu.IntAll((*data)["i_member_status"])
-		o_member_jy := qu.ObjToMap((*data)["o_member_jy"])
-		if i_member_status != 0 {
-			//区县处理
-			regionMap := map[string]map[string][]string{}
-			if i_member_status > 0 && o_member_jy != nil && len(*o_member_jy) > 0 {
-				if (*o_member_jy)["o_area"] != nil {
-					district := map[string]interface{}{}
-					if (*o_member_jy)["o_district"] != nil {
-						district = *qu.ObjToMap((*o_member_jy)["o_district"])
-					}
-					o_area := (*o_member_jy)["o_area"]
-					for k, v := range *qu.ObjToMap(o_area) {
-						areaMap := map[string][]string{}
-						if k == "北京" || k == "天津" || k == "上海" || k == "重庆" {
-							city := fmt.Sprintf("%s市", k)
-							if district[city] != nil {
-								v = city
-							}
-						}
-						for _, city := range gconv.Strings(v) {
-							if city == "" {
-								continue
-							}
-							if district[city] != nil {
-								areaMap[city] = gconv.Strings(district[city])
-							} else {
-								areaMap[city] = []string{}
-							}
-						}
-						regionMap[k] = areaMap
-					}
-				}
-			}
-			(*o_member_jy)["regionMap"] = regionMap
-			//是否展示附加词合并
-			appendK_bl := false
-			if btip, _ := (*o_member_jy)["b_keytip"].(bool); !btip && i_member_status > 0 && o_member_jy != nil && len(*o_member_jy) > 0 {
-				//判断大会员是否是企业版的
-				if (*o_member_jy)["a_items"] != nil {
-					for _, v := range (*o_member_jy)["a_items"].([]interface{}) {
-						tmp := qu.ObjToMap(v.(map[string]interface{}))
-						a_key, _ := (*tmp)["a_key"].([]interface{})
-						for _, n := range a_key {
-							ntmp := qu.ObjToMap(n.(interface{}))
-							if (*ntmp)["appendkey"] != nil && (*ntmp)["updatetime"] == nil {
-								appendkey := qu.ObjArrToStringArr((*ntmp)["appendkey"].([]interface{}))
-								if len(appendkey) > 0 {
-									appendK_bl = true
-								}
-							}
-						}
-					}
-				}
-				//订阅设置优化版本上线之前的用户弹窗提醒
-				optime := time.Unix(config.Config.OldSubscribeMoveTip, 0)
-				regtime, _ := (*data)["l_registedate"].(int64)
-				if time.Unix(regtime, 0).Before(optime) && appendK_bl {
-					(*o_member_jy)["b_keytip"] = false
-				} else {
-					(*o_member_jy)["b_keytip"] = true
-				}
-				if (*o_member_jy)["o_area"] == nil {
-					(*o_member_jy)["o_area"] = map[string]interface{}{}
-				}
+        userid := qu.ObjToString(u.GetSession("userId"))
+        if userid == "" {
+            return Result{Data: M{"status": -1}, Error_msg: "未登录"}
+        }
+        mainid, _, _ := util.MainUserId(u.Session())
+        if mainid == "" {
+            mainid = userid
+        }
+        d := map[string]interface{}{
+            "member_status": 0,
+        }
+        data := config.Compatible.Select(mainid, `{"i_member_starttime":1,"i_member_endtime":1,"i_member_status":1,"o_member_jy":1,"l_registedate":1}`)
+        i_member_status := qu.IntAll((*data)["i_member_status"])
+        o_member_jy := qu.ObjToMap((*data)["o_member_jy"])
+        if o_member_jy == nil {
+            o_member_jy = &map[string]interface{}{}
+        }
+        (*o_member_jy)["i_switch"] = qu.If((*o_member_jy)["i_switch"] == nil, 1, (*o_member_jy)["i_switch"])
+        (*o_member_jy)["i_matchmode"] = qu.If((*o_member_jy)["i_matchmode"] == nil, []string{"title"}, (*o_member_jy)["i_matchmode"])
+        if i_member_status != 0 {
+            //区县处理
+            regionMap := map[string]map[string][]string{}
+            if i_member_status > 0 && o_member_jy != nil && len(*o_member_jy) > 0 {
+                if (*o_member_jy)["o_area"] != nil {
+                    district := map[string]interface{}{}
+                    if (*o_member_jy)["o_district"] != nil {
+                        district = *qu.ObjToMap((*o_member_jy)["o_district"])
+                    }
+                    o_area := (*o_member_jy)["o_area"]
+                    for k, v := range *qu.ObjToMap(o_area) {
+                        areaMap := map[string][]string{}
+                        if k == "北京" || k == "天津" || k == "上海" || k == "重庆" {
+                            city := fmt.Sprintf("%s市", k)
+                            if district[city] != nil {
+                                v = city
+                            }
+                        }
+                        for _, city := range gconv.Strings(v) {
+                            if city == "" {
+                                continue
+                            }
+                            if district[city] != nil {
+                                areaMap[city] = gconv.Strings(district[city])
+                            } else {
+                                areaMap[city] = []string{}
+                            }
+                        }
+                        regionMap[k] = areaMap
+                    }
+                }
+            }
+            (*o_member_jy)["regionMap"] = regionMap
+            //是否展示附加词合并
+            appendK_bl := false
+            if btip, _ := (*o_member_jy)["b_keytip"].(bool); !btip && i_member_status > 0 && o_member_jy != nil && len(*o_member_jy) > 0 {
+                //判断大会员是否是企业版的
+                if (*o_member_jy)["a_items"] != nil {
+                    for _, v := range (*o_member_jy)["a_items"].([]interface{}) {
+                        tmp := qu.ObjToMap(v.(map[string]interface{}))
+                        a_key, _ := (*tmp)["a_key"].([]interface{})
+                        for _, n := range a_key {
+                            ntmp := qu.ObjToMap(n.(interface{}))
+                            if (*ntmp)["appendkey"] != nil && (*ntmp)["updatetime"] == nil {
+                                appendkey := qu.ObjArrToStringArr((*ntmp)["appendkey"].([]interface{}))
+                                if len(appendkey) > 0 {
+                                    appendK_bl = true
+                                }
+                            }
+                        }
+                    }
+                }
+                //订阅设置优化版本上线之前的用户弹窗提醒
+                optime := time.Unix(config.Config.OldSubscribeMoveTip, 0)
+                regtime, _ := (*data)["l_registedate"].(int64)
+                if time.Unix(regtime, 0).Before(optime) && appendK_bl {
+                    (*o_member_jy)["b_keytip"] = false
+                } else {
+                    (*o_member_jy)["b_keytip"] = true
+                }
+                if (*o_member_jy)["o_area"] == nil {
+                    (*o_member_jy)["o_area"] = map[string]interface{}{}
+                }
 
-				//大会员默认全国
-				//大会员单省版本
-				(*o_member_jy)["i_areacount"] = qu.IntAllDef((*o_member_jy)["i_areacount"], -1)
-			}
-			d["member_jy"] = o_member_jy
-			d["member_status"] = i_member_status
-			d["member_starttime"] = qu.IntAll((*data)["i_member_starttime"])
-			d["member_endtime"] = qu.IntAll((*data)["i_member_endtime"])
-			//d["member_jy"] = qu.ObjToMap((*data)["o_member_jy"])
-			d["key_max_length"] = config.Config.KeyMaxLength
-		}
+                //大会员默认全国
+                //大会员单省版本
+                (*o_member_jy)["i_areacount"] = qu.IntAllDef((*o_member_jy)["i_areacount"], -1)
+            }
+            d["member_jy"] = o_member_jy
+            d["member_status"] = i_member_status
+            d["member_starttime"] = qu.IntAll((*data)["i_member_starttime"])
+            d["member_endtime"] = qu.IntAll((*data)["i_member_endtime"])
+            //d["member_jy"] = qu.ObjToMap((*data)["o_member_jy"])
+            d["key_max_length"] = config.Config.KeyMaxLength
+        }
 		return Result{Data: d}
 	}()
 	u.ServeJson(r)

+ 1 - 1
src/jfw/modules/publicapply/src/go.mod

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.14.6
+	app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b
 	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231222060155-36e225b61353
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67

+ 2 - 2
src/jfw/modules/publicapply/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
-app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b h1:qGe2niBqodJAP/yjwappd1XE98WAXpPxrGhmUbbKoi8=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 1 - 0
src/jfw/modules/publicapply/src/oneclick/entity/entity.go

@@ -379,6 +379,7 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 					}()
 				}
 				userInfo["isNewUser"] = true
+				jy.SaveUserLog(db.Mgo, _id, phone, "phone", "pc", platform, "", "", "", o.R.Proto, o.R.UserAgent(), "", "")
 				//用户中台同步
 				func(userid string) {
 					if ok := jy.AddUser(db.Mgo, userid, pb.UserAddReq{

+ 15 - 10
src/jfw/modules/publicapply/src/subscribe/entity/entity.go

@@ -4,6 +4,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"log"
 	"time"
@@ -31,18 +32,16 @@ const (
 
 var stringArr = []string{}
 
-//
 type ParamInfo struct {
 	UserId  string
 	Session *httpsession.Session
 }
 
-//
 func NewParamInfo(userId string, session *httpsession.Session) *ParamInfo {
 	return &ParamInfo{userId, session}
 }
 
-//dev4.6.3.21 暂不调用
+// dev4.6.3.21 暂不调用
 func (this *ParamInfo) SetAreaByOneProvince() (b bool) {
 	b = true
 	mData := config.Compatible.Select(this.UserId, `{"o_jy":1}`)
@@ -86,7 +85,6 @@ func (this *ParamInfo) SetAreaByOneProvince() (b bool) {
 	return b
 }
 
-//
 type UserSubMsg struct {
 	Area        map[string]interface{} `json:"area"`        //地区
 	Infotype    []interface{}          `json:"infotype"`    //信息类型
@@ -97,9 +95,12 @@ type UserSubMsg struct {
 	Provincenum int                    `json:"provincenum"` //省份流量包购买省份数量
 	Ppstarttime int64                  `json:"ppstart"`     //省份订阅包开始时间
 	Ppendtime   int64                  `json:"ppend"`       //省份订阅包结束时间
+	amount      string                 `json:"amount"`
+	Switch      string                 `json:"switch"`
+	Matchmode   []string               `json:"matchmode"`
 }
 
-//推送预览总数
+// 推送预览总数
 func DataCount(uid, item string, index int) int64 {
 	sql := GetSqlObjFromFreeId(uid, item, index)
 	if item != "" && index >= 0 && (sql.Keyword == nil || len(sql.Keyword) == 0) {
@@ -110,7 +111,7 @@ func DataCount(uid, item string, index int) int64 {
 	return elastic.Count(INDEX, TYPE, qstr)
 }
 
-//match 默认精准 0
+// match 默认精准 0
 func KeysetDataCount(userId, key, notkey string, matchway int) int64 {
 	key = strings.TrimSpace(key)
 	notkey = strings.TrimSpace(notkey)
@@ -156,7 +157,6 @@ func SubViewDatas(userId, allquery string, pageNum int) (keys []interface{}, lis
 	return
 }
 
-//
 func (pi *ParamInfo) GetSubMsg() UserSubMsg {
 	var res = UserSubMsg{
 		Basenum: jy.BaseAreaNum,
@@ -194,6 +194,11 @@ func (pi *ParamInfo) GetSubMsg() UserSubMsg {
 		} else if res.Area != nil && len(res.Area) == 0 {
 			res.Area = nil
 		}
+		if o_jy == nil {
+			o_jy = map[string]interface{}{}
+		}
+		res.Switch = gconv.String(qutil.If(o_jy["i_switch"] == nil, 1, o_jy["i_switch"]))
+		res.Matchmode = []string{"title"}
 		//关键词
 		a_key, _ := o_jy["a_key"].([]interface{})
 		if len(a_key) > 0 {
@@ -221,7 +226,8 @@ func (pi *ParamInfo) GetSubMsg() UserSubMsg {
 	return res
 }
 
-/*是否需要到期弹窗提醒
+/*
+是否需要到期弹窗提醒
 tip : true需要 false不需要
 area : 免费订阅的地区
 */
@@ -251,7 +257,7 @@ func (pi *ParamInfo) AreaPackTip() map[string]interface{} {
 	return m
 }
 
-//修改到期提醒状态
+// 修改到期提醒状态
 func (pi *ParamInfo) UpdateAreaPackTip() bool {
 	ok := false
 	setMap := map[string]interface{}{
@@ -261,7 +267,6 @@ func (pi *ParamInfo) UpdateAreaPackTip() bool {
 	return ok
 }
 
-//
 func getstype(stype string) string {
 	switch stype {
 	case "招标":

+ 10 - 9
src/jfw/modules/publicapply/src/subscribePush/entity/historyPush.go

@@ -21,7 +21,7 @@ type historyPush struct {
 
 var HistoryPush = &historyPush{}
 
-//UpdateUserPushUnread 更新app未读标识为已读
+// UpdateUserPushUnread 更新app未读标识为已读
 func (hp *historyPush) UpdateUserPushUnread(userid string, vt string) {
 	if vt == jy.MemberFlag {
 		config.Compatible.Update(userid, map[string]interface{}{"$set": map[string]interface{}{"i_member_apppushunread": 0}})
@@ -32,7 +32,7 @@ func (hp *historyPush) UpdateUserPushUnread(userid string, vt string) {
 	}
 }
 
-//IsInTsGuide 是否进入向导
+// IsInTsGuide 是否进入向导
 func (hp *historyPush) IsInTsGuide(session *httpsession.Session) bool {
 	data := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
 	if data.Data.Member.Status > 0 || data.Data.Vip.Status > 0 {
@@ -104,7 +104,7 @@ func DefaultPushList(userId, moduleFlag string, entId int) (keyword []byte, list
 	return
 }
 
-//获取用户信息
+// 获取用户信息
 func (d *defaultPush) getUserInfo() (vc *ViewCondition, deptId int) {
 	t1 := time.Now()
 	var isPayBool = false
@@ -188,7 +188,7 @@ func (d *defaultPush) getUserInfo() (vc *ViewCondition, deptId int) {
 		Subtype:    util.ObjArrToStringArr(tmpInfo.SubType),
 		Area:       getStringArrFromDbResult(tmpInfo.Area, 1),
 		City:       getStringArrFromDbResult(tmpInfo.Area, 2),
-		SelectType: "1",
+		SelectType: []string{"title"},
 	}
 	//付费用户
 	if isPayBool {
@@ -201,7 +201,7 @@ func (d *defaultPush) getUserInfo() (vc *ViewCondition, deptId int) {
 	return
 }
 
-//获取查询语句
+// 获取查询语句
 func (d *defaultPush) getDefaultDatasSQL(scd *ViewCondition) (str string) {
 	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
@@ -265,12 +265,13 @@ func (d *defaultPush) getDefaultDatasSQL(scd *ViewCondition) (str string) {
 	boolsNum := 0 //should
 	if len(scd.Keyword) > 0 {
 		boolsNum = 1
-		if scd.SelectType == "" || scd.SelectType == "2" {
-			scd.SelectType = "detail\", \"title"
+		stype := ""
+		if len(scd.SelectType) == 1 {
+			stype = scd.SelectType[0]
 		} else {
-			scd.SelectType = "title"
+			stype = strings.Join(scd.SelectType, "\",\"")
 		}
-		multi_match = fmt.Sprintf(multi_match, "%s", "\""+scd.SelectType+"\"")
+		multi_match = fmt.Sprintf(multi_match, "%s", "\""+stype+"\"")
 
 		for _, v := range scd.Keyword {
 			shoulds := []string{}

+ 91 - 68
src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go

@@ -2,7 +2,8 @@ package entity
 
 import (
 	"fmt"
-	"jy/src/jfw/modules/publicapply/src/config"
+    "github.com/gogf/gf/v2/util/gconv"
+    "jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
 	"jy/src/jfw/modules/publicapply/src/util"
 	"strconv"
@@ -19,21 +20,22 @@ import (
 )
 
 type KeyWordsSet struct {
-	ClassifyIndex string   //分类索引
-	ClassifyName  string   //分类名称
-	KeyWordIndex  string   //关键词索引
-	KeyWordName   string   //关键词名称
-	ActionType    string   //操作类型 SK:保存/修改关键词; DK:删除关键词; SC:保存/修改分类  DC:删除分类
-	AppendKeyWord []string //附加词
-	NotKeyWord    []string //排除词
-	MatchWay      int      // 单个关键词匹配方事 0:精准匹配 1:模糊匹配
-	KeyWordsCount string   //是否是首次添加关键词
-	Type          string   // 大会员/超级订阅
-	UserId        string   //用户id
-	DeleteKey     string   //删除的关键词 json字符串{"0":"1,2","2":"0,3"} key:分类名称索引  value:分类名称下的关键词索引
-	EntId         int
-	EntUserId     int
-	Session       *httpsession.Session
+    ClassifyIndex string   //分类索引
+    ClassifyName  string   //分类名称
+    KeyWordIndex  string   //关键词索引
+    KeyWordName   string   //关键词名称
+    ActionType    string   //操作类型 SK:保存/修改关键词; DK:删除关键词; SC:保存/修改分类  DC:删除分类
+    AppendKeyWord []string //附加词
+    NotKeyWord    []string //排除词
+    MatchWay      int      // 单个关键词匹配方事 0:精准匹配 1:模糊匹配
+    Matchmode     string   // 单个关键词匹配方事 0:精准匹配 1:模糊匹配
+    KeyWordsCount string   //是否是首次添加关键词
+    Type          string   // 大会员/超级订阅
+    UserId        string   //用户id
+    DeleteKey     string   //删除的关键词 json字符串{"0":"1,2","2":"0,3"} key:分类名称索引  value:分类名称下的关键词索引
+    EntId         int
+    EntUserId     int
+    Session       *httpsession.Session
 }
 
 func (this *KeyWordsSet) UpdateKeyWords() map[string]interface{} {
@@ -51,7 +53,7 @@ func (this *KeyWordsSet) UpdateKeyWords() map[string]interface{} {
 	if this.Type != "f" && (power.Status > 0 || power.VipStatus > 0) {
 		switch this.ActionType {
 		case "SK": //保存/修改关键词
-			return AddKeyWords(types, this.UserId, this.ClassifyIndex, this.ClassifyName, this.KeyWordIndex, this.KeyWordName, this.KeyWordsCount, this.NotKeyWord, this.AppendKeyWord, this.MatchWay, this.Session)
+            return AddKeyWords(types, this.UserId, this.ClassifyIndex, this.ClassifyName, this.KeyWordIndex, this.KeyWordName, this.KeyWordsCount, this.NotKeyWord, this.AppendKeyWord, this.MatchWay, this.Session, this.Matchmode)
 		case "DK": //删除关键词
 			return DeleteKeyWords(types, this.DeleteKey, this.UserId, this.Session)
 		case "SC": //保存/修改分类
@@ -286,17 +288,17 @@ func AddKeyWordsFree(types, userId, classIndex, className, keywordsIndex, keywor
 }
 
 // 保存/修改关键词
-func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordName, keywordCount string, notKeyword, appendKeyword []string, matchWay int, session *httpsession.Session) map[string]interface{} {
-	flag := true
-	positionType := qutil.Int64All(session.Get("positionType"))
-	data := config.Compatible.Select(userId, `{"`+types+`.a_items":1}`)
-	saveData := map[string]interface{}{}
-	if data != nil && len(*data) > 0 {
-		ojy, _ := (*data)[types].(map[string]interface{})
-		a_items, errs := ojy["a_items"].([]interface{})
-		if !errs {
-			config.Compatible.Update(userId, map[string]interface{}{
-				"$set": map[string]interface{}{
+func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordName, keywordCount string, notKeyword, appendKeyword []string, matchWay int, session *httpsession.Session, matchmode string) map[string]interface{} {
+    flag := true
+    positionType := qutil.Int64All(session.Get("positionType"))
+    data := config.Compatible.Select(userId, `{"`+types+`.a_items":1}`)
+    saveData := map[string]interface{}{}
+    if data != nil && len(*data) > 0 {
+        ojy, _ := (*data)[types].(map[string]interface{})
+        a_items, errs := ojy["a_items"].([]interface{})
+        if !errs {
+            config.Compatible.Update(userId, map[string]interface{}{
+                "$set": map[string]interface{}{
 					types + ".a_items": []map[string]interface{}{},
 				},
 			})
@@ -530,16 +532,17 @@ func KeyWordsRepeat(obj map[string]interface{}, aitems []interface{}) bool {
 }
 
 type UpdateOther struct {
-	PageType        string //projectMatch项目匹配  saveSeniorset关键词匹配方式  infoType信息类型
-	Pmindex         int    //1项目匹配开启 0项目匹配关闭
-	InfoTypeArr     string //信息类型
-	Matchtype       int    //1标题匹配 2项目匹配
-	UserId          string
-	Type            string
-	OtherBuyerclass int //其它采购单位
-	EntId           int
-	EntUserId       int
-	Session         *httpsession.Session
+    PageType        string //projectMatch项目匹配  saveSeniorset关键词匹配方式  infoType信息类型
+    Pmindex         int    //1项目匹配开启 0项目匹配关闭
+    InfoTypeArr     string //信息类型
+    Matchtype       string //1标题匹配 2项目匹配
+    Matchmode       string
+    UserId          string
+    Type            string
+    OtherBuyerclass int //其它采购单位
+    EntId           int
+    EntUserId       int
+    Session         *httpsession.Session
 }
 
 func (this *UpdateOther) UpdateOther() map[string]interface{} {
@@ -557,17 +560,23 @@ func (this *UpdateOther) UpdateOther() map[string]interface{} {
 	}
 	setMap := func() map[string]interface{} {
 		switch this.PageType {
-		case "projectMatch": //项目匹配
-			return UpdateProjectMatch(types, this.Pmindex)
-		case "saveSeniorset": //关键词匹配方式
-			return UpdateSaveSeniorset(types, this.Matchtype)
-		case "infoType": //信息类型
-			return UpdateInfoType(types, this.InfoTypeArr)
-		case "other_buyerclass":
-			return UpdateOtherBuyerClass(types, this.OtherBuyerclass)
-		case "keytip": //关键词升级弹窗提示(一个用户只提示一次)
-			return UpdateKeyTip(types)
-		}
+        case "projectMatch": //项目匹配
+            return UpdateProjectMatch(types, this.Pmindex)
+        case "saveSeniorset": //关键词匹配方式
+            return UpdateSaveSeniorset(types, this.Matchtype)
+        case "infoType": //信息类型
+            return UpdateInfoType(types, this.InfoTypeArr)
+        case "other_buyerclass":
+            return UpdateOtherBuyerClass(types, this.OtherBuyerclass)
+        case "keytip": //关键词升级弹窗提示(一个用户只提示一次)
+            return UpdateKeyTip(types)
+        case "amount": //金额匹配
+            return UpdateAmount(types, this.Matchtype)
+        case "i_switch":
+            return UpdateSwitch(types, this.Matchtype)
+        case "matchmode": //项目匹配
+            return UpdateMatchmode(types, this.Matchtype)
+        }
 		return nil
 	}()
 	flag := true
@@ -599,10 +608,10 @@ func UpdateProjectMatch(types string, pmindex int) map[string]interface{} {
 	}
 }
 
-func UpdateSaveSeniorset(types string, matchtype int) map[string]interface{} {
-	return map[string]interface{}{
-		types + ".i_matchway": matchtype,
-	}
+func UpdateSaveSeniorset(types string, matchtype string) map[string]interface{} {
+    return map[string]interface{}{
+        types + ".i_matchmode": strings.Split(matchtype, ","),
+    }
 }
 
 func UpdateInfoType(types string, infotype string) map[string]interface{} {
@@ -619,27 +628,41 @@ func UpdateInfoType(types string, infotype string) map[string]interface{} {
 
 func UpdateOtherBuyerClass(types string, other int) map[string]interface{} {
 	return map[string]interface{}{
-		types + ".i_matchbuyerclass_other": other,
-	}
+        types + ".i_matchbuyerclass_other": other,
+    }
 }
 
 // UpdateKeyTip 关键词升级提示
 func UpdateKeyTip(types string) map[string]interface{} {
-	return map[string]interface{}{
-		types + ".b_keytip": true,
-	}
+    return map[string]interface{}{
+        types + ".b_keytip": true,
+    }
+}
+func UpdateAmount(types, matchtype string) map[string]interface{} {
+    return map[string]interface{}{
+        types + ".amount": matchtype,
+    }
+}
+func UpdateSwitch(types, matchtype string) map[string]interface{} {
+    return map[string]interface{}{
+        types + ".i_switch": gconv.Int64(matchtype),
+    }
+}
+func UpdateMatchmode(types, matchtype string) map[string]interface{} {
+    return map[string]interface{}{
+        types + ".i_matchmode": strings.Split(matchtype, ","),
+    }
 }
-
 func directSubKWS(updateItems string, keys string, userId string, session *httpsession.Session) map[string]interface{} {
-	flag := "n"
-	data := config.Compatible.Select(userId, fmt.Sprintf(`{"%s":1}`, updateItems))
-	var repleat = false
-	var classify_index = -1
-	var kwsCount = 0
-	if len([]rune(keys)) > 20 {
-		keys = qutil.SubString(keys, 0, 20)
-	}
-	if data != nil && len(*data) > 0 && keys != "" {
+    flag := "n"
+    data := config.Compatible.Select(userId, fmt.Sprintf(`{"%s":1}`, updateItems))
+    var repleat = false
+    var classify_index = -1
+    var kwsCount = 0
+    if len([]rune(keys)) > 20 {
+        keys = qutil.SubString(keys, 0, 20)
+    }
+    if data != nil && len(*data) > 0 && keys != "" {
 		updateObj, _ := (*data)[updateItems].(map[string]interface{})
 		if updateObj["a_items"] != nil {
 			a_items := updateObj["a_items"].([]interface{})

+ 1 - 0
src/jfw/modules/publicapply/src/subscribePush/entity/setting.go

@@ -27,6 +27,7 @@ type SubscribeSet struct {
 	EntUserId int
 	Session   *httpsession.Session
 	District  map[string]interface{} //地区
+	Amount string
 }
 
 func (this *SubscribeSet) SetAreaAndIndustry() *FuncResult {

+ 11 - 15
src/jfw/modules/publicapply/src/subscribePush/entity/vrew.go

@@ -3,9 +3,9 @@ package entity
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"log"
-	"strconv"
 	"strings"
 	"time"
 
@@ -29,7 +29,7 @@ type ViewCondition struct {
 	City       []string      //地区-城市
 	Buyerclass []string      //采购行业
 	Keyword    []ViewKeyWord //关键词
-	SelectType string        //筛选(正文 or 标题)
+	SelectType []string      //筛选(正文 or 标题)
 	Subtype    []string      //信息类型
 }
 
@@ -93,7 +93,7 @@ func SubViewDatasCount(userId, vType, item string, index int, session *httpsessi
 	return elastic.Count(INDEX, TYPE, qstr)
 }
 
-//获取vip订阅预览的查询语句
+// 获取vip订阅预览的查询语句
 func GetVIPViewSql(userId string, scd *ViewCondition) string {
 	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
@@ -158,12 +158,11 @@ func GetVIPViewSql(userId string, scd *ViewCondition) string {
 	boolsNum := 0 //should
 	if len(scd.Keyword) > 0 {
 		boolsNum = 1
-		if scd.SelectType == "" || scd.SelectType == "2" {
-			scd.SelectType = "detail\", \"title"
-		} else {
-			scd.SelectType = "title"
+		stype := strings.Join(scd.SelectType, "\",\"")
+		if strings.Contains(stype, "projectname/purchasing") {
+			stype = strings.Replace(stype, "projectname/purchasing", "projectname,\",\"purchasing", -1)
 		}
-		multi_match = fmt.Sprintf(multi_match, "%s", "\""+scd.SelectType+"\"")
+		multi_match = fmt.Sprintf(multi_match, "%s", "\""+stype+"\"")
 		repeat := map[string]bool{}
 		for _, v := range scd.Keyword {
 			shoulds := []string{}
@@ -219,7 +218,6 @@ func GetVIPViewSql(userId string, scd *ViewCondition) string {
 	return qstr
 }
 
-//
 func GetSqlObjFromId(_id, vType, item string, index int, session *httpsession.Session) *ViewCondition {
 	query := config.Compatible.Select(_id, `{"o_vipjy":1,"o_member_jy":1}`)
 	if query == nil || len(*query) == 0 {
@@ -244,11 +242,10 @@ func GetSqlObjFromId(_id, vType, item string, index int, session *httpsession.Se
 		Subtype:    qutil.ObjArrToStringArr(a_infotype),
 		Area:       getStringArrFromDbResult(o_area, 1),
 		City:       getStringArrFromDbResult(o_area, 2),
-		SelectType: strconv.Itoa(qutil.IntAll(o_vipjy["i_matchway"])),
+		SelectType: gconv.SliceStr(o_vipjy["i_matchmode"]),
 	}
 }
 
-//
 func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
 	if area == nil {
 		return
@@ -270,7 +267,7 @@ func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string)
 	return
 }
 
-//关键词 附加词 排除词
+// 关键词 附加词 排除词
 func getKeyWordArrFromDbResult(a_items []interface{}, item string, index int) (arr []ViewKeyWord) {
 	if a_items == nil {
 		return
@@ -312,7 +309,7 @@ func getKeyWordArrFromDbResult(a_items []interface{}, item string, index int) (a
 	return
 }
 
-//免费用户对象
+// 免费用户对象
 func GetSqlObjFromFreeId(_id, item string, index int) *ViewCondition {
 	var (
 		query *map[string]interface{}
@@ -356,11 +353,10 @@ func GetSqlObjFromFreeId(_id, item string, index int) *ViewCondition {
 		Buyerclass: qutil.ObjArrToStringArr(a_buyerclass),                 //采购单位类型
 		Subtype:    a_infotype,                                            //信息类型
 		Area:       getStringArrFromDbResult(*o_area, 1),                  //省份
-		SelectType: strconv.Itoa(qutil.IntAll(o_jy["i_matchway"])),        //匹配方式
+		SelectType: gconv.SliceStr(o_jy["i_matchmode"]),                   //匹配方式
 	}
 }
 
-//
 func getstype(stype string) string {
 	switch stype {
 	case "招标":

+ 22 - 20
src/jfw/modules/publicapply/src/subscribePush/service/subscribe.go

@@ -58,28 +58,30 @@ func (s *Subscribe) SetUserInfo() {
 	if pageType := s.GetString("pageType"); pageType == "keyWords" {
 		//
 		match_way, _ := s.GetInteger("match_way")
-		sub := &entity.KeyWordsSet{
-			ClassifyIndex: s.GetString("classify_index"),
-			ClassifyName:  strings.Trim(s.GetString("classify_name"), ""),
-			KeyWordIndex:  s.GetString("kws_index"),
-			KeyWordName:   strings.Trim(s.GetString("kws_name"), ""),
-			ActionType:    s.GetString("actionType"),
-			AppendKeyWord: s.GetSlice("addition_kws"),
-			NotKeyWord:    s.GetSlice("not_kws"),
-			MatchWay:      match_way,
-			KeyWordsCount: s.GetString("kwscount"),
-			Type:          vSwitch,
-			UserId:        userId,
-			DeleteKey:     s.GetString("delete_key"),
-			EntUserId:     entUserId,
-			EntId:         entId,
-			Session:       s.Session(),
-		}
+        matchmode := s.GetString("matchmode")
+        sub := &entity.KeyWordsSet{
+            ClassifyIndex: s.GetString("classify_index"),
+            ClassifyName:  strings.Trim(s.GetString("classify_name"), ""),
+            KeyWordIndex:  s.GetString("kws_index"),
+            KeyWordName:   strings.Trim(s.GetString("kws_name"), ""),
+            ActionType:    s.GetString("actionType"),
+            AppendKeyWord: s.GetSlice("addition_kws"),
+            NotKeyWord:    s.GetSlice("not_kws"),
+            MatchWay:      match_way,
+            Matchmode:     matchmode,
+            KeyWordsCount: s.GetString("kwscount"),
+            Type:          vSwitch,
+            UserId:        userId,
+            DeleteKey:     s.GetString("delete_key"),
+            EntUserId:     entUserId,
+            EntId:         entId,
+            Session:       s.Session(),
+        }
 		r = sub.UpdateKeyWords()
 	} else {
-		pmindex, _ := s.GetInteger("pmindex")
-		matchtype, _ := s.GetInteger("matchtype")
-		other, _ := s.GetInteger("other")
+        pmindex, _ := s.GetInteger("pmindex")
+        matchtype := s.GetString("matchtype")
+        other, _ := s.GetInteger("other")
 		uo := &entity.UpdateOther{
 			PageType:        s.GetString("pageType"),
 			Pmindex:         pmindex,

+ 2 - 10
src/jfw/modules/subscribepay/src/go.mod

@@ -5,13 +5,13 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.14.6
+	app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.6.2
 	github.com/shopspring/decimal v1.3.1
-	github.com/tealeg/xlsx/v3 v3.3.5
+	github.com/tealeg/xlsx v1.0.5
 	go.mongodb.org/mongo-driver v1.13.1
 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
 	k8s.io/apimachinery v0.29.1
@@ -52,7 +52,6 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/google/btree v1.0.1 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
@@ -67,8 +66,6 @@ require (
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/klauspost/compress v1.16.7 // indirect
-	github.com/kr/pretty v0.3.1 // indirect
-	github.com/kr/text v0.2.0 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
@@ -86,16 +83,12 @@ require (
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/openzipkin/zipkin-go v0.4.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
-	github.com/peterbourgon/diskv/v3 v3.0.1 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/prometheus/client_golang v1.17.0 // indirect
 	github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
 	github.com/prometheus/common v0.44.0 // indirect
 	github.com/prometheus/procfs v0.11.1 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
-	github.com/rogpeppe/fastuuid v1.2.0 // indirect
-	github.com/rogpeppe/go-internal v1.10.0 // indirect
-	github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
@@ -104,7 +97,6 @@ require (
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/spf13/viper v1.15.0 // indirect
 	github.com/subosito/gotenv v1.4.2 // indirect
-	github.com/tealeg/xlsx v1.0.5 // indirect
 	github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
 	github.com/xdg-go/scram v1.1.2 // indirect

+ 2 - 12
src/jfw/modules/subscribepay/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
-app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b h1:qGe2niBqodJAP/yjwappd1XE98WAXpPxrGhmUbbKoi8=
+app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
@@ -1172,7 +1172,6 @@ github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNu
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
 github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
@@ -1557,8 +1556,6 @@ github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdU
 github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/peterbourgon/diskv/v3 v3.0.1 h1:x06SQA46+PKIUftmEujdwSEpIx8kR+M9eLYsUxeYveU=
-github.com/peterbourgon/diskv/v3 v3.0.1/go.mod h1:kJ5Ny7vLdARGU3WUuy6uzO6T0nb/2gWcT1JiBvRmb5o=
 github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
 github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
 github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
@@ -1571,7 +1568,6 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug=
 github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
 github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -1631,7 +1627,6 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
 github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
 github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
-github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@@ -1639,7 +1634,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
@@ -1650,8 +1644,6 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
 github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
 github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa h1:2cO3RojjYl3hVTbEvJVqrMaFmORhL6O06qdW42toftk=
-github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa/go.mod h1:Yjr3bdWaVWyME1kha7X0jsz3k2DgXNa1Pj3XGyUAbx8=
 github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
@@ -1718,8 +1710,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8
 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
-github.com/tealeg/xlsx/v3 v3.3.5 h1:dzmns01jRf0SveBe7VqkcO2LCLOcypcDI6H66PiZycQ=
-github.com/tealeg/xlsx/v3 v3.3.5/go.mod h1:KV4FTFtvGy0TBlOivJLZu/YNZk6e0Qtk7eOSglWksuA=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed h1:1+oKuPuDQ4AbN1WRMFxl9WQClH80GuZ81X/4FsOshjI=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed/go.mod h1:WE5pZgSp3RwicfhHQmOJOexA0n4AKTzBqmnSu7R8Nbk=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=

+ 4 - 1
src/jfw/modules/subscribepay/src/service/userAccountInfo.go

@@ -902,9 +902,12 @@ func (this *UserAccount) WxUnBind() {
 				return nil, DBUPDATE_ERROR
 			}
 			//公众号微信关注移至另一用户中  此时微信公众号用户session问题错乱
-			if saveId := util.MQFW.Save("user", unsetMap); saveId == "" {
+			saveId := util.MQFW.Save("user", unsetMap)
+			if saveId == "" {
 				return nil, DBUPDATE_ERROR
 			}
+			jy.SaveUserLog(util.MQFW, saveId, phone, "phone", "wx", "wx", "", "", "", this.Request.Proto, this.Request.UserAgent(), this.Site(), "")
+
 			flushWxsession = true
 		}
 

+ 3 - 0
src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go

@@ -190,8 +190,11 @@ func (this *SubscribeChange) GetSubBuyMsg() {
 			"projectmatch":    (*o_vipjy)["i_projectmatch"],
 			"ratemode":        (*o_vipjy)["i_ratemode"],
 			"matchway":        (*o_vipjy)["i_matchway"],
+			"matchmode":       qutil.If((*o_vipjy)["i_matchmode"] == nil, []string{"title"}, (*o_vipjy)["i_matchmode"]),
 			"startTime":       (*rData)["l_vip_starttime"],
 			"endTime":         (*rData)["l_vip_endtime"],
+			"switch":          qutil.If((*o_vipjy)["i_switch"] == nil, 1, (*o_vipjy)["i_switch"]),
+			"amount":          qutil.If((*o_vipjy)["amount"] == nil, "", (*o_vipjy)["amount"]),
 			"otherbuyerclass": (*o_vipjy)["i_matchbuyerclass_other"],
 			"isread":          isread,
 			"isvip":           vip,

+ 70 - 66
src/jfw/modules/weixin/src/go.mod

@@ -3,40 +3,41 @@ module jy/src/jfw/modules/weixin/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
+	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.1.3
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
+	app.yhyue.com/moapp/jypkg v1.15.8-0.20240328022751-e3041a0d767b
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
-	github.com/gogf/gf/v2 v2.3.1
-	go.mongodb.org/mongo-driver v1.11.6
+	github.com/gogf/gf/v2 v2.6.2
+	go.mongodb.org/mongo-driver v1.13.1
 )
 
 require (
 	app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d // indirect
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
-	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
-	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d // indirect
-	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
-	github.com/BurntSushi/toml v1.1.0 // indirect
+	app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736 // indirect
+	app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 // indirect
+	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20231226074509-942d80dc34eb // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231222060155-36e225b61353 // indirect
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 // indirect
+	github.com/BurntSushi/toml v1.2.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
-	github.com/clbanning/mxj/v2 v2.5.5 // indirect
+	github.com/clbanning/mxj/v2 v2.7.0 // indirect
 	github.com/coreos/go-semver v0.3.1 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
-	github.com/fatih/color v1.15.0 // indirect
-	github.com/fsnotify/fsnotify v1.6.0 // indirect
+	github.com/fatih/color v1.16.0 // indirect
+	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
-	github.com/go-openapi/jsonreference v0.20.1 // indirect
-	github.com/go-openapi/swag v0.22.3 // indirect
+	github.com/go-openapi/jsonreference v0.20.2 // indirect
+	github.com/go-openapi/swag v0.22.4 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
@@ -44,23 +45,24 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/google/gnostic v0.5.7-v3refs // indirect
-	github.com/google/go-cmp v0.5.9 // indirect
+	github.com/google/gnostic-models v0.6.8 // indirect
+	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/uuid v1.4.0 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.15 // indirect
+	github.com/klauspost/compress v1.16.7 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
-	github.com/mattn/go-isatty v0.0.17 // indirect
-	github.com/mattn/go-runewidth v0.0.13 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -71,14 +73,14 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
-	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+	github.com/openzipkin/zipkin-go v0.4.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.15.1 // indirect
-	github.com/prometheus/client_model v0.3.0 // indirect
-	github.com/prometheus/common v0.42.0 // indirect
-	github.com/prometheus/procfs v0.9.0 // indirect
-	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/prometheus/client_golang v1.17.0 // indirect
+	github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
+	github.com/prometheus/common v0.44.0 // indirect
+	github.com/prometheus/procfs v0.11.1 // indirect
+	github.com/rivo/uniseg v0.4.4 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
@@ -88,40 +90,42 @@ require (
 	github.com/spf13/viper v1.15.0 // indirect
 	github.com/subosito/gotenv v1.4.2 // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
-	github.com/xdg-go/scram v1.1.1 // indirect
-	github.com/xdg-go/stringprep v1.0.3 // indirect
-	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	github.com/zeromicro/go-zero v1.5.3 // indirect
-	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
-	go.opentelemetry.io/otel v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
-	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
-	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
-	go.opentelemetry.io/otel/trace v1.15.1 // indirect
-	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
+	github.com/xdg-go/scram v1.1.2 // indirect
+	github.com/xdg-go/stringprep v1.0.4 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
+	github.com/zeromicro/go-zero v1.6.1 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.11 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.11 // indirect
+	go.opentelemetry.io/otel v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/zipkin v1.19.0 // indirect
+	go.opentelemetry.io/otel/metric v1.19.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.19.0 // indirect
+	go.opentelemetry.io/otel/trace v1.19.0 // indirect
+	go.opentelemetry.io/proto/otlp v1.0.0 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
-	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/automaxprocs v1.5.3 // indirect
 	go.uber.org/multierr v1.9.0 // indirect
 	go.uber.org/zap v1.24.0 // indirect
-	golang.org/x/crypto v0.6.0 // indirect
-	golang.org/x/net v0.10.0 // indirect
-	golang.org/x/oauth2 v0.7.0 // indirect
-	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.8.0 // indirect
-	golang.org/x/term v0.8.0 // indirect
-	golang.org/x/text v0.9.0 // indirect
-	golang.org/x/time v0.3.0 // indirect
-	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
-	google.golang.org/grpc v1.56.1 // indirect
-	google.golang.org/protobuf v1.31.0 // indirect
+	golang.org/x/crypto v0.16.0 // indirect
+	golang.org/x/net v0.19.0 // indirect
+	golang.org/x/oauth2 v0.13.0 // indirect
+	golang.org/x/sync v0.5.0 // indirect
+	golang.org/x/sys v0.15.0 // indirect
+	golang.org/x/term v0.15.0 // indirect
+	golang.org/x/text v0.14.0 // indirect
+	golang.org/x/time v0.5.0 // indirect
+	google.golang.org/appengine v1.6.8 // indirect
+	google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/grpc v1.60.0 // indirect
+	google.golang.org/protobuf v1.31.1-0.20231027082548-f4a6c1f6e5c1 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
@@ -130,13 +134,13 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a // indirect
-	k8s.io/api v0.26.3 // indirect
-	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
-	k8s.io/client-go v0.26.3 // indirect
-	k8s.io/klog/v2 v2.90.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
-	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231023011746-38dc3b6aded8 // indirect
+	k8s.io/api v0.28.4 // indirect
+	k8s.io/apimachinery v0.28.4 // indirect
+	k8s.io/client-go v0.28.4 // indirect
+	k8s.io/klog/v2 v2.100.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect

Diff do ficheiro suprimidas por serem muito extensas
+ 841 - 40
src/jfw/modules/weixin/src/go.sum


+ 1 - 0
src/jfw/modules/weixin/src/wx/wx.go

@@ -353,6 +353,7 @@ func saveUser(u *UserInfo, source, pre, RSource, CSource string) (bool, string,
 			// 	"unionid":  u.UnionId,
 			// }
 			// usercenter.AddBaseUser(tools.MQFW, util.ObjToString(config.Sysconfig["userCenterApi"]), _id, formdata, &http.Cookie{})
+			jy.SaveUserLog(tools.MQFW, _id, "", "wx", "wx", "wx", u.OpenId, "", "", "", "", "", "")
 			nickname := util.ObjToString(util.If(u.Nickname != "", u.Nickname, newUser["s_jyname"]))
 			if ok := jy.AddUser(tools.MQFW, _id, pb.UserAddReq{
 				Appid:    "10000",

+ 13 - 1
src/web/staticres/common-module/collection/js/date-mobile.js

@@ -183,6 +183,10 @@ var dateComponent = {
         ]
       }
     },
+    pickerMaxDate: {
+      type: [Date, null],
+      default: new Date()
+    },
     'dateType': {
       type: String,
       default: 'date'
@@ -190,6 +194,8 @@ var dateComponent = {
   },
   template: dateComponentTemplate,
   data:function () {
+    // pickerMaxDate传null,则默认最大结束时间为10年后
+    var maxDate = this.pickerMaxDate || this.get10YearAfter()
     return {
       colDate: 0,
       timeSelectList: JSON.parse(JSON.stringify(this.times)),
@@ -200,7 +206,7 @@ var dateComponent = {
         startshow: false,
         endshow: false,
         minDate: new Date(2000, 0, 1),
-        maxDate: new Date(),
+        maxDate: maxDate,
         startcurrentDate: new Date(),
         endcurrentDate: new Date(),
       },
@@ -308,6 +314,12 @@ var dateComponent = {
       this.dateTimePickerState.startPlaceHolder = ''
       this.dateTimePickerState.endPlaceHolder = ''
     },
+    get10YearAfter() {
+      var now = new Date()
+      var currentYear = now.getFullYear()
+      var after10 = currentYear + 10
+      return new Date(after10, 0, 1)
+    },
     getOnlyPickerState () {
       const timeState = this.calcNotExactTime('today', this.datePicker.endcurrentDate.getTime())
       timeState.exact = 'exact'

+ 113 - 1
src/web/staticres/common-module/vipsubscribe/css/vip-subscribe-set-template.css

@@ -197,9 +197,17 @@
   height: 0.5rem;
 }
 .sub-scribe{
-  background: #fff;
+  position: relative;
   border-radius: .16rem;
 }
+.sub-scribe .sub-mask{
+  position: absolute;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  background: transparent;
+  z-index: 9;
+}
 
 /* 自定义switch按钮 */
 .jy-switch {
@@ -329,6 +337,11 @@
   background-size: contain;
 }
 
+.jy-icon-amount {
+  background: url('../image/icon/jy-icon-amount.png') no-repeat;
+  background-size: contain;
+}
+
 /* weui  weui-actionsheet*/
 .match-keywords-actionsheet {
   position: absolute;
@@ -654,6 +667,91 @@
     margin-top: 0.2rem;
     margin-right: 0.2rem;
   }
+  /* S--金额区间--S */
+  .common-selector-popup {
+    border-top-left-radius: 8px;
+    border-top-right-radius: 8px;
+  }
+  .common-selector-layout{
+    border-top-left-radius: 8px;
+    border-top-right-radius: 8px;
+  }
+  .common-selector-layout .j-header{
+    padding: .44rem .32rem .24rem;
+    flex-direction: column;
+    align-items: flex-start;
+    color:  #171826;
+  }
+  .common-selector-layout .j-header .title-row{
+    width:100%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: .4rem;
+    line-height: .6rem;
+    margin-bottom: .24rem;
+  }
+  .common-selector-layout .dialog-close{
+    width: .4rem;
+    height: .4rem;
+  }
+  .common-selector-layout .btn-list{
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: flex-start;
+  }
+  .common-selector-layout .btn-item {
+    margin: 0 0 .32rem .32rem;
+    width: 2.08rem;
+    height: .64rem;
+    font-size: .26rem;
+    border-radius: 4px;
+    color: rgba(95, 94, 100, 1);
+    background-color: #F5F6F7;
+  }
+  .common-selector-layout .btn-item.active {
+    background-color: #2ABED1;
+    color: #fff;
+  }
+  .common-selector-layout .custom-title{
+    padding-left: .32rem;
+    font-size: .4rem;
+    line-height: .6rem;
+    color: #171826;
+  }
+  .common-selector-layout .custom-input{
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    margin: .32rem 0 .76rem 0;
+  }
+  .common-selector-layout .custom-input .custom-inout-item{
+    width: 2.88rem;
+    height: .64rem;
+    border-radius: 4px;
+    border: 0.5px solid rgba(0, 0, 0, 0.1);
+  }
+  .common-selector-layout .custom-input-line {
+    margin: 0 .32rem;
+    width: .24rem;
+    height: 1px;
+    background-color: rgba(0, 0, 0, 0.3);
+  }
+  .common-selector-layout .van-checkbox__icon--checked .van-icon {
+    color: #fff;
+    background-color: #2ABED1;
+    border-color: #2ABED1;
+  }
+  .common-selector-layout .j-header::after {
+    display: none;
+  }
+  .common-selector-layout .ischecked .van-cell__title{
+    color: #2ABED1;
+  }
+  .keymate-selector-popup .van-cell{
+    font-size: .28rem;
+  }
+  /* E--金额区间--E */
 /*地区选择框*/
   .area-selector-popup{
       border-top-left-radius: 8px;
@@ -747,6 +845,20 @@
     font-weight: 400;
     line-height: 26px;
 }
+
+.sub-dialog-confirm{
+  padding: 0;
+}
+.sub-dialog-confirm .van-dialog__header{
+  font-size: .36rem;
+}
+.sub-dialog-confirm .sub-dialog-content{
+  padding: .32rem .64rem;
+  font-size: .28rem;
+}
+.sub-dialog-confirm .van-button{
+  font-size: .36rem;
+}
 .vip-body .keywords .item-l .icon-bangzhu {
   color: #2cb7ca;
   font-size: 0.36rem;

BIN
src/web/staticres/common-module/vipsubscribe/image/icon/jy-icon-amount.png


+ 518 - 115
src/web/staticres/common-module/vipsubscribe/js/vip-subscribe-set-template.js

@@ -20,6 +20,7 @@ function delUrlParam (name){
 
 var subScribeTemplate = `
 <div class="sub-scribe" id="sub-scribe">
+<div v-if="initdata.switch == 0" @click="OpenSubSwitch" class="sub-mask"></div>
 <ul style="border-radius:.16rem;overflow:hidden">
   <li class="body-item area" :class="{ blink: activity.blink === 1 }">
    <a class="item-container" :href="linkobj.area" @click="userNumOver">
@@ -109,6 +110,21 @@ var subScribeTemplate = `
       </div>
     </a>
     </li>
+    <li class="body-item amount-range">
+    <a class="item-container" href="javascript:;" @click="openAmountDialog($event)">
+      <div class="item">
+        <span class="item-l">
+          <span class="leading jy-icon-amount"></span>
+          <span class="item-label">金额区间</span>
+          <span class="openVip" v-show="vSwitch === 'f'">开通</span>
+        </span>
+        <span class="item-r">
+          <span class="item-r-text info-type-text ellipsis">{{info.amountRange}}</span>
+          <span class="iconfont icon-arrow"></span>
+        </span>
+      </div>
+    </a>
+    </li>
     <li class="body-item project-match">
     <a class="item-container" href="javascript:;">
       <div class="item">
@@ -162,28 +178,6 @@ var subScribeTemplate = `
       </a>
     </li>
   </ul>
-  <!-- 匹配方式 -->
-  <div class="match-keywords-actionsheet">
-    <div class="weui-mask" id="iosMask" @click="iosMask" style="opacity: 1;display: none;"></div>
-    <div class="weui-actionsheet" id="iosActionsheet">
-      <div class="weui-actionsheet__title" style="display:none">
-        <p class="weui-actionsheet__title-text">关键词匹配方式</p>
-        <i class="weui-icon-clear" id="iosActionsheetCancel" @click="iosActionsheetCancel"></i>
-      </div>
-      <div class="weui-actionsheet__menu">
-        <div class="weui-actionsheet__cell titleMacth" :class="{active:active==1}" @click="actionSheet('按标题匹配', 1)">
-          <p class="cell_title">按标题匹配</p>
-        </div>
-        <div class="weui-actionsheet__cell allMacth" :class="{active:active==2}" @click="actionSheet('按全文匹配', 2)">
-          <p class="cell_title">按全文匹配<span class="openVip-keywords" v-show="vSwitch === 'f'">开通</span></p>
-          <p class="small-title">会产生无效信息,请根据需要选择</p>
-        </div>
-      </div>
-      <!-- <div class="weui-actionsheet__action">
-    <div class="weui-actionsheet__cell" id="iosActionsheetCancel" @click="iosActionsheetCancel">取消</div>
-    </div> -->
-    </div>
-  </div>
   <!-- 信息类型 -->
   <div class="menu-infoType-wrap" v-show="infoTypeMenu">
     <div class="infoType-content">
@@ -267,6 +261,132 @@ var subScribeTemplate = `
            </div>     
      </div>
   </van-popup>
+  <van-popup
+    class="common-selector-popup"
+    v-model="amountSelectorShow" 
+    :getContainer="getContainer" 
+    position="bottom" 
+    :overlay="true" 
+    :lock-scroll="true"
+  >
+  <div class="common-selector-layout">
+    <div class="j-container">
+      <div class="j-header"> 
+        <div class="title-row">
+          <span>请选择金额区间</span>
+          <img @click="amountSelectorShow = false" class="dialog-close" src="/jyapp/vipsubscribe/image/dialog-close.png" alt="" />        
+        </div>
+      </div>
+      <div class="j-main" style="margin-top: 4px;">
+        <button :class='{"active": moneyList[0].active }' :disabled="moneyList[0].disabled" @click="changeAmount('all')" class="btn-item">{{ moneyList[0].title }}</button>
+        <div class="btn-list">
+          <button :class='{"active": item.active }' :disabled="item.disabled" class="btn-item" v-for="(item, index) in setMoneyList" :key="index" @click="changeAmount(item)">{{item.title}}</button>
+        </div>
+        <div class="custom-title">自定义金额</div>
+        <div class="custom-input">
+          <van-field
+            maxlength="9" 
+            type="number"
+            class="custom-inout-item"
+            v-model="customMoney.min"
+            center
+            placeholder="请输入金额"
+          >
+            <template #extra>
+              <span style="padding-left:4px; color: #5F5E64">万</span>
+            </template>
+          </van-field>
+          <div class="custom-input-line"></div>
+          <van-field
+            maxlength="9" 
+            type="number"
+            class="custom-inout-item"
+            v-model="customMoney.max"
+            center
+            placeholder="请输入金额"
+          >
+            <template #extra>
+              <span style="padding-left:4px; color: #5F5E64">万</span>
+            </template>
+          </van-field>
+        </div>
+      </div>
+      <div class="j-footer">
+        <slot name="footer">
+          <button class="j-button-cancel" :class="{'disabled': resetButtonDisabled }" @click="amountCancelHandle">重置</button>
+          <button class="j-button-confirm" @click="amountConfirmHandle">确认</button>
+        </slot>
+      </div>
+    </div>
+  </div>
+  </van-popup>
+  <van-popup
+    class="common-selector-popup keymate-selector-popup"
+    v-model="keymateSelectorShow" 
+    :getContainer="getContainer" 
+    position="bottom" 
+    :overlay="true" 
+    :lock-scroll="true"
+  >
+    <div class="common-selector-layout">
+      <div class="j-container">
+        <div class="j-header">
+          <div class="title-row">
+            <span>请选择关键词匹配方式</span>
+            <img @click="keymateSelectorShow = false" class="dialog-close" src="/jyapp/vipsubscribe/image/dialog-close.png" alt="" />        
+          </div>
+        </div>
+        <div class="j-main">
+          <van-checkbox-group v-model="keymate.checked">
+            <van-cell-group inset>
+              <van-cell
+                v-for="(item, index) in keymate.list"
+                clickable
+                :key="item"
+                :class="{'ischecked': item.active}"
+                @click="setKeyToggle(index)"
+              >
+                <template #title>
+                  <span>{{item.title}}</span>
+                  <span style="display: inline-block;" v-if="vSwitch=='f' && item.title !== '标题'" class="openVip">开通</span>
+                </template>
+                <template #right-icon>
+                  <van-checkbox
+                    v-model="item.active"
+                    ref="checkbox0"
+                    :name="item.title"
+                  />
+                </template>
+              </van-cell>
+            </van-cell-group>
+          </van-checkbox-group>
+        </div>
+        <div class="j-footer">
+          <slot name="footer">
+            <button :disabled="!keymate.checked.length" class="j-button-confirm" @click="actionSheet">确认</button>
+          </slot>
+        </div>
+      </div>
+    </div>
+  </van-popup>
+  <van-dialog
+    getContainer="body"
+    class-name="sub-dialog-confirm"
+    v-model="showSubDialog"
+    width="303px"
+    title="开启订阅"
+    show-cancel-button
+    confirm-button-text="立即开启"
+    confirm-button-color="#2ABED1"
+    cancel-button-text="暂不开启"
+    cancel-button-color="#1d1d1d"
+    @confirm="setSubStatus"
+    @cancel="showSubDialog = false"
+    >
+    <div class="sub-dialog-content">
+      当前订阅状态为关闭状态,不支持修改,请开启订阅
+    </div>
+  </van-dialog>
 </div>
 `
 
@@ -311,7 +431,8 @@ var subComponent = {
       info: {
         area: '请选择区域',
         industry: '请选择采购单位行业',
-        infoType: '请选择信息类型'
+        infoType: '请选择信息类型',
+        amountRange: '全部金额'
       },
       // 信息类型数据
       infoTypeList: [
@@ -348,6 +469,40 @@ var subComponent = {
       ],
       // 匹配方式
       active: 1,
+      checkboxRefs: [
+        'checkbox0',
+        'checkbox1',
+        'checkbox2',
+        'checkbox3',
+      ],
+      keymate: {
+        checked: [],
+        list: [
+          {
+            title: '标题',
+            value: 'title',
+            active: false
+          },
+          {
+            title: '正文',
+            value: 'detail',
+            active: false,
+            showVip: false
+          },
+          {
+            title: '附件',
+            value: 'filetext',
+            active: false,
+            showVip: false
+          },
+          {
+            title: '项目名称/标的物',
+            value: 'projectname/purchasing',
+            active: false,
+            showVip: false
+          }
+        ],
+      },
       pushsetShow: true,
       resultTime: '',
       checkedflag: false,
@@ -371,6 +526,8 @@ var subComponent = {
       },
       cansetarea_s:true,
       areaSelectorShow: false,
+      amountSelectorShow: false,
+      keymateSelectorShow: false,
       // 提交信息
       // bindInfo: {
       //   area: {}
@@ -381,7 +538,69 @@ var subComponent = {
         // 已选省份
         selectedCount: 0,
         buyAreaCount: -1
-      }
+      },
+      moneyList: [
+        {
+          title: '全部金额',
+          value: '',
+          active: true,
+          disabled: false
+        },
+        {
+          title: '0-10万',
+          value: '0-10',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '10-20万',
+          value: '10-20',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '20-50万',
+          value: '20-50',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '50-100万',
+          value: '50-100',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '100-200万',
+          value: '100-200',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '200-500万',
+          value: '200-500',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '500-1000万',
+          value: '500-1000',
+          active: false,
+          disabled: false
+        },
+        {
+          title: '1000万以上',
+          value: '1000-',
+          active: false,
+          disabled: false
+        }
+      ],
+      customMoney: {
+        min: '',
+        max: ''
+      },
+      showSubDialog: false,
+      subSwitch: false
     }
   },
   created(){
@@ -403,17 +622,23 @@ var subComponent = {
     resetButtonDisabled: function () {
       var isSame = utils.deepCompare(this.initdata.oldArea, this.bindArea)
       return isSame
-    }
+    },
+    setMoneyList: function () {
+      return this.moneyList.filter((item, i) => i !== 0)
+    },
   },
   watch: {
-    initdata: function(newVal, oldVal) {
-      if(newVal) {
-        this.getResultView()
-        this.getData()
-        if (this.vSwitch !== 'f') {
-          this.setIosData()
+    initdata: {
+      handler: function(newVal, oldVal) {
+        if(newVal) {
+          this.getResultView()
+          this.getData()
+          if (this.vSwitch !== 'f') {
+            this.setIosData()
+          }
         }
-      }
+      },
+      immediate: true
     },
     vSwitch: function (val) {
       if(val == 'm') {
@@ -431,9 +656,142 @@ var subComponent = {
           this.areaInfo.selectedCount = Object.keys(newVal).length || -1
         }
       }
+    },
+    'customMoney.min': {
+      handler (newval) {
+        if (newval) {
+          this.moneyList.forEach(v => {
+            v.active = false
+          })
+        } else {
+          const hasActive = this.moneyList.filter((v) => v.active)
+          if(!this.customMoney.max) {
+            this.moneyList[0].active = !hasActive.length
+          }
+        }
+      },
+      immediate: true
+    },
+    'customMoney.max': {
+      handler (newval) {
+        if (newval) {
+          this.moneyList.forEach(v => {
+            v.active = false
+          })
+        } else {
+          const hasActive = this.moneyList.filter((v) => v.active)
+          if(!this.customMoney.min) {
+            this.moneyList[0].active = !hasActive.length
+          }
+        }
+      },
+      immediate: true
     }
   },
   methods: {
+    // 开启订阅开关
+    setSubStatus: function () {
+      const params = {
+        pageType: 'i_switch',
+        matchtype: 1,
+        vSwitch: this.vSwitch
+      }
+      this.saveUserInfoApi(params, () => {
+        this.showSubDialog = false
+        this.initdata.switch = 1
+        weui.toast('开启成功', {
+          duration: 1500,
+          className: 'jy-toast',
+        });
+      })
+    },
+    // 判断是否有修改订阅条件权限,是否开启订阅开关
+    OpenSubSwitch: function () {
+      this.showSubDialog = true
+    },
+    // 选择关键词匹配方式
+    setKeyToggle (index) {
+      if(this.vSwitch === 'f' && index !== 0) {
+        this.hideActionSheet()
+        this.toBuyVipSub()
+        return
+      }
+      const data = this.keymate.list[index]
+      if(data.active) {
+        data.active = false
+        this.keymate.checked.forEach((v, i) => {
+          if(v === data.title) {
+            this.keymate.checked.splice(i, 1)
+          }
+        })
+      } else {
+        this.keymate.checked.push(this.keymate.list[index].title)
+        console.log(this.keymate.checked)
+        this.keymate.list[index].active = true
+      }
+      // this.keymate.checked = [...new Set(this.keymate.checked)]
+    },
+    // 选择金额
+    changeAmount: function (item) {
+      this.setMoneyList.forEach((v, i) => {
+        v.active = false
+      })
+      this.setMoneyList.forEach((v, i) => {
+        if(item === 'all') {
+          this.moneyList[0].active = true
+        } else {
+          if(item.title === v.title) {
+            this.moneyList[0].active = false
+            v.active = !v.active
+          } else {
+            v.active = false
+          }
+        }
+      })
+      this.customMoney.min = ''
+      this.customMoney.max = ''
+    },
+    // 确认金额区间
+    amountConfirmHandle: function () {
+      let val = this.moneyList.filter(v => v.active == true)
+      if(!val.length) {
+        const { min, max } = this.setAmountPostion(this.customMoney.min, this.customMoney.max)
+        val = [{
+          value: min + '-' + max,
+          title: max ? min + '-' + max + '万' : min + '万元以上'
+        }]
+      }
+      this.amountSelectorShow = false
+      const params = {
+        pageType: 'amount',
+        matchtype: val[0].value,
+        vSwitch: this.vSwitch
+      }
+      this.saveUserInfoApi(params, (res) => {
+        if(res && res.flag) {
+          console.log(res)
+          this.info.amountRange = val[0].title
+        }
+      })
+    },
+    amountCancelHandle: function () {
+      this.setMoneyList = this.setMoneyList.forEach((v, i) => {
+        v.active = false
+      })
+      this.moneyList[0].active = true
+      this.customMoney.min = this.customMoney.max = ''
+      this.amountSelectorShow = false
+      const params = {
+        pageType: 'amount',
+        matchtype: '',
+        vSwitch: this.vSwitch
+      }
+      this.saveUserInfoApi(params, (res) => {
+        if(res && res.flag) {
+          this.info.amountRange = '全部金额'
+        }
+      })
+    },
     goToActive: function () {
       if (location.href.indexOf('front') !== -1) {
         var href = '/weixin/frontPage/activity/sess/task'
@@ -533,6 +891,7 @@ var subComponent = {
       this.setKeyword()
       this.getActionDefault()
       this.getIndustryType()
+      this.getAmountRange()
       this.getProjectMatch()
       this.iosBackRefresh()
       // 大会员、超级订阅,弹窗选择地区
@@ -674,6 +1033,48 @@ var subComponent = {
         }
       }
     },
+    // 获取金额区间回显
+    getAmountRange: function() {
+      console.log(this.initdata)
+      if(this.initdata.amount) {
+        let hasCustom = false
+        this.moneyList.forEach((v, index) => {
+          v.active = false
+          if(v.value == this.initdata.amount) {
+            hasCustom = true
+            v.active = true
+            this.info.amountRange = v.title
+          }
+        })
+        // 自定义金额
+        if(!hasCustom) {
+          const minAndMax = this.initdata.amount.split('-')
+          const { min, max } = this.setAmountPostion(minAndMax[0], minAndMax[1])
+          this.customMoney.min = min
+          this.customMoney.max = max
+          if(!max) {
+            this.customMoney.max = ''
+            this.info.amountRange = min + '万以上'
+          } else {
+            this.info.amountRange = min + '-' + max + '万'
+          }
+        }
+      } else {
+        this.info.amountRange = '全部金额'
+      }
+    },
+    // 判断金额大小,交换位置
+    setAmountPostion (oldmin, oldmax) {
+      if(!oldmin) oldmin = 0
+      if(!oldmax) oldmax = 0
+      let min = parseFloat(oldmin)
+      let max = parseFloat(oldmax)
+      if(min > max && max) {
+        max = min
+        min = parseFloat(oldmax)
+      }
+      return { min, max }
+    },
     // 项目匹配
     getProjectMatch: function() {
       if (this.initdata.projectmatch == 1) {
@@ -729,21 +1130,26 @@ var subComponent = {
     },
     // 关键词匹配方式
     getActionDefault: function() {
-      let _this = this
-      let defaultTitle = ''
-      if(this.initdata.matchway == 1 || !this.initdata.matchway) {
-        $('.match-way-value').text('按标题匹配')
-        this.active = 1
-      } else if(this.initdata.matchway == 2) {
-        $('.match-way-value').text('按全文匹配')
-        this.active = 2
+      if(this.initdata.matchmode && this.initdata.matchmode.length) {
+        this.keymate.list.forEach(v => {
+          v.active = false
+        })
+        this.keymate.checked = []
+        this.initdata.matchmode.forEach((item, index) => {
+          this.keymate.list.forEach(v => {
+            if(item === v.value) {
+              v.active = true
+              this.keymate.checked.push(v.title)
+            }
+          })
+        })
+        const text = this.keymate.checked.join(',')
+        $('.match-way-value').text(text)
+      } else {
+        $('.match-way-value').text('标题')
+        this.keymate.checked = ['标题']
+        this.keymate.list[0].active = true
       }
-      // $('#iosActionsheet .weui-actionsheet__cell').each(function (index, item) {
-      //   var t = $(item).children().text().trim();
-      //   if (t == defaultTitle) {
-      //       $(this).addClass('active')
-      //   }
-      // })
     },
     hideActionSheet: function() {
       var $iosMask = $('#iosMask');
@@ -766,13 +1172,14 @@ var subComponent = {
       this.hideActionSheet()
     },
     matchWay: function() {
-      var $iosMask = $('#iosMask');
-      var $iosActionsheet = $('#iosActionsheet');
-      $iosActionsheet.addClass('weui-actionsheet_toggle');
-      $('.match-keywords-actionsheet').show()
-      $iosMask.fadeIn(200);
-      this.checkUpdateRenewShow()
-      this.$emit('footershow', 'true')
+      // var $iosMask = $('#iosMask');
+      // var $iosActionsheet = $('#iosActionsheet');
+      // $iosActionsheet.addClass('weui-actionsheet_toggle');
+      // $('.match-keywords-actionsheet').show()
+      // $iosMask.fadeIn(200);
+      // this.checkUpdateRenewShow()
+      // this.$emit('footershow', 'true')
+      this.keymateSelectorShow = true
     },
     checkUpdateRenewShow: function () {
       // 老用户只显示升级,不显示续费
@@ -793,73 +1200,50 @@ var subComponent = {
         update_renew.hide()
       }
     },
-    actionSheet: function(title, index) {
+    // 设置关键词匹配方式
+    actionSheet: function() {
       let _this = this
       let vswitch = 'v'
       var href = ''
-      if (index === 2 && this.vSwitch === 'f') {
-        this.toBuyVipSub()
-      } else {
-
-        if (this.vSwitch === 'f') {
-          return this.hideActionSheet()
-        }
-
-        if(_this.accStatus == 2) {
-          vswitch = 'm'
-        } else if(_this.accStatus == 1)  {
-          vswitch = 'v'
-        }
-        $.post("/publicapply/subscribe/setUserInfo", {pageType: "saveSeniorset", matchtype: index, vSwitch: vswitch}, function (r) {
-            if (r.flag) {
-              var subVipState = sessionStorage.getItem('sub_vip_state');
-              var reqData = JSON.parse(subVipState);
-              _this.active = index
-              var $iosMask = $('#iosMask');
-              var $iosActionsheet = $('#iosActionsheet');
-              $iosActionsheet.removeClass('weui-actionsheet_toggle');
-              $('.match-keywords-actionsheet').hide()
-              $iosMask.fadeOut(200);
-              _this.checkUpdateRenewShow()
-              _this.$emit('footershow', 'false')
-              $('.match-way-value').text(title)
-              if(index == 1) {
-                $('.titleMacth').addClass('active')
-                $('.allMacth').removeClass('active')
-              } else {
-                $('.titleMacth').removeClass('active')
-                $('.allMacth').addClass('active')
-              }
-              reqData.matchway = index;
-              sessionStorage.setItem('sub_vip_state', JSON.stringify(reqData))
-            } else {
-              weui.toast('关键词匹配方式修改失败', {
-                  duration: 1500,
-                  className: 'jy-toast',
-                  callback: function () {
-                      console.log('close')
-                  }
-              });
-            }
+      const keymateSelect = []
+      this.keymate.list.forEach(v => {
+        this.keymate.checked.forEach((c) => {
+          if(c === v.title) {
+            keymateSelect.push(v.value)
+          }
         })
-        // var nowMode = title
-        // var ModeArr = ['按标题匹配', '按全文匹配']
-        // var nowIndex = ModeArr.indexOf(nowMode)
-        // if (nowIndex !== -1) {
-        //     this.setMatchway(ModeArr.indexOf(nowMode) + 1)
-        // } else {
-        //     // $(this).removeClass('active').siblings().addClass('active');
-        //     $('.match-way-value').text($(this).siblings().children('.cell_title').text())
-        //     weui.toast('关键词匹配方式修改失败', {
-        //         duration: 1500,
-        //         className: 'jy-toast',
-        //         callback: function () {
-        //             console.log('close')
-        //         }
-        //     });
-        // }
-        this.getResultView()
+      })
+      if (this.vSwitch === 'f') {
+        this.keymateSelectorShow = false
+        return this.hideActionSheet()
+      }
+
+      if(_this.accStatus == 2) {
+        vswitch = 'm'
+      } else if(_this.accStatus == 1)  {
+        vswitch = 'v'
       }
+      $.post("/publicapply/subscribe/setUserInfo", {pageType: "saveSeniorset", matchtype: keymateSelect.join(','), vSwitch: vswitch}, function (r) {
+          if (r.flag) {
+            var subVipState = sessionStorage.getItem('sub_vip_state');
+            var reqData = JSON.parse(subVipState);
+            _this.checkUpdateRenewShow()
+            _this.$emit('footershow', 'false')
+            _this.keymateSelectorShow = false
+            $('.match-way-value').text(_this.keymate.checked.join(','))
+            reqData.matchway = keymateSelect;
+            sessionStorage.setItem('sub_vip_state', JSON.stringify(reqData))
+          } else {
+            weui.toast('关键词匹配方式修改失败', {
+                duration: 1500,
+                className: 'jy-toast',
+                callback: function () {
+                    console.log('close')
+                }
+            });
+          }
+      })
+      this.getResultView()
     },
     // 项目匹配问号点击事件
     projectNotice: function () {
@@ -1160,6 +1544,25 @@ var subComponent = {
         }
       })
     },
+    // setUserInfo接口封装
+    saveUserInfoApi: function (params, callback) {
+      $.ajax({
+        type:'POST',
+        url: '/publicapply/subscribe/setUserInfo',
+        data: params,
+        success:function(res){
+          callback && callback(res)
+        }
+      })
+    },
+    // 金额区间
+    openAmountDialog: function () {
+      if (this.vSwitch === 'f') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+        return
+      }
+      this.amountSelectorShow = true
+    },
     /***地区选择框相关end**/
     // 打开信息类型
     openInfoType: function (e) {

+ 4 - 4
src/web/staticres/css/dev2/biddingSearch.css

@@ -1622,21 +1622,21 @@ position: absolute;
 }
 .liLuceneList .bid-list-title{
   display: flex;
-  align-items: center;
+  /* align-items: center; */
   justify-content: space-between;
 }
 .liLuceneList .list-title-flex {
   display: flex;
 }
 .liLuceneList .list-title-flex > a{
-  text-overflow: ellipsis;
+  /* text-overflow: ellipsis;
   overflow: hidden;
-  white-space: nowrap;
+  white-space: nowrap; */
   margin-right: 60px!important;
 }
 .liLuceneList .list-title-flex .visited-hd{
   margin-right: 8px;
-  font-size: 16px;
+  font-size: 15px;
   line-height: 24px;
   color: #1D1D1D;
   text-decoration: none;

+ 5 - 5
src/web/staticres/css/dev2/newBidSearch.css

@@ -167,12 +167,12 @@
 /* 收藏、全选 */
 .custom-checkbox{
   float: left;
-  width: 14px;
-  height: 14px;
+  width: 16px;
+  height: 16px;
   border: 1px solid #E0E0E0;
   border-radius: 3px;
   background-color: #fff;
-  margin: 4px 0 0 0!important;
+  margin: 5px 0 0 0!important;
 }
 .all-text-checkbox{
   margin: 4px 16px 0 0!important;
@@ -194,8 +194,8 @@
   font-size: 16px;
 }
 .custom-checkbox:checked{
-  width: 14px;
-  height: 14px;
+  width: 16px;
+  height: 16px;
   background: url(/images/biddingSearch/icon-checked.png) no-repeat center;
   background-size: contain;
   border: 0;

+ 20 - 0
src/web/staticres/js/common.js

@@ -1044,3 +1044,23 @@ function initSearchPageEvent (config) {
     }
   }
 }
+
+/**
+ * @description: 正文定位到关键词匹配成功的那句话进行展示(高亮关键词前最多展示**个字符截取并保留后面的内容,应用场景:搜索、订阅列表正文匹配)
+ * @param config
+ * @param text - 正文内容
+ * @param keywords - 要匹配的关键词 String || Array
+ * @param n - 定位到第几个字符位置 默认为20
+ */
+function  extractKeywords(text, keywords, n) {
+  if (!text) return
+  if (!keywords || !keywords.length) return text
+  if (!n) {
+    n = 10
+  }
+  var value = Array.isArray(keywords) ? keywords[0] : keywords
+  var regex = new RegExp("(.{0," + n + "}" + value + ".*)")
+  var result = text.match(regex);
+  // 输出结果
+  return result && result[1] ? result[1] : text
+}

+ 21 - 7
src/web/staticres/js/superSearch.js

@@ -318,14 +318,15 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
     var fileExists = datas[i].fileExists
 		if(detail){
 			detail = detail.replace(/[^\{\u4e00-\u9fa5]{1,90}{[^\}\u4e00-\u9fa5]+?}/g,"")
-			if(detail.length>200){
-				detail = detail.substring(0,200)+"..."
-			}
+			// if(detail.length>200){
+			// 	detail = detail.substring(0,200)+"..."
+			// }
 		}
 		// if(flag){
 			title = keyWordHighlight(title,searchvalueArray,"<font class='com-highlight'>$1</font>");
 			title=title.replace(/\<br>/g,"")
       if (detail) {
+        detail = extractKeywords(detail, searchvalueArray)
 			  detail = keyWordHighlight(detail,searchvalueArray,"<font class='com-highlight'>$1</font>");
       }
 		// }
@@ -356,8 +357,21 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
           listHtml +='<div class="list-container">'
             // 标题、推送时间
             listHtml += '<div class="bid-list-title">'
-                     + '<div class="list-title-flex  ellipsis"><em class="visited-hd">'+index+'.</em>'
-                     + '<a class="visited-hd" onclick="noIn(this)" dataid="'+datas[i]._id+'" dataindustry="'+datas[i].industry+'" target="_blank"> '+title+ '</a></div>'
+                     + '<div class="list-title-flex  ellipsis-3"><em class="visited-hd">'+index+'.</em>'
+                     + '<a class="visited-hd ellipsis-3" onclick="noIn(this)" dataid="'+datas[i]._id+'" dataindustry="'+datas[i].industry+'" target="_blank"> '
+                     + '<span>'+ title + '</span>'
+                     if (datas[i].filetext_search && heightWords) {
+                      var keyInFileHtml = ''
+                      if (heightWords.length > 3) {
+                        keyInFileHtml = '<span>(<font class="com-highlight">'+ heightWords.substring(0,3) +'</font>...在附件中)</span>'
+                      } else {
+                        keyInFileHtml = '<span>(<font class="com-highlight">'+ heightWords +'</font>在附件中)</span>'
+                      }
+                       listHtml += '<span class="visited-hd">' + keyInFileHtml + '</span>'
+                     }
+                     listHtml+='</a>'
+                     listHtml+='</div>'
+
                      if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
   					 var diff =new Date(parseInt(datas[i].publishtime*1000)).pattern('yyyy-MM-dd');
                       if(diff != null){
@@ -743,10 +757,10 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
 }
 
 function getacount(bidamount,budget){
-	if(typeof(bidamount) != "undefined" && bidamount != null && bidamount != ""&&bidamount!=="免费注册即可查看"){
+	if(typeof(bidamount) != "undefined" && bidamount != null && bidamount !== ""){
 		return bidamount
 	}
-	if(typeof(budget) != "undefined" && budget != null && budget != ""&&budget!=="免费注册即可查看"){
+	if(typeof(budget) != "undefined" && budget != null && budget !== ""){
 		return budget
 	}
 	return ""

+ 3 - 0
src/web/staticres/vipsubscribe/js/vip_index_new.js

@@ -516,8 +516,11 @@ $(function () {
               res.data.area = bigres.o_area
               res.data.industry = bigres.a_buyerclass
               res.data.items = bigres.a_items
+              res.data.amount = bigres.amount
               res.data.matchway = bigres.i_matchway
+              res.data.switch = bigres.i_switch
               res.data.infotype = bigres.a_infotype
+              res.data.matchmode = bigres.i_matchmode
               res.data.projectmatch = bigres.i_projectmatch
               res.data.ratemode = bigres.i_ratemode
               res.data.buyAreaCount = bigres.i_areacount  // 购买的省份数量

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff