Browse Source

Merge remote-tracking branch 'origin/feature/v4.8.74' into feature/v4.8.74_ws

# Conflicts:
#	src/jfw/front/login.go
#	src/jfw/modules/app/src/app/front/login.go
#	src/jfw/modules/publicapply/src/oneclick/entity/entity.go
#	src/jfw/modules/weixin/src/go.mod
#	src/jfw/modules/weixin/src/go.sum
wangshan 1 year ago
parent
commit
8d2dd3b6cb
100 changed files with 2282 additions and 822 deletions
  1. 1 1
      src/go.mod
  2. 2 2
      src/go.sum
  3. 115 13
      src/jfw/front/classificationTag.go
  4. 36 23
      src/jfw/front/front.go
  5. 51 0
      src/jfw/front/frontRouter.go
  6. 19 10
      src/jfw/front/login.go
  7. 20 0
      src/jfw/front/org_structure.go
  8. 7 7
      src/jfw/front/pcIndex.go
  9. 52 0
      src/jfw/modules/app/src/app/front/bigMember.go
  10. 9 0
      src/jfw/modules/app/src/app/front/front.go
  11. 61 14
      src/jfw/modules/app/src/app/front/login.go
  12. 47 0
      src/jfw/modules/app/src/app/front/shorturl.go
  13. 16 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/ent_portrait.css
  14. 16 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/unit_portrayal.css
  15. 56 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  16. 51 6
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  17. 7 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js
  18. 0 27
      src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js
  19. 44 10
      src/jfw/modules/app/src/web/staticres/jyapp/me/js/mail_bind.js
  20. 10 1
      src/jfw/modules/app/src/web/staticres/jyapp/me/js/phone_bind.js
  21. 14 0
      src/jfw/modules/app/src/web/staticres/jyapp/tags/js/index.js
  22. 27 2
      src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js
  23. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_client_buyer_project_news.html
  24. 12 2
      src/jfw/modules/app/src/web/templates/big-member/page_client_portrayal.html
  25. 25 7
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  26. 99 0
      src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_loading.html
  27. 10 1
      src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_project_news.html
  28. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_free_ent_project_news.html
  29. 25 7
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  30. 0 51
      src/jfw/modules/app/src/web/templates/followent/list.html
  31. 97 1
      src/jfw/modules/app/src/web/templates/frontRouter/fileRecord/sess/index.html
  32. 11 4
      src/jfw/modules/app/src/web/templates/frontRouter/userMerge/free/confirm.html
  33. 10 10
      src/jfw/modules/app/src/web/templates/me/account.html
  34. 1 0
      src/jfw/modules/app/src/web/templates/tags/class.html
  35. 1 0
      src/jfw/modules/app/src/web/templates/tags/details.html
  36. 1 0
      src/jfw/modules/app/src/web/templates/tags/strategy.html
  37. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-area-nav.html
  38. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-breadcrumb-navigation.html
  39. 13 0
      src/jfw/modules/app/src/web/templates/tags/template/tag-footer-concat.html
  40. 1 1
      src/jfw/modules/app/src/web/templates/tags/template/tag-footer.html
  41. 1 0
      src/jfw/modules/app/src/web/templates/tags/template/tag-header.html
  42. 0 44
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  43. 248 108
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  44. 5 1
      src/jfw/modules/bigmember/src/config.json
  45. 9 5
      src/jfw/modules/bigmember/src/config/config.go
  46. 2 2
      src/jfw/modules/bigmember/src/entity/followProject.go
  47. 2 2
      src/jfw/modules/bigmember/src/entity/portrait.go
  48. 77 21
      src/jfw/modules/bigmember/src/entity/portrait_screen.go
  49. 4 4
      src/jfw/modules/bigmember/src/go.mod
  50. 8 8
      src/jfw/modules/bigmember/src/go.sum
  51. 13 2
      src/jfw/modules/bigmember/src/service/follow/enterprise.go
  52. 17 3
      src/jfw/modules/bigmember/src/service/follow/project.go
  53. 21 24
      src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go
  54. 18 30
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  55. 2 92
      src/jfw/modules/followent/src/web/templates/weixin/list.html
  56. 2 1
      src/jfw/modules/publicapply/src/config.json
  57. 1 0
      src/jfw/modules/publicapply/src/config/config.go
  58. 4 0
      src/jfw/modules/publicapply/src/identity/service/action.go
  59. 103 0
      src/jfw/modules/publicapply/src/identity/service/service.go
  60. 27 12
      src/jfw/modules/publicapply/src/oneclick/entity/entity.go
  61. 25 1
      src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go
  62. 7 7
      src/jfw/modules/subscribepay/src/baseApi.json
  63. 11 10
      src/jfw/modules/subscribepay/src/config.json
  64. 1 1
      src/jfw/modules/subscribepay/src/config.yaml
  65. 4 3
      src/jfw/modules/subscribepay/src/config/config.go
  66. 69 71
      src/jfw/modules/subscribepay/src/entity/basePack.go
  67. 23 18
      src/jfw/modules/subscribepay/src/entity/commonApi.go
  68. 1 1
      src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go
  69. 1 1
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  70. 13 15
      src/jfw/modules/subscribepay/src/entity/resourcePackStruct.go
  71. 1 1
      src/jfw/modules/subscribepay/src/go.mod
  72. 26 8
      src/jfw/modules/subscribepay/src/service/basePack.go
  73. 8 10
      src/jfw/modules/subscribepay/src/service/resourcePack.go
  74. 48 0
      src/jfw/modules/subscribepay/src/service/userAccountInfo.go
  75. 1 1
      src/jfw/modules/subscribepay/src/util/db.go
  76. 1 0
      src/jfw/modules/weixin/src/config.json
  77. 6 0
      src/jfw/modules/weixin/src/go.mod
  78. 4 0
      src/jfw/modules/weixin/src/go.sum
  79. 12 3
      src/jfw/modules/weixin/src/wx/wx.go
  80. 16 0
      src/web/staticres/big-member/css/unit_portrayal.css
  81. 54 8
      src/web/staticres/big-member/js/unit_portrayal.js
  82. 7 0
      src/web/staticres/big-member/js/utils.js
  83. 16 0
      src/web/staticres/big-member/weixin/css/ent_portrait.css
  84. 16 0
      src/web/staticres/common-module/big-member/css/client_portrayal.css
  85. 26 5
      src/web/staticres/common-module/big-member/js/client_portrayal.js
  86. 34 1
      src/web/staticres/common-module/big-member/js/high_set.js
  87. BIN
      src/web/staticres/common-module/collection/image/save-pic-bg.png
  88. BIN
      src/web/staticres/common-module/collection/image/subscribe-icon.png
  89. BIN
      src/web/staticres/common-module/collection/image/wx2.png
  90. 56 4
      src/web/staticres/common-module/collection/js/ent_portrait.js
  91. BIN
      src/web/staticres/common-module/file-pack/images/dialog-bg.png
  92. 100 33
      src/web/staticres/common-module/file-pack/js/index-wx.js
  93. 140 19
      src/web/staticres/common-module/file-pack/js/index.js
  94. 0 27
      src/web/staticres/common-module/history-push/js/historypush.js
  95. 13 9
      src/web/staticres/common-module/perfect-info/js/perfect-info.js
  96. 7 0
      src/web/staticres/common-module/public/js/utils.js
  97. BIN
      src/web/staticres/common-module/task/frame.png
  98. BIN
      src/web/staticres/common-module/task/task-app.png
  99. BIN
      src/web/staticres/common-module/task/task-bdsjh.png
  100. BIN
      src/web/staticres/common-module/task/task-bdyx.png

+ 1 - 1
src/go.mod

@@ -4,7 +4,7 @@ go 1.19
 
 
 require (
 require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
-	app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40
+	app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed
 	app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14

+ 2 - 2
src/go.sum

@@ -5,8 +5,8 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40 h1:/FcBvpf/KW8g6GBfTkypVW1pGbNs+iNhDrUGUi+KNjc=
-app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6 h1:uyaBp5Iuc/Il4+O2n92CyU9LPvHetFzQVC8iS9iLFOc=
+app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 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/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed h1:rd5FDHAWiM1MLbgi79KBpRTMQfH5e2Y+knkk2JMsFP4=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed h1:rd5FDHAWiM1MLbgi79KBpRTMQfH5e2Y+knkk2JMsFP4=

+ 115 - 13
src/jfw/front/classificationTag.go

@@ -3,14 +3,17 @@ package front
 import (
 import (
 	qu "app.yhyue.com/moapp/jybase/common"
 	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/config"
 	"jy/src/jfw/config"
 	"log"
 	"log"
 	"strconv"
 	"strconv"
+	"strings"
 	"sync"
 	"sync"
 	"time"
 	"time"
 
 
@@ -60,17 +63,16 @@ func GetWinnerInfo() (data []*BuyerList) {
 		return cache
 		return cache
 	}
 	}
 	// 没取到缓存查数据
 	// 没取到缓存查数据
-	rs := getEntBaseInfo(IdentityTypeWinner, config.HotWinnerConfig.Limit)
+	rs := GetHotWinnerBuyer(IdentityTypeWinner, config.HotWinnerConfig.Limit)
 	//关联中标企业
 	//关联中标企业
-	if rs == nil || len(*rs) == 0 {
+	if rs == nil || len(rs) == 0 {
 		return
 		return
 	}
 	}
 
 
-	for _, v := range *rs {
+	for _, v := range rs {
 		var vs BuyerList
 		var vs BuyerList
-		id := encrypt.EncodeArticleId2ByCheck(qu.InterfaceToStr(v["id"]))
 		vs.Name = qu.InterfaceToStr(v["name"])
 		vs.Name = qu.InterfaceToStr(v["name"])
-		vs.Url = fmt.Sprintf("/swordfish/page_big_pc/ent_portrait/%s", id)
+		vs.Url = qu.InterfaceToStr(v["url"])
 		data = append(data, &vs)
 		data = append(data, &vs)
 	}
 	}
 	// 存缓存
 	// 存缓存
@@ -114,6 +116,105 @@ func getEntBaseInfo(identityType, limit int) *[]map[string]interface{} {
 
 
 }
 }
 
 
+func GetHotWinnerBuyer(identityType, limit int) []map[string]interface{} {
+	isWinner := identityType == 1
+	queryTotal := gconv.Int(gconv.Float64(limit) * 1.5)
+	var querySql string
+	if isWinner {
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}],"must_not":[{"term":{"entidlist":"-"}}]}},"_source":["buyer","s_winner","entidlist"],"size": %d}`, queryTotal)
+	} else {
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "buyer"}}]}},"_source":["buyer","s_winner","entidlist"],"size": %d}`, queryTotal)
+	}
+	getData := elastic.GetNoLimit("projectset", "projectset", querySql)
+	var finalList []map[string]interface{}
+	if getData != nil && len(*getData) > 0 {
+		queryMap := make(map[string]bool)
+		if isWinner { //采购关联企业 校验正确性
+			var queryArr []string
+			for _, v := range *getData {
+				if len(queryArr) < queryTotal {
+					for _, name := range gconv.Strings(v["entidlist"]) {
+						if name == "" || name == "-" {
+							continue
+						}
+						if queryMap[name] {
+							continue
+						}
+						queryArr = append(queryArr, name)
+						queryMap[name] = true
+
+						if len(queryArr) == queryTotal {
+							break
+						}
+					}
+				}
+			}
+			finalList = getWinnerSeoIdByName(queryArr...)
+		} else {
+			var queryArr []string
+			for _, v := range *getData {
+				buyerName := gconv.String(v["buyer"])
+				if queryMap[buyerName] {
+					continue
+				}
+				queryArr = append(queryArr, buyerName)
+				queryMap[buyerName] = true
+			}
+			finalList = getBuyerSeoIdByName(queryArr...)
+		}
+	}
+	if len(finalList) > limit {
+		finalList = finalList[:limit]
+	}
+	return finalList
+}
+
+// 根据企业名称获取seoid
+// query: company_name 根据名字匹配
+// query: _id 根据entid匹配
+func getWinnerSeoIdByName(winners ...string) (res []map[string]interface{}) {
+	if len(winners) == 0 {
+		return
+	}
+	winnerRes := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"terms":{"_id":["%s"]}},"_source":[%s],"size":%d}`, strings.Join(winners, `","`), `"nseo_id","company_name"`, len(winners)))
+	if winnerRes != nil && len(*winnerRes) > 0 {
+		for _, m := range *winnerRes {
+			name := gconv.String(m["company_name"])
+			sid := gconv.String(m["nseo_id"])
+			if name != "" && sid != "" {
+				res = append(res, map[string]interface{}{
+					"name":  name,
+					"seoId": sid,
+					"url":   fmt.Sprintf("/qy/%s.html", sid),
+				})
+			}
+		}
+	}
+	return
+}
+
+// 根据采购单位名字获取seoid
+func getBuyerSeoIdByName(buyer ...string) (res []map[string]interface{}) {
+	if len(buyer) == 0 {
+		return
+	}
+	buyerRes := elastic.GetNoLimit("buyer", "buyer", fmt.Sprintf(`{"query":{"terms":{"buyer_name":["%s"]}},"_source":[%s],"size":%d}`, strings.Join(buyer, `","`), `"seo_id","name"`, len(buyer)))
+	if buyerRes != nil && len(*buyerRes) > 0 {
+		for _, m := range *buyerRes {
+			name := gconv.String(m["name"])
+			sid := gconv.String(m["seo_id"])
+			if name != "" && sid != "" {
+				res = append(res, map[string]interface{}{
+					"name":  name,
+					"seoId": sid,
+					"url":   fmt.Sprintf("/dw/%s.html", sid),
+				})
+			}
+		}
+	}
+	return
+}
+
 // ContentRecommendation 实用内容推荐
 // ContentRecommendation 实用内容推荐
 func ContentRecommendation() []KeyType {
 func ContentRecommendation() []KeyType {
 	if bytes, err := redis.GetBytes(RedisNameNew, "contentRecommendation"); err == nil && bytes != nil {
 	if bytes, err := redis.GetBytes(RedisNameNew, "contentRecommendation"); err == nil && bytes != nil {
@@ -251,26 +352,27 @@ type BuyerList struct {
 }
 }
 
 
 // 热门采购单位
 // 热门采购单位
-func HotBuyerList(entIsNew bool) []*BuyerList {
+func HotBuyerList() []*BuyerList {
 	// 取缓存
 	// 取缓存
 	cache, err := GetHotCache(config.HotBuyerConfig.CacheKey)
 	cache, err := GetHotCache(config.HotBuyerConfig.CacheKey)
 	if err == nil && cache != nil && len(cache) > 0 {
 	if err == nil && cache != nil && len(cache) > 0 {
 		return cache
 		return cache
 	}
 	}
 	// 查数据
 	// 查数据
-	data := getEntBaseInfo(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
-	if data == nil || len(*data) == 0 {
+	//data := getEntBaseInfo(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
+	data := GetHotWinnerBuyer(IdentityTypeBuyer, config.HotBuyerConfig.Limit)
+	if data == nil || len(data) == 0 {
 		return nil
 		return nil
 	}
 	}
 	var buyerList []*BuyerList
 	var buyerList []*BuyerList
-	for _, b := range *data {
+	for _, b := range data {
 		name := qu.ObjToString(b["name"])
 		name := qu.ObjToString(b["name"])
-		buyerId := qu.ObjToString(b["name_id"])
-		if name != "" && buyerId != "" {
-			idEncode := encrypt.EncodeArticleId2ByCheck(buyerId)
+		url := qu.InterfaceToStr(b["url"])
+		if name != "" && url != "" {
+			//idEncode := encrypt.EncodeArticleId2ByCheck(buyerId)
 			buyerList = append(buyerList, &BuyerList{
 			buyerList = append(buyerList, &BuyerList{
 				Name: name,
 				Name: name,
-				Url:  qu.If(entIsNew, fmt.Sprintf("/entpc/unit_portrayal_id/%s", idEncode), fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal_id/%s", idEncode)).(string),
+				Url:  url,
 			})
 			})
 		}
 		}
 	}
 	}

+ 36 - 23
src/jfw/front/front.go

@@ -882,35 +882,39 @@ func (m *Front) Sess(ostr string) error {
 	if len(str) == 4 {
 	if len(str) == 4 {
 		userFlag := str[0]
 		userFlag := str[0]
 		ok := false
 		ok := false
-		var identity *pb.Identity
-		if str[1] == "userId" || str[1] == "entUserId" || str[1] == "positionId" {
-			if str[1] == "userId" {
-				identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(userFlag))
-			} else if str[1] == "entUserId" {
-				identity = config.Middleground.UserCenter.IdentityByEntUserId(util.Int64All(userFlag))
-			} else if str[1] == "positionId" {
-				identity = config.Middleground.UserCenter.IdentityByPositionId(util.Int64All(userFlag))
-			}
-			if identity != nil {
-				ok, _, _ = FindUserAndCreateSessByBaseUserId(identity.UserId, m.Session(), false, false)
-			}
+		if str[2] == "identityKeep" && m.GetSession("positionId") != nil {
+			ok = true
 		} else {
 		} else {
-			hasIdentity := false
-			if str[1] == "_id" {
-				ok, _, _ = FindUserAndCreateSessById(mgdb.StringTOBsonId(userFlag), m.Session(), false, !hasIdentity)
+			var identity *pb.Identity
+			if str[1] == "userId" || str[1] == "entUserId" || str[1] == "positionId" {
+				if str[1] == "userId" {
+					identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(userFlag))
+				} else if str[1] == "entUserId" {
+					identity = config.Middleground.UserCenter.IdentityByEntUserId(util.Int64All(userFlag))
+				} else if str[1] == "positionId" {
+					identity = config.Middleground.UserCenter.IdentityByPositionId(util.Int64All(userFlag))
+				}
+				if identity != nil {
+					ok, _, _ = FindUserAndCreateSessByBaseUserId(identity.UserId, m.Session(), false, false)
+				}
 			} else {
 			} else {
-				if m.GetSession("positionId") != nil {
-					hasIdentity = true
+				hasIdentity := false
+				if str[1] == "_id" {
+					ok, _, _ = FindUserAndCreateSessById(mgdb.StringTOBsonId(userFlag), m.Session(), false, !hasIdentity)
+				} else {
+					if m.GetSession("positionId") != nil {
+						hasIdentity = true
+					}
+					ok, _, _ = FindUserAndCreateSess(userFlag, m.Session(), "wx", false, !hasIdentity)
+				}
+				if !hasIdentity {
+					identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(m.GetSession("base_user_id")))
 				}
 				}
-				ok, _, _ = FindUserAndCreateSess(userFlag, m.Session(), "wx", false, !hasIdentity)
 			}
 			}
-			if !hasIdentity {
-				identity = config.Middleground.UserCenter.IdentityByUserId(util.Int64All(m.GetSession("base_user_id")))
+			if identity != nil {
+				ok = ok && NewIdentityInfo(identity).Switch(m.Session(), &public.MQFW)
 			}
 			}
 		}
 		}
-		if identity != nil {
-			ok = ok && NewIdentityInfo(identity).Switch(m.Session(), &public.MQFW)
-		}
 		if ok {
 		if ok {
 			actionurl := ""
 			actionurl := ""
 			if str[3] == "" {
 			if str[3] == "" {
@@ -1138,6 +1142,15 @@ func (f *Front) TSGuide() error {
 					"i_ts_guide":        2,
 					"i_ts_guide":        2,
 					"o_jy.i_newfree":    1,
 					"o_jy.i_newfree":    1,
 				}
 				}
+				nsqPath, _ := config.Sysconfig["nsq"].(string)
+				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": f.GetSession("base_user_id"),
+					"positionId": f.GetSession("positionId"),
+				})
 				result["flag"] = jyutil.Compatible.Update(userid, bson.M{"$set": saveData})
 				result["flag"] = jyutil.Compatible.Update(userid, bson.M{"$set": saveData})
 			}
 			}
 		} else if reqType == "over" {
 		} else if reqType == "over" {

+ 51 - 0
src/jfw/front/frontRouter.go

@@ -1,6 +1,10 @@
 package front
 package front
 
 
 import (
 import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/config"
 	"jy/src/jfw/config"
@@ -217,9 +221,56 @@ func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	if !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
 	if !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
 		return this.Redirect("/notin/page")
 		return this.Redirect("/notin/page")
 	}
 	}
+	if userid == "" {
+		if strings.Contains(pageSign, "ent_ser_portrait") || strings.Contains(pageSign, "ent_portrait") {
+			urlArr := strings.Split(pageSign, "_portrait/")
+			entId := encrypt.DecodeArticleId2ByCheck(urlArr[len(urlArr)-1])[0]
+			if seoId := esSeoId(true, entId); seoId != "" {
+				return this.Redirect(fmt.Sprintf("/qy/%s.html", seoId))
+			}
+		} else if strings.Contains(pageSign, "unit_portrayal") {
+			urlArr := strings.Split(pageSign, "unit_portrayal/")
+			//buyerName := urlArr[len(urlArr)-1]
+			// 解码 URL 编码的字符串
+			buyer, _ := url.QueryUnescape(urlArr[len(urlArr)-1])
+			//buyer := this.GetString("buyer")
+			if seoId := esSeoId(false, buyer); seoId != "" {
+				return this.Redirect(fmt.Sprintf("/dw/%s.html", seoId))
+			}
+		}
+	}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 }
 }
 
 
+func esSeoId(isWinner bool, idName string) string {
+	if idName == "" {
+		return idName
+	}
+	var seoId string
+	redisKey := fmt.Sprintf("getSeoId_%v_%s", isWinner, idName)
+	seoId = redis.GetStr("newother", redisKey)
+	if seoId != "" {
+		return seoId
+	}
+
+	if isWinner {
+		winnerSeo := elastic.GetById("qyxy", "qyxy", idName)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = common.InterfaceToStr((*winnerSeo)[0]["nseo_id"])
+		}
+	} else {
+		q := fmt.Sprintf(`{"query": {"bool": {"must": [{"match": {"buyer_name": "%s"}}]}},"from": 0,"size": 1,"_source":["seo_id"]}`, idName)
+		winnerSeo := elastic.Get("buyer", "buyer", q)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = common.InterfaceToStr((*winnerSeo)[0]["seo_id"])
+		}
+	}
+	if seoId != "" {
+		redis.Put("newother", redisKey, seoId, -1)
+	}
+	return seoId
+}
+
 // 卡卷
 // 卡卷
 func (this *CommonRouter) CouponIndex() error {
 func (this *CommonRouter) CouponIndex() error {
 	return this.doCouponPage()
 	return this.doCouponPage()

+ 19 - 10
src/jfw/front/login.go

@@ -1,6 +1,14 @@
 package front
 package front
 
 
 import (
 import (
+	"fmt"
+	"jy/src/jfw/config"
+	jutil "jy/src/jfw/jyutil"
+	"log"
+	"regexp"
+	"strings"
+	"time"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
@@ -11,14 +19,7 @@ import (
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"fmt"
 	"go.mongodb.org/mongo-driver/bson/primitive"
 	"go.mongodb.org/mongo-driver/bson/primitive"
-	"jy/src/jfw/config"
-	jutil "jy/src/jfw/jyutil"
-	"log"
-	"regexp"
-	"strings"
-	"time"
 )
 )
 
 
 type Login struct {
 type Login struct {
@@ -178,10 +179,11 @@ func (l *Login) Login() error {
 						data["s_tracksource"] = source
 						data["s_tracksource"] = source
 					}
 					}
 					//获取base_user_id
 					//获取base_user_id
-					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+					resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
 						Appid: "10000",
 						Appid: "10000",
 						Phone: phone,
 						Phone: phone,
-					}); resp != nil && resp.Data.Id > 0 {
+					})
+					if resp != nil && resp.Data.Id > 0 {
 						data["base_user_id"] = resp.Data.Id
 						data["base_user_id"] = resp.Data.Id
 					} else {
 					} else {
 						log.Println(phone, "调用usercenter失败")
 						log.Println(phone, "调用usercenter失败")
@@ -201,7 +203,14 @@ func (l *Login) Login() error {
 						if ok {
 						if ok {
 							result["userInfo"] = userInfo
 							result["userInfo"] = userInfo
 							go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
 							go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
-							return 2, true
+							jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", _id, jy.Jyweb_node2, map[string]interface{}{
+								"code":       1007, //绑定手机号任务
+								"types":      "bindPhone",
+								"num":        50,
+								"baseUserId": resp.Data.Id,
+								"positionId": l.GetSession("positionId"),
+							})
+                            return 2, true
 						}
 						}
 					}
 					}
 				} else {
 				} else {

+ 20 - 0
src/jfw/front/org_structure.go

@@ -21,6 +21,7 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 
 
 	util "app.yhyue.com/moapp/jybase/common"
 	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 
 
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
@@ -194,6 +195,25 @@ func (this *OrgStructure) AutoLogon() error {
 			}); resp != nil && resp.Data.Id > 0 {
 			}); resp != nil && resp.Data.Id > 0 {
 				data["base_user_id"] = resp.Data.Id
 				data["base_user_id"] = resp.Data.Id
 				if id := mongodb.Save("user", data); id != "" {
 				if id := mongodb.Save("user", data); id != "" {
+
+					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{}{
+						"code":       1007,
+						"types":      "bindPhone",
+						"num":        50,
+						"baseUserId": resp.Data.Id,
+						"positionId": this.GetSession("positionId"),
+					})
+					if mail != "" {
+						jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", id, jy.Jyweb_node2, map[string]interface{}{
+							"code":       1009,
+							"types":      "bindMail",
+							"num":        50,
+							"baseUserId": resp.Data.Id,
+							"positionId": this.GetSession("positionId"),
+						})
+					}
 					rb = true
 					rb = true
 				}
 				}
 			} else {
 			} else {

+ 7 - 7
src/jfw/front/pcIndex.go

@@ -159,11 +159,11 @@ func (m *PcIndex) NewSordfish(flag string) error {
 		} else if flag == "tmp" {
 		} else if flag == "tmp" {
 			return m.Render("/pc/index_tmp.html", &m.T)
 			return m.Render("/pc/index_tmp.html", &m.T)
 		} else {
 		} else {
-			var entIsNew bool
-			if userId != "" {
-				bigBaseMsg := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
-				entIsNew = bigBaseMsg.EntIsNew
-			}
+			//var entIsNew bool
+			//if userId != "" {
+			//	bigBaseMsg := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
+			//	entIsNew = bigBaseMsg.EntIsNew
+			//}
 			//按地区、信息类型、热门招标
 			//按地区、信息类型、热门招标
 			for k, v := range RegionAndInformationAndTender() {
 			for k, v := range RegionAndInformationAndTender() {
 				m.T[k] = v
 				m.T[k] = v
@@ -201,8 +201,6 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["jycmsLink"] = GetJycmsAreaLink()
 			m.T["jycmsLink"] = GetJycmsAreaLink()
 			//推荐标讯专区
 			//推荐标讯专区
 			m.T["recommendBeacon"] = RecommendationBeacon()
 			m.T["recommendBeacon"] = RecommendationBeacon()
-			//热门采购单位
-			m.T["hotBuyers"] = HotBuyerList(entIsNew)
 			//招投标攻略
 			//招投标攻略
 			var strategyList []map[string]interface{}
 			var strategyList []map[string]interface{}
 			for _, item := range jySchool.GuidelineColumn().SeedData {
 			for _, item := range jySchool.GuidelineColumn().SeedData {
@@ -217,6 +215,8 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["strategyList"] = strategyList
 			m.T["strategyList"] = strategyList
 			m.T["hasLogin"] = userId != ""
 			m.T["hasLogin"] = userId != ""
 			m.T["includedInfo"] = GetIncludedInfo()
 			m.T["includedInfo"] = GetIncludedInfo()
+			//热门采购单位
+			m.T["hotBuyers"] = HotBuyerList()
 			m.T["hotWinner"] = GetWinnerInfo()
 			m.T["hotWinner"] = GetWinnerInfo()
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)
 			m.T["hotkey"] = hotKeyArrLoginEd
 			m.T["hotkey"] = hotKeyArrLoginEd

+ 52 - 0
src/jfw/modules/app/src/app/front/bigMember.go

@@ -2,12 +2,17 @@ package front
 
 
 import (
 import (
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
+	"fmt"
 	"jy/src/jfw/modules/app/src/jfw/config"
 	"jy/src/jfw/modules/app/src/jfw/config"
 	"regexp"
 	"regexp"
+	"strings"
 )
 )
 
 
 type NewBigMemberAction struct {
 type NewBigMemberAction struct {
@@ -37,6 +42,7 @@ func (s *NewBigMemberAction) PowerClear() {
 }
 }
 
 
 func (s *NewBigMemberAction) VipPageManager(htmlName string) error {
 func (s *NewBigMemberAction) VipPageManager(htmlName string) error {
+	userid, _ := s.GetSession("userId").(string)
 	if !freePageReg.MatchString(htmlName) {
 	if !freePageReg.MatchString(htmlName) {
 		bigBaseMsg := jy.GetBigVipUserBaseMsg(s.Session(), *config.Middleground)
 		bigBaseMsg := jy.GetBigVipUserBaseMsg(s.Session(), *config.Middleground)
 		//大会员页面权限判断
 		//大会员页面权限判断
@@ -51,5 +57,51 @@ func (s *NewBigMemberAction) VipPageManager(htmlName string) error {
 		//	return s.Redirect("/jyapp/big/page/init") //跳转至首次初始化页面
 		//	return s.Redirect("/jyapp/big/page/init") //跳转至首次初始化页面
 		//}
 		//}
 	}
 	}
+	if userid == "" {
+		if strings.Contains(htmlName, "ent_ser_portrait") || strings.Contains(htmlName, "ent_portrait") {
+			//urlArr := strings.Split(htmlName, "/")
+			entId := encrypt.DecodeArticleId2ByCheck(s.GetString("eId"))[0]
+			if seoId := esSeoId(true, entId); seoId != "" {
+				return s.Redirect(fmt.Sprintf("/qy/%s.html", seoId))
+			}
+		} else if strings.Contains(htmlName, "unit_portrayal") {
+			//urlArr := strings.Split(htmlName, "/")
+			//buyerName := urlArr[len(urlArr)-1]
+			// 解码 URL 编码的字符串
+			buyer := s.GetString("entName")
+			//buyer := this.GetString("buyer")
+			if seoId := esSeoId(false, buyer); seoId != "" {
+				return s.Redirect(fmt.Sprintf("/dw/%s.html", seoId))
+			}
+		}
+	}
 	return s.Render("/big-member/page_" + htmlName + ".html")
 	return s.Render("/big-member/page_" + htmlName + ".html")
 }
 }
+
+func esSeoId(isWinner bool, idName string) string {
+	if idName == "" {
+		return idName
+	}
+	var seoId string
+	redisKey := fmt.Sprintf("getSeoId_%v_%s", isWinner, idName)
+	seoId = redis.GetStr("newother", redisKey)
+	if seoId != "" {
+		return seoId
+	}
+	if isWinner {
+		winnerSeo := elastic.GetById("qyxy", "qyxy", idName)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = qutil.InterfaceToStr((*winnerSeo)[0]["nseo_id"])
+		}
+	} else {
+		q := fmt.Sprintf(`{"query": {"bool": {"must": [{"match": {"buyer_name": "%s"}}]}},"from": 0,"size": 1,"_source":["seo_id"]}`, idName)
+		winnerSeo := elastic.Get("buyer", "buyer", q)
+		if winnerSeo != nil && len(*winnerSeo) > 0 {
+			seoId = qutil.InterfaceToStr((*winnerSeo)[0]["seo_id"])
+		}
+	}
+	if seoId != "" {
+		redis.Put("newother", redisKey, seoId, -1)
+	}
+	return seoId
+}

+ 9 - 0
src/jfw/modules/app/src/app/front/front.go

@@ -340,6 +340,15 @@ func (f *Front) TSGuide() error {
 					"i_ts_guide":        2,
 					"i_ts_guide":        2,
 					"o_jy.i_newfree":    1,
 					"o_jy.i_newfree":    1,
 				}
 				}
+				nsqPath, _ := config.Sysconfig["nsq"].(string)
+				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": f.GetSession("base_user_id"),
+					"positionId": f.GetSession("positionId"),
+				})
 				result["flag"] = utils.Compatible.Update(userid, map[string]interface{}{"$set": saveData})
 				result["flag"] = utils.Compatible.Update(userid, map[string]interface{}{"$set": saveData})
 			}
 			}
 		} else if reqType == "over" {
 		} else if reqType == "over" {

+ 61 - 14
src/jfw/modules/app/src/app/front/login.go

@@ -106,7 +106,9 @@ func (l *Login) Login() error {
 	}
 	}
 	returnSign := ""
 	returnSign := ""
 	userInfo := map[string]interface{}{}
 	userInfo := map[string]interface{}{}
-	status, state := func() (int, int) {
+    status, state := func() (int, int) {
+		nsqPath, _ := config.Sysconfig["nsq"].(string)
+		nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 		reqType := l.GetString("reqType")
 		reqType := l.GetString("reqType")
 		if reqType == "phoneLogin" {
 		if reqType == "phoneLogin" {
 			phone := l.GetString("phone")
 			phone := l.GetString("phone")
@@ -132,7 +134,14 @@ func (l *Login) Login() error {
 				deviceId := l.GetString("deviceId")
 				deviceId := l.GetString("deviceId")
 				phoneType := l.GetString("phoneType")
 				phoneType := l.GetString("phoneType")
 				returnSign = afterLogin((*user)[0], l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
 				returnSign = afterLogin((*user)[0], l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
-				return 1, 1
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", BsonIdToSId((*user)[0]["_id"]), jy.Jyapp_node1, map[string]interface{}{
+					"code":       1014, //下载app任务
+					"types":      "downloadApp",
+					"num":        50,
+					"baseUserId": l.GetSession("base_user_id"),
+					"positionId": l.GetSession("positionId"),
+				})
+                return 1, 1
 			}
 			}
 			return -1, -1 //用户名或密码不正确
 			return -1, -1 //用户名或密码不正确
 		} else if reqType == "signLogin" {
 		} else if reqType == "signLogin" {
@@ -239,29 +248,34 @@ func (l *Login) Login() error {
 
 
 						jy.ClearPhoneIdentSession(l.Session())
 						jy.ClearPhoneIdentSession(l.Session())
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
-						addr, _ := config.Sysconfig["nsq"].(string)
-						nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 						if disWord != "" {
 						if disWord != "" {
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							//邀请新用户 调用队列
 							//邀请新用户 调用队列
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 								fromUserId := redisDisArr[1]
 								fromUserId := redisDisArr[1]
-								err := jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
+								err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
 								if err != nil {
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 								}
 								}
-								err = jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jywx_subscribe_invited, _id, jy.Jyapp_node1, nil)
+								err = jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invited, _id, jy.Jyapp_node1, nil)
 								if err != nil {
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, _id)
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, _id)
 								}
 								}
 							}
 							}
 						} else {
 						} else {
-							err := jy.Publish(public.Mgo_Log, addr, nsq_topic, jy.Jyapp_phone_register, _id, jy.Jyapp_node1, nil)
+							err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jyapp_phone_register, _id, jy.Jyapp_node1, nil)
 							if err != nil {
 							if err != nil {
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, _id)
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, _id)
 							}
 							}
 						}
 						}
-						return 1, 3
+						jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", _id, jy.Jyapp_node1, map[string]interface{}{
+							"code":       1014, //下载app任务
+							"types":      "downloadApp",
+							"num":        50,
+							"baseUserId": l.GetSession("base_user_id"),
+							"positionId": l.GetSession("positionId"),
+						})
+                        return 1, 3
 					}
 					}
 				} else {
 				} else {
 					//以s_m_phone登录的 需要把s_m_phone转化为s_phone
 					//以s_m_phone登录的 需要把s_m_phone转化为s_phone
@@ -282,7 +296,14 @@ func (l *Login) Login() error {
 					}
 					}
 					jy.ClearPhoneIdentSession(l.Session())
 					jy.ClearPhoneIdentSession(l.Session())
 					returnSign = afterLogin(user, l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
 					returnSign = afterLogin(user, l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
-					return 1, 4
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", BsonIdToSId(user["_id"]), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
+                    return 1, 4
 				}
 				}
 			}
 			}
 		}
 		}
@@ -484,6 +505,8 @@ func (l *Login) Register() error {
 		return l.Render("/me/register.html", &l.T)
 		return l.Render("/me/register.html", &l.T)
 	}
 	}
 	var returnSign string
 	var returnSign string
+	nsqPath, _ := config.Sysconfig["nsq"].(string)
+	nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 	status := func() string {
 	status := func() string {
 		reqType := l.GetString("reqType")
 		reqType := l.GetString("reqType")
 		if reqType == "sendIdentCode" { //发短信
 		if reqType == "sendIdentCode" { //发短信
@@ -540,25 +563,23 @@ func (l *Login) Register() error {
 				registerclient := jy.NewRegister(jyutil.Compatible.Mgo, jyutil.Compatible.BaseService, jyutil.Compatible.MainMysql, jyutil.Compatible.Middleground)
 				registerclient := jy.NewRegister(jyutil.Compatible.Mgo, jyutil.Compatible.BaseService, jyutil.Compatible.MainMysql, jyutil.Compatible.Middleground)
 				_, errStr = registerclient.PublicRegister(phone, email, isAndroidOrIOS(l.Header("User-Agent")), data, func(saveid string) {
 				_, errStr = registerclient.PublicRegister(phone, email, isAndroidOrIOS(l.Header("User-Agent")), data, func(saveid string) {
 
 
-					addr := config.Sysconfig["nsq"].(string)
-					topic := config.Sysconfig["nsq_topic"].(string)
 					go func() {
 					go func() {
 						if disWord != "" {
 						if disWord != "" {
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 							//邀请新用户 调用队列
 							//邀请新用户 调用队列
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 							if redisDisArr := strings.Split(redisDis, "##"); len(redisDisArr) > 1 {
 								fromUserId := redisDisArr[1]
 								fromUserId := redisDisArr[1]
-								err := jy.Publish(public.Mgo_Log, addr, topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
+								err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invite, fromUserId, jy.Jyapp_node1, nil)
 								if err != nil {
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, fromUserId)
 								}
 								}
-								err = jy.Publish(public.Mgo_Log, addr, topic, jy.Jywx_subscribe_invited, saveid, jy.Jyapp_node1, nil)
+								err = jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jywx_subscribe_invited, saveid, jy.Jyapp_node1, nil)
 								if err != nil {
 								if err != nil {
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, saveid)
 									log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, saveid)
 								}
 								}
 							}
 							}
 						} else {
 						} else {
-							err := jy.Publish(public.Mgo_Log, addr, topic, jy.Jyapp_phone_register, saveid, jy.Jyapp_node1, nil)
+							err := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jyapp_phone_register, saveid, jy.Jyapp_node1, nil)
 							if err != nil {
 							if err != nil {
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, saveid)
 								log.Println("nsq队列写入失败-->", err, jy.Jyapp_phone_register, saveid)
 							}
 							}
@@ -566,9 +587,25 @@ func (l *Login) Register() error {
 					}()
 					}()
 					l.DelSession("registerStep")
 					l.DelSession("registerStep")
 					jy.ClearPhoneIdentSession(l.Session())
 					jy.ClearPhoneIdentSession(l.Session())
+
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
 				})
 				})
 				if errStr == "y" {
 				if errStr == "y" {
 					returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 					returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
+
+					jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+						"code":       1014, //下载app任务
+						"types":      "downloadApp",
+						"num":        50,
+						"baseUserId": l.GetSession("base_user_id"),
+						"positionId": l.GetSession("positionId"),
+					})
 					//登录source 更新 p414
 					//登录source 更新 p414
 					channelCode, ckErr := l.Request.Cookie(jy.ChannelCookieName)
 					channelCode, ckErr := l.Request.Cookie(jy.ChannelCookieName)
 					if ckErr != nil {
 					if ckErr != nil {
@@ -764,6 +801,16 @@ func (l *Login) WxLogin() {
 		}
 		}
 		return 0
 		return 0
 	}()
 	}()
+
+	nsqPath, _ := config.Sysconfig["nsq"].(string)
+	nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
+	jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", qutil.ObjToString(l.GetSession("mgoUserId")), jy.Jyapp_node1, map[string]interface{}{
+		"code":       1014, //下载app任务
+		"types":      "downloadApp",
+		"num":        50,
+		"baseUserId": l.GetSession("base_user_id"),
+		"positionId": l.GetSession("positionId"),
+	})
 	if status > 0 {
 	if status > 0 {
 		//登录source 更新 p414
 		//登录source 更新 p414
 		channelCode, ckErr := l.Request.Cookie(jy.ChannelCookieName)
 		channelCode, ckErr := l.Request.Cookie(jy.ChannelCookieName)

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

@@ -39,6 +39,9 @@ type Short struct {
 
 
 func init() {
 func init() {
 	xweb.AddAction(&Short{})
 	xweb.AddAction(&Short{})
+	if config.Seoconfig["hotArea"] != nil {
+		utils.HotArea = config.Seoconfig["hotArea"].(string)
+	}
 }
 }
 
 
 var DateFullLayout = "2006-01-02 15:04:05"
 var DateFullLayout = "2006-01-02 15:04:05"
@@ -194,6 +197,11 @@ func (s *Short) Article(contentType, stype, id string) error {
 					}
 					}
 				}
 				}
 			}
 			}
+		} else {
+			//未登录顶部导航
+			s.T["hotArea"] = utils.HotAreas
+			s.T["areaList"] = utils.AreaInfo
+			s.T["infoTypeList"], _ = utils.GetInfoType()
 		}
 		}
 		//超前项目推送处理
 		//超前项目推送处理
 		s.T["canRead"] = canRead
 		s.T["canRead"] = canRead
@@ -329,6 +337,21 @@ func (s *Short) Article(contentType, stype, id string) error {
 		obj["industry"] = industry
 		obj["industry"] = industry
 		obj["keywords"] = KeyWordHandle(obj)
 		obj["keywords"] = KeyWordHandle(obj)
 		obj["description"] = DescriptionHandle(stype, obj)
 		obj["description"] = DescriptionHandle(stype, obj)
+
+		if userId == "" {
+			var currentLocation []Navigation
+			if typeVal := util.ObjToString(obj["toptype"]); typeVal != "" {
+				if val := getSeoLocation(typeVal); val != nil {
+					currentLocation = append(currentLocation, *val)
+				}
+			}
+			if title := util.ObjToString(obj["title"]); title != "" {
+				currentLocation = append(currentLocation, Navigation{
+					Name: title,
+				})
+			}
+			s.T["currentLocation"] = currentLocation
+		}
 		s.T["obj"] = obj
 		s.T["obj"] = obj
 		s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
 		s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
 		content, err := s.Render4Cache("/weixin/wxinfocontent.html", &s.T)
 		content, err := s.Render4Cache("/weixin/wxinfocontent.html", &s.T)
@@ -343,6 +366,30 @@ func (s *Short) Article(contentType, stype, id string) error {
 	return s.Redirect("/jyapp/free/mob/err")
 	return s.Redirect("/jyapp/free/mob/err")
 }
 }
 
 
+var typeUrlMap = map[string]string{
+	"预告": "/list/stype/ZBYG.html",
+	"招标": "/list/stype/ZBGG.html",
+	"结果": "/list/stype/ZBJG.html",
+	"其它": "/list/stype/ZBXYXX.html",
+}
+
+func getSeoLocation(name string) *Navigation {
+	var url string
+
+	if url = typeUrlMap[name]; url != "" {
+		return &Navigation{
+			Name: name,
+			Url:  url,
+		}
+	}
+
+	switch name {
+
+	}
+
+	return nil
+}
+
 // 未登录用户进行数据过滤
 // 未登录用户进行数据过滤
 func Filter(obj map[string]interface{}) map[string]interface{} {
 func Filter(obj map[string]interface{}) map[string]interface{} {
 	detail := fmt.Sprint(obj["detail"])
 	detail := fmt.Sprint(obj["detail"])

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

@@ -640,3 +640,19 @@
     font-size: .26rem;
     font-size: .26rem;
     color: #2abed1;
     color: #2abed1;
 }
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 16 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/unit_portrayal.css

@@ -695,3 +695,19 @@
 .zb-analysis-module {
 .zb-analysis-module {
     margin-bottom: .08rem;
     margin-bottom: .08rem;
 }
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 56 - 2
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js

@@ -94,7 +94,9 @@ var vNode = {
         count: 1, // 总共多少条数据
         count: 1, // 总共多少条数据
         pageSize: 5,
         pageSize: 5,
         loaded: false,
         loaded: false,
-        showGetNextButton: true
+        showGetNextButton: true,
+        total: 0,
+        updateTime: 0
       },
       },
       entPortraitInfo: {
       entPortraitInfo: {
         project_count: 0
         project_count: 0
@@ -305,6 +307,27 @@ var vNode = {
     },
     },
     isFreeOrNotLogin () {
     isFreeOrNotLogin () {
       return !this.isLogin || this.isFree
       return !this.isLogin || this.isFree
+    },
+    // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+    updateVipStatus () {
+      var info = this.powerInfo
+      var isNoMember = info.memberStatus <= 0
+      var isOldVip = info.vipStatus > 0 && !info.viper
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus
+      var isNotAll = this.entvisit.provin !== -1
+      return (isOldVip || (isNewVip && isNotAll)) && isNoMember
+    },
+    // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+    customerServiceStatus: function () {
+      var info = this.powerInfo
+      var memberCustom = this.conf.arr.indexOf(13) === -1 && info.memberStatus > 0
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus && this.entvisit.provin === -1
+      // 纯商机管理用户
+      var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+      return memberCustom || isNewVip || entniche
+    },
+    noShowTip: function () {
+      return (!this.isFree && !this.updateVipStatus && !this.customerServiceStatus) || (this.isFree && this.canFreeTrial)
     }
     }
   },
   },
   methods: {
   methods: {
@@ -353,7 +376,7 @@ var vNode = {
         }
         }
         // 获取企业中标动态-13
         // 获取企业中标动态-13
         if (_this.conf._13) {
         if (_this.conf._13) {
-          _this.getProjectNews()
+          // _this.getProjectNews()
           _this.gotTab2 = true
           _this.gotTab2 = true
           console.log('获取企业中标动态...')
           console.log('获取企业中标动态...')
         }
         }
@@ -365,6 +388,8 @@ var vNode = {
           // }
           // }
         }
         }
         _this.gotTab2 = true
         _this.gotTab2 = true
+        // P396:所有用户均可获取企业中标动态
+        _this.getProjectNews()
 
 
       });
       });
     },
     },
@@ -641,6 +666,8 @@ var vNode = {
           if (res.error_code == 0) {
           if (res.error_code == 0) {
             _this.loading.clear()
             _this.loading.clear()
             _this.topProject.count = res.data.count
             _this.topProject.count = res.data.count
+            _this.topProject.total = res.data.count
+            _this.topProject.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
             if (!res.data.list || res.data.list.length == 0) {
             if (!res.data.list || res.data.list.length == 0) {
               // 新加变量 判断中标动态有无数据 用于展示缺省页组件
               // 新加变量 判断中标动态有无数据 用于展示缺省页组件
               _this.show.dt = false
               _this.show.dt = false
@@ -933,6 +960,9 @@ var vNode = {
             if (res.data && res.data == 'success') {
             if (res.data && res.data == 'success') {
               _this.entInfo.follow = !_this.entInfo.follow
               _this.entInfo.follow = !_this.entInfo.follow
             }
             }
+            if(_this.entInfo.follow) {
+              _this.pointsTaskSuccessTip()
+            }
 
 
             if (!_this.entInfo.follow) {
             if (!_this.entInfo.follow) {
               history.back()
               history.back()
@@ -947,6 +977,19 @@ var vNode = {
         }
         }
       })
       })
     },
     },
+    // 赚剑鱼币任务完成提示
+    pointsTaskSuccessTip: function() {
+      // 获取剑鱼币任务信息
+      const from =  utils.getParam('from')
+      var point = utils.getParam('point') || 0
+      if(from && from === 'task'){
+        this.$toast({
+          message: `关注企业成功,获得${point}剑鱼币。`,
+          duration: 1500
+        })
+        utils.delUrlParam('from')
+      }
+    },
     // 初始化图标数据
     // 初始化图标数据
     initChartsData: function () {
     initChartsData: function () {
       var dataSet = this.entPortraitInfo
       var dataSet = this.entPortraitInfo
@@ -1534,6 +1577,17 @@ var vNode = {
     goLogin: function () {
     goLogin: function () {
       window.location.href = "/jyapp/free/login?to=back";
       window.location.href = "/jyapp/free/login?to=back";
     },
     },
+    onDtTextClick: function(type) {
+      if (type === 'customer') {
+        location.href = '/jyapp/free/customer'
+      } else if (type === 'update') {
+        //跳转清除旧套餐缓存,防止计算价格出错
+        sessionStorage.removeItem('vipSub_oldBuySet')
+        location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+      } else if (type === 'buy') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+      }
+    }
   }
   }
 }
 }
 var vueComponent = new Vue(vNode)
 var vueComponent = new Vue(vNode)

+ 51 - 6
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -83,7 +83,9 @@ var vNode = {
         list: [],
         list: [],
         isMore: '',
         isMore: '',
         pageCount: '',
         pageCount: '',
-        isNext: true
+        isNext: true,
+        total: 0,
+        updateTime: 0
       },
       },
       regCapSettings: {
       regCapSettings: {
         showLine: ['累计采购规模'],
         showLine: ['累计采购规模'],
@@ -253,6 +255,24 @@ var vNode = {
     // 留完资的用户(保含已体验和未体验的)
     // 留完资的用户(保含已体验和未体验的)
     getfreeBuyerOpen: function () {
     getfreeBuyerOpen: function () {
       return this.userInfo.isFree && this.userInfo.freeBuyerPort != 0;
       return this.userInfo.isFree && this.userInfo.freeBuyerPort != 0;
+    },
+    // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+    customerServiceStatus: function () {
+      var info = this.userInfo
+      var memberCustom = this.power.indexOf(5) === -1 && info.memberStatus > 0
+      var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0 && this.usageInfo.provin === -1
+      // 纯商机管理用户
+      var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+      return memberCustom || isNewVip || entniche
+    },
+    // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+    updateVipStatus: function () {
+      var info = this.userInfo
+      var isNoMember = info.memberStatus <= 0
+      var isOldVip = info.vipStatus > 0 && !info.viper
+      var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0
+      var isNotAll = this.usageInfo.provin !== -1
+      return (isOldVip || (isNewVip && isNotAll)) && isNoMember
     }
     }
   },
   },
   watch: {
   watch: {
@@ -684,8 +704,10 @@ var vNode = {
         timeout: 8000,
         timeout: 8000,
         success: function (res) {
         success: function (res) {
           if (res.error_code == 0) {
           if (res.error_code == 0) {
+            that.dt.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
             if (res.data.list && res.data.list.length && res.data.list.length > 0) {
             if (res.data.list && res.data.list.length && res.data.list.length > 0) {
               that.dt.pageCount = res.data.count
               that.dt.pageCount = res.data.count
+              that.dt.total = res.data.count
               if (res.data.list && $.isArray(res.data.list)) {
               if (res.data.list && $.isArray(res.data.list)) {
                 that.isShow.showDynamic = true;
                 that.isShow.showDynamic = true;
                 res.data.list.forEach(function (v, i) {
                 res.data.list.forEach(function (v, i) {
@@ -707,9 +729,9 @@ var vNode = {
                   })
                   })
                 } catch (error) { }
                 } catch (error) { }
                 res.data.list.forEach((item) => {
                 res.data.list.forEach((item) => {
-                  if (that.dt.list.length < 5) {
+                  // if (that.dt.list.length < 5) {
                     that.dt.list.push(item)
                     that.dt.list.push(item)
-                  }
+                  // }
                 })
                 })
                 // that.dt.list = res.data.list
                 // that.dt.list = res.data.list
                 that.colList = res.data.list
                 that.colList = res.data.list
@@ -774,7 +796,7 @@ var vNode = {
         timeout: 10000,
         timeout: 10000,
         success: function (res) {
         success: function (res) {
           if (res.error_code == 0) {
           if (res.error_code == 0) {
-            that.reqCount++
+            that.reqCount++;
             if (res.data && Object.keys(res.data).length > 0) {
             if (res.data && Object.keys(res.data).length > 0) {
               that.chartLoading = false;
               that.chartLoading = false;
               // 免费用户是否浏览过当前画像 true:浏览过 不返该字段:没浏览过
               // 免费用户是否浏览过当前画像 true:浏览过 不返该字段:没浏览过
@@ -1016,7 +1038,13 @@ var vNode = {
         } else {
         } else {
           that.isShow.showScaleFb = true;
           that.isShow.showScaleFb = true;
           that.$nextTick(function () {
           that.$nextTick(function () {
-            that.getHotChartData(res);
+            var timer = setInterval(function () {
+              // 判断页面所有资源已加载完毕
+              if (document.readyState === "complete") {
+                that.getHotChartData(res);//执行方法
+                window.clearInterval(timer);
+              }
+            }, 800)
           })
           })
         }
         }
       }
       }
@@ -1106,7 +1134,13 @@ var vNode = {
       if (data && data.length > 0) {
       if (data && data.length > 0) {
         that.isShow.showScaleRate = true
         that.isShow.showScaleRate = true
         that.$nextTick(function () {
         that.$nextTick(function () {
-          that.getPieCharData(data)
+          var timer = setInterval(function () {
+            // 判断页面所有资源已加载完毕
+            if (document.readyState === "complete") {
+              that.getPieCharData(data);//执行方法
+              window.clearInterval(timer);
+            }
+          }, 800)
         })
         })
       }
       }
     },
     },
@@ -1889,6 +1923,17 @@ var vNode = {
           }
           }
         })
         })
       }
       }
+    },
+    onDtTextClick: function(type) {
+      if (type === 'customer') {
+        location.href = '/jyapp/free/customer'
+      } else if (type === 'update') {
+        //跳转清除旧套餐缓存,防止计算价格出错
+        sessionStorage.removeItem('vipSub_oldBuySet')
+        location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+      } else if (type === 'buy') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+      }
     }
     }
   }
   }
 }
 }

+ 7 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js

@@ -115,6 +115,13 @@ var utils = {
         r = null;
         r = null;
         return context == null || context == '' || context == 'undefined' ? '' : context;
         return context == null || context == '' || context == 'undefined' ? '' : context;
     },
     },
+    // 移除url参数,但是不刷新页面
+    delUrlParam: function (name){
+      var href = window.location.href;
+      const e = eval(`/&?${name}=[^&#]*/g`);
+      href = href.replace(e, '');
+      history.replaceState('','',href);// replaceState方法不会触发页面刷新,只是导致history对象发生变化,地址栏
+    },
     // 取[m, n]随机数
     // 取[m, n]随机数
     getRandomNumber: function (min, max) {
     getRandomNumber: function (min, max) {
         return Math.floor(Math.random() * (max - min + 1) + min);
         return Math.floor(Math.random() * (max - min + 1) + min);

+ 0 - 27
src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js

@@ -628,19 +628,6 @@ var vm = new Vue({
           // 从页面移植来的
           // 从页面移植来的
           if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
           if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
             sessionStorage.removeItem('switch-product')
             sessionStorage.removeItem('switch-product')
-            setTimeout(function() {
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_36y1d8lbx9n",
-                    async: true
-                });
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_061vbh43quq3",
-                    async: true
-                });
-            },1000)
-            _this.getAjaxAdv()
           }
           }
         }
         }
       })
       })
@@ -923,20 +910,6 @@ var vm = new Vue({
       this.$refs.industryItem.toggle(false)
       this.$refs.industryItem.toggle(false)
       this.$refs.moreDropdownItems.toggle(false)
       this.$refs.moreDropdownItems.toggle(false)
     },
     },
-    getAjaxAdv: function () {
-      $.ajax({
-        type: 'POST',
-        url: '/publicapply/adLeague/exposure',
-        data: {
-            client: 'APP',
-            id: 'ad6',
-            position: '订阅推送列表页'
-        },
-        success: function(res) {
-            // console.log(res)
-        }
-      })
-    },
     // 选择附件
     // 选择附件
     selectFileFn: function(item) {
     selectFileFn: function(item) {
       if (!this.screenShow) return
       if (!this.screenShow) return

+ 44 - 10
src/jfw/modules/app/src/web/staticres/jyapp/me/js/mail_bind.js

@@ -48,9 +48,25 @@ var vm = new Vue({
         }
         }
     },
     },
     created: function () {
     created: function () {
-        this.getType()
+      this.getType()
+      this.getUserInfo()
     },
     },
     methods: {
     methods: {
+        getUserInfo: function () {
+          var _this = this
+          this.getUserInfoLoaded = false
+          $.ajax({
+            type: 'GET',
+            url: '/jypay/user/getAccountInfo?t=' + Date.now(),
+            success: function (res) {
+              if (res.error_code == 0 && res.data) {
+                if(res.data.otherMail) {
+                  _this.info.mail = res.data.otherMail
+                }
+              }
+            }
+          })
+        },
         getType: function () {
         getType: function () {
             if (location.pathname.indexOf('bind') !== -1) {
             if (location.pathname.indexOf('bind') !== -1) {
                 this.type = 'bind'
                 this.type = 'bind'
@@ -137,19 +153,37 @@ var vm = new Vue({
                 success: function (res) {
                 success: function (res) {
                     loading.clear()
                     loading.clear()
                     if (res.error_code == 0 && res.data.state == 1) {
                     if (res.error_code == 0 && res.data.state == 1) {
-                        _this.$toast({
-                            message: _this.someText.text + '成功',
-                            duration: 1500,
-                            forbidClick: true,
-                            onClose: function () {
-                                history.back()
-                            }
-                        })
+                      _this.pointsTaskSuccessTip()
                     } else {
                     } else {
                         _this.showToast(res.error_msg)
                         _this.showToast(res.error_msg)
                     }
                     }
                 }
                 }
             })
             })
         },
         },
+        // 赚剑鱼币任务完成提示
+        pointsTaskSuccessTip: function() {
+          // 获取剑鱼币任务信息
+          const from =  utils.getParam('from')
+          var point = utils.getParam('point') || 0
+          if(from && from === 'task'){
+            this.$toast({
+              message: `绑定邮箱成功,获得${point}剑鱼币。`,
+              duration: 1500,
+              forbidClick: true,
+              onClose: function () {
+                history.back()
+              }
+            })
+          } else {
+            this.$toast({
+              message: this.someText.text + '成功',
+              duration: 1500,
+              forbidClick: true,
+              onClose: function () {
+                history.back()
+              }
+            })
+          }
+        }
     }
     }
-})
+})

+ 10 - 1
src/jfw/modules/app/src/web/staticres/jyapp/me/js/phone_bind.js

@@ -5,7 +5,7 @@ var vm = new Vue({
         type: 'bind',
         type: 'bind',
         act: '',  // 是否要做某些操作
         act: '',  // 是否要做某些操作
         mode: '',  // 是否跳转强制绑定
         mode: '',  // 是否跳转强制绑定
-        from: '',  // 是否通过iframe进入
+        from: '',  // 是否通过iframe进入(form=task则是来自剑鱼币做任务)
         token: '',  // 账号合并需要的token
         token: '',  // 账号合并需要的token
         fastButton: false, // 一键绑定按钮是否展示
         fastButton: false, // 一键绑定按钮是否展示
         userInfo: {
         userInfo: {
@@ -418,6 +418,7 @@ var vm = new Vue({
         bindPhoneSuccess: function (state) {
         bindPhoneSuccess: function (state) {
             var _this = this
             var _this = this
             if (state == 1) {
             if (state == 1) {
+                this.pointsTaskSuccessTip()
                 // 绑定手机号完成后,如果已经填写过公司。则不发送提交公司的请求
                 // 绑定手机号完成后,如果已经填写过公司。则不发送提交公司的请求
                 // 可以直接判断计算属性showEntItem,来判断需不需要填写公司
                 // 可以直接判断计算属性showEntItem,来判断需不需要填写公司
                 if (_this.showEntItem) {
                 if (_this.showEntItem) {
@@ -467,6 +468,14 @@ var vm = new Vue({
                 // location.replace('/jyapp/free/login?back=index&flag=quit')
                 // location.replace('/jyapp/free/login?back=index&flag=quit')
                 // location.replace('/jyapp/jylab/mainSearch')
                 // location.replace('/jyapp/jylab/mainSearch')
             })
             })
+        },
+        // 赚剑鱼币任务完成提示
+        pointsTaskSuccessTip: function() {
+          // 获取剑鱼币任务信息
+          if(this.from === 'task' && this.type === 'bind'){
+            var point = utils.getParam('point') || 0
+            this.showToast(`绑定手机号成功,获得${point}剑鱼币。`)
+          }
         }
         }
     }
     }
 })
 })

+ 14 - 0
src/jfw/modules/app/src/web/staticres/jyapp/tags/js/index.js

@@ -14,6 +14,15 @@ var page = {
   initEvents: function () {
   initEvents: function () {
     this.initFooterPhoneCall()
     this.initFooterPhoneCall()
     // this.showAppFooterNavs()
     // this.showAppFooterNavs()
+    this.initBack()
+    this.topSearchEvent()
+  },
+  topSearchEvent: function () {
+    $('.search-container').on('click', function (e) {
+      e.preventDefault()
+      localStorage.removeItem('JY-MOBILE-home-top-search')
+      location.href = '/jy_mobile/search/middle/bidding'
+    })
   },
   },
   showAppFooterNavs: function () {
   showAppFooterNavs: function () {
     var isInHomePage = location.pathname === '/jyapp/jylab/mainSearch'
     var isInHomePage = location.pathname === '/jyapp/jylab/mainSearch'
@@ -49,6 +58,11 @@ var page = {
     if (f) {
     if (f) {
       $('.tag-info-type-nav-list, .tag-area-nav-container').addClass('dark-mode')
       $('.tag-info-type-nav-list, .tag-area-nav-container').addClass('dark-mode')
     }
     }
+  },
+  initBack: function () {
+    $('.j-icon.base-icon.icon-back-white').on('click', function() {
+      window.history.back()
+    })
   }
   }
 }
 }
 
 

+ 27 - 2
src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js

@@ -188,6 +188,7 @@ var Guide = {
 			$("body").removeClass("step-3-body");
 			$("body").removeClass("step-3-body");
 		}else if(index == 4){
 		}else if(index == 4){
 			this.saveLSkeywords(true);
 			this.saveLSkeywords(true);
+      Guide.pointsTaskSuccessTip()
 			$(".step-3").hide();
 			$(".step-3").hide();
 			$(".com-top-two-b").show();
 			$(".com-top-two-b").show();
 			$("body").removeClass("step-3-body");
 			$("body").removeClass("step-3-body");
@@ -214,6 +215,15 @@ var Guide = {
 			localStorage.tsGuide_step = index-1;
 			localStorage.tsGuide_step = index-1;
 		}
 		}
 	},
 	},
+  // 赚剑鱼币任务完成提示
+  pointsTaskSuccessTip: function () {
+    // 获取剑鱼币任务信息
+    var from = getUrlParam('from')
+    var point = getUrlParam('point') || 0
+    if(from && from === 'task'){
+      JYAlert("关注企业成功,获得" + point + "剑鱼币。")
+    }
+  },
 	appendHaskeywords: function(text){
 	appendHaskeywords: function(text){
 		text = $.trim(text);
 		text = $.trim(text);
 		if(this.checkIsMax(true) || text == ""){
 		if(this.checkIsMax(true) || text == ""){
@@ -468,9 +478,23 @@ var wantToUrl = getParam('url')
 if (wantToUrl) {
 if (wantToUrl) {
   Guide.params.url = decodeURIComponent(wantToUrl)
   Guide.params.url = decodeURIComponent(wantToUrl)
 }
 }
-
+// 传入你要获取的参数的名字
+function getUrlParam (name) {
+  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+  if(Guide.params.url && Guide.params.url.split('?').length > 0) {
+    var par = Guide.params.url.split('?')[1]
+    var r = par.match(reg); //获取url中'?'符后的字符串并正则匹配
+    var context = '';
+    if (r != null) context = r[2];
+    // 释放变量
+    reg = null;
+    r = null;
+    return context == null || context == '' || context == 'undefined' ? '' : context;
+  } else {
+    return ''
+  }
+}
 Guide.clearHistoryPushDataCache()
 Guide.clearHistoryPushDataCache()
-
 //
 //
 var RecomKWs = function() {
 var RecomKWs = function() {
 	this.count = 20;
 	this.count = 20;
@@ -854,6 +878,7 @@ var JYAlert = function(T,comStartFlag){
 		$("#jydialog").css({"left":"50%","margin-top":"-50px","margin-left":"-140px"});
 		$("#jydialog").css({"left":"50%","margin-top":"-50px","margin-left":"-140px"});
 		$("#myModal").modal("show");
 		$("#myModal").modal("show");
 	}
 	}
+  	$(".jyhead_mask").html(T)
 }
 }
 // 获取已经设置过的关键词
 // 获取已经设置过的关键词
 function getHadKeywords(step, callback){
 function getHadKeywords(step, callback){

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

@@ -267,7 +267,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                         <div class="empty-content-position">
                             <div class="image">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>
                         </div>

+ 12 - 2
src/jfw/modules/app/src/web/templates/big-member/page_client_portrayal.html

@@ -174,7 +174,7 @@
               <div class="module-title-container bg-white project-news-module">
               <div class="module-title-container bg-white project-news-module">
                 <div class="module-title project-news-title">
                 <div class="module-title project-news-title">
                   <span>招标动态</span>
                   <span>招标动态</span>
-                  <!-- <span class="module-title-num">10</span> -->
+                  <span class="module-title-num">${dt.total}</span>
                 </div>
                 </div>
                 <div class="action-group">
                 <div class="action-group">
                   <div class="action-button export" @click="onExport" v-if="dt.list.length">
                   <div class="action-button export" @click="onExport" v-if="dt.list.length">
@@ -204,11 +204,16 @@
                           <p class="i_time">${item.publishtime}</p>
                           <p class="i_time">${item.publishtime}</p>
                       </div>
                       </div>
                   </div>
                   </div>
-                  <div v-show="dt.isNext">
+                  <div v-show="dt.isNext && !noAuth">
                       <div class="more">
                       <div class="more">
                           <span @click.stop="goProjectPage">查看更多</span>
                           <span @click.stop="goProjectPage">查看更多</span>
                       </div>
                       </div>
                   </div>
                   </div>
+                  <div v-if="noAuth" class="dt-text-tips light-bg">
+                    免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                    <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                    <span class="highlight-text" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                  </div>
                 </div>
                 </div>
                 <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                 <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                   <div class="empty-content-position">
                   <div class="empty-content-position">
@@ -223,6 +228,11 @@
                         <template v-else>暂无数据</template>
                         <template v-else>暂无数据</template>
                       </div>
                       </div>
                   </div>
                   </div>
+                  <div v-if="noAuth" class="dt-text-tips">
+                    免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                    <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                    <span class="highlight-text"  @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                  </div>
                 </div>
                 </div>
               </div>
               </div>
             </div>
             </div>

+ 25 - 7
src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html

@@ -290,21 +290,21 @@
             <div class="module-title-container bg-white project-news-module">
             <div class="module-title-container bg-white project-news-module">
               <div class="module-title project-news-title">
               <div class="module-title project-news-title">
                 <span>中标动态</span>
                 <span>中标动态</span>
-                <!-- <span class="module-title-num">10</span> -->
+                <span class="module-title-num">${topProject.total}</span>
               </div>
               </div>
-              <div class="action-group" v-if="conf._13" key="action-group">
+              <div class="action-group" key="action-group">
                 <div class="action-button export" @click="onExport" v-if="topProject.list.length">
                 <div class="action-button export" @click="onExport" v-if="topProject.list.length">
                     <i class="j-icon base-icon icon-download"></i>
                     <i class="j-icon base-icon icon-download"></i>
                     <em class="action-button-text">数据导出</em>
                     <em class="action-button-text">数据导出</em>
                 </div>
                 </div>
-                <div class="action-button filters-button" @click="goHighSet" v-if="!hideDt">
+                <div class="action-button filters-button" @click="goHighSet" v-if="conf._13 && !hideDt">
                   <i class="j-icon base-icon icon-3hengxian"></i>
                   <i class="j-icon base-icon icon-3hengxian"></i>
                   <em class="action-button-text">筛选条件</em>
                   <em class="action-button-text">筛选条件</em>
                 </div>
                 </div>
               </div>
               </div>
             </div>
             </div>
             <div class="module-notice-tip">注:1个项目如同时发布了中标、成交、合同等结果类公告,则有多条数据</div>
             <div class="module-notice-tip">注:1个项目如同时发布了中标、成交、合同等结果类公告,则有多条数据</div>
-            <div class="tab-card-content vip_component" v-if="hideDt"
+            <div class="tab-card-content vip_component" v-if="!isLogin"
               style="height:9.16rem;background:url('/common-module/collection/image/bg/vip_bg_1.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%"
               style="height:9.16rem;background:url('/common-module/collection/image/bg/vip_bg_1.png?v={{Msg "seo" "version"}}') no-repeat;background-size:100% 100%"
               key="dt">
               key="dt">
               <vip-component @tabactive="tabActive" :power="conf" type="item_1" :can-free-exp="canFreeExp"
               <vip-component @tabactive="tabActive" :power="conf" type="item_1" :can-free-exp="canFreeExp"
@@ -313,7 +313,7 @@
               </vip-component>
               </vip-component>
             </div>
             </div>
             <div class="tab-card-content" key="dt" v-else>
             <div class="tab-card-content" key="dt" v-else>
-              <ul class="project-info-list" v-show="topProject.list.length !== 0">
+              <ul class="project-info-list" v-if="topProject.list.length !== 0">
                 <li class="project-info-item border-line-b clickable" :class="{ visited: item.visited }" v-for="(item,index) in topProject.list"
                 <li class="project-info-item border-line-b clickable" :class="{ visited: item.visited }" v-for="(item,index) in topProject.list"
                     @click="toProjectDetail(item)">
                     @click="toProjectDetail(item)">
                   <div class="head-group">
                   <div class="head-group">
@@ -332,11 +332,20 @@
                   </div>
                   </div>
                 </li>
                 </li>
                 <li class="show-more clickable"
                 <li class="show-more clickable"
-                    v-if="topProject.showGetNextButton && (isMemberAndSvip || canFreeTrial) && topProject.count > 3"
+                    v-if="topProject.showGetNextButton && (isMemberAndSvip || canFreeTrial) && topProject.count > 3 && noShowTip"
                     @click="goToFilterProjectNews">查看更多
                     @click="goToFilterProjectNews">查看更多
                 </li>
                 </li>
+                <li v-if="(isFree && !canFreeTrial) || updateVipStatus || customerServiceStatus" class="dt-text-tips light-bg">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${topProject.updateTime},您可
+                  <!-- 免费用户 -->
+                  <span class="highlight-text" v-if="(isFree && !canFreeTrial)" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                  <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                  <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                  <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                  <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                </li>
               </ul>
               </ul>
-              <div class="empty-container bg-white" v-show="topProject.list.length === 0 && topProject.loaded">
+              <div class="empty-container bg-white" v-else>
                 <div class="empty-content-position">
                 <div class="empty-content-position">
                     <div class="image">
                     <div class="image">
                         <img src="/common-module/public/image/jy-back.png">
                         <img src="/common-module/public/image/jy-back.png">
@@ -349,6 +358,15 @@
                       <template v-else>暂无数据</template>
                       <template v-else>暂无数据</template>
                     </div>
                     </div>
                 </div>
                 </div>
+                <div v-if="(isFree && !canFreeTrial) || updateVipStatus || customerServiceStatus" class="dt-text-tips">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${topProject.updateTime},您可
+                  <!-- 免费用户 -->
+                  <span class="highlight-text" v-if="(isFree && !canFreeTrial)" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                  <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                  <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                  <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                  <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                </div>
               </div>
               </div>
             </div>
             </div>
           </div>
           </div>

+ 99 - 0
src/jfw/modules/app/src/web/templates/big-member/page_free_buyer_loading.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+
+<head>
+  <title>采购单位画像</title>
+
+  <!--引入公共资源头部-->
+  {{include "/big-member/meta.html"}}
+
+  <!--S-当前页必定需要预加载的资源-->
+  <link rel="preload" as="style" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+
+  <!--E-当前页必定需要预加载的资源-->
+
+  <!--S-当前页面的css资源-->
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+  <link rel="stylesheet"
+    href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/mainSearch/css/j-icons.css?v={{Msg "seo" "version"}}' />
+  <!--E-当前页面的css资源-->
+  <style>
+    .skeleton {
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      align-content: center;
+      background-color: #fff;
+    }
+
+    .working {
+      width: 4rem;
+      height: 4rem;
+      margin: -0.4rem auto 0;
+    }
+    
+  </style>
+</head>
+
+<body>
+  <div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div id="portrayal_loading" ref="container" class="j-main" v-cloak>
+      <div class="skeleton">
+        <img class="working" src="/jyapp/big-member/image/working.gif" alt="">
+      </div>
+    </div>
+  </div>
+
+  <!--S-必定需要预加载的资源-->
+  <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js />
+  <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js />
+  <!--E-必定需要预加载的资源-->
+
+  <!--S-当前页面的资源-->
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js> </script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
+  {{include "/big-member/commonjs.html"}}
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/setTdk.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
+  <script>
+    var vNode = {
+      delimiters: ['${', '}'],
+      el: '#portrayal_loading',
+      data: {},
+      created() {
+        this.getPowerInfo()
+      },
+      mounted() {},
+      methods: {
+        getPowerInfo: function () {
+          var _this = this
+          $.ajax({
+            type: 'GET',
+            url: '/bigmember/use/isAdd',
+            success: function (res) {
+              if (res.error_code == 0) {
+                if (res.data.entIsNew) {
+                  location.replace("/jyapp/big/page/client_portrayal?entName=" + utils.getParam('entName') + '&from=client')
+                } else {
+                  location.replace("/jyapp/big/page/unit_portrayal?entName=" + utils.getParam('entName'))
+                }
+              } else {
+                _this.$toast(res.error_msg)
+              }
+            },
+            error: function (error) {
+                console.log(error)
+            }
+          })
+        }
+      }
+    }
+    new Vue(vNode)
+  </script>
+</body>
+
+</html>

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

@@ -268,7 +268,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                         <div class="empty-content-position">
                             <div class="image">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>
                         </div>
@@ -348,6 +348,15 @@
                     <span @click.stop="onExport">查看更多</span>
                     <span @click.stop="onExport">查看更多</span>
                   </div>
                   </div>
                 </div>
                 </div>
+                <div class="dt-text-tips">
+                  免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                   <!-- 免费用户 -->
+                   <!-- <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span> -->
+                   <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                   <!-- <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span> -->
+                   <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                   <span class="highlight-text" >联系客服升级套餐实时查看更多数据</span>。
+                </div>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>

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

@@ -137,7 +137,7 @@
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                     <div class="empty-container" v-show="listState.list.length === 0 && listState.loaded && !listState.loading">
                         <div class="empty-content-position">
                         <div class="empty-content-position">
                             <div class="image">
                             <div class="image">
-                                <img src="/jyapp/big-member/image/img-empty.png">
+                                <img src="/common-module/public/image/jy-back.png">
                             </div>
                             </div>
                             <div class="empty-main tip-text">暂无数据</div>
                             <div class="empty-main tip-text">暂无数据</div>
                         </div>
                         </div>

+ 25 - 7
src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html

@@ -216,24 +216,24 @@
                 <div class="module-title-container bg-white project-news-module">
                 <div class="module-title-container bg-white project-news-module">
                   <div class="module-title project-news-title">
                   <div class="module-title project-news-title">
                     <span>招标动态</span>
                     <span>招标动态</span>
-                    <!-- <span class="module-title-num">10</span> -->
+                    <span class="module-title-num">${dt.total}</span>
                   </div>
                   </div>
-                  <div class="action-group" v-if="!getStatus">
+                  <div class="action-group">
                     <div class="action-button export" @click="onExport" v-if="dt.list.length">
                     <div class="action-button export" @click="onExport" v-if="dt.list.length">
                         <i class="j-icon base-icon icon-download"></i>
                         <i class="j-icon base-icon icon-download"></i>
                         <em id="mainSearch-selLable-dataExport" class="action-button-text">数据导出</em>
                         <em id="mainSearch-selLable-dataExport" class="action-button-text">数据导出</em>
                     </div>
                     </div>
-                    <div class="action-button filters-button" @click="goHighSet">
+                    <div class="action-button filters-button" @click="goHighSet" v-if="!getStatus">
                       <i class="j-icon base-icon icon-3hengxian"></i>
                       <i class="j-icon base-icon icon-3hengxian"></i>
                       <em class="action-button-text">筛选条件</em>
                       <em class="action-button-text">筛选条件</em>
                     </div>
                     </div>
                   </div>
                   </div>
                 </div>
                 </div>
                 <div class="module-notice-tip">注:1个项目如同时发布了预告、招标、中标等多条公告,则有多条数据</div>
                 <div class="module-notice-tip">注:1个项目如同时发布了预告、招标、中标等多条公告,则有多条数据</div>
-                <div v-if="getStatus" class="tab-card-content vip_component" style="height:8.8rem;background:#fff url('/common-module/collection/image/buyer/cg-zbdt-bg.jpg?v={{Msg "seo" "version"}}') no-repeat center 50px;background-size:100% 100%;position:relative;">
+                <!-- <div v-if="getStatus" class="tab-card-content vip_component" style="height:8.8rem;background:#fff url('/common-module/collection/image/buyer/cg-zbdt-bg.jpg?v={{Msg "seo" "version"}}') no-repeat center 50px;background-size:100% 100%;position:relative;">
                   <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" @open-page="onExampleOpenPage" :power="power" type="item_14" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/cg-zbdt.png?v={{Msg "seo" "version"}}'></buyer-example>
                   <buyer-example :useage="usageInfo" :userinfo="userInfo" :status="bigStatus" @open-page="onExampleOpenPage" :power="power" type="item_14" imgurl='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/buyer/cg-zbdt.png?v={{Msg "seo" "version"}}'></buyer-example>
-                </div>
-                <div class="tab-card-content" v-else>
+                </div> -->
+                <div class="tab-card-content">
                   <div class=" d_content" v-if="dt.list.length">
                   <div class=" d_content" v-if="dt.list.length">
                     <div class="d_list" :class="{ visited: item.visited }" v-for="(item,index) in dt.list"
                     <div class="d_list" :class="{ visited: item.visited }" v-for="(item,index) in dt.list"
                       @click="goDetail(item)">
                       @click="goDetail(item)">
@@ -251,11 +251,20 @@
                         <p class="i_time">${item.publishtime}</p>
                         <p class="i_time">${item.publishtime}</p>
                       </div>
                       </div>
                     </div>
                     </div>
-                    <div v-show="dt.isNext">
+                    <div v-show="dt.isNext && !getStatus">
                       <div class="more">
                       <div class="more">
                         <span @click.stop="goProjectPage">查看更多</span>
                         <span @click.stop="goProjectPage">查看更多</span>
                       </div>
                       </div>
                     </div>
                     </div>
+                    <div v-if="getStatus" class="dt-text-tips light-bg">
+                      免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                      <!-- 免费用户 -->
+                      <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                      <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                      <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                      <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                      <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                    </div>
                   </div>
                   </div>
                   <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                   <div class="empty-container bg-white" v-show="dt.list.length === 0 && dt.loaded">
                     <div class="empty-content-position">
                     <div class="empty-content-position">
@@ -270,6 +279,15 @@
                           <template v-else>暂无数据</template>
                           <template v-else>暂无数据</template>
                         </div>
                         </div>
                     </div>
                     </div>
+                    <div v-if="getStatus" class="dt-text-tips">
+                      免费用户支持查看最近30条招标动态,数据更新频率为每周1次,最近更新时间为${dt.updateTime},您可
+                       <!-- 免费用户 -->
+                       <span class="highlight-text" v-if="userInfo.isFree" @click="onDtTextClick('buy')">开通超级订阅实时查看更多数据</span>
+                       <!-- 老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0 -->
+                       <span class="highlight-text" v-if="updateVipStatus" @click="onDtTextClick('update')">升级超级订阅实时查看更多数据</span>
+                       <!-- 新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户 -->
+                       <span class="highlight-text" v-if="customerServiceStatus" @click="onDtTextClick('customer')">联系客服升级套餐实时查看更多数据</span>。
+                    </div>
                   </div>
                   </div>
                 </div>
                 </div>
                 <!--                <div v-if="isActive ==1" class="d_content">-->
                 <!--                <div v-if="isActive ==1" class="d_content">-->

+ 0 - 51
src/jfw/modules/app/src/web/templates/followent/list.html

@@ -37,56 +37,6 @@
 				return;
 				return;
 			}
 			}
 			var data = res.list;
 			var data = res.list;
-			// $.ajax({
-			// 		type: 'POST',
-			// 		url: '/publicapply/bidcoll/power',
-			// 		success: function(res) {
-			// 				console.log(res)
-			// 				if(res.error_code == 0) {
-			// 					if(!res.data.entniche && !res.data.member && res.data.vip <= 0){
-			// 							(window.slotbydup = window.slotbydup || []).push({
-			// 									id: "u6603901",
-			// 									container: "_yzpxro2x1n",
-			// 									async: true
-			// 							});
-			// 							getAjaxAdv()
-			// 					}
-			// 				}
-			// 		},
-			// 		error: function(err) {
-			// 				console.log(err)
-			// 		}
-			// })
-			// function getAjaxAdv () {
-			// 		$.ajax({
-			// 			type: 'POST',
-			// 			url: '/publicapply/adLeague/exposure',
-			// 			data: {
-			// 					client: 'APP',
-			// 					id: 'ad8',
-			// 					position: '关注的企业列表页底部'
-			// 			},
-			// 			success: function(res) {
-			// 					console.log(res)
-			// 			}
-			// 		})
-			// }
-			// addEventListener('focus', function() {
-			// 		if(document.activeElement = document.getElementById('iframeu6603901_0')) {
-			// 				$.ajax({
-			// 						type: 'POST',
-			// 						url: '/publicapply/adLeague/click',
-			// 						data: {
-			// 							client: 'APP',
-			// 							id: 'ad8',
-			// 							position: '关注的企业列表页底部'
-			// 						},
-			// 						success: function(res) {
-			// 								console.log(res)
-			// 						}
-			// 				})
-			// 		}
-			// });
 			var allHtml = "";
 			var allHtml = "";
 			var jyno = 0;
 			var jyno = 0;
 			var fronthtml = "";
 			var fronthtml = "";
@@ -268,7 +218,6 @@ function receivePushMessageHandle(type,url){
             </div>
             </div>
             <div class="jylistbottom" style="display: none;">
             <div class="jylistbottom" style="display: none;">
 								<img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/followent/images/wx/jydustbin.png?v={{Msg "seo" "version"}}"/>批量移除30天无更新企业
 								<img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/followent/images/wx/jydustbin.png?v={{Msg "seo" "version"}}"/>批量移除30天无更新企业
-								<div class="_j07axdxi26i"></div>
 						</div>
 						</div>
 						<!-- <div class="_yzpxro2x1n" id="pro_footer"></div> -->
 						<!-- <div class="_yzpxro2x1n" id="pro_footer"></div> -->
             <div class="easypopup" id="easypopup">
             <div class="easypopup" id="easypopup">

File diff suppressed because it is too large
+ 97 - 1
src/jfw/modules/app/src/web/templates/frontRouter/fileRecord/sess/index.html


+ 11 - 4
src/jfw/modules/app/src/web/templates/frontRouter/userMerge/free/confirm.html

@@ -98,6 +98,7 @@
                 checkedColor: '#2CB7CA',
                 checkedColor: '#2CB7CA',
                 // from默认为'', 值为bindPhone时表示从手机号绑定页面/jyapp/account/phone/bind?mode=mergeBind过来的
                 // from默认为'', 值为bindPhone时表示从手机号绑定页面/jyapp/account/phone/bind?mode=mergeBind过来的
                 from: '',
                 from: '',
+                direct: '',
                 token: '',
                 token: '',
                 userName:{
                 userName:{
                     wx:'',
                     wx:'',
@@ -120,10 +121,14 @@
             },
             },
             created () {
             created () {
                 this.token = utils.getParam('token')
                 this.token = utils.getParam('token')
-                var from = utils.getParam('from')
-                if (from) {
-                    this.from = from
-                }
+              var from = utils.getParam('from')
+              if (from) {
+                this.from = from
+              }
+              var direct = utils.getParam('toDirect')
+              if (direct) {
+                this.direct = direct
+              }
                 this.getInfo()
                 this.getInfo()
             },
             },
             methods: {
             methods: {
@@ -252,6 +257,8 @@
                         JyObj.refreshAppointTab('subscribe', 1)
                         JyObj.refreshAppointTab('subscribe', 1)
                         JyObj.refreshAppointTab('box', 1)
                         JyObj.refreshAppointTab('box', 1)
                         JyObj.refreshAppointTab('me', 1)
                         JyObj.refreshAppointTab('me', 1)
+                    }else if (this.direct !==""){
+                        window.location.replace(this.direct)
                     } else {
                     } else {
                         history.go(-2)
                         history.go(-2)
                     }
                     }

+ 10 - 10
src/jfw/modules/app/src/web/templates/me/account.html

@@ -50,16 +50,16 @@
                         </div>
                         </div>
                         <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>
                         <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>
                     </div>
                     </div>
-                    <div role="button" class="van-cell van-cell--clickable van-cell--center companyClick" >
-                        <div class="van-cell__title">
-                            <span>公司</span>
-                        </div>
-                        <div class="van-cell__value">
-                            <span class="company-value" style="display:none"></span>
-                            <span class="bind-company"></span>
-                        </div>
-                        <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>
-                    </div>
+<!--                    <div role="button" class="van-cell van-cell&#45;&#45;clickable van-cell&#45;&#45;center companyClick" >-->
+<!--                        <div class="van-cell__title">-->
+<!--                            <span>公司</span>-->
+<!--                        </div>-->
+<!--                        <div class="van-cell__value">-->
+<!--                            <span class="company-value" style="display:none"></span>-->
+<!--                            <span class="bind-company"></span>-->
+<!--                        </div>-->
+<!--                        <i class="van-icon van-icon-arrow van-cell__right-icon phone-icon"></i>-->
+<!--                    </div>-->
                 </div>
                 </div>
                 <div class="bindinfo">
                 <div class="bindinfo">
                     <div class="van-cell-group__title">绑定信息</div>
                     <div class="van-cell-group__title">绑定信息</div>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/class.html

@@ -29,6 +29,7 @@
     <div class="loading-icon"></div>
     <div class="loading-icon"></div>
   </div>
   </div>
   {{include "/tags/template/tag-footer-common-assets.html"}}
   {{include "/tags/template/tag-footer-common-assets.html"}}
+  {{include "/tags/template/tag-footer-concat.html"}}
   <script>
   <script>
     var templateData = {
     var templateData = {
       homeLink: {{.T.HomeOrigin}},
       homeLink: {{.T.HomeOrigin}},

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/details.html

@@ -38,6 +38,7 @@
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
         {{end}}
         {{end}}
         {{include "/tags/template/tag-footer.html"}}
         {{include "/tags/template/tag-footer.html"}}
+        {{include "/tags/template/tag-footer-concat.html"}}
       </div>
       </div>
     </main>
     </main>
   </section>
   </section>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/strategy.html

@@ -27,6 +27,7 @@
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
             {{include "/tags/template/tag-breadcrumb-navigation.html"}}
         {{end}}
         {{end}}
         {{include "/tags/template/tag-footer.html"}}
         {{include "/tags/template/tag-footer.html"}}
+        {{include "/tags/template/tag-footer-concat.html"}}
       </div>
       </div>
     </main>
     </main>
   </section>
   </section>

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-area-nav.html

@@ -1,6 +1,6 @@
 <section class="tag-area-nav-container">
 <section class="tag-area-nav-container">
   <div class="tag-area-nav-list-container simple-area">
   <div class="tag-area-nav-list-container simple-area">
-    <p class="tag-area-nav-list-title">分站</p>
+    <div class="tag-area-nav-list-title">分站</div>
     <ul class="tag-area-nav-list">
     <ul class="tag-area-nav-list">
       {{range $val:=.T.hotArea}}
       {{range $val:=.T.hotArea}}
       <li class="tag-area-nav-item">
       <li class="tag-area-nav-item">

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-breadcrumb-navigation.html

@@ -1,6 +1,6 @@
 <section class="tag-breadcrumb-navigation ellipsis">
 <section class="tag-breadcrumb-navigation ellipsis">
   <span>当前位置:</span>
   <span>当前位置:</span>
-  <a href="{{.T.Home}}">剑鱼标讯首页</a>
+  <a href="/">剑鱼标讯首页</a>
   {{range $l:=.T.currentLocation}}
   {{range $l:=.T.currentLocation}}
   {{if $l.Url}}
   {{if $l.Url}}
   &gt; <a href="{{$l.Url}}">{{$l.Name}}</a>
   &gt; <a href="{{$l.Url}}">{{$l.Name}}</a>

+ 13 - 0
src/jfw/modules/app/src/web/templates/tags/template/tag-footer-concat.html

@@ -0,0 +1,13 @@
+<section class="tag-footer-container fixed">
+  <div class="footer-button-group">
+    <a class="seo-button theme-main radius phone-concat-customer" data-tel="400-108-6670" href="tel:400-108-6670">
+      <span class="j-icon base-icon icon-phone-white-solid"></span>
+      <p>电话咨询</p>
+    </a>
+    <a class="seo-button theme-main radius" href="/jyapp/free/login?url=/jyapp/jylab/mainSearch">
+      <span class="j-icon base-icon icon-person-white-solid"></span>
+      <p>登录/注册</p>
+    </a>
+  </div>
+</section>
+

+ 1 - 1
src/jfw/modules/app/src/web/templates/tags/template/tag-footer.html

@@ -5,7 +5,7 @@
       <a class="tel-link" data-tel="400-108-6670" href="tel:400-108-6670">400-108-6670</a>
       <a class="tel-link" data-tel="400-108-6670" href="tel:400-108-6670">400-108-6670</a>
     </div>
     </div>
     <div class="footer-card-line bottom-navs">
     <div class="footer-card-line bottom-navs">
-      <a class="bottom-nav-link" href="{{.T.Home}}">首页</a>
+      <a class="bottom-nav-link" href="/">首页</a>
       <a class="bottom-nav-link" href="/jyapp/free/swordfish/about">关于剑鱼标讯</a>
       <a class="bottom-nav-link" href="/jyapp/free/swordfish/about">关于剑鱼标讯</a>
     </div>
     </div>
     <div class="footer-divider"></div>
     <div class="footer-divider"></div>

+ 1 - 0
src/jfw/modules/app/src/web/templates/tags/template/tag-header.html

@@ -1,4 +1,5 @@
 <div class="tag-header-container j-header jy-app-header">
 <div class="tag-header-container j-header jy-app-header">
+    <i class="j-icon base-icon icon-back-white" style="display: block;flex-shrink: 0;margin-right: 0.16rem;"></i>
     <a class="search-container bg-white" href="/jy_mobile/search/middle/bidding">
     <a class="search-container bg-white" href="/jy_mobile/search/middle/bidding">
         <i class="search-icon j-icon base-icon icon-search"></i>
         <i class="search-icon j-icon base-icon icon-search"></i>
         <div class="search-input">请输入您要搜索的内容</div>
         <div class="search-input">请输入您要搜索的内容</div>

+ 0 - 44
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -841,51 +841,7 @@
     }
     }
   })
   })
 
 
-  function advHtml() {
-    (window.slotbydup = window.slotbydup || []).push({
-      id: "u6603898",
-      container: "_ouq34ajmfig",
-      async: true
-    });
-    (window.slotbydup = window.slotbydup || []).push({
-      id: "u6603898",
-      container: "_nxko9k32d8d",
-      async: true
-    });
-    getAjaxAdv()
-  }
 
 
-  function getAjaxAdv() {
-    $.ajax({
-      type: 'POST',
-      url: '/publicapply/adLeague/exposure',
-      data: {
-        client: 'APP',
-        id: 'ad5',
-        position: '搜索列表页'
-      },
-      success: function (res) {
-        console.log(res)
-      }
-    })
-  }
-
-  addEventListener('focus', function () {
-    if (document.activeElement = document.getElementById('iframeu6603898_0')) {
-      $.ajax({
-        type: 'POST',
-        url: '/publicapply/adLeague/click',
-        data: {
-          client: 'APP',
-          id: 'ad5',
-          position: '搜索列表页'
-        },
-        success: function (res) {
-          console.log(res)
-        }
-      })
-    }
-  });
 </script>
 </script>
 <script type="text/javascript">
 <script type="text/javascript">
   var adv_url = "/datareport/page/introduce";
   var adv_url = "/datareport/page/introduce";

+ 248 - 108
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -28,9 +28,12 @@
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/bootstrap.min.js"></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/bootstrap.min.js"></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/share.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/share.js?v={{Msg "seo" "version"}}"></script>
     <script src="//cdn-common.jianyu360.com/cdn/lib/html2canvas/1.3.3/dist/html2canvas.min.js"></script>
     <script src="//cdn-common.jianyu360.com/cdn/lib/html2canvas/1.3.3/dist/html2canvas.min.js"></script>
+    <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/tags/css/tags-module-common.css?v={{Msg "seo" "version"}}' rel="stylesheet" />
+
 
 
     {{include "/common/js.html"}}
     {{include "/common/js.html"}}
     <style>
     <style>
+      p{margin: 0;}
       html > body {
       html > body {
         background: #fff;
         background: #fff;
       }
       }
@@ -344,6 +347,7 @@
             </ul>
             </ul>
         </div>
         </div>
     </div>
     </div>
+    {{if .T.obj.hasSession}}
     <div class="app-layout-header jy-app-header">
     <div class="app-layout-header jy-app-header">
         <span class="app-back jyapp-icon jyapp-icon-zuojiantou share-back"></span>
         <span class="app-back jyapp-icon jyapp-icon-zuojiantou share-back"></span>
         <span class="header-title">公告信息</span>
         <span class="header-title">公告信息</span>
@@ -399,61 +403,18 @@
             <!-- 分享 end -->
             <!-- 分享 end -->
 	    </span>
 	    </span>
     </div>
     </div>
+    {{else}}
+    {{include "tags/template/tag-header.html" .}}
+    {{end}}
+
     <div class="app-layout-content-b">
     <div class="app-layout-content-b">
+        {{if not .T.obj.hasSession}}
+        {{include "tags/template/tag-register-login-group.html" .}}
+        {{include "tags/template/tag-info-type-nav.html" .}}
+        {{include "tags/template/tag-area-nav.html" .}}
+        {{end}}
         <div class="mask"></div>
         <div class="mask"></div>
         <div class="info">
         <div class="info">
-            <!-- <div class="_c2l0w7g3cjf"></div> -->
-            <script type="text/javascript">
-            $.ajax({
-                type: 'POST',
-                url: '/publicapply/bidcoll/power',
-                success: function(res) {
-                    if(res.error_code == 0) {
-                        if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
-                            (window.slotbydup = window.slotbydup || []).push({
-                                id: "u6603899",
-                                container: "_c2l0w7g3cjf",
-                                async: true
-                            });
-                            getAjaxAdv()
-                        }
-                    }
-                },
-                error: function(err) {
-                        console.log(err)
-                }
-			})
-                function getAjaxAdv () {
-                    $.ajax({
-                    type: 'POST',
-                    url: '/publicapply/adLeague/exposure',
-                    data: {
-                        client: 'APP',
-                        id: 'ad7',
-                        position: '公告详情页顶部'
-                    },
-                    success: function(res) {
-                        // console.log(res)
-                    }
-                    })
-                }
-                addEventListener('focus', function() {
-                    if(document.activeElement = document.getElementById('iframeu6603899_0')) {
-                        $.ajax({
-                            type: 'POST',
-                            url: '/publicapply/adLeague/click',
-                            data: {
-                                client: 'APP',
-                                id: 'ad7',
-                                position: '公告详情页顶部'
-                            },
-                            success: function(res) {
-                                // console.log(res)
-                            }
-                        })
-                    }
-                });
-            </script>
 <!--            <div v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'" class="yhfb">用户发布</div>-->
 <!--            <div v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'" class="yhfb">用户发布</div>-->
             {{if .T.obj.site}}
             {{if .T.obj.site}}
             {{if eq .T.obj.site "剑鱼信息发布平台"}}
             {{if eq .T.obj.site "剑鱼信息发布平台"}}
@@ -967,7 +928,8 @@
                             <span class="concat-kf">联系客服</span>
                             <span class="concat-kf">联系客服</span>
 							<span class="go-buy-file-pack" style="display: none">立即充值</span>
 							<span class="go-buy-file-pack" style="display: none">立即充值</span>
                             <span class="free-open-tip" style="display: none;">
                             <span class="free-open-tip" style="display: none;">
-                              <span class="down-more-text">下载更多附件</span>
+                              <span class="free-has-num down-more-text" style="display:none;">本月剩余:<em class="file-count"></em>个</span>
+                              <span class="free-no-num down-more-text" style="display: none;">下载更多附件</span>
                               <span class="open-vip-btn">开通超级订阅</span>
                               <span class="open-vip-btn">开通超级订阅</span>
                             </span>
                             </span>
                         </div>
                         </div>
@@ -1132,6 +1094,10 @@
         {{end}}
         {{end}}
         {{end}}
         {{end}}
         {{end}}
         {{end}}
+        {{if not .T.obj.hasSession}}
+        {{include "tags/template/tag-breadcrumb-navigation.html" .}}
+        {{include "tags/template/tag-footer.html" .}}
+        {{end}}
     </div>
     </div>
 </div>
 </div>
 <!-- 三方认证弹窗 -->
 <!-- 三方认证弹窗 -->
@@ -1146,6 +1112,7 @@
 <script src='/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/forward-share/js/forward.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/forward-share/js/forward.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/bidstatus-update/js/bid-status-update.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/bidstatus-update/js/bid-status-update.js?v={{Msg "seo" "version"}}'></script>
+
 <!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
 <!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
 <script> new VConsole(); </script> -->
 <script> new VConsole(); </script> -->
 <script>
 <script>
@@ -1155,7 +1122,6 @@
       $(this).wrap('<div class="scroll-tab-container" style="max-width: 100%;overflow-x: scroll;"></div>')
       $(this).wrap('<div class="scroll-tab-container" style="max-width: 100%;overflow-x: scroll;"></div>')
     })
     })
   });
   });
-
     var canRead = {{.T.canRead}} //免费用户当天查看是否查看三次公告
     var canRead = {{.T.canRead}} //免费用户当天查看是否查看三次公告
     var	shareimgflag = true;
     var	shareimgflag = true;
     var area = {{.T.obj.area}}
     var area = {{.T.obj.area}}
@@ -1419,7 +1385,8 @@
                 window.vipStatus = res.data.vipStatus // 是否是超级订阅用户
                 window.vipStatus = res.data.vipStatus // 是否是超级订阅用户
                 window.viper = res.data.viper // 是否是超级订阅老用户 false:老用户 true: 新用户
                 window.viper = res.data.viper // 是否是超级订阅老用户 false:老用户 true: 新用户
                 window.entniche = res.data.entniche // 商机管理用户
                 window.entniche = res.data.entniche // 商机管理用户
-                window.fileNum = res.data.fileNum // 超级订阅用户可下载附件次数
+                // window.fileNum = res.data.fileNum // 超级订阅用户可下载附件次数
+                window.memberStatus = res.data.memberStatus // 大会员
                 window.isEntService = res.data.isEntService
                 window.isEntService = res.data.isEntService
                 bigstatus = res.data.memberStatus
                 bigstatus = res.data.memberStatus
                 hasServiceArr = res.data.power ? res.data.power : []
                 hasServiceArr = res.data.power ? res.data.power : []
@@ -1470,13 +1437,13 @@
                     })
                     })
                   }
                   }
                 }
                 }
-                //非大会员或大会员无此功能 且是新超级订阅用户
-                if (res.data && res.data.vipStatus > 0 && res.data.viper&&!window.isMemberAndPower) {
-                  $('.file-count-tip').css('display', 'inline-block')
-                  $('.go-buy-file-pack').css('display', 'inline-block')
-                  $('.icon-help').css('display', 'inline-block')
-                  $('.file-count').html(res.data.fileNum)
-                }
+                // //非大会员或大会员无此功能 且是新超级订阅用户
+                // if (res.data && res.data.vipStatus > 0 && res.data.viper&&!window.isMemberAndPower) {
+                //   $('.file-count-tip').css('display', 'inline-block')
+                //   $('.go-buy-file-pack').css('display', 'inline-block')
+                //   $('.icon-help').css('display', 'inline-block')
+                //   // $('.file-count').html(res.data.fileNum)
+                // }
                 setEntServiceInfo(res)
                 setEntServiceInfo(res)
             },
             },
             error:function(err) {
             error:function(err) {
@@ -2034,7 +2001,7 @@
       e.preventDefault()
       e.preventDefault()
       location.href = '/jyapp/big/page/client_portrayal?entName=' + encodeURIComponent({{.T.obj.buyer}}) + '&from=client'
       location.href = '/jyapp/big/page/client_portrayal?entName=' + encodeURIComponent({{.T.obj.buyer}}) + '&from=client'
     }
     }
-    function downFileOfVIP (fileName, callback) {
+    function downloadFileAjax (fileName, callback) {
         // 有下载次数
         // 有下载次数
         $.ajax({
         $.ajax({
             type: 'post',
             type: 'post',
@@ -2047,27 +2014,44 @@
                 title: title
                 title: title
             },
             },
             success: function (r) {
             success: function (r) {
-                if (r&&r.r&&r.r.code&&r.r.code<0&&window.vipStatus>0){
-                    // 次数用完提醒联系客服
-                    vant.Dialog.confirm({
-                        message: '您本月附件下载机会已消耗完毕,如需下载更多附件,请前往充值。',
-                        showCancelButton: true,
-                        confirmButtonText: '立即充值',
-                        confirmButtonColor: '#2ABDD1',
-                        className: 'custom-dialog',
-                        width: 303
-
-                    }).then(() => {
-                        location.href = '/jy_mobile/common/order/create/filepack?type=0'
-                    })
-                        .catch(() => {})
+                  // 重新获取下载次数
+                  subPoint()
+                if (r&&r.r&&r.r.code&&r.r.code<0){
+                    // 次数用完提醒
+                      if(window.vipStatus>0) {
+                        vant.Dialog.confirm({
+                          message: '您本月附件下载机会已消耗完毕,如需下载更多附件,请前往充值。',
+                          showCancelButton: true,
+                          confirmButtonText: '立即充值',
+                          confirmButtonColor: '#2ABDD1',
+                          className: 'custom-dialog',
+                          width: 303
+
+                        }).then(() => {
+                          location.href = '/jy_mobile/common/order/create/filepack?type=0'
+                        }).catch(() => {})
+                      } else if(window.isFree) {
+                        vant.Dialog.confirm({
+                          title: '开通超级订阅',
+                          message: '您的免费【附件下载】次数已使用完,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
+                          showCancelButton: true,
+                          confirmButtonText: '去开通',
+                          confirmButtonColor: '#2ABDD1',
+                          className: 'custom-dialog',
+                          width: 303,
+                          messageAlign: 'left',
+                        }).then(() => {
+                          // location.href = '/jyapp/vipsubscribe/vipsubscribe_new'
+                          location.href = '/jy_mobile/common/order/create/svip?type=buy'
+                        }).catch(() => {})
+                      }
                     return
                     return
                 }else if (r && r.m === '' && r.r) {
                 }else if (r && r.m === '' && r.r) {
                     var url = r.r.downUrl
                     var url = r.r.downUrl
                     if (url){
                     if (url){
                         if (!r.r.isExists){
                         if (!r.r.isExists){
-                            window.fileNum = window.fileNum - 1;
-                            $('.file-count').html($('.file-count').text()-1)
+                            // window.fileNum = Number(window.fileNum) - 1;
+                            // $('.file-count').text(Number($('.file-count').text())-1)
                         }
                         }
                         if(mySysIsIos()){
                         if(mySysIsIos()){
                             typeof callback === 'function' ? callback(url) : null
                             typeof callback === 'function' ? callback(url) : null
@@ -2084,6 +2068,57 @@
         })
         })
     }
     }
 
 
+    // 获取当前用户附件下载数量(用户下载次数判断需要)
+    window.downloadNum = 0
+    function subPoint() {
+      $.ajax({
+        url: '/jypay/resourcePack/account',
+        type: 'POST',
+        contentType: 'application/x-www-form-urlencoded',
+        data: {
+          product: 'attachmentDownPack'
+        },
+        dataType: 'json'
+      }).done(res => {
+        if (res.error_msg === '' && res.data && res.data.data) {
+          try {
+            var downloadNum =  res.data.data[0].number || 0
+            window.downloadNum = downloadNum // 免费用户可下载附件次数
+            window.fileNum = downloadNum // 超级订阅用户可下载附件次数
+            // 免费用户处理
+            if(window.isFree) {
+              // 免费用户且未留资过也未体验过,展示文案(引导留资)
+              if (window.freeFile == 0) {
+                if(downloadNum > 0) {
+                  $('.free-down-text').text('免费用户享有' + downloadNum + '次附件下载权益')
+                } else {
+                  $('.free-down-text').text('免费用户享有1次附件下载权益')
+                }
+              } else {
+                // 免费用户体验过
+               if(downloadNum > 0){
+                  $('.free-has-num').show() // 展示下载次数
+                  $('.free-no-num').hide()
+                } else{
+                 $('.free-has-num').hide() // 隐藏下载次数
+                 $('.free-no-num').show() // 展示下载更多附件
+               }
+              }
+            }
+            //非大会员或大会员无此功能 且是新超级订阅用户
+            if ( window.vipStatus > 0 && window.viper&&!window.isMemberAndPower) {
+              $('.file-count-tip').css('display', 'inline-block')
+              $('.go-buy-file-pack').css('display', 'inline-block')
+              $('.icon-help').css('display', 'inline-block')
+            }
+            // 下载次数
+            $('.file-count').html(downloadNum)
+          } catch (e) {
+            console.warn(e)
+          }
+        }
+      })
+    }
     // 附件下载展示
     // 附件下载展示
     function andownload() {
     function andownload() {
         $.ajax({
         $.ajax({
@@ -2106,26 +2141,31 @@
                             html += "<li class='downs'>"+"<a class='menu_list' data-href="+data.data.attachment[i].downurl+">"+data.data.attachment[i].filename+"</a></li>"
                             html += "<li class='downs'>"+"<a class='menu_list' data-href="+data.data.attachment[i].downurl+">"+data.data.attachment[i].filename+"</a></li>"
                         }
                         }
                     }
                     }
-
                     $('.download-list>ul').append(html)
                     $('.download-list>ul').append(html)
-                     // 下载附件
+                  // 下载附件
                     $('.downs').on('click', function() {
                     $('.downs').on('click', function() {
                       var url = $(this).find('a').attr('data-href')
                       var url = $(this).find('a').attr('data-href')
                       var size = $(this).find('a').attr('date-size')
                       var size = $(this).find('a').attr('date-size')
                       var fileName = $(this).find('a').text()
                       var fileName = $(this).find('a').text()
-                      console.log(window.isNoMember, window.isFree,window.freeFile, window.vipStatus, window.viper)
+                      console.log(window.isNoMember, window.isFree,window.freeFile, window.downloadNum,window.vipStatus, window.viper)
                       // 免费用户
                       // 免费用户
                       if (window.isFree) {
                       if (window.isFree) {
                         // 判断有无体验过 0:未体验过
                         // 判断有无体验过 0:未体验过
                         if (window.freeFile == 0) {
                         if (window.freeFile == 0) {
+                          // h5页跳转走数据不刷新处理
+                          if (utils.$envs.inH5) {
+                            subPoint()
+                          }
                           // 判断有无留过资 且未体验过 - 去留资
                           // 判断有无留过资 且未体验过 - 去留资
                           location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=article_attach_freeuser'
                           location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=article_attach_freeuser'
                           return
                           return
-                        } else if (window.freeFile < 0 ) {
-                          // 免费用户 体验过 下载次数为-1 弹框提醒跳至超级订阅购买页
+                        } else if (window.freeFile < 0 && window.downloadNum <= 0) {
+                          // 免费体验用户,无下载此处提示开通超级订阅
+                          // 免费用户 体验过(freeFile=-1) 剩余下载次数 弹框提醒跳至超级订阅购买页
+                          // message: '您已经免费解锁过【附件下载】权益1次,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
                           vant.Dialog.confirm({
                           vant.Dialog.confirm({
                             title: '开通超级订阅',
                             title: '开通超级订阅',
-                            message: '您已经免费解锁过【附件下载】权益1次,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
+                            message: '您的免费【附件下载】次数已使用完,暂无免费查看权限。如需查看更多,请开通超级订阅获取更多权限。',
                             showCancelButton: true,
                             showCancelButton: true,
                             confirmButtonText: '去开通',
                             confirmButtonText: '去开通',
                             confirmButtonColor: '#2ABDD1',
                             confirmButtonColor: '#2ABDD1',
@@ -2138,19 +2178,25 @@
                           })
                           })
                           .catch(() => {})
                           .catch(() => {})
                           return
                           return
-                        }else if(window.freeFile>0){
+                        }else{
+                          // P317版本改为免费用户只要有下载次数,均可正常下载
                           window.freeFile=-1
                           window.freeFile=-1
-                          //
-                          gotoFilePage($(this).find('a').text())
+                          // IOS APP端特殊流程处理,先提示填写邮箱后扣次数
+                          if(mySysIsIos()) {
+                            return iosShow(url, fileName,size)
+                          }
+                          downloadFileAjax(fileName)
+                          // gotoFilePage($(this).find('a').text())
                         }
                         }
                       } else {
                       } else {
                         // 付费用户
                         // 付费用户
-                        // 大会员用户 有下载权限
-                        if (window.isMemberAndPower) {
+                        // 大会员用户 且有附件下载个数
+                        if (window.memberStatus > 0) {
                           if(mySysIsIos()){
                           if(mySysIsIos()){
                             iosShow(url,fileName,size,false)
                             iosShow(url,fileName,size,false)
                           } else {
                           } else {
-                            location.href = url
+                            downloadFileAjax(fileName)
+                            // location.href = url
                           }
                           }
                           return
                           return
                         }
                         }
@@ -2162,13 +2208,13 @@
                             if(mySysIsIos()) {
                             if(mySysIsIos()) {
                               return iosShow(url, fileName,size,false)
                               return iosShow(url, fileName,size,false)
                             }
                             }
-                            downFileOfVIP(fileName)
+                            downloadFileAjax(fileName)
                             return
                             return
                             //if (window.fileNum <= 0) {
                             //if (window.fileNum <= 0) {
                             //}else{
                             //}else{
-                              //window.fileNum = window.fileNum - 1;
-                              //gotoFilePageOfVip($(this).find('a').text())
-                              //return
+                            //window.fileNum = window.fileNum - 1;
+                            //gotoFilePageOfVip($(this).find('a').text())
+                            //return
                             //}
                             //}
                           } else {
                           } else {
                             // 老超级订阅用户 提醒升级
                             // 老超级订阅用户 提醒升级
@@ -2189,6 +2235,16 @@
                             return
                             return
                           }
                           }
                         }
                         }
+                        // 商机管理用户只要有个数就有下载权限
+                        if(window.entniche && window.downloadNum > 0){
+                          if(mySysIsIos()){
+                            iosShow(url,fileName,size,false)
+                          } else {
+                            downloadFileAjax(fileName)
+                          }
+                          return
+                        }
+
                         // 是大会员自定义版本没有下载权限 或 非超级订阅的商机管理用户 (弹框提醒联系客服)
                         // 是大会员自定义版本没有下载权限 或 非超级订阅的商机管理用户 (弹框提醒联系客服)
                         var memberNoVip = window.isNoMember == true && !(window.vipStatus >0 && window.viper)
                         var memberNoVip = window.isNoMember == true && !(window.vipStatus >0 && window.viper)
                         if (memberNoVip || (window.vipStatus <=0 && window.entniche)) {
                         if (memberNoVip || (window.vipStatus <=0 && window.entniche)) {
@@ -2198,7 +2254,8 @@
                             confirmButtonText: '我知道了',
                             confirmButtonText: '我知道了',
                             confirmButtonColor: '#2ABDD1',
                             confirmButtonColor: '#2ABDD1',
                             width: 303,
                             width: 303,
-                          }).then(() => {})
+                          }).then(() => {
+                          })
                           return
                           return
                         }
                         }
                       }
                       }
@@ -2254,19 +2311,15 @@
     //ios更改为下载
     //ios更改为下载
     //老版本还走邮件模式  新版本走下载 需要判断版本号
     //老版本还走邮件模式  新版本走下载 需要判断版本号
     //isfree 是否是免费
     //isfree 是否是免费
-    function iosShow(url,fileName,size,isfree){
+    function iosShow(url,fileName,size){
       var version = JyObj.getVersion()
       var version = JyObj.getVersion()
       if(version && compareVersion('3.0.4',version)){
       if(version && compareVersion('3.0.4',version)){
         //切割名称获取格式
         //切割名称获取格式
           var name = fileName ? fileName.substring(0, fileName.lastIndexOf('.')) : ''
           var name = fileName ? fileName.substring(0, fileName.lastIndexOf('.')) : ''
           var types = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : ''
           var types = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : ''
-          if (isfree){
-              JyObj.downLoadFile(name,types,url,size);
-          }else{
-            downFileOfVIP(fileName, function (url) {
-              JyObj.downLoadFile(name,types,url,size);
-            })
-          }
+          downloadFileAjax(fileName, function (url) {
+            JyObj.downLoadFile(name,types,url,size);
+          })
         }else{
         }else{
           iosShow_email(url,fileName,isfree)
           iosShow_email(url,fileName,isfree)
         }
         }
@@ -2306,7 +2359,7 @@
                     //按下确定按钮执行的操作
                     //按下确定按钮执行的操作
                     //todo ....
                     //todo ....
                     if (!isfree) {
                     if (!isfree) {
-                        downFileOfVIP(fileName, function (url) {
+                        downloadFileAjax(fileName, function (url) {
                             sendAlert(url,getinputemail)
                             sendAlert(url,getinputemail)
                         })
                         })
                     } else {
                     } else {
@@ -2762,6 +2815,7 @@
         $('.caigouunit .textcontent').css('color', '#171826')
         $('.caigouunit .textcontent').css('color', '#171826')
         $('.zhongbiaounit').addClass('notextcontent')
         $('.zhongbiaounit').addClass('notextcontent')
       }
       }
+      // 获取isAdd的信息
       isOpening()
       isOpening()
       $(document).on('click',".border-tel",function(){
       $(document).on('click',".border-tel",function(){
           if(!isEntniche&&!isVIP&&bigstatus<=0){
           if(!isEntniche&&!isVIP&&bigstatus<=0){
@@ -3201,7 +3255,8 @@
                               sessionStorage.followSetReload = "1";
                               sessionStorage.followSetReload = "1";
                           }
                           }
                           followId = r.data;
                           followId = r.data;
-                          EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+                          // EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+                          pointsTaskSuccessTip()
                           followFlag = true;
                           followFlag = true;
                           jumpFlag = true;
                           jumpFlag = true;
                           $(".follow").html('<i class="glyphicon yiguanzhu"></i>已关注');
                           $(".follow").html('<i class="glyphicon yiguanzhu"></i>已关注');
@@ -3231,7 +3286,19 @@
               location.href = '/jyapp/big/page/landingPage'
               location.href = '/jyapp/big/page/landingPage'
           })
           })
       });
       });
-
+      // 赚剑鱼币任务完成提示
+      function pointsTaskSuccessTip() {
+        // 获取剑鱼币任务信息
+        const from =  utils.getParam('from')
+        var point = utils.getParam('point') || 0
+        if(from && from === 'task'){
+          EasyAlert.show("关注项目成功,获得" + point + "剑鱼币。<br>可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"}, 2000);
+          utils.delUrlParam('from')
+        } else {
+          // 普通提示
+          EasyAlert.show("已关注,可从“我的-<br>项目关注”查看<br>或设置提醒日期",{"text-align":"left","width":"195px"});
+        }
+      }
       //
       //
       $(".myfollowent").click(function(){
       $(".myfollowent").click(function(){
           var entname = $(this).text()
           var entname = $(this).text()
@@ -3455,9 +3522,13 @@
       window.addEventListener('pagehide', function () {
       window.addEventListener('pagehide', function () {
           isPageHide = true;
           isPageHide = true;
       });
       });
+      subPoint()
       if (canRead) {
       if (canRead) {
         // 有权限查看的才会下载附件
         // 有权限查看的才会下载附件
-        andownload()
+        setTimeout(function(){
+          andownload()
+        }, 500)
+
       }
       }
       // 收藏
       // 收藏
       $('.collec_star').on('click', function () {
       $('.collec_star').on('click', function () {
@@ -3520,7 +3591,76 @@
         return key
         return key
       }
       }
     }
     }
+
 </script>
 </script>
+{{if not .T.obj.hasSession }}
+  <script>
+      var areaNavModule = {
+      $el: null,
+      init: function () {
+        this.getTargetDOM()
+        this.addListener()
+      },
+      getTargetDOM: function () {
+        this.$el = $('.tag-area-nav-container')
+      },
+      addListener: function () {
+        var _this = this
+        if (!this.$el) return
+        this.$el.find('.action-show-more').on('click', function () {
+          _this.$el.find('.tag-area-nav-list-group').toggle()
+        })
+      }
+    }
+    var backToTop = {
+      $scrollDOM: $('.app-layout-content-b'),
+      $backToTop: $('.back-to-top'),
+      init: function () {
+        this.checkBackToTopButtonShow()
+        this.bindEvents()
+      },
+      bindEvents: function () {
+        var _this = this
+        this.$backToTop.on('click', function () {
+          $('.app-layout-content-b').animate({
+            scrollTop: 0
+          })
+        })
+        this.$scrollDOM.on('scroll', function (e) {
+          _this.checkBackToTopButtonShow()
+        })
+      },
+      checkBackToTopButtonShow: function () {
+        var scrollTop = this.$scrollDOM.scrollTop()
+        if (scrollTop < 5) {
+          this.$backToTop.hide()
+        } else {
+          this.$backToTop.show()
+        }
+      }
+    }
+    $(function(){
+      areaNavModule.init()
+      backToTop.init()
+      // 未登录状态下距顶部距离为顶部搜索框高度
+      var headerTop = document.querySelector('.jy-app-header ').clientHeight
+      $('.app-layout-content-b').css('top', headerTop)
+      $('.h5-tabfix').css('top', headerTop)
+      $('.wx-tabfix').css('top', headerTop)
+      $('.childNav').css('top', headerTop)
+      $('.tag-breadcrumb-navigation').css('background', '#EDEFF2')
+      $('.search-container').on('click', function (e) {
+        e.preventDefault()
+        localStorage.removeItem('JY-MOBILE-home-top-search')
+        sessionStorage.removeItem('JY-MOBILE-/search/result/bidding')
+        location.href = '/jy_mobile/search/middle/bidding'
+      })
+      $('.j-icon.base-icon.icon-back-white').on('click', function() {
+        window.history.back()
+      })
+    })
+  </script>
+{{end}}
 {{include "/common/baiducc.html"}}
 {{include "/common/baiducc.html"}}
 </body>
 </body>
 </html>
 </html>

+ 5 - 1
src/jfw/modules/bigmember/src/config.json

@@ -180,5 +180,9 @@
   "potentialCount": 1000,
   "potentialCount": 1000,
   "newDataTime": 1685606275,
   "newDataTime": 1685606275,
   "projectCount": 5000,
   "projectCount": 5000,
-  "portraitStartTime": 2018
+  "portraitStartTime": 2018,
+  "portraitDynamicTime": 7,
+  "portraitCount": 30,
+  "nsq": "192.168.3.240:4260",
+  "nsq_topic": "jy_event"
 }
 }

+ 9 - 5
src/jfw/modules/bigmember/src/config/config.go

@@ -65,11 +65,15 @@ type config struct {
 		Details  string `json:"details"`
 		Details  string `json:"details"`
 		ListPage string `json:"listPage"`
 		ListPage string `json:"listPage"`
 	} `json:"claim"`
 	} `json:"claim"`
-	ContextOldVipLimit int64 `json:"contextOldVipLimit"` //超级订阅部分用户:--- 超前项目权限
-	PotentialCount     int   `json:"potentialCount"`     //潜在客户 潜在竞争对手数据量
-	NewDataTime        int64 `json:"newDataTime"`        // 用于周边月报区分是否为新数据 、配置为p350发版的时间
-	ProjectCount       int   `json:"projectCount"`       //画像和报告项目明细最大数量
-	PortraitStartTime  int   `json:"portraitStartTime"`
+	ContextOldVipLimit  int64  `json:"contextOldVipLimit"` //超级订阅部分用户:--- 超前项目权限
+	PotentialCount      int    `json:"potentialCount"`     //潜在客户 潜在竞争对手数据量
+	NewDataTime         int64  `json:"newDataTime"`        // 用于周边月报区分是否为新数据 、配置为p350发版的时间
+	ProjectCount        int    `json:"projectCount"`       //画像和报告项目明细最大数量
+	PortraitStartTime   int    `json:"portraitStartTime"`
+	PortraitDynamicTime int    `json:"portraitDynamicTime"`
+	PortraitCount       int    `json:"portraitCount"`
+	Nsq                 string `json:"nsq"`
+	Nsq_topic           string `json:"nsq_topic"`
 }
 }
 
 
 type CustomerInfo struct {
 type CustomerInfo struct {

+ 2 - 2
src/jfw/modules/bigmember/src/entity/followProject.go

@@ -1,7 +1,6 @@
 package entity
 package entity
 
 
 import (
 import (
-	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"encoding/json"
 	"encoding/json"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
@@ -15,6 +14,8 @@ import (
 	"sync"
 	"sync"
 	"time"
 	"time"
 
 
+	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jybase/redis"
@@ -145,7 +146,6 @@ func (this *ProjectFollow) SaveProject(sid string) (string, error) {
 	if followId == "" {
 	if followId == "" {
 		return "", errors.New("关注项目出错")
 		return "", errors.New("关注项目出错")
 	}
 	}
-
 	return followId, nil
 	return followId, nil
 }
 }
 
 

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

@@ -310,14 +310,14 @@ func (this *Portrait) GetWinnerContactsMsg(entId string) ([]map[string]interface
 //		  matchType 搜索范围
 //		  matchType 搜索范围
 //	   area 项目地区
 //	   area 项目地区
 //	   pushTime 发布时间
 //	   pushTime 发布时间
-func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
+func (this *Portrait) GetWinnerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, int64, error) {
 	return pwp.GetWinnerList()
 	return pwp.GetWinnerList()
 }
 }
 func (this *Portrait) GetWinnerNewExport(pwp *PortraitProjectScreen) ([]string, error) {
 func (this *Portrait) GetWinnerNewExport(pwp *PortraitProjectScreen) ([]string, error) {
 	return pwp.GetWinnerListIds()
 	return pwp.GetWinnerListIds()
 }
 }
 
 
-func (this *Portrait) GetBuyerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, error) {
+func (this *Portrait) GetBuyerNewMsg(pwp *PortraitProjectScreen) ([]map[string]interface{}, int64, int64, error) {
 	return pwp.GetBuyerList()
 	return pwp.GetBuyerList()
 }
 }
 func (this *Portrait) GetBuyerNewMsgExport(pwp *PortraitProjectScreen) ([]string, error) {
 func (this *Portrait) GetBuyerNewMsgExport(pwp *PortraitProjectScreen) ([]string, error) {

+ 77 - 21
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -1,6 +1,7 @@
 package entity
 package entity
 
 
 import (
 import (
+	"app.yhyue.com/moapp/jybase/redis"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/modules/bigmember/src/config"
 	"jy/src/jfw/modules/bigmember/src/config"
@@ -219,6 +220,7 @@ func (pwp *PortraitProjectScreen) CommonPare(isWinner bool) (mustQueryArr []stri
 	}
 	}
 
 
 	//按照当前年份,往前推4年,共5个年份可选
 	//按照当前年份,往前推4年,共5个年份可选
+	//无权已用户
 	sTime, eTime := pwp.Screen.PareTimeSelect(isWinner) //采购单位不校验权限
 	sTime, eTime := pwp.Screen.PareTimeSelect(isWinner) //采购单位不校验权限
 	if isWinner {
 	if isWinner {
 		mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"term":{"entidlist":"%s"}}`, pwp.Screen.Ent))
 		mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"term":{"entidlist":"%s"}}`, pwp.Screen.Ent))
@@ -232,7 +234,7 @@ func (pwp *PortraitProjectScreen) CommonPare(isWinner bool) (mustQueryArr []stri
 
 
 // GetWinnerListSearch 获取企业画像中标信息数据
 // GetWinnerListSearch 获取企业画像中标信息数据
 // 会员展示1-4页表格数据,免费用户前三条
 // 会员展示1-4页表格数据,免费用户前三条
-func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]interface{}, total int64, updateTime int64, err error) {
 	if pwp.Screen.Ent == "" {
 	if pwp.Screen.Ent == "" {
 		err = fmt.Errorf("企业名称异常")
 		err = fmt.Errorf("企业名称异常")
 		return
 		return
@@ -240,6 +242,11 @@ func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]inte
 	mustQueryArr := pwp.CommonPare(true)
 	mustQueryArr := pwp.CommonPare(true)
 	pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)     //默认第一页
 	pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)     //默认第一页
 	pwp.PageSize = qutil.If(pwp.PageSize == 0, 10, pwp.PageSize).(int) //默认每页10条
 	pwp.PageSize = qutil.If(pwp.PageSize == 0, 10, pwp.PageSize).(int) //默认每页10条
+
+	if !pwp.Screen.HasPower || pwp.Free {
+		return pwp.FreePortraitNews(mustQueryArr, true)
+	}
+
 	//仅第一页查询总量
 	//仅第一页查询总量
 	if pwp.PageNum == 1 || pwp.IsExport {
 	if pwp.PageNum == 1 || pwp.IsExport {
 		total = elastic.Count(biddingIndex, biddingType, fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), ""))
 		total = elastic.Count(biddingIndex, biddingType, fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), ""))
@@ -272,9 +279,9 @@ func (pwp *PortraitProjectScreen) GetWinnerListSearch() (list *[]map[string]inte
 }
 }
 
 
 // GetWinnerList 获取企业画像中标信息数据
 // GetWinnerList 获取企业画像中标信息数据
-func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}, total int64, updateTime int64, err error) {
 	var newData *[]map[string]interface{}
 	var newData *[]map[string]interface{}
-	newData, total, err = pwp.GetWinnerListSearch()
+	newData, total, updateTime, err = pwp.GetWinnerListSearch()
 	if newData == nil || len(*newData) == 0 {
 	if newData == nil || len(*newData) == 0 {
 		return
 		return
 	}
 	}
@@ -314,7 +321,7 @@ func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}
 // GetWinnerListIds 画像中标单位动态数据导出
 // GetWinnerListIds 画像中标单位动态数据导出
 func (pwp *PortraitProjectScreen) GetWinnerListIds() (ids []string, err error) {
 func (pwp *PortraitProjectScreen) GetWinnerListIds() (ids []string, err error) {
 	var newData *[]map[string]interface{}
 	var newData *[]map[string]interface{}
-	newData, _, err = pwp.GetWinnerListSearch()
+	newData, _, _, err = pwp.GetWinnerListSearch()
 	if newData == nil || len(*newData) == 0 {
 	if newData == nil || len(*newData) == 0 {
 		err = fmt.Errorf("未找到相关数据")
 		err = fmt.Errorf("未找到相关数据")
 		return
 		return
@@ -349,7 +356,7 @@ func GetNewBiddingCount(winnerId, buyer string) int64 {
 }
 }
 
 
 // GetBuyerListSearch 采购单位中标动态查询
 // GetBuyerListSearch 采购单位中标动态查询
-func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]interface{}, total int64, err error) {
+func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]interface{}, total int64, updateTime int64, err error) {
 	if pwp.Screen.Ent == "" {
 	if pwp.Screen.Ent == "" {
 		err = fmt.Errorf("企业名称异常")
 		err = fmt.Errorf("企业名称异常")
 		return
 		return
@@ -358,9 +365,12 @@ func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]inter
 	if pwp.Screen.HasPower {
 	if pwp.Screen.HasPower {
 		pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)    //默认第一页
 		pwp.PageNum = qutil.If(pwp.PageNum == 0, 1, pwp.PageNum).(int)    //默认第一页
 		pwp.PageSize = qutil.If(pwp.PageSize == 0, 5, pwp.PageSize).(int) //默认每页10条
 		pwp.PageSize = qutil.If(pwp.PageSize == 0, 5, pwp.PageSize).(int) //默认每页10条
-	} else { //免费用户可以查看三条
-		pwp.PageNum = 1
-		pwp.PageSize = 5
+		//} else { //免费用户可以查看三条
+		//	pwp.PageNum = 1
+		//	pwp.PageSize = 5
+	}
+	if !pwp.Screen.HasPower || pwp.Free {
+		return pwp.FreePortraitNews(mustQueryArr, false)
 	}
 	}
 
 
 	//仅第一页查询总量(非数据导出)
 	//仅第一页查询总量(非数据导出)
@@ -384,27 +394,73 @@ func (pwp *PortraitProjectScreen) GetBuyerListSearch() (list *[]map[string]inter
 		//log.Printf("PortraitWinnerProject GetList Sql %s\n", listQuery)
 		//log.Printf("PortraitWinnerProject GetList Sql %s\n", listQuery)
 		list = elastic.Get(biddingIndex, biddingIndex, listQuery)
 		list = elastic.Get(biddingIndex, biddingIndex, listQuery)
 	} else { // 数据导出分批查询
 	} else { // 数据导出分批查询
-		if total > 5 {
-			if pwp.Screen.HasPower {
-				if pwp.Free {
-					total = 5
-				}
-			} else { //免费用户可以查看三条
-				total = 5
-			}
-		}
+		//if total > 5 {
+		//	if pwp.Screen.HasPower {
+		//		if pwp.Free {
+		//			total = 5
+		//		}
+		//	} else { //免费用户可以查看三条
+		//		total = 5
+		//	}
+		//}
 		listQuery := fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), `,"_source":["_id"],"sort":{"publishtime":"desc"}`)
 		listQuery := fmt.Sprintf(NewMustSearch, strings.Join(mustQueryArr, ","), `,"_source":["_id"],"sort":{"publishtime":"desc"}`)
 		list = getBatchSearchRes(biddingIndex, biddingIndex, listQuery, total)
 		list = getBatchSearchRes(biddingIndex, biddingIndex, listQuery, total)
 	}
 	}
 	return
 	return
 }
 }
 
 
+func (pwp *PortraitProjectScreen) FreePortraitNews(mustQueryArr []string, isWinner bool) (data *[]map[string]interface{}, total int64, updateTime int64, err error) {
+	redisKey := fmt.Sprintf("free_portrait_list_%s", pwp.Screen.Ent)
+	redisData := make(map[string]interface{})
+	var dataArr []map[string]interface{}
+	if rBytes, err := redis.GetBytes("other", redisKey); err == nil && len(*rBytes) != 0 {
+		_ = json.Unmarshal(*rBytes, &redisData)
+		rData, _ := redisData["list"].([]interface{})
+		dataArr = qutil.ObjArrToMapArr(rData)
+		total = qutil.Int64All(redisData["total"])
+		updateTime = qutil.Int64All(redisData["updateTime"])
+	} else {
+		var fields string
+		updateTime = time.Now().Unix()
+		if isWinner {
+			fields = `"_id","projectname","bidamount","budget","title","publishtime","subtype","toptype","area","bidopentime","buyer"`
+		} else {
+			fields = `"bidstatus","_id","title","subtype","projectname","publishtime","area","bidamount","budget","bidopentime","s_winner","entidlist"`
+		}
+		mustQueryArrStr := strings.Join(mustQueryArr, ",")
+		total = elastic.Count(biddingIndex, biddingIndex, fmt.Sprintf(NewMustSearch, mustQueryArrStr, ""))
+		isTrue := true
+		if total > 0 {
+			listQuery := fmt.Sprintf(NewMustSearch, mustQueryArrStr, fmt.Sprintf(`,"_source":[%s],"sort":{%s},"from":0,"size":%d`, fields, `"publishtime":"desc","id":"desc"`, config.Config.PortraitCount))
+			list := elastic.Get(biddingIndex, biddingIndex, listQuery)
+			if list != nil && len(*list) > 0 {
+				dataArr = *list
+			} else {
+				log.Printf("画像动态数据获取异常,ent:%s,total:%d,sql:%s", pwp.Screen.Ent, total, listQuery)
+				isTrue = false
+				total = 0
+			}
+		}
+		if isTrue {
+			go func() {
+				redis.Put("other", redisKey, map[string]interface{}{
+					"list":       dataArr,
+					"total":      total,
+					"updateTime": updateTime,
+				}, 24*3600*config.Config.PortraitDynamicTime)
+			}()
+		}
+	}
+	data = &dataArr
+	return
+}
+
 // GetBuyerList 获取采购单位采购信息数据
 // GetBuyerList 获取采购单位采购信息数据
-// 会员展示1-4页表格数据,免费用户前三条
-func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{}, total int64, err error) {
+// 会员展示1-4页表格数据,免费用户前三
+func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{}, total int64, updateTime int64, err error) {
 	var newData *[]map[string]interface{}
 	var newData *[]map[string]interface{}
 	//查询
 	//查询
-	newData, total, err = pwp.GetBuyerListSearch()
+	newData, total, updateTime, err = pwp.GetBuyerListSearch()
 	if newData == nil || len(*newData) == 0 {
 	if newData == nil || len(*newData) == 0 {
 		return
 		return
 	}
 	}
@@ -444,7 +500,7 @@ func (pwp *PortraitProjectScreen) GetBuyerList() (list []map[string]interface{},
 func (pwp *PortraitProjectScreen) GetBuyerListIds() (ids []string, err error) {
 func (pwp *PortraitProjectScreen) GetBuyerListIds() (ids []string, err error) {
 	var newData *[]map[string]interface{}
 	var newData *[]map[string]interface{}
 	//查询
 	//查询
-	newData, _, err = pwp.GetBuyerListSearch()
+	newData, _, _, err = pwp.GetBuyerListSearch()
 	if newData == nil || len(*newData) == 0 {
 	if newData == nil || len(*newData) == 0 {
 		err = fmt.Errorf("未查询到相关数据")
 		err = fmt.Errorf("未查询到相关数据")
 		return
 		return

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

@@ -5,8 +5,8 @@ go 1.19
 require (
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
+	app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2
 	github.com/gogf/gf/v2 v2.4.2
 	github.com/olivere/elastic/v7 v7.0.32
 	github.com/olivere/elastic/v7 v7.0.32
@@ -18,7 +18,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // 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/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
@@ -134,7 +134,7 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect

+ 8 - 8
src/jfw/modules/bigmember/src/go.sum

@@ -9,18 +9,18 @@ app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/
 app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 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/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e h1:phO8+opFgz3p1XebtdLepM1u8q/TE/EgLYjP4Ebt/jU=
-app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e/go.mod h1:wbDWBpLODtGhkQw4dCShvmRr6G8CazuW8kWq42paQOM=
+app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d h1:h8SnO8ONZlmtx8ZSYtpw36TdBhYPy8WgLeWHyMGZj0Q=
+app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447 h1:hrBqrsf2QHTrnoR9VTV4w7g2akDfbpQ+umNQvkkNs+Y=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230222052351-9d6fad062447/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13 h1:aK3ya7aznINdAuEl7sKq9U2MvJidUfk6nxPGjjX+t3Y=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13/go.mod h1:vDEKni2rnCraKgKnnCEIwsFmO92GxnpfKmNQ+83wKP0=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14 h1:L/0RrgU+l8nMS7YO2JizszaX3lAo0gqzg2Bqmu0So0s=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14/go.mod h1:03M9BWIGHy7BbGxLvjt8V9zZzEZDWhN6BuHVfVcDFbQ=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
@@ -1420,8 +1420,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e h1:1O11hFuKvLD3Ls+9wxssUpMV3fG9qD4EfeeAy92dsWY=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230630032508-eefb06a4588e/go.mod h1:wBxeFODhYtGenkxXJGThN/VrFaxPvvHMxzpS09pxApM=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a h1:kwjO4pqB3gnNGrQ9aXyz6f8s9qXAUenPUDWip8gYR/Q=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

+ 13 - 2
src/jfw/modules/bigmember/src/service/follow/enterprise.go

@@ -1,15 +1,18 @@
 package follow
 package follow
 
 
 import (
 import (
-	. "app.yhyue.com/moapp/jybase/api"
-	qutil "app.yhyue.com/moapp/jybase/common"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/config"
+	"jy/src/jfw/modules/bigmember/src/db"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/util"
 	"jy/src/jfw/modules/bigmember/src/util"
 	"log"
 	"log"
 
 
+	. "app.yhyue.com/moapp/jybase/api"
+	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 )
 
 
 // FollowEnt 大会员关注企业接口(企业情报)
 // FollowEnt 大会员关注企业接口(企业情报)
@@ -146,6 +149,14 @@ func (this *FollowEnt) AddFollow() {
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
+		//	首次完成关注企业可获得积分
+		jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.Nsq_topic, "task", qutil.ObjToString(this.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+			"code":       1012, //关注企业
+			"types":      "followEnt",
+			"num":        50,
+			"baseUserId": this.GetSession("base_user_id"),
+			"positionId": this.GetSession("positionId"),
+		})
 		return "success", nil
 		return "success", nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {

+ 17 - 3
src/jfw/modules/bigmember/src/service/follow/project.go

@@ -1,17 +1,21 @@
 package follow
 package follow
 
 
 import (
 import (
-	. "app.yhyue.com/moapp/jybase/api"
-	qutil "app.yhyue.com/moapp/jybase/common"
-	elastic "app.yhyue.com/moapp/jybase/es"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
+	"jy/src/jfw/modules/bigmember/src/config"
+	"jy/src/jfw/modules/bigmember/src/db"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/entity"
 	"jy/src/jfw/modules/bigmember/src/util"
 	"jy/src/jfw/modules/bigmember/src/util"
+
 	"log"
 	"log"
 	"strings"
 	"strings"
 
 
+	. "app.yhyue.com/moapp/jybase/api"
+	qutil "app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 )
 
 
 // FollowProject 大会员关注项目接口
 // FollowProject 大会员关注项目接口
@@ -48,6 +52,16 @@ func (this *FollowProject) AddProject() {
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
+
+		//	首次完成项目关注可获得积分
+		jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.Nsq_topic, "task", qutil.ObjToString(this.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+			"code":       1013, //关注项目
+			"types":      "followProject",
+			"num":        50,
+			"baseUserId": this.GetSession("base_user_id"),
+			"positionId": this.GetSession("positionId"),
+		})
+
 		return util.EncodeId(followId), nil
 		return util.EncodeId(followId), nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {

+ 21 - 24
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -116,17 +116,14 @@ func (this *EntPortrait) WinnerNewMsg() {
 		if entId == "" {
 		if entId == "" {
 			return nil, fmt.Errorf("企业参数异常")
 			return nil, fmt.Errorf("企业参数异常")
 		}
 		}
-		cepm, hasPower, err, _ := entity.CreatePortraitManager(this.Session(), "entNewMsg")
-		if err != nil {
-			return nil, err
-		}
-		if !hasPower {
-			return nil, fmt.Errorf("非法请求")
-		}
+		cepm, hasPower, _, _ := entity.CreatePortraitManager(this.Session(), "entNewMsg")
+		//if err != nil {
+		//	return nil, err
+		//}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		pageSize, _ := this.GetInteger("pageSize")
 
 
-		rData, total, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Ent:        entId,
 				Match:      this.GetString("match"),
 				Match:      this.GetString("match"),
@@ -145,8 +142,9 @@ func (this *EntPortrait) WinnerNewMsg() {
 			return nil, err
 			return nil, err
 		}
 		}
 		return map[string]interface{}{
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 		}, nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {
@@ -167,9 +165,7 @@ func (this *EntPortrait) WinnerNewMsgExport() {
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
-		if !hasPower {
-			return nil, fmt.Errorf("非法请求")
-		}
+
 		//查询数据导出数据id列
 		//查询数据导出数据id列
 		pps := &entity.PortraitProjectScreen{
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
@@ -298,16 +294,16 @@ func (this *EntPortrait) BuyerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
 	rData, errMsg := func() (interface{}, error) {
 		cepm, hasPower, err, _ := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
 		cepm, hasPower, err, _ := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
-		if err != nil {
-			return nil, err
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
 
 
 		buyer := this.GetString("buyer")
 		buyer := this.GetString("buyer")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		pageSize, _ := this.GetInteger("pageSize")
 
 
 		//免费用户仅可查看三条记录
 		//免费用户仅可查看三条记录
-		rData, total, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
 				Ent:        buyer,
 				Match:      this.GetString("match"),
 				Match:      this.GetString("match"),
@@ -325,8 +321,9 @@ func (this *EntPortrait) BuyerNewMsg() {
 			return nil, err
 			return nil, err
 		}
 		}
 		return map[string]interface{}{
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 		}, nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {
@@ -339,11 +336,11 @@ func (this *EntPortrait) BuyerNewMsgExport() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
 	rData, errMsg := func() (interface{}, error) {
 		cepm, hasPower, err, free := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
 		cepm, hasPower, err, free := entity.CreatePortraitManager(this.Session(), "buyerPortrait")
-		if err != nil {
-			return nil, err
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
 		buyer := this.GetString("buyer")
 		buyer := this.GetString("buyer")
-		//免费用户仅可查看三条记录
+		//免费用户仅可查看三条记录
 		pps := &entity.PortraitProjectScreen{
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
 				Ent:        buyer,
@@ -525,7 +522,7 @@ func (this *EntPortrait) NoLoginAssociatedInfo() {
 		// 未登录用户关联中标企业
 		// 未登录用户关联中标企业
 		data := entity.NoLoginAssociatedInfo(entId)
 		data := entity.NoLoginAssociatedInfo(entId)
 		var cepm *entity.Portrait
 		var cepm *entity.Portrait
-		rData, _, _ := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, _, _, _ := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Ent:        entId,
 				Match:      this.GetString("match"),
 				Match:      this.GetString("match"),

+ 18 - 30
src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go

@@ -68,26 +68,17 @@ func (this *SubVipPortrait) SubVipEntDetail() {
 // SubVipWinnerNewMsg 超级订阅升级版查看最新中标动态
 // SubVipWinnerNewMsg 超级订阅升级版查看最新中标动态
 func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	userId := qutil.ObjToString(this.GetSession("userId"))
-	log.Println(this.Session().GetMultiple(), "---SubVipWinnerNewMsg  userId :", userId)
 	rData, errMsg := func() (interface{}, error) {
 	rData, errMsg := func() (interface{}, error) {
-		log.Println(qutil.ObjToString(this.GetSession("userId")), "------SubVipWinnerNewMsg -------------  userId :", userId)
 		entId := util.DecodeId(this.GetString("entId"))
 		entId := util.DecodeId(this.GetString("entId"))
 		if entId == "" {
 		if entId == "" {
 			return nil, fmt.Errorf("参数异常")
 			return nil, fmt.Errorf("参数异常")
 		}
 		}
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
-		if err != nil {
-			return nil, err
-		}
-
-		if power <= 1 {
-			return nil, errors.New("非法请求")
-		}
+		cepm, power, _, _ := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
 
 
 		pageNum, _ := this.GetInteger("pageNum")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		pageSize, _ := this.GetInteger("pageSize")
 
 
-		rData, total, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetWinnerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        entId,
 				Ent:        entId,
 				Match:      this.GetString("match"),
 				Match:      this.GetString("match"),
@@ -96,7 +87,7 @@ func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 				Area:       this.GetString("area"),
 				Area:       this.GetString("area"),
 				ScopeClass: this.GetString("scopeClass"),
 				ScopeClass: this.GetString("scopeClass"),
 				TimeRange:  this.GetString("timeRange"),
 				TimeRange:  this.GetString("timeRange"),
-				HasPower:   true,
+				HasPower:   power > 1,
 			},
 			},
 			PageNum:  pageNum,
 			PageNum:  pageNum,
 			PageSize: pageSize,
 			PageSize: pageSize,
@@ -105,8 +96,9 @@ func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 			return nil, err
 			return nil, err
 		}
 		}
 		return map[string]interface{}{
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 		}, nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {
@@ -127,9 +119,9 @@ func (this *SubVipPortrait) WinnerNewMsgExport() {
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
-		if power <= 1 {
-			return nil, errors.New("非法请求")
-		}
+		//if power <= 1 {
+		//	return nil, errors.New("非法请求")
+		//}
 		//查询数据导出数据id列
 		//查询数据导出数据id列
 		pps := &entity.PortraitProjectScreen{
 		pps := &entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
@@ -140,7 +132,7 @@ func (this *SubVipPortrait) WinnerNewMsgExport() {
 				Area:       this.GetString("area"),
 				Area:       this.GetString("area"),
 				ScopeClass: this.GetString("scopeClass"),
 				ScopeClass: this.GetString("scopeClass"),
 				TimeRange:  this.GetString("timeRange"),
 				TimeRange:  this.GetString("timeRange"),
-				HasPower:   true,
+				HasPower:   power > 1,
 			},
 			},
 			IsExport: true,
 			IsExport: true,
 			Free:     free,
 			Free:     free,
@@ -341,20 +333,15 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		if buyer == "" {
 		if buyer == "" {
 			return nil, fmt.Errorf("参数异常")
 			return nil, fmt.Errorf("参数异常")
 		}
 		}
-		if userId == "" {
-			return nil, fmt.Errorf("未登录")
-		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		pageSize, _ := this.GetInteger("pageSize")
 		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
 		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
-		if err != nil {
-			return nil, err
-		}
-		if power <= 1 {
-			return nil, fmt.Errorf("无查看权益")
-		}
+		//if err != nil {
+		//	return nil, err
+		//}
+
 		//免费用户仅可查看三条记录
 		//免费用户仅可查看三条记录
-		rData, total, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
+		rData, total, updateTime, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
 			Screen: &entity.PortraitScreen{
 				Ent:        buyer,
 				Ent:        buyer,
 				Match:      this.GetString("match"),
 				Match:      this.GetString("match"),
@@ -372,8 +359,9 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 			return nil, err
 			return nil, err
 		}
 		}
 		return map[string]interface{}{
 		return map[string]interface{}{
-			"list":  rData,
-			"count": total,
+			"list":       rData,
+			"count":      total,
+			"updateTime": updateTime,
 		}, nil
 		}, nil
 	}()
 	}()
 	if errMsg != nil {
 	if errMsg != nil {

+ 2 - 92
src/jfw/modules/followent/src/web/templates/weixin/list.html

@@ -28,7 +28,7 @@ if(sessionStorage){
 		right: 0;
 		right: 0;
 		bottom: 0;
 		bottom: 0;
 	}
 	}
-  
+
   .listpage .redspot{
   .listpage .redspot{
       position: absolute;
       position: absolute;
       width: 8px;
       width: 8px;
@@ -50,97 +50,7 @@ if(sessionStorage){
 	</div>
 	</div>
 	<div class="jylistbottom" style="display: none;">
 	<div class="jylistbottom" style="display: none;">
         <img src="/jylab/followent/images/wx/jydustbin.png"/>批量移除30天无更新企业
         <img src="/jylab/followent/images/wx/jydustbin.png"/>批量移除30天无更新企业
-    </div>
-    <div class="_fhts92t44f" id="pro_footer"></div>
-    <script type="text/javascript">
-        $.ajax({
-            type: 'POST',
-            url: '/publicapply/bidcoll/power?t=' + new Date().getTime(),
-            success: function(res) {
-                console.log(res)
-                // res.data.entniche = false
-                // res.data.member = false
-                // res.data.vip = 0
-                if(res.error_code == 0) {
-                    if(!res.data.entniche && !res.data.member && res.data.vip <= 0){
-                        (window.slotbydup = window.slotbydup || []).push({
-                            id: "u6603901",
-                            container: "_fhts92t44f",
-                            async: true
-                        });
-                        getAjaxAdv()
-                        var frames = document.getElementById("iframeu6603901_0");
-                        console.log(frames, 'frames')
-                        IframeOnClick.track(frames, function() {
-                            jQuery(document).click();
-                        });
-                    }
-                }
-            },
-            error: function(err) {
-                console.log(err)
-            }
-        })
-        function getAjaxAdv () {
-            $.ajax({
-                type: 'POST',
-                url: '/publicapply/adLeague/exposure',
-                data: {
-                        client: 'WX',
-                        id: 'ad8',
-                        position: '关注的企业列表页底部'
-                },
-                success: function(res) {
-                        console.log(res)
-                }
-            })
-        }
-        var IframeOnClick = {
-            resolution: 200,
-            iframes: [],
-            interval: null,
-            Iframe: function() {
-                    this.element = arguments[0];
-                    this.cb = arguments[1];
-                    this.hasTracked = false;
-            },
-            track: function(element, cb) {
-                    this.iframes.push(new this.Iframe(element, cb));
-                    var _this = this;
-                            this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);
-            },
-            checkClick: function() {
-                if (document.activeElement) {
-                    var activeElement = document.activeElement;
-                    for (var i in this.iframes) {
-                        if (activeElement === this.iframes[i].element) { // user is in this Iframe
-                                if (this.iframes[i].hasTracked == false) {
-                                        this.iframes[i].cb.apply(window, []);
-                                        this.iframes[i].hasTracked = true;
-                                        $.ajax({
-                                                type: 'POST',
-                                                url: '/publicapply/adLeague/click',
-                                                data: {
-                                                    client: 'WX',
-                                                    id: 'ad8',
-                                                    position: '关注的企业列表页底部'
-                                                },
-                                                success: function(res) {
-                                                        console.log(res)
-                                                }
-                                        })
-                                }
-                        } else {
-                                this.iframes[i].hasTracked = false;
-                        }
-                    }
-                }
-            }
-			};
-    </script>
-    <!-- 多条广告如下脚本只需引入一次 -->
-    <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" >
-    </script>
+  </div>
 	<div class="easypopup" id="easypopup">
 	<div class="easypopup" id="easypopup">
 		<div class="easypopup-main">
 		<div class="easypopup-main">
 			<div class="easypopup-header">提示信息</div>
 			<div class="easypopup-header">提示信息</div>

+ 2 - 1
src/jfw/modules/publicapply/src/config.json

@@ -57,5 +57,6 @@
   "nsq":"192.168.3.240:4260",
   "nsq":"192.168.3.240:4260",
   "nsq_topic": "jy_event",
   "nsq_topic": "jy_event",
   "accountMergeOnline": "2015-03-30 00:00:00",
   "accountMergeOnline": "2015-03-30 00:00:00",
-  "criticality":2
+  "criticality":2,
+  "taskStartTime":1698020000
 }
 }

+ 1 - 0
src/jfw/modules/publicapply/src/config/config.go

@@ -41,6 +41,7 @@ type config struct {
 	NsqTopic           string `json:"nsq_topic"`
 	NsqTopic           string `json:"nsq_topic"`
 	AccountMergeOnline string `json:"accountMergeOnline"`
 	AccountMergeOnline string `json:"accountMergeOnline"`
 	Criticality        int    `json:"criticality"`
 	Criticality        int    `json:"criticality"`
+	TaskStartTime      int64
 }
 }
 type BidColl struct {
 type BidColl struct {
 	PayUserCollLimit      int    //付费用户收藏数量最大限制
 	PayUserCollLimit      int    //付费用户收藏数量最大限制

+ 4 - 0
src/jfw/modules/publicapply/src/identity/service/action.go

@@ -10,4 +10,8 @@ type Identity struct {
 	list xweb.Mapper `xweb:"/identity/list"`
 	list xweb.Mapper `xweb:"/identity/list"`
 	//身份切换
 	//身份切换
 	switchIdentity xweb.Mapper `xweb:"/identity/switch"`
 	switchIdentity xweb.Mapper `xweb:"/identity/switch"`
+	//编辑身份信息维护
+	edit xweb.Mapper `xweb:"/identity/maintenance/edit"`
+	//获取身份信息维护
+	detail xweb.Mapper `xweb:"/identity/maintenance/detail"`
 }
 }

+ 103 - 0
src/jfw/modules/publicapply/src/identity/service/service.go

@@ -6,10 +6,12 @@ import (
 	. "jy/src/jfw/modules/publicapply/src/config"
 	. "jy/src/jfw/modules/publicapply/src/config"
 	. "jy/src/jfw/modules/publicapply/src/db"
 	. "jy/src/jfw/modules/publicapply/src/db"
 	"log"
 	"log"
+	"strings"
 
 
 	. "app.yhyue.com/moapp/jybase/api"
 	. "app.yhyue.com/moapp/jybase/api"
 	util "app.yhyue.com/moapp/jybase/common"
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	. "app.yhyue.com/moapp/jypkg/identity"
 	. "app.yhyue.com/moapp/jypkg/identity"
 )
 )
 
 
@@ -98,3 +100,104 @@ func (f *Identity) SwitchIdentity() {
 		Data: status,
 		Data: status,
 	})
 	})
 }
 }
+
+func (f *Identity) Edit() {
+	userId, _ := f.GetSession("mgoUserId").(string)
+	set := map[string]interface{}{}
+	entName := strings.TrimSpace(f.GetString("entName"))
+	if entName != "" {
+		set["s_company"] = entName
+	}
+	if entType := strings.TrimSpace(f.GetString("entType")); entType != "" {
+		set["identity_info.ent_type"] = entType
+	}
+	if position := strings.TrimSpace(f.GetString("position")); position != "" {
+		set["identity_info.position"] = position
+	}
+	if deptName := strings.TrimSpace(f.GetString("deptName")); deptName != "" {
+		set["identity_info.dept_name"] = deptName
+	}
+	entBusinessType := strings.TrimSpace(f.GetString("entBusinessType"))
+	if entBusinessType != "" {
+		set["identity_info.ent_businessType"] = entBusinessType
+	}
+	status := 0
+	if len(set) > 0 {
+		if Mgo.UpdateById("user", userId, map[string]interface{}{"$set": set}) {
+			userMsg, _ := Mgo.FindById("user", userId, `{"l_registedate":1}`)
+			isNew := false
+			if userMsg != nil && len(*userMsg) > 0 {
+				l_registedate := util.Int64All((*userMsg)["l_registedate"])
+				isNew = l_registedate > Config.TaskStartTime //是否注册时间处于新手任务开始时间
+			}
+			status = 1
+			if entName != "" {
+				err := jy.Publish(Mgo_Log, Config.Nsq, Config.NsqTopic, "task", userId, "", map[string]interface{}{
+					"code":       util.If(isNew, "1010", "1017"),
+					"types":      "improveEntInfo",
+					"baseUserId": util.Int64All(f.GetSession("base_user_id")),
+				})
+				if err != nil {
+					log.Println(userId, "完善身份信息-公司信息,发送nsq消息错误-->", err)
+				}
+			}
+			if entBusinessType != "" {
+				err := jy.Publish(Mgo_Log, Config.Nsq, Config.NsqTopic, "task", userId, "", map[string]interface{}{
+					"code":       util.If(isNew, "1011", "1018"),
+					"types":      "improveBusiness",
+					"baseUserId": util.Int64All(f.GetSession("base_user_id")),
+				})
+				if err != nil {
+					log.Println(userId, "完善身份信息-公司信息,发送nsq消息错误-->", err)
+				}
+			}
+		}
+	}
+	f.ServeJson(Result{Data: status})
+}
+
+func (f *Identity) Detail() {
+	userId, _ := f.GetSession("userId").(string)
+	mgoUserId, _ := f.GetSession("mgoUserId").(string)
+	u, ok := Mgo.FindById("user", mgoUserId, `{"s_company":1,"identity_info":1}`)
+	data := M{}
+	if ok && u != nil && len(*u) > 0 {
+		entType, position, deptName, entBusinessType := "", "", "", ""
+		entName, _ := (*u)["s_company"].(string)
+		identityInfo, _ := (*u)["identity_info"].(map[string]interface{})
+		if identityInfo != nil {
+			entType, _ = identityInfo["ent_type"].(string)
+			position, _ = identityInfo["position"].(string)
+			deptName, _ = identityInfo["dept_name"].(string)
+			entBusinessType, _ = identityInfo["ent_businessType"].(string)
+		}
+		if entName == "" || position == "" || deptName == "" || entType == "" {
+			saleLeads, ok := Mgo.Find("saleLeads", map[string]interface{}{
+				"userid": userId,
+			}, `{"createtime":-1}`, `{"company":1,"position":1,"department":1,"companyType":1,"branch":1}`, false, 0, 1)
+			if ok && saleLeads != nil && len(*saleLeads) == 1 {
+				if entName == "" {
+					entName, _ = (*saleLeads)[0]["company"].(string)
+				}
+				if position == "" {
+					position, _ = (*saleLeads)[0]["position"].(string)
+				}
+				if deptName == "" {
+					deptName, _ = (*saleLeads)[0]["department"].(string)
+				}
+				if deptName == "" {
+					deptName, _ = (*saleLeads)[0]["branch"].(string)
+				}
+				if entType == "" {
+					entType, _ = (*saleLeads)[0]["companyType"].(string)
+				}
+			}
+		}
+		data["entName"] = entName
+		data["entType"] = entType
+		data["position"] = position
+		data["deptName"] = deptName
+		data["entBusinessType"] = entBusinessType
+	}
+	f.ServeJson(Result{Data: data})
+}

+ 27 - 12
src/jfw/modules/publicapply/src/oneclick/entity/entity.go

@@ -1,7 +1,21 @@
 package entity
 package entity
 
 
 import (
 import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/config"
+	"jy/src/jfw/modules/publicapply/src/db"
+	"jy/src/jfw/modules/publicapply/src/jyutil"
+	"jy/src/jfw/modules/publicapply/src/oneclick/initjson"
+	"log"
+	"net/http"
+	"strings"
+	"sync"
+	"time"
+
 	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/common"
+	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
@@ -12,22 +26,10 @@ import (
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"encoding/json"
-	"errors"
-	"fmt"
 	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
 	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
 	dypnsapi20170525 "github.com/alibabacloud-go/dypnsapi-20170525/v2/client"
 	dypnsapi20170525 "github.com/alibabacloud-go/dypnsapi-20170525/v2/client"
 	util "github.com/alibabacloud-go/tea-utils/v2/service"
 	util "github.com/alibabacloud-go/tea-utils/v2/service"
 	"github.com/alibabacloud-go/tea/tea"
 	"github.com/alibabacloud-go/tea/tea"
-	"jy/src/jfw/modules/publicapply/src/config"
-	"jy/src/jfw/modules/publicapply/src/db"
-	"jy/src/jfw/modules/publicapply/src/jyutil"
-	"jy/src/jfw/modules/publicapply/src/oneclick/initjson"
-	"log"
-	"net/http"
-	"strings"
-	"sync"
-	"time"
 )
 )
 
 
 type OneClickInfo struct {
 type OneClickInfo struct {
@@ -414,6 +416,19 @@ func (o *OneClickInfo) phoneLogin(phone string) (map[string]interface{}, error)
 		}
 		}
 		return 0
 		return 0
 	}()
 	}()
+	if status == 1 {
+		mgoUserId := qutil.ObjToString(o.Session.Get("mgoUserId"))
+		err := jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", mgoUserId, "", map[string]interface{}{
+			"code":       1014, //下载app任务
+			"types":      "downloadApp",
+			"num":        50,
+			"baseUserId": o.Session.Get("base_user_id"),
+			"positionId": o.Session.Get("positionId"),
+		})
+		if err != nil {
+			log.Println(mgoUserId, "下载app任务,发送nsq消息错误-->", err)
+		}
+	}
 	if status > 0 {
 	if status > 0 {
 		//登录source 更新 p414
 		//登录source 更新 p414
 		mgoUserId, _ := o.Session.Get("mgoUserId").(string)
 		mgoUserId, _ := o.Session.Get("mgoUserId").(string)

+ 25 - 1
src/jfw/modules/publicapply/src/subscribePush/entity/keyWords.go

@@ -1,7 +1,6 @@
 package entity
 package entity
 
 
 import (
 import (
-	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
 	"jy/src/jfw/modules/publicapply/src/db"
@@ -10,6 +9,8 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
+	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
+
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
@@ -268,6 +269,17 @@ func AddKeyWordsFree(types, userId, classIndex, className, keywordsIndex, keywor
 				AppId:      "10000",
 				AppId:      "10000",
 			})
 			})
 			config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
 			config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
+			//判断是新增
+			if (keywordCount == "" || keywordCount == "0") || (keywordCount == keywordsIndex || qutil.Int64All(keywordCount) == qutil.Int64All(keywordsIndex)+1) {
+				//设置关键词送积分
+				jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", qutil.ObjToString(session.Get("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+					"code":       1015, //首次订阅
+					"types":      "subscribeKeyWords",
+					"num":        50,
+					"baseUserId": session.Get("base_user_id"),
+					"positionId": positionId,
+				})
+			}
 		}
 		}
 		SetLog(userId, types, 0, session)
 		SetLog(userId, types, 0, session)
 	}
 	}
@@ -342,6 +354,18 @@ func AddKeyWords(types, userId, classIndex, className, keywordsIndex, keywordNam
 			"$set": saveData,
 			"$set": saveData,
 		})
 		})
 		SetLog(userId, types, positionType, session)
 		SetLog(userId, types, positionType, session)
+		//判断是新增
+
+		if (keywordCount == "" || keywordCount == "0") || (keywordCount == keywordsIndex || qutil.Int64All(keywordCount) == qutil.Int64All(keywordsIndex)+1) {
+			//设置关键词送积分
+			jy.Publish(db.Mgo_Log, config.Config.Nsq, config.Config.NsqTopic, "task", qutil.ObjToString(session.Get("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+				"code":       1015, //首次订阅
+				"types":      "subscribeKeyWords",
+				"num":        50,
+				"baseUserId": session.Get("base_user_id"),
+				"positionId": session.Get("positionId"),
+			})
+		}
 	}
 	}
 	return map[string]interface{}{"flag": flag, "msg": ""}
 	return map[string]interface{}{"flag": flag, "msg": ""}
 }
 }

+ 7 - 7
src/jfw/modules/subscribepay/src/baseApi.json

@@ -1,12 +1,12 @@
 {
 {
   "appId": "10000",
   "appId": "10000",
   "apiList": {
   "apiList": {
-    "buyBalance": "http://127.0.0.1:8124/resources/purchaseUserBalance",
-    "useBalance": "http://127.0.0.1:8124/resources/useUserDetailed",
-    "findPreview": "http://127.0.0.1:8124/resources/findPreview",
-    "findBalance": "http://127.0.0.1:8124/resources/findBalance",
-    "findRecord": "http://127.0.0.1:8124/resources/findRecord",
-    "entdedupUrl": "http://127.0.0.1:8888/data/deduplication",
-    "updateVipTime":"http://127.0.0.1:8124/resources/updateVipTime"
+    "buyBalance": "http://127.0.0.1:8889/resources/purchaseUserBalance",
+    "useBalance": "http://127.0.0.1:8889/resources/useUserDetailed",
+    "findPreview": "http://127.0.0.1:8889/resources/findPreview",
+    "findBalance": "http://127.0.0.1:8889/resources/findBalance",
+    "findRecord": "http://127.0.0.1:8889/resources/findRecord",
+    "entdedupUrl": "http://127.0.0.1:8889/data/deduplication",
+    "updateVipTime":"http://127.0.0.1:8889/resources/updateVipTime"
   }
   }
 }
 }

+ 11 - 10
src/jfw/modules/subscribepay/src/config.json

@@ -1,17 +1,17 @@
 {
 {
-  "smsServiceRpc":"192.168.3.11:932",
+  "smsServiceRpc":"192.168.3.149:932",
   "mongodbServers": "192.168.3.206:27080",
   "mongodbServers": "192.168.3.206:27080",
   "mongodbPoolSize": 10,
   "mongodbPoolSize": 10,
   "mongodbName": "qfw",
   "mongodbName": "qfw",
   "mongoent":{
   "mongoent":{
-    "address": "192.168.3.207:27001,192.168.3.206:27002",
+    "address": "192.168.3.206:27002",
     "size": 5,
     "size": 5,
     "dbName": "qfw_data",
     "dbName": "qfw_data",
     "userName": "jyDevGroup",
     "userName": "jyDevGroup",
     "password": "jy@DevGroup"
     "password": "jy@DevGroup"
   },
   },
   "mongobidding":{
   "mongobidding":{
-    "address": "192.168.3.207:27001,192.168.3.206:27002",
+    "address": "192.168.3.206:27002",
     "size": 5,
     "size": 5,
     "dbName": "qfw_data",
     "dbName": "qfw_data",
     "replSet": "",
     "replSet": "",
@@ -33,7 +33,7 @@
     "userName": "admin",
     "userName": "admin",
     "password": "123456"
     "password": "123456"
   },
   },
-  "redisaddrs": "other=192.168.3.206:1712,session=192.168.3.11:1713,push=192.168.3.206:1712,newother=192.168.3.206:1712",
+  "redisaddrs": "other=192.168.3.149:1712,session=192.168.3.149:1713,push=192.168.3.149:1712,newother=192.168.3.149:1712",
   "elasticsearch": "http://192.168.3.206:9800,http://192.168.3.206:9801",
   "elasticsearch": "http://192.168.3.206:9800,http://192.168.3.206:9801",
   "elasticPoolSize": 30,
   "elasticPoolSize": 30,
   "elasticVersion": "v7",
   "elasticVersion": "v7",
@@ -43,7 +43,7 @@
   "appsecret": "ed5961aa2fca99d13ccff99130ba2866",
   "appsecret": "ed5961aa2fca99d13ccff99130ba2866",
   "webport": "86",
   "webport": "86",
   "webrpcport": "84",
   "webrpcport": "84",
-  "weixinrpc": "192.168.3.11:8202",
+  "weixinrpc": "127.0.0.1:8202",
   "cassandra": {
   "cassandra": {
     "log": {
     "log": {
       "host": [
       "host": [
@@ -61,7 +61,7 @@
   },
   },
     "mysql": {
     "mysql": {
         "dbName": "jianyu",
         "dbName": "jianyu",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.149:3306",
         "userName": "root",
         "userName": "root",
         "passWord": "Topnet123",
         "passWord": "Topnet123",
 		"maxOpenConns":5,
 		"maxOpenConns":5,
@@ -69,15 +69,15 @@
 	},
 	},
     "infoMysql": {
     "infoMysql": {
         "dbName": "base_service",
         "dbName": "base_service",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.217:4000",
         "userName": "root",
         "userName": "root",
-        "passWord": "Topnet123",
+        "passWord": "=PDT49#80Z!RVv52_z",
 		"maxOpenConns":2,
 		"maxOpenConns":2,
 		"maxIdleConns":2
 		"maxIdleConns":2
 	},
 	},
 	"activityMysql":{
 	"activityMysql":{
 		 "dbName": "jyactivities",
 		 "dbName": "jyactivities",
-        "address": "192.168.3.11:3366",
+        "address": "192.168.3.149:3306",
         "userName": "root",
         "userName": "root",
         "passWord": "Topnet123",
         "passWord": "Topnet123",
 		"maxOpenConns":5,
 		"maxOpenConns":5,
@@ -157,5 +157,6 @@
     "etcd": {
     "etcd": {
     	"hosts": "192.168.3.149:2379",
     	"hosts": "192.168.3.149:2379",
     	"key": "powercheck.rpc"
     	"key": "powercheck.rpc"
-    }
+    },
+    "taskStartTime":1698020000
 }
 }

+ 1 - 1
src/jfw/modules/subscribepay/src/config.yaml

@@ -1,6 +1,6 @@
 etcd:
 etcd:
   hosts:
   hosts:
-  - 192.168.3.149:2379
+  - 127.0.0.1:2379
 userCenterKey: "usercenter.rpc" #用户中台rpc
 userCenterKey: "usercenter.rpc" #用户中台rpc
 powerCheckCenterKey: "powercheck.rpc" #权益校验中台
 powerCheckCenterKey: "powercheck.rpc" #权益校验中台
 activityKey: "activity.rpc" #营销平台rpc
 activityKey: "activity.rpc" #营销平台rpc

+ 4 - 3
src/jfw/modules/subscribepay/src/config/config.go

@@ -3,9 +3,6 @@ package config
 import (
 import (
 	"time"
 	"time"
 
 
-	"app.yhyue.com/moapp/jypkg/middleground"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/gogf/gf/v2/os/gctx"
 
 
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
@@ -13,6 +10,9 @@ import (
 	"app.yhyue.com/moapp/jybase/mail"
 	"app.yhyue.com/moapp/jybase/mail"
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
+	"app.yhyue.com/moapp/jypkg/middleground"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/os/gcfg"
 )
 )
 
 
 type config struct {
 type config struct {
@@ -116,6 +116,7 @@ type config struct {
 	}
 	}
 	KeywordsLimit     int
 	KeywordsLimit     int
 	BreakRenewTipTime string
 	BreakRenewTipTime string
+	TaskStartTime     int64
 }
 }
 type mgoConf struct {
 type mgoConf struct {
 	Address           string
 	Address           string

+ 69 - 71
src/jfw/modules/subscribepay/src/entity/basePack.go

@@ -4,6 +4,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/util"
 	"jy/src/jfw/modules/subscribepay/src/util"
 	"log"
 	"log"
@@ -13,7 +14,6 @@ import (
 	. "app.yhyue.com/moapp/jybase/date"
 	. "app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	. "app.yhyue.com/moapp/jybase/mongodb"
 	. "app.yhyue.com/moapp/jybase/mongodb"
-	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 )
 
 
@@ -26,20 +26,56 @@ func (this *UseBalanceStruct) defaultConsume() (r map[string]interface{}, m stri
 	return
 	return
 }
 }
 
 
-//附件下载消费 fui:免费赠送已使用次数;pui:付费权限已使用次数
+// 附件下载消费 fui:免费赠送已使用次数;pui:付费权限已使用次数
 func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string, c int) {
 func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string, c int) {
 	_fileName := this.Remarks["fileName"].(string)
 	_fileName := this.Remarks["fileName"].(string)
 	_id := this.Remarks["id"].(string)
 	_id := this.Remarks["id"].(string)
 	log.Println("附件下载包。。。。。")
 	log.Println("附件下载包。。。。。")
 	BaseMsg := jy.GetBigVipUserBaseMsg(this.Session, *config.Middleground)
 	BaseMsg := jy.GetBigVipUserBaseMsg(this.Session, *config.Middleground)
 	log.Println("---:", this.Remarks)
 	log.Println("---:", this.Remarks)
+	//获取余额数量
+	dbs := &FindBalanceStruct{
+		AccountId:    this.UserId,
+		ResourceType: "附件下载包",
+		VipState:     BaseMsg.VipStatus,
+	}
+	this.VipState = BaseMsg.VipStatus
+	data, err := dbs.FindBalance()
+	if data == nil || err != nil {
+		c = -1
+		m = "余额不足"
+		return
+	}
+	number := 0
+	if data != nil {
+		dataArr := gconv.SliceAny(data["data"])
+		if len(dataArr) > 0 {
+			dataMap := gconv.MapStrStr(dataArr[0])
+			number = gconv.Int(dataMap["number"])
+		}
+	}
+	isExists := false
+	id := this.FindJyConsumePackRecord()
+	if id != "" && this.Remarks["downUrl"] != nil {
+		if util.MQFW.UpdateById(jyCC, id, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"l_updateDate": time.Now().Unix(),
+			},
+		}) {
+			delete(this.Remarks, "id")
+			delete(this.Remarks, "title")
+			r = this.Remarks
+			r["isExists"] = true
+			isExists = true
+		}
+	}
 	if BaseMsg.Status > 0 && BaseMsg.PowerMap[3] {
 	if BaseMsg.Status > 0 && BaseMsg.PowerMap[3] {
 		if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 		if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 			r = SupplyInfoFile(_fileName, _id)
 			r = SupplyInfoFile(_fileName, _id)
 		} else {
 		} else {
 			r = fileAttachRpc(_fileName, _id)
 			r = fileAttachRpc(_fileName, _id)
 		}
 		}
-		go func(this *UseBalanceStruct, r map[string]interface{}) {
+		/*go func(this *UseBalanceStruct, r map[string]interface{}) {
 			data := make(map[string]interface{})
 			data := make(map[string]interface{})
 			data["p_type"] = "大会员用户附件下载"
 			data["p_type"] = "大会员用户附件下载"
 			data["p_userid"] = this.UserId
 			data["p_userid"] = this.UserId
@@ -51,38 +87,21 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 			if util.MQFW.Save("filehistroy", data) == "" {
 			if util.MQFW.Save("filehistroy", data) == "" {
 				log.Println("大会员附件下载-历史记录异常:" + this.UserId)
 				log.Println("大会员附件下载-历史记录异常:" + this.UserId)
 			}
 			}
-		}(this, r)
-	} else if BaseMsg.VipStatus > 0 {
-		isExists := false
-		//查询当月附件下载历史记录-如是已下载过的附件不再扣除次数
-		id := this.FindJyConsumePackRecord()
-		if id != "" && this.Remarks["downUrl"] != nil {
-			if util.MQFW.UpdateById(jyCC, id, map[string]interface{}{
-				"$set": map[string]interface{}{
-					"l_updateDate": time.Now().Unix(),
-				},
-			}) {
-				delete(this.Remarks, "id")
-				delete(this.Remarks, "title")
-				r = this.Remarks
-				r["isExists"] = true
-				isExists = true
-			}
+		}(this, r)*/
+		if r["downUrl"] != nil {
+			this.Remarks["downUrl"] = r["downUrl"]
+			this.Remarks["size"] = r["size"]
 		}
 		}
+		if !isExists {
+			this.saveJyConsumePackList()
+		}
+	} else {
+		//查询当月附件下载历史记录-如是已下载过的附件不再扣除次数
 		// log.Println(this.Remarks, "++++++", this.AccountId, id, "-------------", isExists)
 		// log.Println(this.Remarks, "++++++", this.AccountId, id, "-------------", isExists)
 		//当月未有消费记录
 		//当月未有消费记录
 		if !isExists {
 		if !isExists {
-			isCanConsume_f := false
-			isCanConsume_p := false
 			//免费赠送已使用次数
 			//免费赠送已使用次数
-			mon_free := fmt.Sprintf(jy.VipFileUploadNumKey, this.UserId, fmt.Sprint(time.Now().Month()))
-			fui := redis.GetInt(jy.PowerCacheDb, mon_free)
-			if fui < config.BidfileConfig.File_number {
-				isCanConsume_f = true
-			} else if payCount := this.accountPack(); payCount > 0 { //付费未使用次数
-				isCanConsume_p = true
-			}
-			if isCanConsume_f || isCanConsume_p {
+			if number > 0 {
 				if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 				if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
 					r = SupplyInfoFile(_fileName, _id)
 					r = SupplyInfoFile(_fileName, _id)
 				} else {
 				} else {
@@ -92,24 +111,10 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 					this.Remarks["downUrl"] = r["downUrl"]
 					this.Remarks["downUrl"] = r["downUrl"]
 					this.Remarks["size"] = r["size"]
 					this.Remarks["size"] = r["size"]
 					if this.saveJyConsumePackList() {
 					if this.saveJyConsumePackList() {
-						if isCanConsume_p {
-							//中台消费记录
-							rb, err := this.UseBalance()
-							if err != nil || (rb != nil && qutil.IntAll(rb["code"]) == 0) {
-								m = fmt.Sprintf("消费记录保存异常:%s", qutil.ObjToString(rb["message"]))
-							} else {
-								//更新redis 购买附件下载包数量
-								mon_pay := fmt.Sprintf(jy.FilePackNumKey, this.UserId, fmt.Sprint(time.Now().Month()))
-								if redis.GetInt(jy.PowerCacheDb, mon_pay) <= 0 || redis.Decrby(jy.PowerCacheDb, mon_pay, 1) < 0 {
-									log.Println(fmt.Sprintf("附件下载包 消费异常:%s,附件名称:%s", this.UserId, this.Remarks["fileName"].(string)))
-								}
-							}
-						} else if isCanConsume_f { //下载后自增一次 免费权限默认存储31d
-							if fui == 0 {
-								redis.Put(jy.PowerCacheDb, mon_free, 1, 60*60*24*31)
-							} else {
-								redis.Incr(jy.PowerCacheDb, mon_free)
-							}
+						//中台消费记录
+						rb, err := this.UseBalance()
+						if err != nil || (rb != nil && qutil.IntAll(rb["code"]) == 0) {
+							m = fmt.Sprintf("消费记录保存异常:%s", qutil.ObjToString(rb["message"]))
 						}
 						}
 					}
 					}
 				} else {
 				} else {
@@ -117,22 +122,8 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 				}
 				}
 			} else {
 			} else {
 				c = -1
 				c = -1
-				m = "该用户下载权限当前月已用完"
-			}
-		}
-	} else {
-		//判断免费用户是否有留资下载权限
-		if _, _, freeFileNum := jy.FreeExperience(this.UserId); freeFileNum == 1 {
-			if this.Remarks["infoType"] != nil && this.Remarks["infoType"].(string) == "S" {
-				r = SupplyInfoFile(_fileName, _id)
-			} else {
-				r = fileAttachRpc(_fileName, _id)
+				m = "该用户下载权限已用完"
 			}
 			}
-			//免费用户下载后取消下载权限
-			redis.PutKV(fmt.Sprintf(jy.PowerCacheFileKey, this.UserId), -1)
-		} else {
-			c = -1
-			m = "该用户没有下载权限"
 		}
 		}
 	}
 	}
 	return
 	return
@@ -140,7 +131,7 @@ func (this *UseBalanceStruct) fileConsume() (r map[string]interface{}, m string,
 
 
 var jyCC = "jy_consumepack"
 var jyCC = "jy_consumepack"
 
 
-//查询jy 消费日志记录
+// 查询jy 消费日志记录
 func (this *UseBalanceStruct) FindJyConsumePackRecord() string {
 func (this *UseBalanceStruct) FindJyConsumePackRecord() string {
 	query := map[string]interface{}{
 	query := map[string]interface{}{
 		"s_id":       this.Remarks["id"].(string),
 		"s_id":       this.Remarks["id"].(string),
@@ -161,7 +152,7 @@ func (this *UseBalanceStruct) FindJyConsumePackRecord() string {
 	return BsonIdToSId((*res)["_id"])
 	return BsonIdToSId((*res)["_id"])
 }
 }
 
 
-//保存日志
+// 保存日志
 func (this *UseBalanceStruct) saveJyConsumePackList() (b bool) {
 func (this *UseBalanceStruct) saveJyConsumePackList() (b bool) {
 	saveMap := map[string]interface{}{
 	saveMap := map[string]interface{}{
 		"s_id":         this.Remarks["id"],
 		"s_id":         this.Remarks["id"],
@@ -184,7 +175,7 @@ func (this *UseBalanceStruct) saveJyConsumePackList() (b bool) {
 	return
 	return
 }
 }
 
 
-//调rpc 获取附件信息
+// 调rpc 获取附件信息
 func fileAttachRpc(fileName, id string) (r map[string]interface{}) {
 func fileAttachRpc(fileName, id string) (r map[string]interface{}) {
 	r = make(map[string]interface{})
 	r = make(map[string]interface{})
 	// 调用rpc 获取附件信息
 	// 调用rpc 获取附件信息
@@ -210,7 +201,7 @@ func fileAttachRpc(fileName, id string) (r map[string]interface{}) {
 	return
 	return
 }
 }
 
 
-//供应信息附件
+// 供应信息附件
 func SupplyInfoFile(fileName, msgId string) (r map[string]interface{}) {
 func SupplyInfoFile(fileName, msgId string) (r map[string]interface{}) {
 	//查数据
 	//查数据
 	data := util.InfoMysql.FindOne("supply_info", map[string]interface{}{"id": msgId}, "", "")
 	data := util.InfoMysql.FindOne("supply_info", map[string]interface{}{"id": msgId}, "", "")
@@ -236,7 +227,14 @@ func SupplyInfoFile(fileName, msgId string) (r map[string]interface{}) {
 	return
 	return
 }
 }
 
 
-//消费
+// 兑换作废
+func JyexchangeCance(userId, product, platform, queryTime string, pageSize, pageNum int) (list []map[string]interface{}, total int, err error) {
+	RStruct := InitFindRecord(userId, product, queryTime, platform, pageSize, pageNum, 2)
+	list, total = RStruct.DefaultData()
+	return list, total, nil
+}
+
+// 消费
 func JyConsumePack(userId, product, platform string, remarks map[string]interface{}, session *httpsession.Session) (r map[string]interface{}, m string, c int) {
 func JyConsumePack(userId, product, platform string, remarks map[string]interface{}, session *httpsession.Session) (r map[string]interface{}, m string, c int) {
 	CStruct := InitUseBalance(userId, product, product, "", "", nil, remarks, 1, platform, session)
 	CStruct := InitUseBalance(userId, product, product, "", "", nil, remarks, 1, platform, session)
 	switch product {
 	switch product {
@@ -248,7 +246,7 @@ func JyConsumePack(userId, product, platform string, remarks map[string]interfac
 	return
 	return
 }
 }
 
 
-//流水
+// 流水
 func JyFindRecordPack(userId, productName, queryTime, platform string, pageSize, pageNum int) (list []map[string]interface{}, total int, err error) {
 func JyFindRecordPack(userId, productName, queryTime, platform string, pageSize, pageNum int) (list []map[string]interface{}, total int, err error) {
 	RStruct := InitFindRecord(userId, productName, queryTime, platform, pageSize, pageNum, 0)
 	RStruct := InitFindRecord(userId, productName, queryTime, platform, pageSize, pageNum, 0)
 	switch productName {
 	switch productName {
@@ -260,7 +258,7 @@ func JyFindRecordPack(userId, productName, queryTime, platform string, pageSize,
 	return list, total, nil
 	return list, total, nil
 }
 }
 
 
-//数据处理-附件下载包
+// 数据处理-附件下载包
 func (this *FindRecordStruct) FindJyConsumePackAllRecord() ([]map[string]interface{}, int) {
 func (this *FindRecordStruct) FindJyConsumePackAllRecord() ([]map[string]interface{}, int) {
 	var articleAddMap = map[string]string{
 	var articleAddMap = map[string]string{
 		"PC":  "/article/content/%s.html",
 		"PC":  "/article/content/%s.html",
@@ -301,7 +299,7 @@ func (this *FindRecordStruct) FindJyConsumePackAllRecord() ([]map[string]interfa
 	return *list, total
 	return *list, total
 }
 }
 
 
-//数据处理-default
+// 数据处理-default
 func (this *FindRecordStruct) DefaultData() ([]map[string]interface{}, int) {
 func (this *FindRecordStruct) DefaultData() ([]map[string]interface{}, int) {
 	returnList, total, err := this.FindRecord()
 	returnList, total, err := this.FindRecord()
 	if err != nil {
 	if err != nil {

+ 23 - 18
src/jfw/modules/subscribepay/src/entity/commonApi.go

@@ -1,22 +1,18 @@
 package entity
 package entity
 
 
 import (
 import (
+	qu "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"log"
 	"log"
 	"net/url"
 	"net/url"
 	"strings"
 	"strings"
-	"time"
-
-	qu "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/redis"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/middleGround"
 )
 )
 
 
-//充值
+// 充值
 type PayStruct struct {
 type PayStruct struct {
 	AccountId    string                 //用户身份
 	AccountId    string                 //用户身份
 	Name         string                 //资源名称
 	Name         string                 //资源名称
@@ -27,9 +23,10 @@ type PayStruct struct {
 	Remarks      map[string]interface{} //备注
 	Remarks      map[string]interface{} //备注
 	AppId        string                 //appId默认10000
 	AppId        string                 //appId默认10000
 	VipTime      int64                  //超级订阅截止日期
 	VipTime      int64                  //超级订阅截止日期
+	VipState     int64                  //超级订阅状态
 }
 }
 
 
-func InitPurchase(userId, product, resourceType, num, spec, endTime string, remarks map[string]interface{}, vipEndTime int64) *PayStruct {
+func InitPurchase(userId, product, resourceType, num, spec, endTime string, remarks map[string]interface{}, vipEndTime int64, vipState int) *PayStruct {
 	return &PayStruct{
 	return &PayStruct{
 		AccountId:    userId,
 		AccountId:    userId,
 		Name:         product,      //资源名称
 		Name:         product,      //资源名称
@@ -40,6 +37,7 @@ func InitPurchase(userId, product, resourceType, num, spec, endTime string, rema
 		Remarks:      remarks,      //备注
 		Remarks:      remarks,      //备注
 		AppId:        config.CouponConfig.AppId,
 		AppId:        config.CouponConfig.AppId,
 		VipTime:      vipEndTime,
 		VipTime:      vipEndTime,
+		VipState:     int64(vipState),
 	}
 	}
 }
 }
 
 
@@ -72,6 +70,7 @@ func (this *PayStruct) PurchaseUserBalance() (bool, error) {
 type FindBalanceStruct struct {
 type FindBalanceStruct struct {
 	AccountId    string //账户标识
 	AccountId    string //账户标识
 	ResourceType string //产品类型
 	ResourceType string //产品类型
+	VipState     int
 }
 }
 
 
 // @Summary 余额接口【数据流量包、附件下载包。。】
 // @Summary 余额接口【数据流量包、附件下载包。。】
@@ -81,6 +80,7 @@ func (this *FindBalanceStruct) FindBalance() (map[string]interface{}, error) {
 	param := url.Values{
 	param := url.Values{
 		"accountId":    []string{this.AccountId},
 		"accountId":    []string{this.AccountId},
 		"resourceType": []string{this.ResourceType},
 		"resourceType": []string{this.ResourceType},
+		"vipState":     []string{qu.InterfaceToStr(this.VipState)},
 	}
 	}
 	rmap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, param)
 	rmap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, param)
 	if err != nil {
 	if err != nil {
@@ -90,24 +90,28 @@ func (this *FindBalanceStruct) FindBalance() (map[string]interface{}, error) {
 	if rmap != nil && len(rmap) > 0 && this.ResourceType == "附件下载包" {
 	if rmap != nil && len(rmap) > 0 && this.ResourceType == "附件下载包" {
 		rdata, _ := rmap["data"].([]interface{})
 		rdata, _ := rmap["data"].([]interface{})
 		rdataArr := qu.ObjArrToMapArr(rdata)
 		rdataArr := qu.ObjArrToMapArr(rdata)
-		vipFileKey := fmt.Sprintf(jy.VipFileUploadNumKey, this.AccountId, fmt.Sprint(time.Now().Month()))
-		vipFileKeyNum := redis.GetInt(jy.PowerCacheDb, vipFileKey)
-		free_num := config.BidfileConfig.File_number - vipFileKeyNum //free
+		//vipFileKey := fmt.Sprintf(jy.VipFileUploadNumKey, this.AccountId, fmt.Sprint(time.Now().Month()))
+		//vipFileKeyNum := redis.GetInt(jy.PowerCacheDb, vipFileKey)
+		//free_num := config.BidfileConfig.File_number - vipFileKeyNum //free
 		if len(rdata) > 0 {
 		if len(rdata) > 0 {
 			for k, v := range rdataArr {
 			for k, v := range rdataArr {
 				num := qu.IntAll(v["number"]) //buy
 				num := qu.IntAll(v["number"]) //buy
-				v["number"] = num + free_num
+				v["number"] = num
+				v["purchaseNum"] = qu.IntAll(v["number1"]) //充值数量
+				v["exchangeNum"] = qu.IntAll(v["number2"]) //兑换数量
+				v["grantNum"] = qu.IntAll(v["number3"])    //超级订阅定期发放数量
+				v["freeNum"] = qu.IntAll(v["number4"])     //免费数量
 				rdataArr[k] = v
 				rdataArr[k] = v
 			}
 			}
 		} else {
 		} else {
-			rdataArr = append(rdataArr, map[string]interface{}{"name": this.ResourceType, "number": free_num, "resourceType": this.ResourceType, "thirtyNum": 0})
+			rdataArr = append(rdataArr, map[string]interface{}{"name": this.ResourceType, "number": 0, "purchaseNum": 0, "exchangeNum": 0, "grantNum": 0, "freeNum": 0, "resourceType": this.ResourceType, "thirtyNum": 0})
 		}
 		}
 		rmap["data"] = rdataArr
 		rmap["data"] = rdataArr
 	}
 	}
 	return rmap, err
 	return rmap, err
 }
 }
 
 
-//使用
+// 使用
 type UseBalanceStruct struct {
 type UseBalanceStruct struct {
 	AccountId        string                 //账户标识
 	AccountId        string                 //账户标识
 	Name             string                 //资源名称
 	Name             string                 //资源名称
@@ -121,9 +125,9 @@ type UseBalanceStruct struct {
 	InfoId           []string               //数据Id,多个以逗号隔开【数据流量包用到】
 	InfoId           []string               //数据Id,多个以逗号隔开【数据流量包用到】
 	Platform         string                 //平台:PC;APP;WX
 	Platform         string                 //平台:PC;APP;WX
 	Session          *httpsession.Session
 	Session          *httpsession.Session
+	VipState         int
 }
 }
 
 
-//
 func InitUseBalance(userId, product, resourceType, ruleId, duplicateRemoval string, infoId []string, remarks map[string]interface{}, num int, platform string, session *httpsession.Session) *UseBalanceStruct {
 func InitUseBalance(userId, product, resourceType, ruleId, duplicateRemoval string, infoId []string, remarks map[string]interface{}, num int, platform string, session *httpsession.Session) *UseBalanceStruct {
 	return &UseBalanceStruct{
 	return &UseBalanceStruct{
 		AccountId:        userId,
 		AccountId:        userId,
@@ -159,6 +163,7 @@ func (this *UseBalanceStruct) UseBalance() (map[string]interface{}, error) {
 		"remarks":          []string{string(remarkBytes)},            //备注 查询条件、下载地址、导出时间、导出条数
 		"remarks":          []string{string(remarkBytes)},            //备注 查询条件、下载地址、导出时间、导出条数
 		"infoId":           []string{strings.Join(this.InfoId, ",")}, //数据Id,多个以逗号隔开
 		"infoId":           []string{strings.Join(this.InfoId, ",")}, //数据Id,多个以逗号隔开
 		"duplicateRemoval": []string{this.DuplicateRemoval},          //是否去重0不去1去重
 		"duplicateRemoval": []string{this.DuplicateRemoval},          //是否去重0不去1去重
+		"vipState":         []string{qu.InterfaceToStr(this.VipState)},
 	})
 	})
 	if err != nil {
 	if err != nil {
 		log.Println("UseBalance post err:", err)
 		log.Println("UseBalance post err:", err)
@@ -167,7 +172,7 @@ func (this *UseBalanceStruct) UseBalance() (map[string]interface{}, error) {
 	return resMap, err
 	return resMap, err
 }
 }
 
 
-//流水
+// 流水
 type FindRecordStruct struct {
 type FindRecordStruct struct {
 	AccountId    string //账户标识
 	AccountId    string //账户标识
 	UserId       string //用户标识
 	UserId       string //用户标识
@@ -181,7 +186,7 @@ type FindRecordStruct struct {
 
 
 }
 }
 
 
-//定义结构体
+// 定义结构体
 func InitFindRecord(userId, resourceType, queryTime, platform string, pageSize, pageNum, state int) *FindRecordStruct {
 func InitFindRecord(userId, resourceType, queryTime, platform string, pageSize, pageNum, state int) *FindRecordStruct {
 	if pageSize == 0 {
 	if pageSize == 0 {
 		pageSize = 10
 		pageSize = 10
@@ -249,7 +254,7 @@ func (this *UpdateVipTimeStruct) UpdateVipEndTime() (bool, error) {
 	return ok, nil
 	return ok, nil
 }
 }
 
 
-//账户信息
+// 账户信息
 func (this *UseBalanceStruct) accountPack() (payCount int) {
 func (this *UseBalanceStruct) accountPack() (payCount int) {
 	resMap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, url.Values{
 	resMap, err := middleGround.CommonPost(middleGround.JyApiConfig.ApiList.FindBalance, url.Values{
 		"accountId":    []string{this.UserId}, //账户标识*
 		"accountId":    []string{this.UserId}, //账户标识*

+ 1 - 1
src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go

@@ -625,7 +625,7 @@ func sendPackExportMail(userId, selectId, userMail, excelPath string) {
 	if userId == "" || selectId == "" || userMail == "" || excelPath == "" {
 	if userId == "" || selectId == "" || userMail == "" || excelPath == "" {
 		return
 		return
 	}
 	}
-	mailContent, err := GetPackDataExportMailContent(selectId, config.Config.WebDomain+excelPath)
+	mailContent, err := GetPackDataExportMailContent(selectId, config.Config.WxDomain+excelPath)
 	if err != nil {
 	if err != nil {
 		log.Printf("SendDataExportMailForPayed SendMailToPayUser 订单号%s获取邮件内容异常%v\n", selectId, err)
 		log.Printf("SendDataExportMailForPayed SendMailToPayUser 订单号%s获取邮件内容异常%v\n", selectId, err)
 	}
 	}

+ 1 - 1
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -699,7 +699,7 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 	product_type := qutil.ObjToString((*orderData)["product_type"]) + "导出"
 	product_type := qutil.ObjToString((*orderData)["product_type"]) + "导出"
 	order_money := qutil.Float64All((*orderData)["order_money"]) / 100
 	order_money := qutil.Float64All((*orderData)["order_money"]) / 100
 	pay_time := qutil.ObjToString((*orderData)["pay_time"])
 	pay_time := qutil.ObjToString((*orderData)["pay_time"])
-	download_url := config.Config.WebDomain + qutil.ObjToString((*orderData)["download_url"])
+	download_url := config.Config.WxDomain + qutil.ObjToString((*orderData)["download_url"])
 
 
 	create_time := qutil.ObjToString((*orderData)["create_time"])
 	create_time := qutil.ObjToString((*orderData)["create_time"])
 	if create_time != "" {
 	if create_time != "" {

+ 13 - 15
src/jfw/modules/subscribepay/src/entity/resourcePackStruct.go

@@ -14,7 +14,6 @@ import (
 
 
 	qu "app.yhyue.com/moapp/jybase/common"
 	qu "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
 	. "app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"github.com/shopspring/decimal"
 	"github.com/shopspring/decimal"
 )
 )
@@ -68,12 +67,14 @@ func (this *resoucePackStruct) PayCallBack(param *CallBackParam) bool {
 
 
 			//中台资源中心更新
 			//中台资源中心更新
 			var vipEndTime int64 = 0
 			var vipEndTime int64 = 0
-			udata := util.Compatible.Select(userId, `{"l_vip_endtime":1}`)
+			var vipState int = 0
+			udata := util.Compatible.Select(userId, `{"l_vip_endtime":1,"i_vip_status":1}`)
 			if udata != nil {
 			if udata != nil {
 				vipEndTime = qu.Int64All((*udata)["l_vip_endtime"])
 				vipEndTime = qu.Int64All((*udata)["l_vip_endtime"])
+				vipState = qu.IntAll((*udata)["i_vip_status"])
 			}
 			}
 			if ok, err := InitPurchase(userId, productType, productType, strconv.Itoa(qu.IntAll(filterM["num"])), "个",
 			if ok, err := InitPurchase(userId, productType, productType, strconv.Itoa(qu.IntAll(filterM["num"])), "个",
-				JyresoucePack.LastDate(now).Format(Date_Short_Layout), filterM, vipEndTime).PurchaseUserBalance(); !ok {
+				JyresoucePack.LastDate(now).Format(Date_Short_Layout), filterM, vipEndTime, vipState).PurchaseUserBalance(); !ok {
 				log.Printf("用户%s 订单类型:%s  订单号:%s PurchaseUserBalance出错:%v", userId, productType, (*orderData)["order_code"], err)
 				log.Printf("用户%s 订单类型:%s  订单号:%s PurchaseUserBalance出错:%v", userId, productType, (*orderData)["order_code"], err)
 				return false
 				return false
 			}
 			}
@@ -81,15 +82,15 @@ func (this *resoucePackStruct) PayCallBack(param *CallBackParam) bool {
 			//不同产品逻辑处理
 			//不同产品逻辑处理
 			switch productType {
 			switch productType {
 			case ATTACHMENT:
 			case ATTACHMENT:
-				//附件下载包剩余次数
-				filePackKey := fmt.Sprintf(jy.FilePackNumKey, userId, fmt.Sprint(time.Now().Month()))
-				filePackNum := redis.GetInt(jy.PowerCacheDb, filePackKey)
-				if filePackNum == 0 {
-					redis.Put(jy.PowerCacheDb, filePackKey, qu.IntAll(filterM["num"]), int(this.LastDate(now).Unix()-now.Unix()))
-				} else {
-					filePackNum += qu.IntAll(filterM["num"])
-					redis.Put(jy.PowerCacheDb, filePackKey, filePackNum, int(this.LastDate(now).Unix()-now.Unix()))
-				}
+				/* //附件下载包剩余次数
+				   filePackKey := fmt.Sprintf(jy.FilePackNumKey, userId, fmt.Sprint(time.Now().Month()))
+				   filePackNum := redis.GetInt(jy.PowerCacheDb, filePackKey)
+				   if filePackNum == 0 {
+				       redis.Put(jy.PowerCacheDb, filePackKey, qu.IntAll(filterM["num"]), int(this.LastDate(now).Unix()-now.Unix()))
+				   } else {
+				       filePackNum += qu.IntAll(filterM["num"])
+				       redis.Put(jy.PowerCacheDb, filePackKey, filePackNum, int(this.LastDate(now).Unix()-now.Unix()))
+				   }*/
 			}
 			}
 
 
 			//核销卡卷
 			//核销卡卷
@@ -128,9 +129,6 @@ func (this *resoucePackStruct) Filter(product, userid, lotteryId, discountId str
 	case "dataExportPack":
 	case "dataExportPack":
 	//TODO
 	//TODO
 	case "attachmentDownPack": //超级订阅用户可以购买
 	case "attachmentDownPack": //超级订阅用户可以购买
-		if data.VipStatus <= 0 {
-			msg = "非超级订阅用户,暂无权益"
-		}
 		num := qu.IntAll(m["num"])
 		num := qu.IntAll(m["num"])
 		products := fmt.Sprintf("附件下载包-%v个", num)
 		products := fmt.Sprintf("附件下载包-%v个", num)
 		price := config.ResConf.AttachmentDownPackPrice[strconv.Itoa(num)]
 		price := config.ResConf.AttachmentDownPackPrice[strconv.Itoa(num)]

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

@@ -1,6 +1,6 @@
 module jy/src/jfw/modules/subscribepay/src
 module jy/src/jfw/modules/subscribepay/src
 
 
-go 1.18
+go 1.20
 
 
 require (
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b

+ 26 - 8
src/jfw/modules/subscribepay/src/service/basePack.go

@@ -2,7 +2,6 @@ package service
 
 
 import (
 import (
 	"fmt"
 	"fmt"
-	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/entity"
 	"jy/src/jfw/modules/subscribepay/src/entity"
 	"log"
 	"log"
 	"time"
 	"time"
@@ -10,10 +9,33 @@ import (
 	. "app.yhyue.com/moapp/jybase/api"
 	. "app.yhyue.com/moapp/jybase/api"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 )
 
 
-//“包”的消费
+// “包”的兑换过期记录
+func (this *ResourcePack) ExchangeCancelList() {
+	userId, _ := this.GetSession("userId").(string)
+	productName := this.GetString("productName")
+	pageSize, _ := this.GetInteger("pageSize")
+	pageNum, _ := this.GetInteger("pageNum")
+	queryTime := this.GetString("queryTime")
+	rData, errMsg := func() (interface{}, error) {
+		if this.Method() != "POST" {
+			return "请求方式有误", nil
+		}
+		returnList, total, err := entity.JyexchangeCance(userId, productName, "", queryTime, pageSize, pageNum)
+		returnData := map[string]interface{}{
+			"list": returnList,
+		}
+		returnData["total"] = total
+		return returnData, err
+	}()
+	if errMsg != nil {
+		log.Printf("%s %s RecordList 异常:%s\n", userId, productName, errMsg.Error())
+	}
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+// “包”的消费
 func (this *ResourcePack) ConsumePack() {
 func (this *ResourcePack) ConsumePack() {
 	userId, _ := this.GetSession("userId").(string)
 	userId, _ := this.GetSession("userId").(string)
 	productName := this.GetString("productName")
 	productName := this.GetString("productName")
@@ -51,7 +73,7 @@ func (this *ResourcePack) ConsumePack() {
 	})
 	})
 }
 }
 
 
-//“包”的使用记录
+// “包”的使用记录
 func (this *ResourcePack) RecordList() {
 func (this *ResourcePack) RecordList() {
 	userId, _ := this.GetSession("userId").(string)
 	userId, _ := this.GetSession("userId").(string)
 	productName := this.GetString("productName")
 	productName := this.GetString("productName")
@@ -66,10 +88,6 @@ func (this *ResourcePack) RecordList() {
 		if productName == "" || platform == "" {
 		if productName == "" || platform == "" {
 			return "参数有误", nil
 			return "参数有误", nil
 		}
 		}
-		vipMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-		if vipMsg.VipStatus <= 0 {
-			return "无权限,请联系管理员", nil
-		}
 		if queryTime == "" {
 		if queryTime == "" {
 			queryTime = time.Now().Format("2006-01")
 			queryTime = time.Now().Format("2006-01")
 		}
 		}

+ 8 - 10
src/jfw/modules/subscribepay/src/service/resourcePack.go

@@ -1,6 +1,7 @@
 package service
 package service
 
 
 import (
 import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/config"
@@ -15,18 +16,18 @@ import (
 	qu "app.yhyue.com/moapp/jybase/common"
 	qu "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
 	. "app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 )
 )
 
 
 //资源包相关(数据流量包,附件下载包,采购单位流量包...)
 //资源包相关(数据流量包,附件下载包,采购单位流量包...)
 
 
 type ResourcePack struct {
 type ResourcePack struct {
 	*xweb.Action
 	*xweb.Action
-	price       xweb.Mapper `xweb:"/resourcePack/price"`       //价格
-	createOrder xweb.Mapper `xweb:"/resourcePack/createOrder"` //线上自助数据包充值-创建订单
-	account     xweb.Mapper `xweb:"/resourcePack/account"`     //个人账户
-	recordList  xweb.Mapper `xweb:"/resourcePack/recordList"`  //“资源包”使用记录
-	consumePack xweb.Mapper `xweb:"/resourcePack/consumePack"` //“资源包”消费
+	price              xweb.Mapper `xweb:"/resourcePack/price"`              //价格
+	createOrder        xweb.Mapper `xweb:"/resourcePack/createOrder"`        //线上自助数据包充值-创建订单
+	account            xweb.Mapper `xweb:"/resourcePack/account"`            //个人账户
+	recordList         xweb.Mapper `xweb:"/resourcePack/recordList"`         //“资源包”使用记录
+	consumePack        xweb.Mapper `xweb:"/resourcePack/consumePack"`        //“资源包”消费
+	exchangeCancelList xweb.Mapper `xweb:"/resourcePack/exchangeCancelList"` //“资源包”兑换作废
 }
 }
 
 
 const (
 const (
@@ -167,13 +168,10 @@ func (this *ResourcePack) Account() {
 		return
 		return
 	}
 	}
 	vipMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
 	vipMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
-	if vipMsg.VipStatus <= 0 {
-		this.ServeJson(Result{Error_msg: "无权限,请联系管理员"})
-		return
-	}
 	dbs := &entity.FindBalanceStruct{
 	dbs := &entity.FindBalanceStruct{
 		AccountId:    userId,
 		AccountId:    userId,
 		ResourceType: config.ResConf.Product[product],
 		ResourceType: config.ResConf.Product[product],
+		VipState:     vipMsg.VipStatus,
 	}
 	}
 	data, err := dbs.FindBalance()
 	data, err := dbs.FindBalance()
 	if err != nil {
 	if err != nil {

+ 48 - 0
src/jfw/modules/subscribepay/src/service/userAccountInfo.go

@@ -24,6 +24,7 @@ import (
 	"app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jybase/usercenter"
 	"app.yhyue.com/moapp/jybase/usercenter"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/dataexport"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 )
 )
@@ -119,6 +120,22 @@ func (this *UserAccount) GetAccountInfo() {
 			}
 			}
 		}
 		}
 		b := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
 		b := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+		//s从数据导出填写的邮箱或者从数据定制服务这里获取的邮箱
+		_, otherMail := dataexport.GetLastExportPhoneAndMail(util.Mysql, userId, qutil.ObjToString(this.GetSession("entUserId")))
+		if otherMail == "" {
+			saleData, _ := util.MQFW.FindOne("saleLeads", map[string]interface{}{
+				"userid": this.GetSession("userId"),
+				"mail": map[string]interface{}{
+					"$exists": true,
+				},
+			})
+			if saleData != nil && len(*saleData) > 0 {
+				otherMail = qutil.ObjToString((*saleData)["mail"])
+			}
+			if qutil.ObjToString((*userMsg)["s_myemail"]) != "" {
+				otherMail = qutil.ObjToString((*userMsg)["s_myemail"])
+			}
+		}
 		return map[string]interface{}{
 		return map[string]interface{}{
 			"userId":        encrypt.EncodeArticleId(userId),
 			"userId":        encrypt.EncodeArticleId(userId),
 			"email":         qutil.ObjToString((*userMsg)["s_myemail"]),
 			"email":         qutil.ObjToString((*userMsg)["s_myemail"]),
@@ -132,6 +149,7 @@ func (this *UserAccount) GetAccountInfo() {
 			"company":       qutil.ObjToString((*userMsg)["s_company"]),
 			"company":       qutil.ObjToString((*userMsg)["s_company"]),
 			"isWx":          isWx, //是否是微信账号
 			"isWx":          isWx, //是否是微信账号
 			"breakRenewTip": breakRenewTip,
 			"breakRenewTip": breakRenewTip,
+			"otherMail":     otherMail, //从数据导出填写的邮箱或者从数据定制服务这里获取的邮箱
 		}, nil
 		}, nil
 	}()
 	}()
 	this.ServeJson(NewResult(rData, errMsg))
 	this.ServeJson(NewResult(rData, errMsg))
@@ -204,6 +222,19 @@ func (this *UserAccount) MailSet(doType string) {
 			}) {
 			}) {
 				return nil, DBUPDATE_ERROR
 				return nil, DBUPDATE_ERROR
 			}
 			}
+			userMsg, _ := util.MQFW.FindById("user", userId, `{"l_registedate":1}`)
+			isNew := false
+			if userMsg != nil && len(*userMsg) > 0 {
+				l_registedate := qutil.Int64All((*userMsg)["l_registedate"])
+				isNew = l_registedate > config.Config.TaskStartTime //是否注册时间处于新手任务开始时间
+			}
+			jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, "task", userId, jy.Jyweb_node2, map[string]interface{}{
+				"code":       qutil.If(isNew, 1009, 1016),
+				"types":      "bindMail",
+				"num":        50,
+				"baseUserId": this.GetSession("base_user_id"),
+				"positionId": this.GetSession("positionId"),
+			})
 			this.Session().Del(mailAuthPassSessionKey)
 			this.Session().Del(mailAuthPassSessionKey)
 		}
 		}
 		return map[string]interface{}{
 		return map[string]interface{}{
@@ -408,6 +439,22 @@ func (this *UserAccount) PhoneBind() {
 							redis.Del(config.Config.ShareRedisName, shareKey)
 							redis.Del(config.Config.ShareRedisName, shareKey)
 						}
 						}
 					}(qutil.ObjToString((*uData)["s_m_openid"]))
 					}(qutil.ObjToString((*uData)["s_m_openid"]))
+
+					//绑定手机号和关注公众号
+					jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, "task", userId, jy.Jyweb_node2, map[string]interface{}{
+						"code":       1007,
+						"types":      "bindPhone",
+						"num":        50,
+						"baseUserId": this.GetSession("base_user_id"),
+						"positionId": this.GetSession("positionId"),
+					})
+					jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, "task", userId, jy.Jyweb_node2, map[string]interface{}{
+						"code":       1008,
+						"types":      "followWx",
+						"num":        50,
+						"baseUserId": this.GetSession("base_user_id"),
+						"positionId": this.GetSession("positionId"),
+					})
 				}
 				}
 				data := map[string]interface{}{
 				data := map[string]interface{}{
 					"s_unionid":      (*uData)["s_unionid"],
 					"s_unionid":      (*uData)["s_unionid"],
@@ -428,6 +475,7 @@ func (this *UserAccount) PhoneBind() {
 				}
 				}
 				//用户中台存储  结束
 				//用户中台存储  结束
 				jy.CreateUserMerge(util.MQFW, util.Mysql, this.Session(), config.Middleground).FlushSession(userId) //刷新session
 				jy.CreateUserMerge(util.MQFW, util.Mysql, this.Session(), config.Middleground).FlushSession(userId) //刷新session
+
 			} else if mode == "mergeBind" { //跳转绑定-不合并绑定无效
 			} else if mode == "mergeBind" { //跳转绑定-不合并绑定无效
 				if qutil.Int64All((*uData)["l_registedate"]) > config.AutoMergeTimeStamp { //新微信直接绑定
 				if qutil.Int64All((*uData)["l_registedate"]) > config.AutoMergeTimeStamp { //新微信直接绑定
 					data := map[string]interface{}{
 					data := map[string]interface{}{

+ 1 - 1
src/jfw/modules/subscribepay/src/util/db.go

@@ -1,6 +1,7 @@
 package util
 package util
 
 
 import (
 import (
+	"app.yhyue.com/moapp/jypkg/compatible"
 	. "jy/src/jfw/modules/subscribepay/src/config"
 	. "jy/src/jfw/modules/subscribepay/src/config"
 
 
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
@@ -8,7 +9,6 @@ import (
 	mg "app.yhyue.com/moapp/jybase/mongodb"
 	mg "app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/mysql"
 	"app.yhyue.com/moapp/jybase/mysql"
 	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/jybase/redis"
-	"app.yhyue.com/moapp/jypkg/compatible"
 )
 )
 
 
 var MQFW mg.MongodbSim
 var MQFW mg.MongodbSim

+ 1 - 0
src/jfw/modules/weixin/src/config.json

@@ -117,6 +117,7 @@
     "description": "剑鱼新年活动"
     "description": "剑鱼新年活动"
   },
   },
   "nsq": "192.168.3.240:4260",
   "nsq": "192.168.3.240:4260",
+  "nsq_topic": "jy_event",
   "cookieSource": {
   "cookieSource": {
     "jywkzmt": "jydocs",
     "jywkzmt": "jydocs",
     "jywkseo": "jydocs",
     "jywkseo": "jydocs",

+ 6 - 0
src/jfw/modules/weixin/src/go.mod

@@ -7,6 +7,8 @@ require (
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed
 	app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
+	app.yhyue.com/moapp/jypkg v1.0.3
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.1
 	github.com/gogf/gf/v2 v2.3.1
 	go.mongodb.org/mongo-driver v1.11.6
 	go.mongodb.org/mongo-driver v1.11.6
@@ -98,6 +100,10 @@ require (
 	go.etcd.io/etcd/api/v3 v3.5.9 // 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/pkg/v3 v3.5.9 // indirect
 	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
 	go.etcd.io/etcd/client/v3 v3.5.9 // 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 v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/jaeger 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/internal/retry v1.15.1 // indirect

+ 4 - 0
src/jfw/modules/weixin/src/go.sum

@@ -11,6 +11,8 @@ app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloO
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed h1:rd5FDHAWiM1MLbgi79KBpRTMQfH5e2Y+knkk2JMsFP4=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed h1:rd5FDHAWiM1MLbgi79KBpRTMQfH5e2Y+knkk2JMsFP4=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/jypkg v1.0.4-0.20231108013952-a37ecebda2ed/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
+app.yhyue.com/moapp/jypkg v1.0.3 h1:aeW4CuNvhevbVwpSVeik19C4C1Uc39eHXfmpTMlZUYU=
+app.yhyue.com/moapp/jypkg v1.0.3/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -829,6 +831,8 @@ github.com/zeromicro/go-zero v1.5.3 h1:9poyd+raeL7gSMUu6P19N7bssTppieR2j7Oos2j1y
 github.com/zeromicro/go-zero v1.5.3/go.mod h1:dmoBpgJTxt9KWmgrNGpv06XxZRPXMakrxUVgROFAR3g=
 github.com/zeromicro/go-zero v1.5.3/go.mod h1:dmoBpgJTxt9KWmgrNGpv06XxZRPXMakrxUVgROFAR3g=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb h1:uWiILQloLUVdtPYr1ZZo2zqtlpzo4G8vUpglo/Fs2H8=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb h1:uWiILQloLUVdtPYr1ZZo2zqtlpzo4G8vUpglo/Fs2H8=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb/go.mod h1:J3xKssoVdrwZ2E29fIox/EKxOZWimS7AZ4fOTCFkOLo=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb/go.mod h1:J3xKssoVdrwZ2E29fIox/EKxOZWimS7AZ4fOTCFkOLo=
+github.com/zeromicro/go-zero v1.5.3 h1:9poyd+raeL7gSMUu6P19N7bssTppieR2j7Oos2j1yFQ=
+github.com/zeromicro/go-zero v1.5.3/go.mod h1:dmoBpgJTxt9KWmgrNGpv06XxZRPXMakrxUVgROFAR3g=
 github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
 go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=

+ 12 - 3
src/jfw/modules/weixin/src/wx/wx.go

@@ -963,7 +963,7 @@ func WxBind(code, openId string, w ResponseWriter, newUnionId string) bool {
 	bindUserId := fmt.Sprint((*data)["userId"])
 	bindUserId := fmt.Sprint((*data)["userId"])
 	source := fmt.Sprint((*data)["source"])
 	source := fmt.Sprint((*data)["source"])
 	//1查询用户微信号和扫码是否是同一个微信号
 	//1查询用户微信号和扫码是否是同一个微信号
-	bindData, b := tools.MQFW.FindById("user", bindUserId, `{"s_m_phone":1,"s_phone":1,"s_unionid":1,"s_m_openid":1}`)
+	bindData, b := tools.MQFW.FindById("user", bindUserId, `{"s_m_phone":1,"s_phone":1,"s_unionid":1,"s_m_openid":1,"base_user_id":1}`)
 	if !b {
 	if !b {
 		return true
 		return true
 	}
 	}
@@ -980,10 +980,11 @@ func WxBind(code, openId string, w ResponseWriter, newUnionId string) bool {
 			return true
 			return true
 		}
 		}
 	}
 	}
-
+	nsqPath, _ := config.Sysconfig["nsq"].(string)
+	nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 	userId := ""
 	userId := ""
 	unionid := ""
 	unionid := ""
-	m, b := tools.MQFW.Find("user", `{"s_unionid":"`+newUnionId+`","i_appid":2}`, nil, `{"_id":1,"s_m_phone":1,"s_phone":1}`, false, -1, -1)
+	m, b := tools.MQFW.Find("user", `{"s_unionid":"`+newUnionId+`","i_appid":2}`, nil, `{"_id":1,"s_m_phone":1,"s_phone":1,"base_user_id":1}`, false, -1, -1)
 	if len(*m) == 0 {
 	if len(*m) == 0 {
 		if len(bindUnionid) > 11 {
 		if len(bindUnionid) > 11 {
 			log.Println("对不起,微信绑定失败,请使用原微信绑定账号扫码关注")
 			log.Println("对不起,微信绑定失败,请使用原微信绑定账号扫码关注")
@@ -998,7 +999,14 @@ func WxBind(code, openId string, w ResponseWriter, newUnionId string) bool {
 				"s_unionid":  newUnionId,
 				"s_unionid":  newUnionId,
 			},
 			},
 		}
 		}
+
 		tools.MQFW.UpdateById("user", bindUserId, &update)
 		tools.MQFW.UpdateById("user", bindUserId, &update)
+		jy.Publish(tools.MGLOG, nsqPath, nsq_topic, "task", bindUserId, jy.Jyweb_node2, map[string]interface{}{
+			"code":       1008, //绑定手机号任务
+			"types":      "followWx",
+			"num":        50,
+			"baseUserId": (*bindData)["base_user_id"],
+		})
 		return false
 		return false
 	}
 	}
 	//需要进行绑定
 	//需要进行绑定
@@ -1026,6 +1034,7 @@ func WxBind(code, openId string, w ResponseWriter, newUnionId string) bool {
 				},
 				},
 			}
 			}
 			tools.MQFW.UpdateById("user", userId, &update1)
 			tools.MQFW.UpdateById("user", userId, &update1)
+
 			var bindUrl = fmt.Sprintf(config.Sysconfig["proxysess"].(string), tools.SE.EncodeString(openId+","+unionid+","+strconv.Itoa(int(time.Now().Unix()))+",wxMerge"))
 			var bindUrl = fmt.Sprintf(config.Sysconfig["proxysess"].(string), tools.SE.EncodeString(openId+","+unionid+","+strconv.Itoa(int(time.Now().Unix()))+",wxMerge"))
 			fmt.Println(fmt.Sprintf(fmt.Sprint(config.Sysconfig["merge"]), bindUrl))
 			fmt.Println(fmt.Sprintf(fmt.Sprint(config.Sysconfig["merge"]), bindUrl))
 			w.ReplyText(fmt.Sprintf(fmt.Sprint(config.Sysconfig["merge"]), bindUrl))
 			w.ReplyText(fmt.Sprintf(fmt.Sprint(config.Sysconfig["merge"]), bindUrl))

+ 16 - 0
src/web/staticres/big-member/css/unit_portrayal.css

@@ -634,3 +634,19 @@
 .zb-analysis-module {
 .zb-analysis-module {
     margin-bottom: .08rem;
     margin-bottom: .08rem;
 }
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 54 - 8
src/web/staticres/big-member/js/unit_portrayal.js

@@ -81,7 +81,9 @@ var vNode = {
                 list: [],
                 list: [],
                 isMore:'',
                 isMore:'',
                 pageCount: '',
                 pageCount: '',
-                isNext: true
+                isNext: true,
+                total: 0,
+                updateTime: 0
             },
             },
             regCapSettings:{
             regCapSettings:{
                 showLine: ['累计采购规模'],
                 showLine: ['累计采购规模'],
@@ -248,6 +250,24 @@ var vNode = {
         // 留完资的用户(保含已体验和未体验的)
         // 留完资的用户(保含已体验和未体验的)
         getfreeBuyerOpen: function () {
         getfreeBuyerOpen: function () {
           return this.userInfo.isFree && this.userInfo.freeBuyerPort != 0;
           return this.userInfo.isFree && this.userInfo.freeBuyerPort != 0;
+        },
+         // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+        customerServiceStatus: function () {
+          var info = this.userInfo
+          var memberCustom = this.power.indexOf(5) === -1 && info.memberStatus > 0
+          var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0 && this.usageInfo.provin === -1
+          // 纯商机管理用户
+          var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+          return memberCustom || isNewVip || entniche
+        },
+        // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+        updateVipStatus: function () {
+          var info = this.userInfo
+          var isNoMember = info.memberStatus <= 0
+          var isOldVip = info.vipStatus > 0 && !info.viper
+          var isNewVip = info.vipStatus > 0 && info.viper && this.usageInfo.surplus <= 0
+          var isNotAll = this.usageInfo.provin !== -1
+          return (isOldVip || (isNewVip && isNotAll)) && isNoMember
         }
         }
     },
     },
     watch: {
     watch: {
@@ -628,8 +648,10 @@ var vNode = {
             data:storageSet ? Object.assign(data, storageSet) : data,
             data:storageSet ? Object.assign(data, storageSet) : data,
             success:function(res) {
             success:function(res) {
               if(res.error_code == 0) {
               if(res.error_code == 0) {
+                that.dt.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
                 if (res.data.list && res.data.list.length && res.data.list.length > 0) {
                 if (res.data.list && res.data.list.length && res.data.list.length > 0) {
                   that.dt.pageCount = res.data.count
                   that.dt.pageCount = res.data.count
+                  that.dt.total = res.data.count
                   if (res.data.list && $.isArray(res.data.list)) {
                   if (res.data.list && $.isArray(res.data.list)) {
                     that.isShow.showDynamic = true;
                     that.isShow.showDynamic = true;
                     res.data.list.forEach(function(v,i){
                     res.data.list.forEach(function(v,i){
@@ -650,11 +672,12 @@ var vNode = {
                       })
                       })
                     } catch (error) {}
                     } catch (error) {}
                     that.dt.list = []
                     that.dt.list = []
-                    if (res.data.list.length >= 5){
-                      that.dt.list.push(res.data.list[0],res.data.list[1],res.data.list[2],res.data.list[3],res.data.list[4])
-                    }else {
-                      that.dt.list = res.data.list
-                    }
+                    // if (res.data.list.length >= 5){
+                    //   that.dt.list.push(res.data.list[0],res.data.list[1],res.data.list[2],res.data.list[3],res.data.list[4])
+                    // }else {
+                    //   that.dt.list = res.data.list
+                    // }
+                    that.dt.list = res.data.list
                     that.colList = that.dt.list
                     that.colList = that.dt.list
                     that.colList.forEach((val)=>{
                     that.colList.forEach((val)=>{
                       that.list.push(val.id)
                       that.list.push(val.id)
@@ -928,7 +951,13 @@ var vNode = {
             } else {
             } else {
               that.isShow.showScaleFb = true;
               that.isShow.showScaleFb = true;
               that.$nextTick(function(){
               that.$nextTick(function(){
-                that.getHotChartData(res);
+                var timer = setInterval(function () {
+                  // 判断页面所有资源已加载完毕
+                  if (document.readyState === "complete") {
+                    that.getHotChartData(res);//执行方法
+                    window.clearInterval(timer);
+                  }
+                }, 800)
               })
               })
             }
             }
           }
           }
@@ -1012,7 +1041,13 @@ var vNode = {
           if (data && data.length > 0) {
           if (data && data.length > 0) {
             that.isShow.showScaleRate = true
             that.isShow.showScaleRate = true
             that.$nextTick(function(){
             that.$nextTick(function(){
-              that.getPieCharData(data)
+              var timer = setInterval(function () {
+                // 判断页面所有资源已加载完毕
+                if (document.readyState === "complete") {
+                  that.getPieCharData(data);//执行方法
+                  window.clearInterval(timer);
+                }
+              }, 800)
             })
             })
           }
           }
         },
         },
@@ -1776,6 +1811,17 @@ var vNode = {
               }
               }
             })
             })
           }
           }
+        },
+        onDtTextClick: function(type) {
+          if (type === 'customer') {
+            location.href = '/big/wx/page/customer'
+          } else if (type === 'update') {
+            //跳转清除旧套餐缓存,防止计算价格出错
+            sessionStorage.removeItem('vipSub_oldBuySet')
+            location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+          } else if (type === 'buy') {
+            location.href = '/jy_mobile/common/order/create/svip?type=buy'
+          }
         }
         }
     }
     }
 }
 }

+ 7 - 0
src/web/staticres/big-member/js/utils.js

@@ -97,6 +97,13 @@ var utils = {
         r = null;
         r = null;
         return context == null || context == '' || context == 'undefined' ? '' : context;
         return context == null || context == '' || context == 'undefined' ? '' : context;
     },
     },
+    // 移除url参数,但是不刷新页面
+    delUrlParam: function (name){
+      var href = window.location.href;
+      const e = eval(`/&?${name}=[^&#]*/g`);
+      href = href.replace(e, '');
+      history.replaceState('','',href);// replaceState方法不会触发页面刷新,只是导致history对象发生变化,地址栏
+    },
     // 取[m, n]随机数
     // 取[m, n]随机数
     getRandomNumber: function (min, max) {
     getRandomNumber: function (min, max) {
         return Math.floor(Math.random() * (max - min + 1) + min);
         return Math.floor(Math.random() * (max - min + 1) + min);

+ 16 - 0
src/web/staticres/big-member/weixin/css/ent_portrait.css

@@ -598,3 +598,19 @@
 .top-switch div:not(active) {
 .top-switch div:not(active) {
   color: #5F5E64
   color: #5F5E64
 }
 }
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
+}

+ 16 - 0
src/web/staticres/common-module/big-member/css/client_portrayal.css

@@ -669,4 +669,20 @@
     height: 100%;
     height: 100%;
     background: linear-gradient(270deg, #2ABED1 0.81%, #8DE0EB 100%);
     background: linear-gradient(270deg, #2ABED1 0.81%, #8DE0EB 100%);
     border-radius: 0 .28rem .28rem 0;
     border-radius: 0 .28rem .28rem 0;
+}
+.dt-text-tips{
+  padding: .24rem .32rem .48rem;
+  font-size: .24rem;
+  line-height: .36rem;
+  color: rgba(29, 29, 29, 1);
+  text-align: center;
+}
+.dt-text-tips > .highlight-text{
+  text-decoration: underline;
+  font-size: inherit;
+}
+.dt-text-tips.light-bg{
+  margin: .24rem .32rem;
+  background: linear-gradient(rgba(234, 248, 250, 1), rgba(234, 248, 250, 0));
+  border-radius: 8px;
 }
 }

+ 26 - 5
src/web/staticres/common-module/big-member/js/client_portrayal.js

@@ -82,7 +82,9 @@ var vNode = {
               list: [],
               list: [],
               isMore:'',
               isMore:'',
               pageCount: '',
               pageCount: '',
-              isNext: true
+              isNext: true,
+              updateTime: 0,
+              total: 0
           },
           },
           regCapSettings:{
           regCapSettings:{
               showLine: ['累计采购规模'],
               showLine: ['累计采购规模'],
@@ -630,11 +632,13 @@ var vNode = {
           timeout: 8000,
           timeout: 8000,
           success:function(res) {
           success:function(res) {
             if(res.error_code == 0) {
             if(res.error_code == 0) {
+              that.dt.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
               if(!res.data) {
               if(!res.data) {
                 that.getNewMsgObj = res.data
                 that.getNewMsgObj = res.data
               } else {
               } else {
                 if (res.data.list && res.data.list.length && res.data.list.length > 0) {
                 if (res.data.list && res.data.list.length && res.data.list.length > 0) {
                   that.dt.pageCount = res.data.count
                   that.dt.pageCount = res.data.count
+                  that.dt.total = res.data.count
                   if (res.data.list && $.isArray(res.data.list)) {
                   if (res.data.list && $.isArray(res.data.list)) {
                     that.isShow.showDynamic = true;
                     that.isShow.showDynamic = true;
                     res.data.list.forEach(function(v,i){
                     res.data.list.forEach(function(v,i){
@@ -656,9 +660,9 @@ var vNode = {
                       })
                       })
                     } catch (error) {}
                     } catch (error) {}
                     res.data.list.forEach((item) => {
                     res.data.list.forEach((item) => {
-                      if (that.dt.list.length <= 5) {
+                      // if (that.dt.list.length <= 5) {
                         that.dt.list.push(item)
                         that.dt.list.push(item)
-                      }
+                      // }
                     })
                     })
                     // that.dt.list = res.data.list
                     // that.dt.list = res.data.list
                     that.colList = res.data.list
                     that.colList = res.data.list
@@ -941,7 +945,13 @@ var vNode = {
           } else {
           } else {
             that.isShow.showScaleFb = true;
             that.isShow.showScaleFb = true;
             that.$nextTick(function(){
             that.$nextTick(function(){
-              that.getHotChartData(res);
+              var timer = setInterval(function () {
+                // 判断页面所有资源已加载完毕
+                if (document.readyState === "complete") {
+                  that.getHotChartData(res);//执行方法
+                  window.clearInterval(timer);
+                }
+              }, 800)
             })
             })
           }
           }
         }
         }
@@ -1025,7 +1035,13 @@ var vNode = {
         if (data && data.length > 0) {
         if (data && data.length > 0) {
           that.isShow.showScaleRate = true
           that.isShow.showScaleRate = true
           that.$nextTick(function(){
           that.$nextTick(function(){
-            that.getPieCharData(data)
+            var timer = setInterval(function () {
+              // 判断页面所有资源已加载完毕
+              if (document.readyState === "complete") {
+                that.getPieCharData(data);//执行方法
+                window.clearInterval(timer);
+              }
+            }, 800)
           })
           })
         }
         }
       },
       },
@@ -1801,6 +1817,11 @@ var vNode = {
             utils.goToCustomerPage()
             utils.goToCustomerPage()
           }
           }
         })
         })
+      },
+      onDtTextClick: function(type) {
+        if (type === 'customer') {
+          utils.goToCustomerPage()
+        }
       }
       }
   }
   }
 }
 }

+ 34 - 1
src/web/staticres/common-module/big-member/js/high_set.js

@@ -66,9 +66,11 @@ var highSet = new Vue({
         entName: ''
         entName: ''
       },
       },
       reqSign: 'bigmember',
       reqSign: 'bigmember',
+      // 备选项
       filterInitData: {
       filterInitData: {
         areaArr: [],
         areaArr: [],
-        industry: []
+        industry: [],
+        buyerClassArr: [],
       },
       },
       selectAreaList: ['全国'],
       selectAreaList: ['全国'],
       selectIndustryList: [],
       selectIndustryList: [],
@@ -278,6 +280,7 @@ var highSet = new Vue({
             loading.clear()
             loading.clear()
             _this.filterInitData.areaArr = res.data.areaArr || []
             _this.filterInitData.areaArr = res.data.areaArr || []
             _this.filterInitData.scopeArr = res.data.scopeArr || []
             _this.filterInitData.scopeArr = res.data.scopeArr || []
+            _this.filterInitData.buyerClassArr = res.data.buyerClassArr || []
             // _this.initSelector(res.data)
             // _this.initSelector(res.data)
           } else {
           } else {
             _this.showToast(res.error_msg)
             _this.showToast(res.error_msg)
@@ -340,6 +343,10 @@ var highSet = new Vue({
             _this.filterInitData.industry = data.scopeArr
             _this.filterInitData.industry = data.scopeArr
             _this.initProjectIndustrySelector(data.scopeArr)
             _this.initProjectIndustrySelector(data.scopeArr)
             break;
             break;
+          case 'buyerclass':
+            _this.filterInitData.buyerClassArr = data.buyerClassArr
+            _this.initBuyerClassSelector(data.buyerClassArr)
+            break;
           case 'start':
           case 'start':
             _this.startRange = _this.getCurFourYears()
             _this.startRange = _this.getCurFourYears()
             break;
             break;
@@ -416,6 +423,32 @@ var highSet = new Vue({
       this.$refs.industryCom.canClick = false
       this.$refs.industryCom.canClick = false
       // this.$refs.industryCom.setState(this.selectIndustryList)
       // this.$refs.industryCom.setState(this.selectIndustryList)
     },
     },
+    // 过滤采购单位类型
+    initBuyerClassSelector: function (data) {
+      if (!Array.isArray(data)) return
+      var map = {}
+      data.forEach(function (item) {
+        for (var key in buyerclassSourceMap) {
+          if (buyerclassSourceMap[key].indexOf(item) !== -1) {
+            if (map[key]) {
+              map[key].push(item)
+            } else {
+              map[key] = [item]
+            }
+          }
+        }
+      })
+      var arr = []
+      for (k in map) {
+        arr.push({
+          [k]: map[k]
+        })
+      }
+      // console.log(arr, '过滤好的信息类型数据')
+      this.$refs.buyerclassCom.getSourceList(arr)
+      this.$refs.buyerclassCom.canClick = false
+      this.$refs.buyerclassCom.setState(this.selectIndustryList)
+    },
     // 分析方式
     // 分析方式
     checkMatch: function (item) {
     checkMatch: function (item) {
       this.conf.match = item
       this.conf.match = item

BIN
src/web/staticres/common-module/collection/image/save-pic-bg.png


BIN
src/web/staticres/common-module/collection/image/subscribe-icon.png


BIN
src/web/staticres/common-module/collection/image/wx2.png


+ 56 - 4
src/web/staticres/common-module/collection/js/ent_portrait.js

@@ -94,7 +94,9 @@ var vNode = {
         list: [],
         list: [],
         count: 0, // 总共多少条数据
         count: 0, // 总共多少条数据
         pageSize: 5,
         pageSize: 5,
-        showGetNextButton: true
+        showGetNextButton: true,
+        total: 0,
+        updateTime: 0
       },
       },
       entPortraitInfo: {
       entPortraitInfo: {
         project_count: 0
         project_count: 0
@@ -305,6 +307,27 @@ var vNode = {
     },
     },
     isFreeOrNotLogin () {
     isFreeOrNotLogin () {
       return this.isFree
       return this.isFree
+    },
+    // 升级超级订阅文案:老版超级订阅用户、新版超级订阅(购买非全国)用户余额为0
+    updateVipStatus () {
+      var info = this.powerInfo
+      var isNoMember = info.memberStatus <= 0
+      var isOldVip = info.vipStatus > 0 && !info.viper
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus
+      var isNotAll = this.entvisit.provin !== -1
+      return (isOldVip || (isNewVip && isNotAll)) && isNoMember
+    },
+    // 联系客服文案:新版超级订阅(购买全国)用户余额为0、大会员自定义用户、商机管理用户
+    customerServiceStatus: function () {
+      var info = this.powerInfo
+      var memberCustom = this.conf.arr.indexOf(13) === -1 && info.memberStatus > 0
+      var isNewVip = info.vipStatus > 0 && info.viper && !this.surplus && this.entvisit.provin === -1
+      // 纯商机管理用户
+      var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
+      return memberCustom || isNewVip || entniche
+    },
+    noShowTip: function () {
+      return (!this.isFree && !this.updateVipStatus && !this.customerServiceStatus) || (this.isFree && this.canFreeTrial)
     }
     }
   },
   },
   methods: {
   methods: {
@@ -354,7 +377,7 @@ var vNode = {
         }
         }
         // 获取企业中标动态-13
         // 获取企业中标动态-13
         if (_this.conf._13) {
         if (_this.conf._13) {
-            _this.getProjectNews()
+            // _this.getProjectNews()
             _this.gotTab2 = true
             _this.gotTab2 = true
             console.log('获取企业中标动态...')
             console.log('获取企业中标动态...')
         }
         }
@@ -366,7 +389,8 @@ var vNode = {
           // }
           // }
         }
         }
         _this.gotTab2 = true
         _this.gotTab2 = true
-
+        // P396:所有用户均可获取企业中标动态
+        _this.getProjectNews()
       });
       });
     },
     },
     // 点击去开通记住tab栏下标
     // 点击去开通记住tab栏下标
@@ -621,6 +645,8 @@ var vNode = {
           if (res.error_code == 0) {
           if (res.error_code == 0) {
             _this.loading.clear()
             _this.loading.clear()
             _this.topProject.count = res.data.count
             _this.topProject.count = res.data.count
+            _this.topProject.total = res.data.count
+            _this.topProject.updateTime = new Date(Number(res.data.updateTime + '000')).pattern('yyyy-MM-dd')
             if (!res.data.list || res.data.list.length == 0) {
             if (!res.data.list || res.data.list.length == 0) {
               // 新加变量 判断中标动态有无数据 用于展示缺省页组件
               // 新加变量 判断中标动态有无数据 用于展示缺省页组件
               _this.show.dt = false
               _this.show.dt = false
@@ -901,7 +927,9 @@ var vNode = {
             if (res.data && res.data == 'success') {
             if (res.data && res.data == 'success') {
               _this.entInfo.follow = !_this.entInfo.follow
               _this.entInfo.follow = !_this.entInfo.follow
             }
             }
-
+            if(_this.entInfo.follow) {
+              _this.pointsTaskSuccessTip()
+            }
             if (!_this.entInfo.follow) {
             if (!_this.entInfo.follow) {
               history.back()
               history.back()
             }
             }
@@ -913,7 +941,20 @@ var vNode = {
           console.log(error)
           console.log(error)
         }
         }
       })
       })
+    }, // 赚剑鱼币任务完成提示
+    pointsTaskSuccessTip: function() {
+      // 获取剑鱼币任务信息
+      const from =  utils.getParam('from')
+      var point = utils.getParam('point') || 0
+      if(from && from === 'task'){
+        this.$toast({
+          message: `关注企业成功,获得${point}剑鱼币。`,
+          duration: 1500
+        })
+        utils.delUrlParam('from')
+      }
     },
     },
+
     // 初始化图标数据
     // 初始化图标数据
     initChartsData: function () {
     initChartsData: function () {
       var dataSet = this.entPortraitInfo
       var dataSet = this.entPortraitInfo
@@ -1474,6 +1515,17 @@ var vNode = {
         location.href = '/big/wx/page/customer'
         location.href = '/big/wx/page/customer'
       }
       }
     },
     },
+    onDtTextClick: function(type) {
+      if (type === 'customer') {
+        location.href = '/big/wx/page/customer'
+      } else if (type === 'update') {
+        //跳转清除旧套餐缓存,防止计算价格出错
+        sessionStorage.removeItem('vipSub_oldBuySet')
+        location.href = '/jy_mobile/common/order/create/svip?type=upgrade'
+      } else if (type === 'buy') {
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+      }
+    }
   }
   }
 }
 }
 var vueComponent = new Vue(vNode)
 var vueComponent = new Vue(vNode)

BIN
src/web/staticres/common-module/file-pack/images/dialog-bg.png


+ 100 - 33
src/web/staticres/common-module/file-pack/js/index-wx.js

@@ -96,7 +96,37 @@ var vm = new Vue({
       statusEnum: ['存续', '吊销', '停业', '撤销'],
       statusEnum: ['存续', '吊销', '停业', '撤销'],
       statusColors: ['#2CB7CA', '#F5AF5C', '#58A1E7', '#51CEA2'],
       statusColors: ['#2CB7CA', '#F5AF5C', '#58A1E7', '#51CEA2'],
       list: [],
       list: [],
-      ptype:""
+      ptype:"",
+      userPower: {
+        // 免费用户
+        isFree: false,
+        // 超级订阅(超级订阅默认一定有附件下载权益)
+        vipStatus: 0,
+        // 大会员
+        memberStatus: 0,
+        // 大会员power包含3, 则表示大会员有附件下载权益
+        power: []
+      },
+      // 附件下载相关权益信息
+      accountInfo: {
+        // 充值数量
+        purchaseNum: 0,
+        // 兑换数量
+        exchangeNum: 0,
+        // 超级订阅剩余权益个数
+        grantNum: 0,
+        // 免费数量(免费用户权益个数)
+        freeNum: 0
+      },
+      kfDialogShow: false,
+      // 二维码
+      QRCode: ''
+    }
+  },
+  computed: {
+    // 大会员是否拥有附件下载权益
+    hasDownloadPower () {
+      return this.userPower.power.indexOf(3) > -1
     }
     }
   },
   },
   created: function () {
   created: function () {
@@ -107,34 +137,78 @@ var vm = new Vue({
       this.curDate = new Date()
       this.curDate = new Date()
       this.minDate = new Date(2021, 0)
       this.minDate = new Date(2021, 0)
       this.maxTime = new Date(this.years, this.months - 1)
       this.maxTime = new Date(this.years, this.months - 1)
+      this.getUserPower()
       this.subPoint()
       this.subPoint()
       this.onLoad()
       this.onLoad()
-    	this.initHtml()
   },
   },
   methods: {
   methods: {
-	initHtml(){
-		if(this.ptype=="1"){
-			document.title = '采购单位画像记录'
-            typeof setHeaderTitle === 'function' ? setHeaderTitle(document.title) : null
-			$(".btns span").text("当月采购单位画像剩余数")
-			$(".emptytext").text("暂无采购单位画像记录")
-		}
-	},
-	getPType(paraName){
-      	let _this = this
-		var url = document.location.toString();
-	   var arrObj = url.split("?");
-	   if (arrObj.length > 1) {
-      	var arrPara = arrObj[1].split("&");
-      	var arr;
-      	for (var i = 0; i < arrPara.length; i++) {
-        	arr = arrPara[i].split("=");
-        	if (arr != null && arr[0] == paraName) {
-          	_this.ptype =  arr[1];
-        	}
-      	}
-    	}
-	},
+    // 获取用户权限
+    getUserPower() {
+      var _this = this
+      $.ajax({
+        url: '/bigmember/use/isAdd',
+        type: 'POST',
+        success: function (res) {
+          console.log(res)
+          if (res.data) {
+            var resData = res.data
+            _this.userPower.isFree = resData.isFree
+            _this.userPower.vipStatus = resData.vipStatus
+            _this.userPower.memberStatus = resData.memberStatus
+            _this.userPower.power = resData.power
+            // 客服二维码获取
+            if(resData.customers && resData.customers.length > 0 ){
+              resData.customers.forEach(function (ele) {
+                if (ele.vip) {
+                  _this.QRCode = ele.wxer
+                } else  {
+                  _this.QRCode = ele.wxer
+                }
+              })
+            }
+          }
+        }
+      })
+    },
+    // 超级订阅-了解详情
+    knowMore () {
+      location.href = '/weixin/frontPage/bigmember/free/perfect_info?source=wx_mine_member_attach_learnmore'
+    },
+    // 咨询客服
+    consultKf () {
+      this.kfDialogShow = true
+    },
+    // 去兑换
+    exchangeHandle() {
+      location.href = '/jy_mobile/points/my_points'
+    },
+    // 兑换明细
+    viewDetail () {
+      location.href = '/jy_mobile/fileRecord/exchange'
+    },
+    // 去充值
+    setBook() {
+      if(this.userPower && this.userPower.isFree){
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+        return
+      }
+      location.href = '/jy_mobile/common/order/create/filepack?type=0'
+    },
+    getPType(paraName){
+          let _this = this
+      var url = document.location.toString();
+       var arrObj = url.split("?");
+       if (arrObj.length > 1) {
+        	var arrPara = arrObj[1].split("&");
+        	var arr;
+        	for (var i = 0; i < arrPara.length; i++) {
+          	arr = arrPara[i].split("=");
+          	if (arr != null && arr[0] == paraName) {
+            	_this.ptype =  arr[1];
+          	}
+        	}
+      	}
+    },
     usedHised() {
     usedHised() {
       let _this = this
       let _this = this
       _this.pShow = true
       _this.pShow = true
@@ -152,6 +226,7 @@ var vm = new Vue({
           if (res.error_msg === '' && res.data && res.data.data) {
           if (res.error_msg === '' && res.data && res.data.data) {
             try {
             try {
               var tempInfo = res.data.data[0]
               var tempInfo = res.data.data[0]
+              this.accountInfo = tempInfo
               this.points.total = tempInfo.number
               this.points.total = tempInfo.number
             } catch (e) {
             } catch (e) {
               console.warn(e)
               console.warn(e)
@@ -305,14 +380,6 @@ var vm = new Vue({
     contractPerson() {
     contractPerson() {
       // location.href = '400-108-6670'
       // location.href = '400-108-6670'
       location.href = '/big/wx/page/customer'
       location.href = '/big/wx/page/customer'
-    },
-    setBook() {
-      var temp = {
-        wx: '/jy_mobile/common/order/create/filepack?type=0',
-        app: '/jy_mobile/common/order/create/filepack?type=0'
-      }
-      var isWeixin = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
-      location.href = temp[isWeixin ? 'wx' : 'app']
     }
     }
   }
   }
 })
 })

+ 140 - 19
src/web/staticres/common-module/file-pack/js/index.js

@@ -53,8 +53,8 @@ var vm = new Vue({
       minDate: '',
       minDate: '',
       maxTime: '',
       maxTime: '',
       points: {
       points: {
-    	total: 0,
-		usage: 0
+    	  total: 0,
+		    usage: 0
       },
       },
       years: '',
       years: '',
       months: '',
       months: '',
@@ -70,7 +70,40 @@ var vm = new Vue({
       statusEnum: ['存续', '吊销', '停业', '撤销'],
       statusEnum: ['存续', '吊销', '停业', '撤销'],
       statusColors: ['#2CB7CA', '#F5AF5C', '#58A1E7', '#51CEA2'],
       statusColors: ['#2CB7CA', '#F5AF5C', '#58A1E7', '#51CEA2'],
       list: [],
       list: [],
-      ptype: ""
+      ptype: "",
+      userPower: {
+        // 免费用户
+        isFree: false,
+        // 超级订阅(超级订阅默认一定有附件下载权益)
+        vipStatus: 0,
+        // 大会员
+        memberStatus: 0,
+        // 大会员power包含3, 则表示大会员有附件下载权益
+        power: []
+      },
+      // 附件下载相关权益信息
+      accountInfo: {
+        // 充值数量
+        purchaseNum: 0,
+        // 兑换数量
+        exchangeNum: 0,
+        // 超级订阅剩余权益个数
+        grantNum: 0,
+        // 免费数量(免费用户权益个数)
+        freeNum: 0
+      },
+      kfDialogShow: false,
+      // 二维码
+      QRCode: '',
+      // 保存图片是否成功
+      savePicSuccess: false,
+      picImgUrl: null
+    }
+  },
+  computed: {
+    // 大会员是否拥有附件下载权益
+    hasDownloadPower () {
+      return this.userPower.power.indexOf(3) > -1
     }
     }
   },
   },
   created: function () {
   created: function () {
@@ -81,19 +114,115 @@ var vm = new Vue({
     this.curDate = new Date()
     this.curDate = new Date()
     this.minDate = new Date(2021, 0)
     this.minDate = new Date(2021, 0)
     this.maxTime = new Date(this.years, this.months - 1)
     this.maxTime = new Date(this.years, this.months - 1)
+    this.getUserPower()
     this.subPoint()
     this.subPoint()
     this.onLoad()
     this.onLoad()
-    this.initHtml()
   },
   },
   methods: {
   methods: {
-    initHtml () {
-      if (this.ptype == "1") {
-        document.title = '采购单位画像记录'
-        typeof setHeaderTitle === 'function' ? setHeaderTitle(document.title) : null
-        $(".btns span").text("当月采购单位画像剩余数")
-        $(".emptytext").text("暂无采购单位画像记录")
+    // 获取用户权限
+    getUserPower() {
+      var _this = this
+      $.ajax({
+        url: '/bigmember/use/isAdd',
+        type: 'POST',
+        success: function (res) {
+          console.log(res)
+          if (res.data) {
+            var resData = res.data
+            _this.userPower.isFree = resData.isFree
+            _this.userPower.vipStatus = resData.vipStatus
+            _this.userPower.memberStatus = resData.memberStatus
+            _this.userPower.power = resData.power
+            // 客服二维码获取
+            if(resData.customers && resData.customers.length > 0 ){
+              resData.customers.forEach(function (ele) {
+                if (ele.vip) {
+                  _this.QRCode = ele.wxer
+                } else  {
+                  _this.QRCode = ele.wxer
+                }
+              })
+            }
+          }
+        }
+      })
+    },
+    // 超级订阅-了解详情
+    knowMore () {
+      var source = 'app_mine_member_attach_learnmore'
+      if(utils.$env.platform === 'h5') {
+        source = 'h5_mine_member_attach_learnmore'
+      }
+      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+    },
+    // 咨询客服
+    consultKf () {
+      this.kfDialogShow = true
+    },
+    // 保存二维码
+    savePicHandle () {
+      var _this = this
+      if(_this.savePicSuccess) return
+      var loading = _this.$toast.loading({ duration: 0, message: '保存中...' })
+      if(!_this.picImgUrl) {
+        $("#creat-img-box").append($('#QRCode-pic').clone().attr('id', 'clone-image'))
+        html2canvas(document.querySelector('#clone-image'), {
+          // allowTaint: true,
+          useCORS: true,
+          backgroundColor: null,
+          scale: 3,
+          imageTimeout: 30000,
+        }).then(canvas => {
+          var imgUrl = canvas.toDataURL('image/png');
+          imgUrl = imgUrl.replace('data:image/png;base64,', '')
+          _this.picImgUrl = imgUrl
+          $('#clone-image').remove()
+          try {
+            window.JyObj.savePic(imgUrl)
+            _this.$toast('图片已经保存~')
+            loading.clear()
+            setTimeout(() => {
+              _this.saveSuccess = false
+            }, 1500)
+          } catch (e) {
+            $('#clone-image').remove()
+            loading.clear()
+            _this.$toast('保存失败')
+            setTimeout(() => {
+              _this.saveSuccess = false
+            }, 1500)
+          }
+        })
+      }else {
+        try {
+          window.JyObj.savePic(_this.picImgUrl)
+          loading.clear()
+          _this.$toast('图片已经保存,快去分享吧~')
+        } catch (e) {
+          loading.clear()
+          _this.$toast('保存失败')
+        }
+        setTimeout(() => {
+          _this.saveSuccess = false
+        }, 1500)
       }
       }
     },
     },
+    // 去兑换
+    exchangeHandle() {
+      location.href = '/jy_mobile/points/my_points'
+    },
+    // 兑换明细
+    viewDetail () {
+      location.href = '/jy_mobile/fileRecord/exchange'
+    },
+    // 去充值
+    setBook() {
+      if(this.userPower && this.userPower.isFree){
+        location.href = '/jy_mobile/common/order/create/svip?type=buy'
+        return
+      }
+      location.href = '/jy_mobile/common/order/create/filepack?type=0'
+    },
     getPType (paraName) {
     getPType (paraName) {
       let _this = this
       let _this = this
       var url = document.location.toString();
       var url = document.location.toString();
@@ -126,8 +255,8 @@ var vm = new Vue({
           if (res.error_msg === '' && res.data && res.data.data) {
           if (res.error_msg === '' && res.data && res.data.data) {
             try {
             try {
               var tempInfo = res.data.data[0]
               var tempInfo = res.data.data[0]
+              this.accountInfo = tempInfo
               this.points.total = tempInfo.number
               this.points.total = tempInfo.number
-
             } catch (e) {
             } catch (e) {
               console.warn(e)
               console.warn(e)
             }
             }
@@ -285,14 +414,6 @@ var vm = new Vue({
       // } catch (error) {
       // } catch (error) {
       //   console.log(error)
       //   console.log(error)
       // }
       // }
-    },
-    setBook() {
-      var temp = {
-        wx: '/jy_mobile/common/order/create/filepack?type=0',
-        app: '/jy_mobile/common/order/create/filepack?type=0'
-      }
-      var isWeixin = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
-      location.href = temp[isWeixin ? 'wx' : 'app']
     }
     }
   }
   }
 })
 })

+ 0 - 27
src/web/staticres/common-module/history-push/js/historypush.js

@@ -762,19 +762,6 @@ var vm = new Vue({
           // 从页面移植来的
           // 从页面移植来的
           if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
           if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
             sessionStorage.removeItem('switch-product')
             sessionStorage.removeItem('switch-product')
-            setTimeout(function() {
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_36y1d8lbx9n",
-                    async: true
-                });
-                (window.slotbydup = window.slotbydup || []).push({
-                    id: "u6603902",
-                    container: "_061vbh43quq3",
-                    async: true
-                });
-            },1000)
-            _this.getAjaxAdv()
           }
           }
         }
         }
       })
       })
@@ -1088,20 +1075,6 @@ var vm = new Vue({
       this.$refs.industryItem.toggle(false)
       this.$refs.industryItem.toggle(false)
       this.$refs.moreDropdownItems.toggle(false)
       this.$refs.moreDropdownItems.toggle(false)
     },
     },
-    getAjaxAdv: function () {
-      $.ajax({
-        type: 'POST',
-        url: '/publicapply/adLeague/exposure',
-        data: {
-            client: 'APP',
-            id: 'ad6',
-            position: '订阅推送列表页'
-        },
-        success: function(res) {
-            // console.log(res)
-        }
-      })
-    },
     // 选择附件
     // 选择附件
     selectFileFn: function(item) {
     selectFileFn: function(item) {
       if (!this.screenShow) return
       if (!this.screenShow) return

+ 13 - 9
src/web/staticres/common-module/perfect-info/js/perfect-info.js

@@ -123,6 +123,10 @@ var tipMap = {
   article_collection: '重要项目一键创建标签收藏!请完善个人信息,为您匹配精准服务',
   article_collection: '重要项目一键创建标签收藏!请完善个人信息,为您匹配精准服务',
   // 标讯详情免费用户--免费体验
   // 标讯详情免费用户--免费体验
   article_member_freeuse: '请升级大会员无限制查看标讯、超前项目,优先对接项目负责人,抢占绝对先机!',
   article_member_freeuse: '请升级大会员无限制查看标讯、超前项目,优先对接项目负责人,抢占绝对先机!',
+  // 附件下载记录
+  app_mine_member_attach_learnmore: '请留下联系方式,我们会尽快联系您!部分招标公告信息等相关文件资料自主下载,帮助企业投标,客户分析、市场挖掘更高效。',
+  wx_mine_member_attach_learnmore: '请留下联系方式,我们会尽快联系您!部分招标公告信息等相关文件资料自主下载,帮助企业投标,客户分析、市场挖掘更高效。',
+  h5_mine_member_attach_learnmore: '请留下联系方式,我们会尽快联系您!部分招标公告信息等相关文件资料自主下载,帮助企业投标,客户分析、市场挖掘更高效。',
   member_attach: '请留下联系方式,我们会尽快联系您!体验附件下载特权,挖掘更多项目情报!',
   member_attach: '请留下联系方式,我们会尽快联系您!体验附件下载特权,挖掘更多项目情报!',
   member_freeuse: '请留下联系方式,我们会尽快联系您体验大会员全部功能!',
   member_freeuse: '请留下联系方式,我们会尽快联系您体验大会员全部功能!',
   month_: '请留下联系方式,我们会尽快联系您!体验市场分析周报/月报!',
   month_: '请留下联系方式,我们会尽快联系您!体验市场分析周报/月报!',
@@ -196,14 +200,14 @@ var tipMap = {
   app_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
   app_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
   wx_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
   wx_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
   h5_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
   h5_supermarket_details_IndustryFields:'请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
-  // 
+  //
   app_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a onclick="appcallPhone()" class="tips_tel">400-108-6670</a>',
   app_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a onclick="appcallPhone()" class="tips_tel">400-108-6670</a>',
   wx_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a href="tel:400-108-6670" class="tips_tel">400-108-6670</a>',
   wx_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a href="tel:400-108-6670" class="tips_tel">400-108-6670</a>',
   h5_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a href="tel:400-108-6670" class="tips_tel">400-108-6670</a>',
   h5_supermarket_details_AnalysisCase:'请留下您的联系方式,免费获取领域客户应用案例。如有其他业务需求请联系客服:<a href="tel:400-108-6670" class="tips_tel">400-108-6670</a>',
   // 标书制作
   // 标书制作
   bid_document_Introduction_page: '请留下联系方式,我们会尽快联系您!',
   bid_document_Introduction_page: '请留下联系方式,我们会尽快联系您!',
-  // 电信行业解决方案 
-  telecom_solution: '请留下您的信息,我们会尽快和您联系'
+  // 电信行业解决方案
+  telecom_solution: '请留下您的信息,我们会尽快和您联系',
 }
 }
 
 
 // 留资来源(数据库新增字段,记录留资对应的来源,之前未记录的不考虑,新增的source要记录)
 // 留资来源(数据库新增字段,记录留资对应的来源,之前未记录的不考虑,新增的source要记录)
@@ -375,6 +379,7 @@ var vNode = {
     },
     },
     getTipStr () {
     getTipStr () {
       var source = this.ajaxParams.source
       var source = this.ajaxParams.source
+      console.log(source)
       // 提示语
       // 提示语
       var infoText = ''
       var infoText = ''
       for (var key in tipMap) {
       for (var key in tipMap) {
@@ -395,7 +400,7 @@ var vNode = {
           if(source?.toLowerCase().indexOf('supermarket') > -1){
           if(source?.toLowerCase().indexOf('supermarket') > -1){
             this.moduleShow.data_requirement = true
             this.moduleShow.data_requirement = true
             this.moduleShow.email = true
             this.moduleShow.email = true
-          }  
+          }
         }
         }
 
 
         if (source.indexOf('_freeuser') > -1 && infoText.indexOf('【') > -1) {
         if (source.indexOf('_freeuser') > -1 && infoText.indexOf('【') > -1) {
@@ -425,7 +430,6 @@ var vNode = {
             _that.moduleShow[k] = false
             _that.moduleShow[k] = false
         }
         }
       }
       }
-
       switch (source) {
       switch (source) {
         case 'article_collection': {
         case 'article_collection': {
           hideLabel()
           hideLabel()
@@ -470,7 +474,7 @@ var vNode = {
         case 'h5_DataSupermarket_Customization':
         case 'h5_DataSupermarket_Customization':
         case 'app_supermarket_details_customization':
         case 'app_supermarket_details_customization':
         case 'wx_supermarket_details_customization':
         case 'wx_supermarket_details_customization':
-        case 'h5_supermarket_details_customization': 
+        case 'h5_supermarket_details_customization':
         case 'h5_DataSupermarket_IndustryFields':
         case 'h5_DataSupermarket_IndustryFields':
         case 'app_DataSupermarket_IndustryFields':
         case 'app_DataSupermarket_IndustryFields':
         case 'wx_DataSupermarket_IndustryFields':
         case 'wx_DataSupermarket_IndustryFields':
@@ -1159,7 +1163,7 @@ var vNode = {
                 case 'h5_DataSupermarket_Customization':
                 case 'h5_DataSupermarket_Customization':
                 case 'app_supermarket_details_customization':
                 case 'app_supermarket_details_customization':
                 case 'wx_supermarket_details_customization':
                 case 'wx_supermarket_details_customization':
-                case 'h5_supermarket_details_customization': 
+                case 'h5_supermarket_details_customization':
                 case 'h5_DataSupermarket_IndustryFields':
                 case 'h5_DataSupermarket_IndustryFields':
                 case 'app_DataSupermarket_IndustryFields':
                 case 'app_DataSupermarket_IndustryFields':
                 case 'wx_DataSupermarket_IndustryFields':
                 case 'wx_DataSupermarket_IndustryFields':
@@ -1300,10 +1304,10 @@ var vNode = {
       'h5_supermarket_details_AnalysisCase'
       'h5_supermarket_details_AnalysisCase'
       ]
       ]
       if(notit_group_list.includes(source)){
       if(notit_group_list.includes(source)){
-     
+
         this.notit_group = true
         this.notit_group = true
       } else {
       } else {
-    
+
         this.notit_group = false
         this.notit_group = false
       }
       }
     },
     },

+ 7 - 0
src/web/staticres/common-module/public/js/utils.js

@@ -197,6 +197,13 @@ var utils = {
     r = null;
     r = null;
     return context == null || context == '' || context == 'undefined' ? '' : context;
     return context == null || context == '' || context == 'undefined' ? '' : context;
   },
   },
+  // 移除url参数,但是不刷新页面
+  delUrlParam: function (name){
+    var href = window.location.href;
+    const e = eval(`/&?${name}=[^&#]*/g`);
+    href = href.replace(e, '');
+    history.replaceState('','',href);// replaceState方法不会触发页面刷新,只是导致history对象发生变化,地址栏
+  },
   // 取[m, n]随机数
   // 取[m, n]随机数
   getRandomNumber: function (min, max) {
   getRandomNumber: function (min, max) {
     return Math.floor(Math.random() * (max - min + 1) + min);
     return Math.floor(Math.random() * (max - min + 1) + min);

BIN
src/web/staticres/common-module/task/frame.png


BIN
src/web/staticres/common-module/task/task-app.png


BIN
src/web/staticres/common-module/task/task-bdsjh.png


BIN
src/web/staticres/common-module/task/task-bdyx.png


Some files were not shown because too many files changed in this diff