Răsfoiți Sursa

Merge remote-tracking branch 'origin/dev_4.8.33_wh' into dev_4.8.33_wh

# Conflicts:
#	src/config.json
#	src/go.mod
#	src/go.sum
#	src/jfw/modules/app/src/config.yaml
#	src/jfw/modules/app/src/db.json
#	src/jfw/modules/app/src/go.mod
#	src/jfw/modules/app/src/go.sum
WH01243 2 ani în urmă
părinte
comite
e62cd89bb4
77 a modificat fișierele cu 2099 adăugiri și 2862 ștergeri
  1. 182 185
      src/config.json
  2. 5 4
      src/go.mod
  3. 15 8
      src/go.sum
  4. 50 21
      src/jfw/front/classificationTag.go
  5. 13 1
      src/jfw/front/entsearch.go
  6. 6 28
      src/jfw/front/frontRouter.go
  7. 7 0
      src/jfw/front/pcIndex.go
  8. 139 86
      src/jfw/front/shorturl.go
  9. 3 3
      src/jfw/front/swordfish.go
  10. 2 0
      src/jfw/modules/app/src/app/filter/loginfilter.go
  11. 1 1
      src/jfw/modules/app/src/app/front/bigMember.go
  12. 47 20
      src/jfw/modules/app/src/app/front/shorturl.go
  13. 2 2
      src/jfw/modules/app/src/app/front/swordfish.go
  14. 11 0
      src/jfw/modules/app/src/config.json
  15. 0 1
      src/jfw/modules/app/src/config.yaml
  16. 56 60
      src/jfw/modules/app/src/db.json
  17. 55 44
      src/jfw/modules/app/src/go.mod
  18. 86 471
      src/jfw/modules/app/src/go.sum
  19. 43 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  20. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/images/no-login-content.png
  21. 8 5
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  22. 3 4
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_introduce.html
  23. 7 15
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  24. 41 7
      src/jfw/modules/bigmember/src/entity/portrait.go
  25. 4 4
      src/jfw/modules/bigmember/src/entity/portrait_manager.go
  26. 1 0
      src/jfw/modules/bigmember/src/entity/portrait_screen.go
  27. 50 44
      src/jfw/modules/bigmember/src/go.mod
  28. 79 472
      src/jfw/modules/bigmember/src/go.sum
  29. 1 0
      src/jfw/modules/bigmember/src/service/chatShare/obtainDetails.go
  30. 15 14
      src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go
  31. 7 2
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  32. 2 2
      src/jfw/modules/bigmember/src/service/report/marketAnalysis.go
  33. 6 0
      src/jfw/modules/bigmember/src/service/report/report.go
  34. 2 1
      src/jfw/modules/bigmember/src/service/search/search.go
  35. 51 45
      src/jfw/modules/publicapply/src/go.mod
  36. 81 473
      src/jfw/modules/publicapply/src/go.sum
  37. 1 1
      src/jfw/modules/publicapply/src/npsValue/service/action.go
  38. 51 44
      src/jfw/modules/subscribepay/src/go.mod
  39. 86 498
      src/jfw/modules/subscribepay/src/go.sum
  40. 5 5
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  41. BIN
      src/web/staticres/big-member/image/new_info/item-tb1.png
  42. BIN
      src/web/staticres/big-member/image/new_info/item-tb2-1.png
  43. BIN
      src/web/staticres/big-member/image/new_info/item-tb2-2.png
  44. BIN
      src/web/staticres/big-member/image/new_info/item-tb2-3.png
  45. BIN
      src/web/staticres/big-member/image/new_info/item-tb2-4.png
  46. BIN
      src/web/staticres/big-member/image/new_info/item-tb2-5.png
  47. 2 1
      src/web/staticres/big-member/js/unit_portrayal.js
  48. 7 1
      src/web/staticres/common-module/collection/css/index.css
  49. 8 2
      src/web/staticres/common-module/collection/js/buyer-example.js
  50. 45 0
      src/web/staticres/common-module/public/js/setTdk.js
  51. BIN
      src/web/staticres/common-module/vipsubscribe/image/info/vip_vs.png
  52. 21 9
      src/web/staticres/css/pc/index.css
  53. 1 1
      src/web/staticres/css/selector/selector.css
  54. BIN
      src/web/staticres/images/index/new/bg.png
  55. BIN
      src/web/staticres/images/index/new/register-guide.png
  56. 4 0
      src/web/staticres/js/login.js
  57. 247 79
      src/web/staticres/js/pur-search-index-pc.js
  58. 5 1
      src/web/staticres/js/selector/no-data-pc.js
  59. 5 5
      src/web/staticres/js/superSearch.js
  60. 3 1
      src/web/staticres/pccss/public-nav-1200.css
  61. 100 18
      src/web/staticres/pccss/pur-search-index-pc.css
  62. 5 1
      src/web/staticres/public-pc/css/pc-bottom.css
  63. 25 0
      src/web/staticres/public-pc/js/header-nav.js
  64. 29 2
      src/web/staticres/tags/css/no-login-detail.css
  65. BIN
      src/web/staticres/tags/images/bg.png
  66. 6 6
      src/web/staticres/tags/js/no-login-detail.js
  67. 6 6
      src/web/templates/big-member/pc/page_tb.html
  68. 13 0
      src/web/templates/frontRouter/pc/entpc/sess/index.html
  69. 13 0
      src/web/templates/frontRouter/pc/page_big_pc/sess/index.html
  70. 75 1
      src/web/templates/frontRouter/pc/serviceSystem/free/index.html
  71. 24 4
      src/web/templates/pc/index.html
  72. 18 1
      src/web/templates/pc/notin.html
  73. 187 105
      src/web/templates/pc/pursearchindex.html
  74. 3 0
      src/web/templates/pc/subscribe_new.html
  75. 3 0
      src/web/templates/pc/supsearch.html
  76. 19 43
      src/web/templates/pc/tags/detail.html
  77. 1 2
      src/web/templates/weixin/vipsubscribe/vip_introduce.html

Fișier diff suprimat deoarece este prea mare
+ 182 - 185
src/config.json


+ 5 - 4
src/go.mod

@@ -6,7 +6,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230621114846-e9533ffc8ba0
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627072535-2f1a67f51167
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/fsnotify/fsnotify v1.6.0
@@ -117,15 +117,15 @@ require (
 	go.uber.org/zap v1.24.0 // indirect
 	golang.org/x/crypto v0.6.0 // indirect
 	golang.org/x/net v0.10.0 // indirect
-	golang.org/x/oauth2 v0.6.0 // indirect
+	golang.org/x/oauth2 v0.7.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
 	golang.org/x/sys v0.8.0 // indirect
 	golang.org/x/term v0.8.0 // indirect
 	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
-	google.golang.org/grpc v1.55.0 // indirect
+	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
+	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -135,6 +135,7 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect

+ 15 - 8
src/go.sum

@@ -9,8 +9,13 @@ app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTm
 app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/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/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230621114846-e9533ffc8ba0 h1:sKWgJriRTdxEuNkzAooMAjs+2bPu1mq9Q493aMA98oI=
-app.yhyue.com/moapp/jypkg v0.0.0-20230621114846-e9533ffc8ba0/go.mod h1:Ize93SJEPkBR0Tz8PM2KTJK3bpzlD/qp1JwJ4kdmlss=
+<<<<<<<<< Temporary merge branch 1
+app.yhyue.com/moapp/jypkg v0.0.0-20230627072535-2f1a67f51167 h1:WO3F0w/jqPj5fS30rmzCvmN3F/aLmtx51Pfcps6y7+E=
+app.yhyue.com/moapp/jypkg v0.0.0-20230627072535-2f1a67f51167/go.mod h1:JBkMSnaOQbfV80laTPwjzjfP6nLXOQpJBaNUdvKV2tw=
+=========
+app.yhyue.com/moapp/jypkg v0.0.0-20230627054426-ae1e762303e9 h1:7IMkKYkuiUCRravDJFHgHSx1zixWN/AoduUhNs+yMoI=
+app.yhyue.com/moapp/jypkg v0.0.0-20230627054426-ae1e762303e9/go.mod h1:JBkMSnaOQbfV80laTPwjzjfP6nLXOQpJBaNUdvKV2tw=
+>>>>>>>>> Temporary merge branch 2
 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=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -1043,8 +1048,8 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
-golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
+golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
+golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1312,8 +1317,8 @@ google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxH
 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA=
-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -1342,8 +1347,8 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5
 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
 google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
-google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
+google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ=
+google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1420,6 +1425,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-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=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 h1:lZ0XCzRDSOBaoJczQudZ3KZhRs4zm5sjboDpwuYZUVM=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602/go.mod h1:Jjhym3U0MFdSgeafHPm758NefCPZpekg2sWPh6Gy6Jk=
 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/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

+ 50 - 21
src/jfw/front/classificationTag.go

@@ -1,27 +1,28 @@
 package front
 
 import (
-	"encoding/json"
-	"fmt"
-	"jy/src/jfw/config"
-	"jy/src/jfw/jyutil"
-	"jy/src/jfw/paging"
-	"log"
-	"math"
-	"math/rand"
-	"strconv"
-	"sync"
-	"time"
+    qu "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/common/src/qfw/util/bidsearch"
+    "app.yhyue.com/moapp/jypkg/public"
+    "encoding/json"
+    "fmt"
+    "jy/src/jfw/config"
+    "jy/src/jfw/jyutil"
+    "jy/src/jfw/paging"
+    "log"
+    "math"
+    "math/rand"
+    "strconv"
+    "sync"
+    "time"
 
-	"net/http"
+    "net/http"
 
-	qu "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/encrypt"
-	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
-	"app.yhyue.com/moapp/jybase/redis"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
-	"app.yhyue.com/moapp/jypkg/public"
+    "app.yhyue.com/moapp/jybase/date"
+    "app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 )
 
 type KeyType struct {
@@ -271,6 +272,34 @@ func GetIndustry(industryHref string) []map[string]interface{} {
 	return m
 }
 
+type BuyerList struct {
+	Name string `json:"name"`
+	Url  string `json:"url"`
+}
+
+// 热门采购单位
+func HotBuyerList(entIsNew bool) []*BuyerList {
+	// 使用当前时间作为随机数生成器的种子
+	randGen := rand.New(rand.NewSource(time.Now().UnixNano()))
+	// 获取一个范围在 [0, 100) 的随机整数
+	start := randGen.Intn(100)
+	buyerQuery := fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "name"}}]}},"from": %d,"size": %d}`, start, 200)
+	log.Println("buyerQuery:", buyerQuery)
+	data := elastic.Get("buyer", "buyer", buyerQuery)
+	if len(*data) > 0 {
+		var buyerList []*BuyerList
+		for _, b := range *data {
+			name := qu.ObjToString(b["name"])
+			buyerList = append(buyerList, &BuyerList{
+				Name: name,
+				Url:  qu.If(entIsNew, fmt.Sprintf("/entpc/unit_portrayal/%s", name), fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal/%s", name)).(string),
+			})
+		}
+		return buyerList
+	}
+	return nil
+}
+
 func GetIncludedInfo() map[string]interface{} {
 	if bytes, err := redis.GetBytes(RedisNameNew, "jyIncludedInfo"); err == nil && bytes != nil {
 		rData := map[string]interface{}{}
@@ -393,8 +422,8 @@ func NewIndexbids(session *httpsession.Session, r *http.Request) []map[string]in
 	return *lists
 }
 
-//格式输出数据
-//亿亿、万亿、亿、万 只有一位的时候保留1位小数点 两位及以上不保留  1.1亿  11亿
+// 格式输出数据
+// 亿亿、万亿、亿、万 只有一位的时候保留1位小数点 两位及以上不保留  1.1亿  11亿
 func formdataNum(num int64) (floatNum float64, unit string) {
 	s_num := strconv.Itoa(int(num))
 	len_m := len(s_num)

+ 13 - 1
src/jfw/front/entsearch.go

@@ -1,6 +1,7 @@
 package front
 
 import (
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"fmt"
 	"jy/src/jfw/config"
 	"strconv"
@@ -47,6 +48,17 @@ func (e *Entsearch) PushSearchIndex() error {
 	if len(shareid) == 0 {
 		shareid = "10"
 	}
+	e.T["isLogin"] = 0
+	if userId, _ := e.GetSession("userId").(string); userId != "" {
+		userInfo := jy.GetVipState(e.Session(), *config.Middleground, userId)
+		e.T["isVip"] = userInfo.VipState > 0
+		e.T["isMember"] = userInfo.BigMember > 0
+		e.T["isEntniche"] = userInfo.EntMember > 0
+		e.T["isEntnicheNew"] = userInfo.IsNewEnt
+		e.T["isEntService"] = userInfo.EntService
+		e.T["isLogin"] = 1
+	}
+	e.T["login"] = e.Session().Get("user")
 	e.T["shareid"] = se.EncodeString(shareid)
 	e.T["searchvalue"] = e.GetString("searchvalue")
 	e.T["logid"] = config.Seoconfig["jyzbqyss"].(string)
@@ -170,7 +182,7 @@ func getSearchResult(searchvalue, area string, minprice, maxprice float64, curre
 	return count, totalPage, list
 }
 
-//异步请求方法
+// 异步请求方法
 func (e *Entsearch) PcSearchZbqyAjax() error {
 	defer util.Catch()
 	userid := util.ObjToString(e.GetSession("userId"))

+ 6 - 28
src/jfw/front/frontRouter.go

@@ -3,11 +3,11 @@ package front
 import (
 	"fmt"
 	"jy/src/jfw/config"
+	"jy/src/jfw/jyutil"
 	"jy/src/jfw/wx"
 	"net/url"
 	"regexp"
-
-	"jy/src/jfw/jyutil"
+	"strings"
 
 	"app.yhyue.com/moapp/jypkg/public"
 
@@ -190,6 +190,8 @@ func (this *CommonRouter) EntpcPage(htmlPage string) error {
 	return this.doEntpcPage()
 }
 func (this *CommonRouter) doEntpcPage() error {
+	//P325 采购单位搜索调整,未登录用户也能访问采购单位画像
+	///entpc/unit_portrayal/天津银行股份有限公司
 	userid, _ := this.GetSession("userId").(string)
 	if userid == "" {
 		return this.Redirect("/notin/page")
@@ -212,34 +214,10 @@ var bigVipFreePageReg = regexp.MustCompile(`set_.*|free|unit_portrayal|analysis_
 func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	//page := pageSign
 	userid, _ := this.GetSession("userId").(string)
-	//没有登录跳转登录页面
-	if userid == "" {
+	//没有登录跳转登录页面(采购单位画像除外)
+	if !strings.Contains(pageSign, "unit_portrayal") && userid == "" {
 		return this.Redirect("/notin/page")
 	}
-	//没有购买大会员跳转大会员介绍页(PC端订阅列表 所有用户都能进去)
-	//if !strings.HasPrefix(pageSign, "svip/ent_ser_portrait") && pageSign != "big_subscribe" {
-	// for _, v := range strings.Split(pageSign, "/") {
-	// 	if v == "" || v == "desktop" {
-	// 		continue
-	// 	}
-	// 	pageSign = v
-	// 	break
-	// }
-	//bigBaseMsg := jy.GetBigVipUserBaseMsg(userid, public.Mysql, public.MQFW)
-	// if !bigVipFreePageReg.MatchString(pageSign) && pageSign != "index" {
-	// 	if bigBaseMsg.Status <= 0 && bigBaseMsg.Vip_BuySet.Upgrade != 1 {
-	// 		return this.Redirect("/big/page/index")
-	// 	}
-	// 	//大会员页面权限判断
-	// 	if pageSign != "" && !bigBaseMsg.CheckBigVipFrontPower(pageSign) {
-	// 		return this.Redirect("/big/page/index")
-	// 	}
-	// }
-	//限制超级订阅用户不能进入购买页
-	//if page == "free/svip/buy" && bigBaseMsg.VipStatus > 0 && types != "upgrade" {
-	//	return this.Redirect("/front/subscribe.html")
-	//}
-	//}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 }
 

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

@@ -107,6 +107,11 @@ func (m *PcIndex) NewSordfish(flag string) error {
 		} else if flag == "tmp" {
 			return m.Render("/pc/index_tmp.html", &m.T)
 		} else {
+			var entIsNew bool
+			if m.GetSession("userId") != "" {
+				bigBaseMsg := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
+				entIsNew = bigBaseMsg.EntIsNew
+			}
 			//按地区、信息类型、热门招标
 			for k, v := range RegionAndInformationAndTender() {
 				m.T[k] = v
@@ -117,6 +122,8 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["recommend"] = ContentRecommendation()
 			//推荐标讯专区
 			m.T["recommendBeacon"] = RecommendationBeacon()
+			//热门采购单位
+			m.T["hotBuyers"] = HotBuyerList(entIsNew)
 			m.T["hasLogin"] = util.ObjToString(m.GetSession("userId")) != ""
 			m.T["includedInfo"] = GetIncludedInfo()
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)

+ 139 - 86
src/jfw/front/shorturl.go

@@ -4,7 +4,6 @@ import (
 	"database/sql"
 	"errors"
 	"fmt"
-	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/config"
 	"jy/src/jfw/wx"
 	"log"
@@ -12,18 +11,17 @@ import (
 	"net/url"
 	"strconv"
 
+	"github.com/gogf/gf/v2/util/gconv"
+
 	"jy/src/jfw/jyutil"
 
 	"app.yhyue.com/moapp/jypkg/public"
 
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/date"
-
-	. "app.yhyue.com/moapp/jybase/mongodb"
+	mg "app.yhyue.com/moapp/jybase/mongodb"
 
 	elastic "app.yhyue.com/moapp/jybase/es"
-	"app.yhyue.com/moapp/jybase/fsw"
-
 	"regexp"
 	"strings"
 	"time"
@@ -44,43 +42,44 @@ type Short struct {
 	nologinArticle xweb.Mapper `xweb:"/nologin/(\\w+)/(.*).html"`   //([pm]) 无需登录
 }
 
-var mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
-var DateFullLayout = "2006-01-02 15:04:05"
-var Map_stype = map[string]bool{
-	"content":         true,
-	"entservice":      true,
-	"bdprivate":       true,
-	"mailprivate":     true,
-	"bdcontent":       true,
-	"indexcontent":    true,
-	"advancedProject": true,
-}
-
-var TypeCodeMap = map[string]string{
-	"拟建":   "拟建项目",
-	"采购意向": "采购意向",
-	"预告":   "招标预告",
-	"预审":   "资格预审",
-	"预审结果": "资格预审结果",
-	"论证意见": "论证意见",
-	"需求公示": "需求公示",
-	"招标":   "公开招标",
-	"邀标":   "邀请招标",
-	"询价":   "询价采购",
-	"竞谈":   "竞争性谈判",
-	"单一":   "单一来源采购",
-	"竞价":   "竞价公告",
-	"变更":   "变更公告",
-	"中标":   "中标公示",
-	"成交":   "成交公告",
-	"废标":   "废标公告",
-	"流标":   "流标公告",
-	"合同":   "合同公告信息",
-	"验收":   "验收公告信息",
-	"违规":   "违规信息",
-}
-
-var seoAgentReg = regexp.MustCompile("Baiduspider|360Spider|bingbot|Googlebot")
+var (
+	mobileReg      = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
+	DateFullLayout = "2006-01-02 15:04:05"
+	Map_stype      = map[string]bool{
+		"content":         true,
+		"entservice":      true,
+		"bdprivate":       true,
+		"mailprivate":     true,
+		"bdcontent":       true,
+		"indexcontent":    true,
+		"advancedProject": true,
+	}
+	seoAgentReg      = regexp.MustCompile("Baiduspider|360Spider|bingbot|Googlebot")
+	detailNeedMosaic map[string]interface{}
+	TypeCodeMap      = map[string]string{
+		"拟建":   "拟建项目",
+		"采购意向": "采购意向",
+		"预告":   "招标预告",
+		"预审":   "资格预审",
+		"预审结果": "资格预审结果",
+		"论证意见": "论证意见",
+		"需求公示": "需求公示",
+		"招标":   "公开招标",
+		"邀标":   "邀请招标",
+		"询价":   "询价采购",
+		"竞谈":   "竞争性谈判",
+		"单一":   "单一来源采购",
+		"竞价":   "竞价公告",
+		"变更":   "变更公告",
+		"中标":   "中标公示",
+		"成交":   "成交公告",
+		"废标":   "废标公告",
+		"流标":   "流标公告",
+		"合同":   "合同公告信息",
+		"验收":   "验收公告信息",
+		"违规":   "违规信息",
+	}
+)
 
 func (s *Short) Article(stype, id string) error {
 	userId, _ := s.GetSession("userId").(string)
@@ -211,6 +210,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			ssOpenid := s.Session().Get("s_m_openid")
 			po, bo, wo, obj := pcVRT(sid, industry, stype, true)
 			if obj != nil && len(obj) > 0 {
+
 				if len(po) > 0 {
 					s.T["projectOther"] = po
 				}
@@ -276,7 +276,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 	if userId == "" && ssOpenid != nil {
 		res, ok = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid, "s_unionid": bson.M{"$ne": ssOpenid}}, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1,"l_vip_starttime":1}`)
 		if ok {
-			userId = BsonIdToSId((*res)["_id"])
+			userId = mg.BsonIdToSId((*res)["_id"])
 		}
 	} else if userId != "" {
 		//判断用户是否是vip
@@ -703,7 +703,7 @@ func UserPermission(userId string, ssOpenid interface{}) (bool, bool, bool) {
 	)
 	if userId == "" && ssOpenid != nil {
 		res, _ = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid, "s_unionid": bson.M{"$ne": ssOpenid}}, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1}`)
-		userId = BsonIdToSId((*res)["_id"])
+		userId = mg.BsonIdToSId((*res)["_id"])
 	} else {
 		//判断用户是否是vip
 		res = jyutil.Compatible.Select(userId, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1}`)
@@ -911,7 +911,7 @@ func getwinnertel(company interface{}) string {
 func GetUserId(openid string) string {
 	data, ok := public.MQFW.FindOne("user", map[string]interface{}{"s_m_openid": openid})
 	if data != nil && len(*data) > 0 && ok {
-		userid := BsonIdToSId((*data)["_id"])
+		userid := mg.BsonIdToSId((*data)["_id"])
 		return userid
 	}
 	return ""
@@ -954,30 +954,57 @@ func ReplaceStringByRegex(str, rule, replace string) (string, error) {
 // 未登录用户进行数据过滤 name 配置文件
 func Filter(obj map[string]interface{}) map[string]interface{} {
 	detail := fmt.Sprint(obj["detail"])
-	mosaicText := util.ObjToString(config.Sysconfig["detailMosaicTxt"])
-	for k, _ := range obj {
-		needMosaic, _ := config.Sysconfig["needMosaic"].(map[string]interface{})
-		if ok, _ := needMosaic[k].(bool); ok {
-			if util.ObjToString(obj[k]) != "" {
-				detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), mosaicText)
-				//敏感词过滤
+	mosaicText := fmt.Sprintf(`<span style="color:#2ABED1;">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	detailText := fmt.Sprintf(`<span class="noLoginMosaic" style="color: #2ABED1;">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	//for k, _ := range obj {
+	//	if ok, _ := detailNeedMosaic[k].(bool); ok {
+	//		if util.ObjToString(obj[k]) != "" {
+	//			detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), detailText)
+	//		}
+	//		//中标企业信息
+	//		if k == "winnerMap" && obj[k] != nil {
+	//			winnerNewMap := map[string]interface{}{}
+	//			winnerMap := util.ObjToMap(obj[k])
+	//			for _, wv := range *winnerMap {
+	//				winnerNewMap[mosaicText] = wv
+	//			}
+	//			obj[k] = winnerNewMap
+	//		} else {
+	//			obj[k] = mosaicText
+	//		}
+	//	}
+	//}
+	//
+	for dk, dv := range detailNeedMosaic {
+		if !dv.(bool) {
+			continue
+		}
+		//if util.ObjToString(obj[dk]) != "" {
+		//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
+		//}
+		if util.InterfaceToStr(obj[dk]) != "" {
+			value, b := obj[dk].(float64)
+			if b {
+				replaceStr := fmt.Sprintf("%v", int64(value))
+				detail = strings.ReplaceAll(detail, replaceStr, detailText)
+			} else {
+				detail = strings.ReplaceAll(detail, util.InterfaceToStr(obj[dk]), detailText)
 			}
-			if k == "winnerMap" {
-				winnerMap, _ := obj[k].(map[string]interface{})
-				mosaicMap := map[string]interface{}{}
-				for i := 0; i < len(winnerMap); i++ {
-					mosaicMap[mosaicText] = mosaicText
+		}
+		//中标企业信息
+		if dk == "winnerMap" {
+			winnerNewMap := map[string]interface{}{}
+			if obj[dk] != nil {
+				winnerMap := util.ObjToMap(obj[dk])
+				for _, wv := range *winnerMap {
+					winnerNewMap[mosaicText] = wv
 				}
-				obj["winnerMap"] = mosaicMap
-			} else {
-				obj[k] = mosaicText
 			}
-
+			obj[dk] = winnerNewMap
+		} else {
+			obj[dk] = mosaicText
 		}
 	}
-	//数字打码
-	detail = RegDetail(detail)
-	detail = fsw.Repl(detail)
 	obj["detail"] = detail
 	return obj
 }
@@ -985,31 +1012,53 @@ func Filter(obj map[string]interface{}) map[string]interface{} {
 // 未登录用户进行数据过滤 name 配置文件
 func SearchFilter(obj map[string]interface{}) map[string]interface{} {
 	//detail := fmt.Sprint(obj["detail"])
-	mosaicText := util.ObjToString(config.Sysconfig["detailMosaicTxt"])
-	for k, _ := range obj {
-		needMosaic, _ := config.Sysconfig["searchMosaic"].(map[string]interface{})
-		if ok, _ := needMosaic[k].(bool); ok {
-			//if util.ObjToString(obj[k]) != "" {
-			//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), mosaicText)
-			//	//敏感词过滤
-			//}
-			if k == "winnerMap" {
-				winnerMap, _ := obj[k].(map[string]interface{})
-				mosaicMap := map[string]interface{}{}
-				for i := 0; i < len(winnerMap); i++ {
-					mosaicMap[mosaicText] = mosaicText
-				}
-				obj["winnerMap"] = mosaicMap
-			} else {
-				obj[k] = mosaicText
-			}
-
-		}
-	}
+	//mosaicText := fmt.Sprintf(`<span style="cursor:pointer;">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	//for k, _ := range obj {
+	//	needMosaic, _ := config.Sysconfig["detailNeedMosaic"].(map[string]interface{})
+	//	if ok, _ := needMosaic[k].(bool); ok {
+	//		//if util.ObjToString(obj[k]) != "" {
+	//		//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), mosaicText)
+	//		//	//敏感词过滤
+	//		//}
+	//		if k == "winnerMap" {
+	//			winnerMap, _ := obj[k].(map[string]interface{})
+	//			mosaicMap := map[string]interface{}{}
+	//			for i := 0; i < len(winnerMap); i++ {
+	//				mosaicMap[mosaicText] = mosaicText
+	//			}
+	//			obj["winnerMap"] = mosaicMap
+	//		} else {
+	//			obj[k] = mosaicText
+	//		}
+	//
+	//	}
+	//}
 	//数字打码
 	//detail = RegDetail(detail)
 	//detail = fsw.Repl(detail)
 	//obj["detail"] = detail
+
+	if detailNeedMosaic == nil {
+		detailNeedMosaic, _ = config.Sysconfig["detailNeedMosaic"].(map[string]interface{})
+	}
+	for dk, dv := range detailNeedMosaic {
+		if !dv.(bool) {
+			continue
+		}
+		//中标企业信息
+		if dk == "winnerMap" {
+			winnerNewMap := map[string]interface{}{}
+			if obj[dk] != nil {
+				winnerMap := util.ObjToMap(obj[dk])
+				for _, wv := range *winnerMap {
+					winnerNewMap[util.ObjToString(config.Sysconfig["detailMosaic"])] = wv
+				}
+			}
+			obj[dk] = winnerNewMap
+		} else {
+			obj[dk] = util.ObjToString(config.Sysconfig["detailMosaic"])
+		}
+	}
 	return obj
 }
 
@@ -1023,6 +1072,9 @@ func (s *Short) NologinArticle(stype, id string) error {
 	if userId != "" { //已登录用户直接跳转至正常三级页
 		return s.LoginCommon(userId, stype, id)
 	}
+	if detailNeedMosaic == nil {
+		detailNeedMosaic, _ = config.Sysconfig["detailNeedMosaic"].(map[string]interface{})
+	}
 	return s.NologinCommon(userId, stype, id, sids[0])
 }
 
@@ -1040,7 +1092,7 @@ func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 		//s.T["keywords"] = s.GetString("kds")
 
 		s.DisableHttpCache()
-		po, bo, wo, obj := pcVRT(sid, industry, stype, false || false || false)
+		po, bo, wo, obj := pcVRT(sid, industry, stype, false)
 		if obj != nil && len(obj) > 0 {
 			if len(po) > 0 {
 				s.T["projectOther"] = po
@@ -1064,6 +1116,7 @@ func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 				obj = Filter(obj)
 				//obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(obj))
 			}
+			obj["agency"] = ""
 			if obj["publishtime"] != nil {
 				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
 			}

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

@@ -691,13 +691,13 @@ func wxvisitD(sid, userId, openId, content string, isPayUser bool) (objdata map[
 
 // wx pc obj字段统一处理
 func ObjData(isPayUser bool, sid, content string, lent int) (t bool, obj map[string]interface{}) {
-	brobj, ok := mongodb.Find("bidding_rec", bson.M{"s_id": sid}, `{"l_recoverydate":-1}`, public.MgoBiddingFields, false, 0, 1)
+	brobj, ok := mongodb.Find("bidding_rec", bson.M{"s_id": sid}, `{"l_recoverydate":-1}`, nil, false, 0, 1)
 	if ok && (*brobj) != nil && len(*brobj) == 1 && (*brobj)[0] != nil {
 		obj = (*brobj)[0]
 	} else {
-		aobj, ok := public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection, sid, public.MgoBiddingFields)
+		aobj, ok := public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection, sid, nil)
 		if ok && (aobj == nil || *aobj == nil || len(*aobj) == 0) {
-			aobj, ok = public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection_back, sid, public.MgoBiddingFields)
+			aobj, ok = public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection_back, sid, nil)
 		}
 		obj = *aobj
 	}

+ 2 - 0
src/jfw/modules/app/src/app/filter/loginfilter.go

@@ -26,6 +26,8 @@ var urls = []*regexp.Regexp{
 	regexp.MustCompile("^/jyapp/exhibition/.*"),
 	regexp.MustCompile("^/jyapp/bank/scheme"),
 	regexp.MustCompile("^/jyapp/datasmt"),
+	regexp.MustCompile("^/jyapp/big/page/unit_portrayal"),
+	regexp.MustCompile("^/jyapp/big/page/free_high_set"),
 }
 
 type loginFilter struct {

+ 1 - 1
src/jfw/modules/app/src/app/front/bigMember.go

@@ -16,7 +16,7 @@ type NewBigMemberAction struct {
 	powerClear     xweb.Mapper `xweb:"/jyapp/bigMember/powerClear"` //大会员清除redis 服务id缓存
 }
 
-var freePageReg = regexp.MustCompile(`full|landingPage|pro_follow_detail|buy_commit|push_setting_detail|land_setting|push_settings|contrast|orderdetail_.*|write_infor|init|set_.*|ontrial_commit|bid_.*|free_.*|ent_portrait|bigvip_subreport_.*|report_detail_.*|analysis_(search|filter)|client_*|pro_follow_list|report_analysis|report_table`)
+var freePageReg = regexp.MustCompile(`full|landingPage|pro_follow_detail|buy_commit|push_setting_detail|land_setting|push_settings|contrast|orderdetail_.*|write_infor|init|set_.*|ontrial_commit|bid_.*|free_.*|ent_portrait|bigvip_subreport_.*|report_detail_.*|analysis_(search|filter)|client_*|pro_follow_list|report_analysis|report_table|unit_portrayal`)
 
 func init() {
 	jy.InitBigVipService(public.Mysql)

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

@@ -15,7 +15,6 @@ import (
 
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
-	"app.yhyue.com/moapp/jybase/fsw"
 
 	//"math/rand"
 	. "jy/src/jfw/modules/app/src/app/jyutil"
@@ -371,30 +370,58 @@ func NoLoginArticle(stype, sid string) map[string]interface{} {
 // 未登录用户进行数据过滤
 func Filter(obj map[string]interface{}) map[string]interface{} {
 	detail := fmt.Sprint(obj["detail"])
-	mosaicText := util.ObjToString(config.Sysconfig["detailMosaicTxt"])
-	for k, _ := range obj {
-		needMosaic, _ := config.Sysconfig["needMosaic"].(map[string]interface{})
-		if ok, _ := needMosaic[k].(bool); ok {
-			if util.ObjToString(obj[k]) != "" {
-				detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), mosaicText)
-				//敏感词过滤
+	//mosaicText := fmt.Sprintf(`<span class="noLoginMosaic">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	mosaicText := fmt.Sprintf(`<span style="color: #2ABED1;">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	detailText := fmt.Sprintf(`<span class="noLoginMosaic" style="color: #2ABED1;">%s</span>`, util.ObjToString(config.Sysconfig["detailMosaic"]))
+	detailNeedMosaic, _ := config.Sysconfig["detailNeedMosaic"].(map[string]interface{})
+	//for k, _ := range obj {
+	//	if ok, _ := detailNeedMosaic[k].(bool); ok {
+	//		if util.ObjToString(obj[k]) != "" {
+	//			detail = strings.ReplaceAll(detail, util.ObjToString(obj[k]), detailText)
+	//		}
+	//		//中标企业信息
+	//		if k == "winnerMap" && obj[k] != nil {
+	//			winnerNewMap := map[string]interface{}{}
+	//			winnerMap := util.ObjToMap(obj[k])
+	//			for _, wv := range *winnerMap {
+	//				winnerNewMap[mosaicText] = wv
+	//			}
+	//			obj[k] = winnerNewMap
+	//		} else {
+	//			obj[k] = mosaicText
+	//		}
+	//	}
+	//}
+	for dk, dv := range detailNeedMosaic {
+		if !dv.(bool) {
+			continue
+		}
+		//if util.ObjToString(obj[dk]) != "" {
+		//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
+		//}
+		if util.InterfaceToStr(obj[dk]) != "" {
+			value, b := obj[dk].(float64)
+			if b {
+				replaceStr := fmt.Sprintf("%v", int64(value))
+				detail = strings.ReplaceAll(detail, replaceStr, detailText)
+			} else {
+				detail = strings.ReplaceAll(detail, util.InterfaceToStr(obj[dk]), detailText)
 			}
-			if k == "winnerMap" {
-				winnerMap, _ := obj[k].(map[string]interface{})
-				mosaicMap := map[string]interface{}{}
-				for i := 0; i < len(winnerMap); i++ {
-					mosaicMap[mosaicText] = mosaicText
+		}
+		//中标企业信息
+		if dk == "winnerMap" {
+			winnerNewMap := map[string]interface{}{}
+			if obj[dk] != nil {
+				winnerMap := util.ObjToMap(obj[dk])
+				for _, wv := range *winnerMap {
+					winnerNewMap[mosaicText] = wv
 				}
-				obj["winnerMap"] = mosaicMap
-			} else {
-				obj[k] = mosaicText
 			}
-
+			obj[dk] = winnerNewMap
+		} else {
+			obj[dk] = mosaicText
 		}
 	}
-	//数字打码
-	detail = RegDetail(detail)
-	detail = fsw.Repl(detail)
 	obj["detail"] = detail
 	return obj
 }

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

@@ -516,9 +516,9 @@ func wxvisitD(sid, userId string, isPayUser bool) (objdata map[string]interface{
 	defer util.Catch()
 	var obj map[string]interface{}
 	if len(sid) > 5 {
-		aobj, ok := public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection, sid, public.MgoBiddingFields)
+		aobj, ok := public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection, sid, nil)
 		if ok && (aobj == nil || *aobj == nil || len(*aobj) == 0) {
-			aobj, ok = public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection_back, sid, public.MgoBiddingFields)
+			aobj, ok = public.Mgo_Bidding.FindById(public.DbConf.Mongodb.Bidding.Collection_back, sid, nil)
 		}
 		//aobj, ok := elastic.GetByIdField("bidding", "bidding", sid, ""), true
 		obj = *aobj

+ 11 - 0
src/jfw/modules/app/src/config.json

@@ -216,6 +216,17 @@
     "expurasingtime":true,
     "winnerMap":true
   },
+  "detailMosaic":"免费注册即可查看",
+  "detailNeedMosaic":{
+    "buyerperson":true,
+    "buyertel":true,
+    "winnerperson":true,
+    "winnertel":true,
+    "agencyperson":true,
+    "agencytel":true,
+    "budget":true,
+    "bidamount":true
+  },
   "keepShowRedSpot": true,
   "detail_element": [
     "table",

+ 0 - 1
src/jfw/modules/app/src/config.yaml

@@ -4,4 +4,3 @@ etcd:
 userCenterKey: "usercenter.rpc" #用户中台rpc
 powerCheckCenterKey: "powercheck.rpc" #权益校验中台
 entManageApplication: "entmanageapplication.rpc" #企业管理中台
-publicserviceKey: "publicservice.rpc"

+ 56 - 60
src/jfw/modules/app/src/db.json

@@ -1,68 +1,64 @@
 {
-  "mongodb": {
-    "main": {
-      "address": "192.168.3.206:27080",
-      "size": 20,
-      "dbName": "qfw"
+	"mongodb": {
+		"main": {
+			"address": "192.168.3.206:27080",
+	 		"size": 5,
+	 		"dbName": "qfw"
+		},
+		"log": {
+			"address": "192.168.3.206:27090",
+	 		"size": 5,
+	 		"dbName": "qfw",
+			"userName": "admin",
+			"password": "123456"
+		},
+		"ent": {
+			"address": "192.168.3.206:27001,192.168.3.206:27002",
+	 		"size": 5,
+	 		"dbName": "mixdata",
+			"userName": "jyDevGroup",
+			"password": "jy@DevGroup"
+		},
+		"bidding": {
+			"address": "192.168.3.206:27001,192.168.3.206:27002",
+	 		"size": 5,
+	 		"dbName": "qfw_data",
+			"collection": "bidding",
+			"collection_back": "bidding_back",
+			"userName": "jyDevGroup",
+			"password": "jy@DevGroup"
+		}
+	},
+	"elasticsearch": {
+		"main": {
+			"address": "http://192.168.3.206:9800",
+	    	"size": 2,
+			"version": "v7",
+			"userName": "",
+			"password": ""
+		}
     },
-    "log": {
-      "address": "192.168.3.206:27090",
-      "size": 5,
-      "dbName": "qfw",
-      "userName": "admin",
-      "password": "123456"
-    },
-    "ent": {
-      "address": "192.168.3.206:27002",
-      "size": 5,
-      "dbName": "mixdata",
-      "userName": "jyDevGroup",
-      "password": "jy@DevGroup"
-    },
-    "bidding": {
-      "address": "192.168.3.206:27002",
-      "size": 5,
-      "dbName": "qfw_data",
-      "replSet": "",
-      "collection": "bidding",
-      "collection_back": "bidding_back",
-      "userName": "jyDevGroup",
-      "password": "jy@DevGroup"
-    }
-  },
-  "elasticsearch": {
-    "main": {
-      "address": "http://192.168.3.241:9205,http://192.168.3.149:9200",
-      "size": 30,
-      "version": "v7",
-      "userName": "",
-      "password": ""
-    }
-  },
   "redis": {
     "main":{
-      "address": "other=192.168.3.149:1712,sso=192.168.3.149:1713,push=192.168.3.149:1711,session=192.168.3.149:1713,recovery=192.168.3.149:1715,merge=192.168.3.149:1712,newother=192.168.3.149:1712,poly=192.168.3.149:1713"
-    },
-    "login": {
-      "address": "login=192.168.3.149:1712"
+      "address": "other=192.168.3.11:1712,push=192.168.3.206:1712,sso=192.168.3.206:1712,session=192.168.3.11:1713,recovery=192.168.3.206:1712,merge=192.168.3.206:1712,newother=192.168.3.206:1712"
     }
-  },
-  "mysql": {
-    "main": {
-      "dbName": "jianyu",
-      "address": "192.168.3.149:3306",
-      "userName": "root",
-      "passWord": "Topnet123",
-      "maxOpenConns": 500,
-      "maxIdleConns": 200
     },
-    "base": {
-      "dBName": "base_service",
-      "address" : "192.168.3.217:4000",
-      "userName": "root",
-      "passWord": "=PDT49#80Z!RVv52_z",
-      "maxOpenConns": 5,
-      "maxIdleConns": 5
+    "mysql": {
+	    "main": {
+	        "dbName": "jianyu",
+	        "address": "192.168.3.11:3366",
+	        "userName": "root",
+	        "passWord": "Topnet123",
+			"maxOpenConns": 2,
+			"maxIdleConns": 2
+	    },
+      	"base": {
+	        "dBName": "base_service",
+	        "address": "192.168.3.217:4000",
+	        "userName": "root",
+	        "passWord": "=PDT49#80Z!RVv52_z",
+	        "maxOpenConns": 5,
+	        "maxIdleConns": 5
+      	}
     }
-  }
 }

+ 55 - 44
src/jfw/modules/app/src/go.mod

@@ -5,12 +5,16 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230531014856-12e9a04b5c44
+<<<<<<<<< Temporary merge branch 1
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627072535-2f1a67f51167
+=========
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627054426-ae1e762303e9
+>>>>>>>>> Temporary merge branch 2
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.1
 	github.com/pkg/errors v0.9.1
-	go.mongodb.org/mongo-driver v1.11.1
+	go.mongodb.org/mongo-driver v1.11.6
 )
 
 require (
@@ -25,58 +29,61 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.5.5 // indirect
-	github.com/coreos/go-semver v0.3.0 // indirect
-	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+	github.com/coreos/go-semver v0.3.1 // indirect
+	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
-	github.com/fatih/color v1.13.0 // indirect
-	github.com/felixge/fgprof v0.9.3 // indirect
+	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
+	github.com/fatih/color v1.15.0 // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-openapi/jsonpointer v0.19.6 // indirect
+	github.com/go-openapi/jsonreference v0.20.1 // indirect
+	github.com/go-openapi/swag v0.22.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
-	github.com/go-sql-driver/mysql v1.7.0 // indirect
+	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang-jwt/jwt/v4 v4.4.3 // indirect
+	github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
 	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/google/gnostic v0.5.7-v3refs // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
-	github.com/googleapis/gnostic v0.5.5 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.11 // indirect
+	github.com/klauspost/compress v1.15.15 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/mattn/go-isatty v0.0.17 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/nsqio/go-nsq v1.1.0 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
-	github.com/prometheus/client_golang v1.13.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.37.0 // indirect
-	github.com/prometheus/procfs v0.8.0 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+	github.com/prometheus/client_golang v1.15.1 // indirect
+	github.com/prometheus/client_model v0.3.0 // indirect
+	github.com/prometheus/common v0.42.0 // indirect
+	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
@@ -92,36 +99,37 @@ require (
 	github.com/xdg-go/scram v1.1.1 // indirect
 	github.com/xdg-go/stringprep v1.0.3 // indirect
 	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	github.com/zeromicro/go-zero v1.4.4 // indirect
+	github.com/zeromicro/go-zero v1.5.3 // indirect
 	github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb // indirect
-	go.etcd.io/etcd/api/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.6 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
 	go.opentelemetry.io/otel v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
 	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
 	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
 	go.opentelemetry.io/otel/trace v1.15.1 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
-	go.uber.org/atomic v1.9.0 // indirect
-	go.uber.org/automaxprocs v1.5.1 // indirect
-	go.uber.org/multierr v1.8.0 // indirect
-	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/oauth2 v0.4.0 // indirect
+	go.uber.org/atomic v1.10.0 // indirect
+	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/multierr v1.9.0 // indirect
+	go.uber.org/zap v1.24.0 // indirect
+	golang.org/x/crypto v0.6.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/oauth2 v0.7.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.7.0 // indirect
-	golang.org/x/term v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/term v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
-	google.golang.org/grpc v1.54.0 // indirect
+	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
+	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -131,11 +139,14 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	k8s.io/api v0.22.9 // indirect
-	k8s.io/apimachinery v0.22.9 // indirect
-	k8s.io/client-go v0.22.9 // indirect
-	k8s.io/klog/v2 v2.80.1 // indirect
-	k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
-	sigs.k8s.io/yaml v1.2.0 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
+	k8s.io/api v0.26.3 // indirect
+	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
+	k8s.io/client-go v0.26.3 // indirect
+	k8s.io/klog/v2 v2.90.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
+	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/yaml v1.3.0 // indirect
 )

Fișier diff suprimat deoarece este prea mare
+ 86 - 471
src/jfw/modules/app/src/go.sum


+ 43 - 2
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -127,7 +127,8 @@ var vNode = {
         isFree: false,
         vipStatus: 0,
         viper: false,
-        entniche: false
+        entniche: false,
+        isLogin: false // 用户是否登录
       },
       usageInfo: {
         total: 0,
@@ -195,9 +196,12 @@ var vNode = {
     getfreeBuyerPort: function () {
       return this.userInfo.isFree && this.userInfo.freeBuyerPort == 0;
     },
+    // 是否登录
+    isLogin: function () {
+      return this.userInfo.isLogin
+    },
     // 展示超级订阅浏览次数
     superVipPort: function () {
-      console.log(this.userInfo.vipStatus, this.userInfo.viper)
       return this.userInfo.vipStatus > 0 && this.userInfo.viper && this.power.indexOf(5) == -1
     },
     // 超级订阅用户对应的按钮
@@ -251,6 +255,7 @@ var vNode = {
     }
   },
   created () {
+    this.getUserSimpleInfo()
     this.getPowerInfo()
     setTimeout(() => {
       this.getIsSc()
@@ -267,6 +272,12 @@ var vNode = {
     }
     // 获取站内社交分享参数
     this.getShareParams()
+    // 设置页面TDK,仅h5需要设置
+    if (utils.$envs.inH5) {
+      try {
+        setPageTdk('unit_portrayal', this.buyer.name)
+      } catch (error) {}
+    }
   },
   beforeDestroy () {
     window.removeEventListener("resize", this.init, 20);
@@ -282,6 +293,21 @@ var vNode = {
         })
       }
     }, 300),
+    // 判断当前用户是登录
+    getUserSimpleInfo() {
+      const _this = this
+      $.ajax({
+        type: 'POST',
+        url: '/jypay/user/getSimpleData',
+        success: function (res) {
+          if(res && res.userId) {
+            _this.userInfo.isLogin = true
+          }
+        },error:function (e) {
+          _this.userInfo.isLogin = false
+        }
+      })
+    },
     getShareParams () {
       this.unitParams = {
         type: '5',
@@ -363,6 +389,8 @@ var vNode = {
             _this.getUsage(); // 超级订阅用户剩余次数
             _this.getNewMsg(); // 中标动态
             _this.getChartData(); // 企业画像
+          } else {
+            _this.userInfo.isLogin = false
           }
         },
         error: function (error) {
@@ -466,6 +494,11 @@ var vNode = {
     },
     // 跳转招标动态新页面
     goProjectPage: function () {
+      // 未登录跳转登录
+      if(!this.isLogin) {
+        window.location.href = "/jyapp/free/login?to=back";
+        return
+      }
       // 无权限的弹出弹框提醒
       let _this = this
       if (this.getStatus) {
@@ -510,6 +543,10 @@ var vNode = {
     },
     //数据导出
     onExport () {
+      if(!this.isLogin) {
+        window.location.href = "/jyapp/free/login?to=back";
+        return
+      }
       var storageSet = JSON.parse(sessionStorage.getItem('buyer_high_set'))
       // var isMember = this.bigStatus > 0 && this.power.indexOf(5) > -1
       var data = {
@@ -536,6 +573,10 @@ var vNode = {
     },
     //收藏
     addKeepStatus (item) {
+      if(!this.isLogin) {
+        window.location.href = "/jyapp/free/login?to=back";
+        return
+      }
       if (vKeepComponent) {
         let canKeep = this.idx.indexOf(item.id) > -1
         vKeepComponent.changeBid(item.id, !canKeep)

BIN
src/jfw/modules/app/src/web/staticres/jyapp/images/no-login-content.png


+ 8 - 5
src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html

@@ -2,7 +2,7 @@
 <html lang="zh-CN" style="font-size: 50px;">
 
 <head>
-  <title>采购单位画像 </title>
+  <title>采购单位画像</title>
 
   <!--引入公共资源头部-->
   {{include "/big-member/meta.html"}}
@@ -224,6 +224,9 @@
     .client .q-name {
       font-weight: 500;
     }
+    .vip_openDialog{
+        margin-top:.3rem;
+    }
 
   </style>
 </head>
@@ -250,7 +253,7 @@
           </div>
           <p class="region">所在地:${statistics.province || '--'} ${statistics.city}</p>
           <p class="buyer-type">采购单位类型:${statistics.buyerClass || '--'}</p>
-          <forwardshare :params="unitParams"></forwardshare>
+          <forwardshare :params="unitParams" v-if="isLogin"></forwardshare>
         </div>
         <!-- 留完资的免费用户 已体验和未体验的展示去开通 -->
         <div v-if="getfreeBuyerOpen">
@@ -259,7 +262,7 @@
           </van-sticky>
         </div>
         <!-- 免费用户采购单位全景分析提示 -->
-        <div v-if="getfreeBuyerPort" class="free-give">
+        <div v-if="getfreeBuyerPort && isLogin" class="free-give">
           <div class="go-text"> 免费赠送1次【采购单位全景分析】权益体验机会!</div>
           <div class="go-btn" @click="goGiveAnalysis">去解锁</div>
         </div>
@@ -280,7 +283,7 @@
         <!-- 高级分析 -->
         <div class="win-analyse" ref="setRefs">
           <span class="win-bid-title">采购单位分析</span>
-          <div class="high-link" @click="goHighSet">
+          <div class="high-link" @click="goHighSet" v-if="isLogin">
             <span>高级分析设置</span>
             <van-icon name="arrow"></van-icon>
           </div>
@@ -746,6 +749,7 @@
     src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/history-project.js?v={{Msg "seo" "version"}}'>
   </script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/forward-share/js/forward.js?v={{Msg "seo" "version"}}'></script>
+  <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 src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/visited.js?v={{Msg "seo" "version"}}'>
   </script>
@@ -776,7 +780,6 @@
         }
       }
     })
-
   </script>
 </body>
 

+ 3 - 4
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_introduce.html

@@ -83,8 +83,7 @@
                 <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_01.jpg?v={{Msg "seo" "version"}}">
                 <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_02.jpg?v={{Msg "seo" "version"}}">
                 <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_03.jpg?v={{Msg "seo" "version"}}">
-                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_04.jpg?v={{Msg "seo" "version"}}">
-                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_05.jpg?v={{Msg "seo" "version"}}">
+                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/vip_vs.png?v={{Msg "seo" "version"}}">
                 <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_06.jpg?v={{Msg "seo" "version"}}">
                 <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/image/info/cut_07.jpg?v={{Msg "seo" "version"}}">
         </div>
@@ -165,7 +164,7 @@
             }
         }
     })
-    
+
     var loginFlag = {{if .T.loginFlag}}{{.T.loginFlag}}{{else}}false{{end}}
     $("*[data-need-bind-phone]").on('click', function () {
       if (loginFlag){
@@ -173,7 +172,7 @@
       }else{
         window.location.replace("/jyapp/free/login?url="+$(this).attr('data-url'))
       }
-        
+
     })
     $(function () {
         try{

+ 7 - 15
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -817,18 +817,9 @@
             <div id="third-party-verify-attention" class="third-party-verify-attention" style="display:none;">
               <span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
             </div>
-            <div class="noLoginShow" style="display: none;">
+            <div class="noLoginShow option-login" style="display: none;">
               <div class="serve-list">
-                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/register_serve.png" alt="" />
-              </div>
-              <div class="serve-option">
-                <div class="option-title">登录后可查看全文</div>
-                <div class="option-login option-common">立即登录</div>
-                <div class="option-register option-common">还不是会员?立即免费注册</div>
-                <div class="option-hotline">
-                  <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/telphone.png" alt="" />
-                  <span>咨询热线:400-108-6670</span>
-                </div>
+                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/no-login-content.png" alt="详情页-未登录-引导" />
               </div>
             </div>
             <!--S 登录引导置底 S-->
@@ -1414,7 +1405,11 @@
             }
         }
     }
-
+    function appAutoLogin(){
+      // 去登录
+        const url = `/jyapp/article/content/${id}.html`
+        autoLogin(url)
+    }
     // 去登录
     $('.option-login').on('click', function() {
       const url = `/jyapp/article/content/${id}.html`
@@ -2461,10 +2456,8 @@
         $("#baseInfo ul").html(outhtml);
       }
       if(!userId) {
-        $('.unitbtn').hide()
         $('.border-tel_').hide()
       } else {
-        $('.unitbtn').show()
         $('.border-tel_').show()
       }
       //中标信息
@@ -2559,7 +2552,6 @@
       })
       // 采购单位跳转
       $('.caigouunit').on('click',function(){
-        if(!userId) return
         if(rerbuyer != ''&&rerbuyer!=null){
             var landinfo = {
                 anchor: '采购单位全景分析',

+ 41 - 7
src/jfw/modules/bigmember/src/entity/portrait.go

@@ -28,7 +28,7 @@ const (
 // CreatePortraitManager 大会员
 func CreatePortraitManager(session *httpsession.Session, pageFlag string) (*Portrait, bool, error, bool) {
 	userid := fmt.Sprint(qutil.Int64All(session.Get("base_user_id")))
-	if userid == "" {
+	if userid == "" || userid == "0" {
 		return nil, false, errors.New("未登录"), true
 	}
 	bigMsg := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
@@ -64,7 +64,7 @@ func CreatePortraitManager(session *httpsession.Session, pageFlag string) (*Port
 // CreatePortraitManagerForContacts 画像通讯里权限验证
 func CreatePortraitManagerForContacts(session *httpsession.Session, entType int64, entName string) (*Portrait, error) {
 	userid := fmt.Sprint(qutil.Int64All(session.Get("base_user_id")))
-	if userid == "" {
+	if userid == "" || userid == "0" {
 		return nil, errors.New("未登录")
 	}
 	if entName == "" {
@@ -147,6 +147,39 @@ func CreateSubVipPortraitManager(userid string, pageFlag, searchValue string, is
 	return &Portrait{userid, session}, 1, nil, true
 }
 
+// CreateSubVipPortraitManagerForOpen 超级订阅权限校验-部分开放接口 int -1无权限 1免费权限 2超级订阅次数&采购单位流量包 3使用体验
+func CreateSubVipPortraitManagerForOpen(userid string, pageFlag, searchValue string, isWinner bool, session *httpsession.Session) (*Portrait, int, error, bool) {
+	if pageFlag == "" {
+		return nil, -1, errors.New("未知请求"), true
+	}
+	if pageFlag != "entDetail" { //需要权限校验的接口
+		if userid == "" {
+			// 未登录用户
+			return &Portrait{userid, session}, 1, nil, true
+		}
+		bigMsg := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
+		//免费用户判断
+		free := false
+		if bigMsg.VipStatus <= 0 && bigMsg.Status <= 0 && bigMsg.EntnicheStatus <= 0 {
+			free = true
+		}
+		if bigMsg.VipStatus <= 0 || bigMsg.Vip_BuySet.Upgrade != 1 { //免费用户留资体验
+			if searchValue != "" && jy.Portraitexperience(userid, searchValue, isWinner) {
+				return &Portrait{userid, session}, 3, nil, free
+			}
+			return &Portrait{userid, session}, -1, nil, free
+		} else { //超级订阅升级版-校验超级订阅画像浏览次数
+			err := bigMsg.NewSubVipPortrait(db.Mysql, searchValue, isWinner).SubVipPortraitTimesCheck()
+			if err == nil {
+				return &Portrait{userid, session}, 2, nil, free
+			} else {
+				log.Printf("用户%s 超级订阅使用画像%s次数异常 %v\n", userid, searchValue, err)
+			}
+		}
+	}
+	return &Portrait{userid, session}, 1, nil, true
+}
+
 // GetEntInfo 获取企业基本信息
 func (this *Portrait) GetEntInfo(entId string) (map[string]interface{}, error) {
 	if entId == "" {
@@ -308,7 +341,7 @@ func (this *Portrait) WinnerPortraitData(screen *PortraitScreen) (map[string]int
 	}
 	resMap := map[string]interface{}{}
 	if !screen.HasPower || screen.IsEmptySearch() { //空查询读缓存
-		resMap = TryFunc(GetPortraitCache, screen.Ent, "winner", 2)
+		resMap = TryFunc(GetPortraitCache, screen.Ent, "winner", 2, 1)
 	} else {
 		Screen_Thread <- true
 		winnerPortraitData, err := GetWinnerPortraitSearch(screen)
@@ -334,7 +367,7 @@ func (this *Portrait) WinnerMiniPortraitData(entId string) (map[string]interface
 	if entId == "" {
 		return nil, errors.New("企业名称异常")
 	}
-	winnerPortraitData := TryFunc(GetPortraitCache, entId, "winner", 2)
+	winnerPortraitData := TryFunc(GetPortraitCache, entId, "winner", 2, 1)
 	miniReturnMap := map[string]interface{}{}
 	for _, key := range []string{"bidamount_count", "project_count"} {
 		miniReturnMap[key] = winnerPortraitData[key]
@@ -368,9 +401,10 @@ func (this *Portrait) BuyerPortraitData(screen *PortraitScreen, flag string) (ma
 		return nil, errors.New("企业名称异常")
 	}
 	buyerPortraitData := map[string]interface{}{}
+
 	if screen.IsEmptySearch() { //空查询读缓存
-		buyerPortraitData = TryFunc(GetPortraitCache, screen.Ent, "buyer", 5)
-	} else {
+		buyerPortraitData = TryFunc(GetPortraitCache, screen.Ent, "buyer", qutil.If(screen.UserLevel == 3, 2, 5).(int), screen.UserLevel)
+	} else if screen.UserLevel != 3 { //3:未登录用户不能使用条件查询,只能进行空搜索
 		Screen_Thread <- true
 		res, err := GetBuyerPortraitData(screen)
 		<-Screen_Thread
@@ -407,7 +441,7 @@ func (this *Portrait) BuyerMiniPortraitData(buyer string) (map[string]interface{
 		return nil, errors.New("企业名称异常")
 	}
 	miniReturnMap := map[string]interface{}{}
-	buyerPortraitData := TryFunc(GetPortraitCache, buyer, "buyer", 2)
+	buyerPortraitData := TryFunc(GetPortraitCache, buyer, "buyer", 2, 1)
 	if buyerPortraitData != nil {
 		for _, key := range []string{"province", "city", "buyerclass", "bidamount_count", "project_count"} {
 			miniReturnMap[key] = buyerPortraitData[key]

+ 4 - 4
src/jfw/modules/bigmember/src/entity/portrait_manager.go

@@ -145,9 +145,9 @@ func upDataQxhxRedis(redisKey string, data interface{}) {
 }
 
 // TryFunc 画像查询,读存缓存
-func TryFunc(f func(string, string) map[string]interface{}, ent, do string, times int) map[string]interface{} {
+func TryFunc(f func(string, string, int) map[string]interface{}, ent, do string, times, userLevel int) map[string]interface{} {
 	for i := times; i > 0; i-- {
-		if r := f(ent, do); r != nil {
+		if r := f(ent, do, userLevel); r != nil {
 			return r
 		}
 		time.Sleep(time.Second * tryAgaintSleep)
@@ -156,7 +156,7 @@ func TryFunc(f func(string, string) map[string]interface{}, ent, do string, time
 }
 
 // GetPortraitCache 空筛选读缓存数据
-func GetPortraitCache(winner, doType string) map[string]interface{} {
+func GetPortraitCache(winner, doType string, userLevel int) map[string]interface{} {
 	hxObj := getInitPortraitSearch(winner, doType)
 	if rBytes, err := redis.GetBytes("other", hxObj.RedisKey); err == nil && len(*rBytes) != 0 {
 		data := map[string]interface{}{}
@@ -166,6 +166,6 @@ func GetPortraitCache(winner, doType string) map[string]interface{} {
 		}
 		log.Printf("Get%sPortraitCache %s Unmarshal [e] %v \n", doType, winner, err)
 	}
-	go Qyhx_search_prior(hxObj, 1)
+	go Qyhx_search_prior(hxObj, userLevel)
 	return nil
 }

+ 1 - 0
src/jfw/modules/bigmember/src/entity/portrait_screen.go

@@ -46,6 +46,7 @@ type PortraitScreen struct {
 	PareStartTime, PareEndTime int64 //筛选时间戳
 	ShowMatch                  string
 	KeyWordArr                 []string
+	UserLevel                  int //用户身份 3:未登录;2:免费;1:付费
 }
 
 // PortraitProjectScreen 动态翻页

+ 50 - 44
src/jfw/modules/bigmember/src/go.mod

@@ -3,9 +3,9 @@ module jy/src/jfw/modules/bigmember/src
 go 1.19
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230523020646-528a068dac39
+	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230531014856-12e9a04b5c44
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2
@@ -25,58 +25,60 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.5.5 // indirect
-	github.com/coreos/go-semver v0.3.0 // indirect
-	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+	github.com/coreos/go-semver v0.3.1 // indirect
+	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
-	github.com/fatih/color v1.13.0 // indirect
-	github.com/felixge/fgprof v0.9.3 // indirect
+	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
+	github.com/fatih/color v1.15.0 // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-openapi/jsonpointer v0.19.6 // indirect
+	github.com/go-openapi/jsonreference v0.20.1 // indirect
+	github.com/go-openapi/swag v0.22.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
-	github.com/go-sql-driver/mysql v1.7.0 // indirect
+	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/google/gnostic v0.5.7-v3refs // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
-	github.com/googleapis/gnostic v0.5.5 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.11 // indirect
+	github.com/klauspost/compress v1.15.15 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/mattn/go-isatty v0.0.17 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/nsqio/go-nsq v1.1.0 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.13.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.37.0 // indirect
-	github.com/prometheus/procfs v0.8.0 // indirect
+	github.com/prometheus/client_golang v1.15.1 // indirect
+	github.com/prometheus/client_model v0.3.0 // indirect
+	github.com/prometheus/common v0.42.0 // indirect
+	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
@@ -92,36 +94,37 @@ require (
 	github.com/xdg-go/scram v1.1.1 // indirect
 	github.com/xdg-go/stringprep v1.0.3 // indirect
 	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	github.com/zeromicro/go-zero v1.4.4 // indirect
+	github.com/zeromicro/go-zero v1.5.3 // indirect
 	github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb // indirect
-	go.etcd.io/etcd/api/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.6 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
 	go.opentelemetry.io/otel v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
 	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
 	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
 	go.opentelemetry.io/otel/trace v1.15.1 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
-	go.uber.org/atomic v1.9.0 // indirect
-	go.uber.org/automaxprocs v1.5.1 // indirect
-	go.uber.org/multierr v1.8.0 // indirect
-	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/oauth2 v0.4.0 // indirect
+	go.uber.org/atomic v1.10.0 // indirect
+	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/multierr v1.9.0 // indirect
+	go.uber.org/zap v1.24.0 // indirect
+	golang.org/x/crypto v0.6.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/oauth2 v0.7.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.7.0 // indirect
-	golang.org/x/term v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/term v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
-	google.golang.org/grpc v1.54.0 // indirect
+	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
+	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -131,11 +134,14 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	k8s.io/api v0.22.9 // indirect
-	k8s.io/apimachinery v0.22.9 // indirect
-	k8s.io/client-go v0.22.9 // indirect
-	k8s.io/klog/v2 v2.80.1 // indirect
-	k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
-	sigs.k8s.io/yaml v1.2.0 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
+	k8s.io/api v0.26.3 // indirect
+	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
+	k8s.io/client-go v0.26.3 // indirect
+	k8s.io/klog/v2 v2.90.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
+	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/yaml v1.3.0 // indirect
 )

Fișier diff suprimat deoarece este prea mare
+ 79 - 472
src/jfw/modules/bigmember/src/go.sum


+ 1 - 0
src/jfw/modules/bigmember/src/service/chatShare/obtainDetails.go

@@ -136,6 +136,7 @@ func (this *ChatShareProject) BuyerPortrait() ([]ForwardData, error) {
 			ScopeClass: this.GetString("scopeClass"),
 			TimeRange:  this.GetString("timeRange"),
 			HasPower:   power > 1,
+			UserLevel:  1,
 		}, "")
 		if err != nil {
 			return nil, err

+ 15 - 14
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -14,7 +14,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 )
 
-//EntPortrait 大会员画像接口
+// EntPortrait 大会员画像接口
 type EntPortrait struct {
 	*xweb.Action
 	//中标企业画像
@@ -36,7 +36,7 @@ type EntPortrait struct {
 
 }
 
-//EntDetail 企业基本信息
+// EntDetail 企业基本信息
 func (this *EntPortrait) EntDetail() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -57,7 +57,7 @@ func (this *EntPortrait) EntDetail() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//WinnerContacts 中标企业历史联系人
+// WinnerContacts 中标企业历史联系人
 func (this *EntPortrait) WinnerContacts() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -107,7 +107,7 @@ func (this *EntPortrait) WinnerSelects() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//WinnerNewMsg 企业画像-最新项目动态
+// WinnerNewMsg 企业画像-最新项目动态
 func (this *EntPortrait) WinnerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -153,7 +153,7 @@ func (this *EntPortrait) WinnerNewMsg() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//WinnerNewMsgExport 企业画像-最新项目动态
+// WinnerNewMsgExport 企业画像-最新项目动态
 func (this *EntPortrait) WinnerNewMsgExport() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -204,7 +204,7 @@ func (this *EntPortrait) WinnerNewMsgExport() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//WinnerPortrait 企业画像-画像数据查询
+// WinnerPortrait 企业画像-画像数据查询
 func (this *EntPortrait) WinnerPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -234,7 +234,7 @@ func (this *EntPortrait) WinnerPortrait() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//WinnerMiniPortrait 三级页中标单位引流数据展示(免费)
+// WinnerMiniPortrait 三级页中标单位引流数据展示(免费)
 func (this *EntPortrait) WinnerMiniPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -267,8 +267,8 @@ func (this *EntPortrait) WinnerMiniPortrait() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//BuyerSelects 采购单位画像可供筛选的条件
-//dev.6.2.1免费用户可筛选画像
+// BuyerSelects 采购单位画像可供筛选的条件
+// dev.6.2.1免费用户可筛选画像
 func (this *EntPortrait) BuyerSelects() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -289,7 +289,7 @@ func (this *EntPortrait) BuyerSelects() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//BuyerNewMsg 采购单位画像-最新招标动态(免费用户仅可查看3条记录,付费50条)
+// BuyerNewMsg 采购单位画像-最新招标动态(免费用户仅可查看3条记录,付费50条)
 func (this *EntPortrait) BuyerNewMsg() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -375,7 +375,7 @@ func (this *EntPortrait) BuyerNewMsgExport() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//BuyerContacts 采购单位联系人(必须开通会员)
+// BuyerContacts 采购单位联系人(必须开通会员)
 func (this *EntPortrait) BuyerContacts() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -401,7 +401,7 @@ func (this *EntPortrait) BuyerContacts() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//BuyerPortrait 采购单位画像-数据(免费用户可查看基本信息、项目统计、合作企业资本、年龄及地区分布)
+// BuyerPortrait 采购单位画像-数据(免费用户可查看基本信息、项目统计、合作企业资本、年龄及地区分布)
 func (this *EntPortrait) BuyerPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -421,6 +421,7 @@ func (this *EntPortrait) BuyerPortrait() {
 			ScopeClass: this.GetString("scopeClass"),
 			TimeRange:  this.GetString("timeRange"),
 			HasPower:   hasPower,
+			UserLevel:  1,
 		}, flag)
 		if err != nil {
 			return nil, err
@@ -433,7 +434,7 @@ func (this *EntPortrait) BuyerPortrait() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//BuyerMiniPortrait 三级页采购单位引流数据展示(免费)
+// BuyerMiniPortrait 三级页采购单位引流数据展示(免费)
 func (this *EntPortrait) BuyerMiniPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
@@ -500,7 +501,7 @@ func (this *EntPortrait) PortraitContacts() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//formatContact 格式化混淆联系人电话
+// formatContact 格式化混淆联系人电话
 func formatContact(contactList []map[string]interface{}) (confusing []map[string]interface{}, total int) {
 	total = len(contactList)
 	deConfusingMap := make(map[string]bool) //去重

+ 7 - 2
src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go

@@ -334,7 +334,7 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "buyerPortrait", buyer, false, this.Session())
+		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
 		if err != nil {
 			return nil, err
 		}
@@ -451,12 +451,16 @@ func (this *SubVipPortrait) BuyerPortrait() {
 		if buyerName == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "buyerPortrait", buyerName, false, this.Session())
+		cepm, power, err, isFree := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyerName, false, this.Session())
 		cepm.Session = this.Session()
 		if err != nil {
 			return nil, err
 		}
 		flag := this.GetString("flag") //分段请求标识
+		userLevel := 3
+		if userId != "" {
+			userLevel = qutil.If(isFree, 2, 1).(int)
+		}
 		rData, err := cepm.BuyerPortraitData(&entity.PortraitScreen{
 			Ent:        buyerName,
 			Match:      this.GetString("match"),
@@ -466,6 +470,7 @@ func (this *SubVipPortrait) BuyerPortrait() {
 			ScopeClass: this.GetString("scopeClass"),
 			TimeRange:  this.GetString("timeRange"),
 			HasPower:   power > 1,
+			UserLevel:  userLevel,
 		}, flag)
 		if err != nil {
 			return nil, err

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

@@ -98,8 +98,8 @@ func (this *MarketAnalysis) ProjectInfo() {
 
 // checkPower 权限校验
 func checkPower(session *httpsession.Session) (string, error) {
-	userId := fmt.Sprint(qutil.Int64All(session.Get("base_user_id")))
-	if userId == "" {
+	userid := fmt.Sprint(qutil.Int64All(session.Get("base_user_id")))
+	if userid == "" || userid == "0" {
 		return "", fmt.Errorf("未登录")
 	}
 	//仅购买《周报/月报/定制化市场分析报告》的大会员有权限

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

@@ -195,6 +195,12 @@ func (r *Report) Detail() {
 
 // ProjectInfo 项目明细
 func (r *Report) ProjectInfo() {
+	// 判断登录
+	userId := qutil.ObjToString(r.GetSession("userId"))
+	if userId == "" {
+		r.ServeJson(Result{Error_code: Error_code_1001, Error_msg: Error_msg_1001})
+		return
+	}
 	//参数接收
 	body := xweb.FilterXSS(string(r.Body()))
 	param := entity.ReportProjectInfoParam{}

+ 2 - 1
src/jfw/modules/bigmember/src/service/search/search.go

@@ -67,7 +67,8 @@ func (s *Search) BuyerAssociation() {
 	result := func() Result {
 		name := s.GetString("name")
 		list := []string{}
-		r := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query": {"match_phrase": {"name": "%s"}},"_source": ["name"],"size": %d}`, name, 10))
+		size, _ := s.GetInteger("size")
+		r := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query": {"match_phrase": {"name": "%s"}},"_source": ["name"],"size": %d}`, name, qutil.If(size > 0, size, 10).(int)))
 		if r != nil {
 			for _, v := range *r {
 				list = append(list, qutil.ObjToString(v["name"]))

+ 51 - 45
src/jfw/modules/publicapply/src/go.mod

@@ -3,14 +3,14 @@ module jy/src/jfw/modules/publicapply/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230517064222-e0bdfc8ee0e8
+	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230517064346-54ec66481628
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.0.6
-	github.com/zeromicro/go-zero v1.4.4
-	go.mongodb.org/mongo-driver v1.11.1
+	github.com/zeromicro/go-zero v1.5.3
+	go.mongodb.org/mongo-driver v1.11.6
 )
 
 require (
@@ -25,60 +25,62 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.5.5 // indirect
-	github.com/coreos/go-semver v0.3.0 // indirect
-	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+	github.com/coreos/go-semver v0.3.1 // indirect
+	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
-	github.com/fatih/color v1.13.0 // indirect
-	github.com/felixge/fgprof v0.9.3 // indirect
+	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
+	github.com/fatih/color v1.15.0 // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-openapi/jsonpointer v0.19.6 // indirect
+	github.com/go-openapi/jsonreference v0.20.1 // indirect
+	github.com/go-openapi/swag v0.22.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
-	github.com/go-sql-driver/mysql v1.7.0 // indirect
+	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/google/gnostic v0.5.7-v3refs // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
-	github.com/googleapis/gnostic v0.5.5 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.11 // indirect
+	github.com/klauspost/compress v1.15.15 // indirect
 	github.com/longbridgeapp/sqlparser v0.3.1 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/mattn/go-isatty v0.0.17 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/nsqio/go-nsq v1.1.0 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.13.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.37.0 // indirect
-	github.com/prometheus/procfs v0.8.0 // indirect
+	github.com/prometheus/client_golang v1.15.1 // indirect
+	github.com/prometheus/client_model v0.3.0 // indirect
+	github.com/prometheus/common v0.42.0 // indirect
+	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
@@ -95,34 +97,35 @@ require (
 	github.com/xdg-go/stringprep v1.0.3 // indirect
 	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
 	github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb // indirect
-	go.etcd.io/etcd/api/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.6 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
 	go.opentelemetry.io/otel v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
 	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
 	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
 	go.opentelemetry.io/otel/trace v1.15.1 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
-	go.uber.org/atomic v1.9.0 // indirect
-	go.uber.org/automaxprocs v1.5.1 // indirect
-	go.uber.org/multierr v1.8.0 // indirect
-	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/oauth2 v0.4.0 // indirect
+	go.uber.org/atomic v1.10.0 // indirect
+	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/multierr v1.9.0 // indirect
+	go.uber.org/zap v1.24.0 // indirect
+	golang.org/x/crypto v0.6.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/oauth2 v0.7.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.7.0 // indirect
-	golang.org/x/term v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/term v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
-	google.golang.org/grpc v1.54.0 // indirect
+	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
+	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -132,11 +135,14 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	k8s.io/api v0.22.9 // indirect
-	k8s.io/apimachinery v0.22.9 // indirect
-	k8s.io/client-go v0.22.9 // indirect
-	k8s.io/klog/v2 v2.80.1 // indirect
-	k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
-	sigs.k8s.io/yaml v1.2.0 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
+	k8s.io/api v0.26.3 // indirect
+	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
+	k8s.io/client-go v0.26.3 // indirect
+	k8s.io/klog/v2 v2.90.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
+	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/yaml v1.3.0 // indirect
 )

Fișier diff suprimat deoarece este prea mare
+ 81 - 473
src/jfw/modules/publicapply/src/go.sum


+ 1 - 1
src/jfw/modules/publicapply/src/npsValue/service/action.go

@@ -147,7 +147,7 @@ func CloudWord(w, p string, attr int) []string {
 		npswords = append(npswords, w)
 	} else if len(w) >= 10 {
 		words := jy.HttpEs(w, "ik_smart", db.DbConf.Elasticsearch.Main.Address)
-		npswords = strings.Split(words, "+")
+		npswords = strings.Split(jy.KeywordsProcessing(words, "+"), "+")
 		for idx, val := range hotwords {
 			exit := strings.Contains(w, val)
 			if exit {

+ 51 - 44
src/jfw/modules/subscribepay/src/go.mod

@@ -5,14 +5,14 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230517064346-54ec66481628
+	app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.3.3
 	github.com/shopspring/decimal v1.3.1
 	github.com/tealeg/xlsx v1.0.5
-	go.mongodb.org/mongo-driver v1.11.2
+	go.mongodb.org/mongo-driver v1.11.6
 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
 )
 
@@ -28,60 +28,63 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/clbanning/mxj/v2 v2.5.5 // indirect
-	github.com/coreos/go-semver v0.3.0 // indirect
-	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+	github.com/coreos/go-semver v0.3.1 // indirect
+	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/donnie4w/go-logger v0.0.0-20170827050443-4740c51383f4 // indirect
-	github.com/fatih/color v1.13.0 // indirect
-	github.com/felixge/fgprof v0.9.3 // indirect
+	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
+	github.com/fatih/color v1.15.0 // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
+	github.com/go-openapi/jsonpointer v0.19.6 // indirect
+	github.com/go-openapi/jsonreference v0.20.1 // indirect
+	github.com/go-openapi/swag v0.22.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
-	github.com/go-sql-driver/mysql v1.7.0 // indirect
+	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang-jwt/jwt/v4 v4.4.3 // indirect
+	github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
 	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/google/gnostic v0.5.7-v3refs // indirect
 	github.com/google/go-cmp v0.5.9 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
-	github.com/googleapis/gnostic v0.5.5 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.11 // indirect
+	github.com/klauspost/compress v1.15.15 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/mattn/go-isatty v0.0.17 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/nsqio/go-nsq v1.1.0 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/prometheus/client_golang v1.13.0 // indirect
-	github.com/prometheus/client_model v0.2.0 // indirect
-	github.com/prometheus/common v0.37.0 // indirect
-	github.com/prometheus/procfs v0.8.0 // indirect
+	github.com/prometheus/client_golang v1.15.1 // indirect
+	github.com/prometheus/client_model v0.3.0 // indirect
+	github.com/prometheus/common v0.42.0 // indirect
+	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
@@ -95,35 +98,36 @@ require (
 	github.com/xdg-go/scram v1.1.1 // indirect
 	github.com/xdg-go/stringprep v1.0.3 // indirect
 	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	github.com/zeromicro/go-zero v1.4.4 // indirect
-	go.etcd.io/etcd/api/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.6 // indirect
+	github.com/zeromicro/go-zero v1.5.3 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
 	go.opentelemetry.io/otel v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
 	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
 	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
 	go.opentelemetry.io/otel/trace v1.15.1 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
-	go.uber.org/atomic v1.9.0 // indirect
-	go.uber.org/automaxprocs v1.5.1 // indirect
-	go.uber.org/multierr v1.8.0 // indirect
-	go.uber.org/zap v1.21.0 // indirect
-	golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/oauth2 v0.4.0 // indirect
+	go.uber.org/atomic v1.10.0 // indirect
+	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/multierr v1.9.0 // indirect
+	go.uber.org/zap v1.24.0 // indirect
+	golang.org/x/crypto v0.6.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/oauth2 v0.7.0 // indirect
 	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.7.0 // indirect
-	golang.org/x/term v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/term v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
-	google.golang.org/grpc v1.54.0 // indirect
+	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
+	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
@@ -133,11 +137,14 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	k8s.io/api v0.22.9 // indirect
-	k8s.io/apimachinery v0.22.9 // indirect
-	k8s.io/client-go v0.22.9 // indirect
-	k8s.io/klog/v2 v2.80.1 // indirect
-	k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
-	sigs.k8s.io/yaml v1.2.0 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
+	k8s.io/api v0.26.3 // indirect
+	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
+	k8s.io/client-go v0.26.3 // indirect
+	k8s.io/klog/v2 v2.90.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
+	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/yaml v1.3.0 // indirect
 )

Fișier diff suprimat deoarece este prea mare
+ 86 - 498
src/jfw/modules/subscribepay/src/go.sum


+ 5 - 5
src/jfw/modules/subscribepay/src/service/dataExportPay.go

@@ -54,7 +54,7 @@ func dataExportPhoneAndMailCheck(sess *httpsession.Session) (phone, mail string,
 	return
 }
 
-//移动端创建订单
+// 移动端创建订单
 func (p *DataExportPay) CreateOrder() {
 	defer qutil.Catch()
 	openId, _ := p.GetSession("s_m_openid").(string)
@@ -246,7 +246,7 @@ func (p *DataExportPay) CreateOrder() {
 	p.ServeJson(result)
 }
 
-//获取价格
+// 获取价格
 func (p *DataExportPay) GetPrice() {
 	//获取数量
 	p.ServeJson(map[string]interface{}{
@@ -258,7 +258,7 @@ func (p *DataExportPay) GetPrice() {
 	})
 }
 
-//根据id获取导出条件
+// 根据id获取导出条件
 func (p *DataExportPay) HistoryById() {
 	id := p.GetString("id")
 	id = encrypt.SE.Decode4Hex(id)
@@ -310,12 +310,12 @@ func (k *KeywordExport) KeywordsFormat(wordsMode, searchMode int) (res []map[str
 	if searchMode == 1 && esAddrS != "" {
 		esAddr := strings.Split(esAddrS, ",")[0]
 		if ikWords := jy.HttpEs(k.Keyword, "ik_smart", esAddr); ikWords != "" {
-			k.Keyword = strings.ReplaceAll(ikWords, "+", " ")
+			k.Keyword = jy.KeywordsProcessing(strings.ReplaceAll(ikWords, "+", " "), " ")
 		}
 		if len(k.Appended) > 0 {
 			for kai, kav := range k.Appended {
 				if ikWords := jy.HttpEs(kav, "ik_smart", esAddr); ikWords != "" {
-					k.Appended[kai] = strings.ReplaceAll(ikWords, "+", " ")
+					k.Appended[kai] = jy.KeywordsProcessing(strings.ReplaceAll(ikWords, "+", " "), " ")
 				}
 			}
 		}

BIN
src/web/staticres/big-member/image/new_info/item-tb1.png


BIN
src/web/staticres/big-member/image/new_info/item-tb2-1.png


BIN
src/web/staticres/big-member/image/new_info/item-tb2-2.png


BIN
src/web/staticres/big-member/image/new_info/item-tb2-3.png


BIN
src/web/staticres/big-member/image/new_info/item-tb2-4.png


BIN
src/web/staticres/big-member/image/new_info/item-tb2-5.png


+ 2 - 1
src/web/staticres/big-member/js/unit_portrayal.js

@@ -125,7 +125,8 @@ var vNode = {
               isFree: false,
               vipStatus: false,
               viper: false,
-              entniche: false
+              entniche: false,
+              isLogin: true // 用户是否登录
             },
             usageInfo: {
               total: 0,

+ 7 - 1
src/web/staticres/common-module/collection/css/index.css

@@ -1040,7 +1040,13 @@
     text-align: CENTER;
     color: #ffffff;
 }
-
+.vip_openDialog .no-login-tip{
+    margin-top:8px;
+    font-size: 10px;
+    line-height: 14px;
+    color: #9B9CA3;
+    text-align: center;
+}
 
 .rootstyletitle {
     display: inline-block;

+ 8 - 2
src/web/staticres/common-module/collection/js/buyer-example.js

@@ -13,6 +13,7 @@ var vipDialog = `
   <div class="openBtn">
       <button class="goBtn" @click="goOpen(getTextMap.headText.top,getTextMap.headText.bot, getTextMap.source)">{{getTextMap.btnText}}</button>
   </div>
+  <p class="no-login-tip" v-if="!userinfo.isLogin">登录后解锁会员查看更多内容</p>
 </div>
 `
 
@@ -181,11 +182,14 @@ var buyerExample = {
       let btnText = ''
       var info = this.userinfo
       var usage = this.useage
+      // 【登录查看】:未登录,点击跳转到登录
       // 【立即解锁】:未体验过采购单位画像的免费用户,点击进行“欢迎体验采购单位全景分析”留资
       // 【去开通】:已体验过1次采购单位画像的免费用户,点击进入超级订阅购买页
       // 【前往升级】:超级订阅老版用户+购买了非全国采购单位画像余额为0的超级订阅新版用户,点击进入超级订阅升级页
       // 【联系客服】:购买了全国采购单位画像余额为0的超级订阅新版用户+无采购单位画像权限的大会员客户;点击调起智齿在线客服
-      if (info.isFree) {
+      if (!info.isLogin) {
+        btnText = '登录查看'
+      } else if (info.isFree) {
         if (info.freeBuyerPort === 0) {
           btnText = '立即解锁'
         } else {
@@ -331,7 +335,9 @@ var buyerExample = {
       }
       var _this = this
       console.log(_this.getTextMap.btnText)
-      if (_this.getTextMap.btnText == '立即解锁') {
+      if(_this.getTextMap.btnText == '登录查看'){
+        window.location.href = "/jyapp/free/login?to=back";
+      } else if (_this.getTextMap.btnText == '立即解锁') {
         $.ajax({
           type: 'POST',
           url: '/publicapply/drainage/buyerunit',

+ 45 - 0
src/web/staticres/common-module/public/js/setTdk.js

@@ -0,0 +1,45 @@
+/**
+ * 更改页面head-title, meta-keywords、meta-description
+ * 页面SEO(TDK)
+ * @param {*页面名称} router 
+ * @param {*变量(搜索词、采购单位名称等)} variable  
+ * PS: 页面内必须有<title>、<meta name="keywords">、 <meta name="description">标签
+ */
+function setPageTdk (router, variable) {
+  var info = {
+    // 采购单位画像
+    'unit_portrayal': {
+      title: variable + '招标采购 - 剑鱼标讯',
+      keywords: variable + ',' + variable +'招标,' + variable + '采购,剑鱼标讯',
+      description: '剑鱼标讯为您提供'+ variable  +'最新招标采购信息、采购单位通讯录、联系人、电话号码、年度项目统计、月度采购规模统计、重点合作企业、重点合作代理机构、各类招标方式占比等多维度信息查询服务,让您更全面的了解'+ variable +'的招标采购动态!'
+    },
+    // 采购单位搜索页
+    'search-middle-buyer': {
+      title: '采购单位查询_采购单位信息_招标采购单位大全 - 剑鱼标讯',
+      keywords: '采购单位,采购人信息,招标单位,招标人信息,业主单位,剑鱼标讯',
+      description: '剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供包括采购单位信息、招标单位信息、采购人信息、招标人信息、业主单位信息的检索查询服务,查看更多招标采购单位详细信息就用剑鱼标讯!'
+    },
+    // 采购单位搜索结果页
+    'search-result-buyer': {
+      title: variable + '相关搜索结果 - 剑鱼标讯',
+      keywords: variable + ','+variable+ '招标,'+variable+'采购,剑鱼标讯',
+      description: '剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供'+variable+'相关的采购单位信息详情,帮助您全面了解采购单位最新动态,获取更多' + variable +'相关搜索结果就上剑鱼标讯!' 
+    }
+  }
+  var headDom = document.getElementsByTagName('head')[0]
+  var _title = headDom.getElementsByTagName("title")[0]
+  var _meta = headDom.getElementsByTagName("meta")
+  _title.innerText = info[router].title
+  for (var index = 0; index < _meta.length; index++) { 
+    switch (_meta[index].name.toLowerCase()) {
+      case 'keywords':
+        _meta[index].content = info[router].keywords
+        break
+      case 'description':
+        _meta[index].content = info[router].description
+        break
+      default:
+        break
+    }
+  }
+}

BIN
src/web/staticres/common-module/vipsubscribe/image/info/vip_vs.png


+ 21 - 9
src/web/staticres/css/pc/index.css

@@ -362,8 +362,8 @@
   background-color: #fff;
 }
 
-.jy-index-search .tips .cai-gou {
-  display: none;
+.jy-index-search .tips .cai-gou{
+  /* display: none; */
 }
 
 .jy-index-search .tips span.active,
@@ -453,14 +453,16 @@
   width: 100%;
   min-height: 811px;
   background-color: #F4F7FB;
-  background-image: url(/images/index/new/bg.png);
-  background-size: 100% 100%;
-
+  background-image: url(/images/index/new/bg.png?v=1);
+  background-size: 1920px 970px;
+  background-position: right bottom;
+  background-repeat: no-repeat;
 }
 
 /* 4大分类 */
 .jy-index-hot {
   /* margin-top: 40px; */
+  margin-bottom: 40px;
 }
 
 .jy-index-hot>.hot-container {
@@ -540,9 +542,19 @@
   text-decoration: none;
 }
 
+.jy-index-register-guide img {
+  width: 100%;
+  height: 100%;
+  cursor: pointer;
+}
+.jy-index-register-guide {
+  height: 112px;
+  margin-bottom: 32px;
+}
+
 /* 独家行业洞察区域 */
 .jy-index-product {
-  padding: 80px 0 50px 0;
+  padding: 40px 0 50px 0;
 }
 
 .jy-index-product .main-product,
@@ -580,7 +592,7 @@
   overflow: hidden;
   max-width: 100%;
     color: #fff;
-    
+
 }
 
 .jy-index-product .svip-product {
@@ -674,8 +686,8 @@
   overflow: hidden; */
 }
 .jy-index-product .product-item {
-  border-radius: 5px;
-  
+  border-radius: 8px;
+
 }
 .jy-index-product .product-item:hover {
   box-shadow: 0px 4px 16px rgba(8, 31, 38, 0.25);

+ 1 - 1
src/web/staticres/css/selector/selector.css

@@ -36,7 +36,7 @@
     border: 1px solid #ebebeb;
 }
 .selector-card {
-    padding: 12px 0;
+    padding: 16px 0;
     display: flex;
     color: #1d1d1d;
     background-color: #fff;

BIN
src/web/staticres/images/index/new/bg.png


BIN
src/web/staticres/images/index/new/register-guide.png


+ 4 - 0
src/web/staticres/js/login.js

@@ -344,6 +344,7 @@ function checkBigStatus () {
         window.fileNum = res.data.fileNum // 超级订阅用户可下载附件次数
         window.isLogin = true // 用于其他页面判断是否已登录
         window.isNewEntNiche = res.data.entIsNew
+        window.isEntService = res.data.isEntService
         sessionStorage.setItem('bidPower', JSON.stringify(res.data.power))
         if (res.data.memberStatus > 0) {
           $(".myorderDiv.lastBox").show()
@@ -2048,5 +2049,8 @@ var loginDialog = {
 
 $(function () {
   loginDialog.init()
+  $('#bidLogin').on('hide.bs.modal', function () {
+    backLogin(false)
+  })
 })
 

+ 247 - 79
src/web/staticres/js/pur-search-index-pc.js

@@ -61,8 +61,9 @@ var vm = new Vue({
         areaCityComponent: areaCityComponent,
         selectListComponent: selectListComponent,
         priceComponent: priceComponent,
-        industrySelector: industrySelector,
-        noData: noDataComponent
+        // industrySelector: industrySelector,
+        noData: noDataComponent,
+        selectLevel2Component: selectLevel2Component,
     },
     data: function () {
         return {
@@ -97,7 +98,7 @@ var vm = new Vue({
                 loaded: false, // 是否已经搜索过
                 loading: false,
                 pageNum: 1, // 当前页, 从0开始
-                pageSize: 50, // 每页多少条数据
+                pageSize: 10, // 每页多少条数据
                 total: 0, // 一共多少条数据
                 listAll: [], // 所有数据
                 list: [] // 查询请求返回的数据
@@ -139,7 +140,35 @@ var vm = new Vue({
             selectId: [],
             selectName: [],
             selectIndustry: [],
-            tempData: []
+            tempData: [],
+            buyClassMap: buyclassArr,
+            buyerPhoneOptions: [
+              {
+                  label: '不限',
+                  value: 0
+              },
+              {
+                  label: '有联系方式',
+                  value: 1
+              },
+              // {
+              //     label: '无联系方式',
+              //     value: 2
+              // }
+            ],
+            buyerClassObj: {},
+            buyerClassArr: [],
+            buyerPhoneState: 0,
+            inIframe: false,
+            isLogin: false,
+            isMember: false,
+            isEntService: false,
+            isNewEntNiche: false,
+            area: {
+              province: [],
+              city: []
+            },
+            loadingOther: false
         }
     },
     watch: {
@@ -171,11 +200,17 @@ var vm = new Vue({
         },
     },
     created: function () {
-      this.initIndustryMap()
-      this.qyCustmer()
-      this.jobRange()
+      var params = goTemplateData.params
+      this.inIframe = goTemplateData.inIframe
+      this.isLogin = params.login && Object.keys(params.login).length > 0
+      this.isMember = params.isMember
+      this.isEntService = params.isEntService
+      this.isNewEntNiche = params.isEntnicheNew
+      // this.initIndustryMap()
+      // this.qyCustmer()
+      // this.jobRange()
       this.initPageData()
-      this.getList(1)
+      this.getList()
     },
     mounted: function () {
         this.initCollectEvent()
@@ -192,11 +227,59 @@ var vm = new Vue({
           this._$SearchEvent = initSearchPageEvent({
             type: 'buyer',
             el: '.search-header-top .input-container',
-            submitSelector: '.search-button'
+            submitSelector: '.search-button',
+            change: (val) => {
+              this.searchContent = val
+            }
           })
         }
     },
     methods: {
+        randomBgc: function () {
+            var arr = ['default', 'blue', 'orange', 'green']
+            var randomIndex = utils.getRandomNumber(0, arr.length - 1)
+            return 'bgc-' + arr[randomIndex]
+        },
+        getShortName: function (comName) {
+            var areaMap = chinaMapJSON || []
+            var shortname = comName
+            // 1. 循环省份城市进行替换
+            areaMap.forEach(function (item) {
+                var p = item.name.replace(/[省市]/, '')
+                if (shortname.indexOf(p) !== -1) {
+                    shortname = shortname.replace(item.name, '').replace(p, '')
+                }
+                item.city.forEach(function (iitem) {
+                    var c = iitem.name.replace(/[省市]/, '')
+                    if (shortname.indexOf(c) !== -1) {
+                        shortname = shortname.replace(iitem.name, '').replace(c, '')
+                    }
+                    iitem.area.forEach(function (iiitem) {
+                        if (shortname.indexOf(iiitem) !== -1) {
+                            shortname = shortname.replace(iiitem, '')
+                        }
+                    })
+                })
+            })
+            var matchRes = shortname.match(/[\u4e00-\u9fa5]{4}/gm)
+            var shortname = matchRes ? matchRes[0] : shortname.slice(0, 4)
+            if (shortname.length < 4) {
+                shortname = shortname.slice(0, 4)
+            }
+            return shortname
+        },
+        buyerClassFilterChange: function (buyerclass) {
+          var buyerclassArr = []
+          this.buyerClassObj = buyerclass
+          for (var key in buyerclass) {
+              buyerclassArr = buyerclassArr.concat(buyerclass[key])
+          }
+          this.buyerClassArr = buyerclassArr
+          this.doSearch()
+        },
+        otherFilterChange: function () {
+          this.doSearch()
+        },
         updatescope(data) {
             // console.log(data)
         },
@@ -206,6 +289,11 @@ var vm = new Vue({
               console.info(this.searchContent)
           }
         },
+        onFocusSearch: function () {
+          this.preSearch.focus=true
+          this.preSearch.list = []
+          this.getPreSearchList()
+        },
         // 采购单位模糊搜索
         getPreSearchList: utils.debounce(function () {
             /**
@@ -220,16 +308,27 @@ var vm = new Vue({
             }
             if (data.name.length < 2) return
             $.ajax({
-                url: '/entnicheNew/customer/buyer/association',
+                url: this.isNewEntNiche ? '/entnicheNew/customer/buyer/association' : '/bigmember/search/buyer/association',
                 method: 'POST',
                 data: data,
                 success: function (res) {
                     if (res.error_code === 0) {
                         if (res.data) {
-                            this.preSearch.list = res.data.list || []
+                            if (this.isNewEntNiche) {
+                              this.preSearch.list = res.data.list || []
+                            } else {
+                              // 非商机管理用户(大会员接口)
+                              var names = []
+                              res.data.list.forEach(function(item){
+                                names.push({
+                                  name: item
+                                })
+                              })
+                              this.preSearch.list = names
+                            }
                         }
                     } else {
-                        this.checkLogin()
+                        // this.checkLogin()
                     }
                 }.bind(this)
             })
@@ -454,53 +553,68 @@ var vm = new Vue({
         doSearch: function () {
             $('.tags-box').hide()
             this.listState.pageNum = 1
-            this.getList(1, 'search')
+            this.getList()
+            try {
+              var val = this.searchContent
+              var baseDesc = '剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供包括采购单位信息、招标单位信息、采购人信息、招标人信息、业主单位信息的检索查询服务,查看更多招标采购单位详细信息就用剑鱼标讯!'
+              var _title = val ? val + '相关搜索结果 - 剑鱼标讯' : '采购单位查询_采购单位信息_招标采购单位大全 - 剑鱼标讯'
+              var _keywords = val ? val +',' + val + '招标,' + val + '采购,剑鱼标讯' : '采购单位,采购人信息,招标单位,招标人信息,业主单位,剑鱼标讯'
+              var _desc = val ? '剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供' + val +'相关的采购单位信息详情,帮助您全面了解采购单位最新动态,获取更多' + val + '相关搜索结果就上剑鱼标讯!' : baseDesc
+              seoTdkUpdate(_title, _keywords, _desc)
+            } catch (error) {}
         },
-        getList: function (p, str) {
+        getList: function () {
             let obj = {
-                entName: this.searchContent.trim(),
-                area: this.entArea,
-                buyerclass: this.tempData,
-                business_scope: this.indusList1,
-                industry: this.getSelected(),
-                entcustomer: this.qyCheck,
-                pageSize: this.listState.pageSize,
-                pageNum: this.listState.pageNum - 1,
+              buyerName: this.searchContent.trim(),
+              province: this.area.province,
+              city: this.area.city,
+              buyerClass: this.buyerClassArr,
+              isCheckFollow: this.isLogin ? true : false,
+              isCheckReceive: this.isLogin ? true : false,
+              isContact: this.buyerPhoneState,
+              pageSize: this.listState.pageSize,
+              pageNum: this.listState.pageNum,
             }
             this.listState.loading = true
             this.listState.loaded = false
             var _this = this
-            let arrs = [], arr1 = []
             $.ajax({
-                url: '/entnicheNew/customer/corList',
+                // /jybx/buyer/:userType/buyerList
+                // fType:免费用户	pType:付费用户	vType:超级订阅用户	mType:大会员用户	eType:商机管理用户
+                // userType传哪个都一样
+                url: '/jyapi/jybx/buyer/eType/buyerList',
                 method: 'POST',
                 data: JSON.stringify(obj),
                 contentType:'application/json;charset=utf-8',
                 success: function (res) {
                     if (res.error_code === 0 && $.isArray(res.data.list)) {
-                        this.listState.listAll = res.data.list
-                        if (res.data.list.length > this.listState.pageSize) {
-                            arrs = res.data.list.slice((p - 1) * this.listState.pageSize, (p - 1) * this.listState.pageSize + this.listState.pageSize) || []
-                        } else {
-                            arrs = res.data.list
-                        }
-                        arrs.forEach(v => {
-                            arr1.push(v.Buyer)
+                        this.listState.total = res.data.count
+                        var buyerNameArr = []
+                        res.data.list.forEach(function(v) {
+                          buyerNameArr.push(v.buyer)
+                          v.buyerShortName = _this.getShortName(v.buyer)
+                          v.randomBgc = _this.randomBgc()
+                          // 所在地区异常数据处理
+                          var same = v.province === v.city // 省份和城市相同
+                          var pBc = v.province &&  v.city && v.province.indexOf(v.city) > -1 // 省份包含城市
+                          var cBp = v.province &&  v.city && v.city.indexOf(v.province) > -1 // 城市包含了省份
+                          if (same || pBc || cBp) {
+                            v.city = ''
+                          }
+                          v.biddingCount = v.biddingCount ? v.biddingCount + '条' : ''
+                          v.contactCount = v.contactCount ? v.contactCount + '个' : ''
+                          v.projectCount = v.projectCount ? v.projectCount + '个' : ''
                         })
-                        if (arrs.length == 0) {
-                            this.listState.list = []
-                        } else {
-                            _this.attentionCheck(arrs, String(arr1))
-                        }
-                        this.listState.total = res.data.list.length
+                        this.listState.list = res.data.list
                         this.listState.loading = false
-                        console.log(this.listState.total, '111');
+                        // this.getBuyerOtherInfo(buyerNameArr)
                     } else {
                         if (res.error_msg) {
-                            toastFn(res.error_msg, 2000)
+                          toastFn(res.error_msg, 2000)
                         }
                         this.listState.list = []
                     }
+                    this.listState.loaded = true
                 }.bind(this),
                 complete: function () {
                     this.listState.loading = false
@@ -508,30 +622,59 @@ var vm = new Vue({
                 }.bind(this)
             })
         },
+        getBuyerOtherInfo: function (arr) {
+            if (!arr || arr.length === 0) return
+            var params = {
+              buyer: arr
+            }
+            this.loadingOther = true
+            var _this = this
+            $.ajax({
+              url: '/jyapi/jybx/buyer/supply/info',
+              method: 'POST',
+              data: JSON.stringify(params),
+              contentType:'application/json;charset=utf-8',
+              success: function (res) {
+                if (res.error_code === 0 && $.isArray(res.data)) {
+                  res.data.forEach(function(r) {
+                    _this.listState.list.forEach(function(v) {
+                      if (r.buyer === v.buyer) {
+                        v.biddingCount = r.biddingCount ? r.biddingCount + '条' : ''
+                        v.contactCount = r.contactCount ? r.contactCount + '个' : ''
+                        v.projectCount = r.projectCount ? r.projectCount + '个' : ''
+                        v.bidAmountCount = r.bidAmountCount
+                      }
+                    })
+                  })
+                }
+                _this.loadingOther = false
+              },
+              complete: function () {
+                _this.loadingOther = false
+              }
+          })
+        },
         onSizeChange: function (val) {
           this.listState.pageSize = val
-          console.log(this.listState.pageSize, 'pagesize');
           this.listState.pageNum = 1
           this.onPageChange(this.listState.pageNum)
         },
         onPageChange: function (p) {
             $('.tags-box').hide()
             this.listState.pageNum = p
-            let arrs = this.listState.listAll, arr1 = [], arr2 = []
             this.listState.loading = true
-            arr1 = arrs.slice((p - 1) * this.listState.pageSize, (p - 1) * this.listState.pageSize + this.listState.pageSize) || []
-            arr1.forEach(v => {
-                arr2.push(v.Buyer)
-            })
-            if (arr1.length == 0) {
-                this.listState.list = []
-            } else {
-                this.attentionCheck(arr1, String(arr2))
-            }
+            var oTop = this.$refs.listContainer.offsetTop - 64 - 16 || 0
+            // 翻页后页面滚动到列表第一条数据的位置
+            document.documentElement.scrollTop = oTop; //ie下
+	          document.body.scrollTop = oTop
+            this.getList()
         },
         goTitle(name) {
-            // location.href = '/entpc/unit_portrayal/' + name
-            window.open('/entpc/unit_portrayal/' + name)
+            if (this.isNewEntNiche) {
+              window.open('/entpc/unit_portrayal/' + name)
+            } else {
+              window.open('/swordfish/page_big_pc/unit_portrayal/' + name)
+            }
         },
         // 全选
         allChange() {
@@ -626,9 +769,9 @@ var vm = new Vue({
                     }
                     arrs.forEach(v => {
                         if (res.data.names.indexOf(v.Buyer) > -1) {
-                            v.follow1 = true
+                            v.isFollowed = true
                         } else {
-                            v.follow1 = false
+                            v.isFollowed = false
                         }
                     })
                     _this.claimcheck(arrs, item)
@@ -693,35 +836,51 @@ var vm = new Vue({
         attention(item, type, str, per) {
             let obj = {}, _this = this
             if (type == 0) {
-                obj = {
-                    name: per ? item : item.Buyer,
-                    province: per ? '' : item.WProvince,
-                    city: per ? '' : item.WCity,
+                // 商机管理的关注
+                if (_this.isNewEntNiche) {
+                  obj = {
+                    name: per ? item : item.buyer,
+                    province: per ? '' : item.province,
+                    city: per ? '' : item.city,
                     mold: type,
-                    B: per ? str : item.follow1,
+                    B: per ? str : item.isFollowed,
+                  }
+                } else {
+                  // 大会员的关注
+                  obj = {
+                    name: per ? item : item.buyer,
+                    province: per ? '' : item.province,
+                    city: per ? '' : item.city,
+                    b: Boolean(item.isFollowed),
+                  }
                 }
             } else {
                 obj = {
-                    name: per ? item : item.customerId,
-                    province: per ? '' : item.WProvince,
-                    city: per ? '' : item.WCity,
+                    name: per ? item : item.recId,
+                    province: per ? '' : item.province,
+                    city: per ? '' : item.city,
                     mold: type,
-                    D: per ? str : item.claim1,
+                    D: per ? str : item.isReceived,
                 }
             }
+            var url = '/entnicheNew/customer/attention'
+            if (type === 0 && _this.isMember) {
+              url = '/publicapply/customer/attention'
+            }
             // console.info(obj)
             $.ajax({
-                url: '/entnicheNew/customer/attention',
+                url: url,
                 method: 'POST',
                 data: JSON.stringify(obj),
                 contentType:'application/json;charset=utf-8',
                 success: function (res) {
+                  if (res.error_code === 0) {
                     if (res.data == false) {
                         if (res.error_msg) {
                           toastFn(res.error_msg, 2000)
                         } else {
                           if (type == 0) {
-                            if (str || item.follow1) {
+                            if (str || item.isFollowed) {
                               toastFn('取消关注失败!', 2000)
                             } else {
                               toastFn('关注失败!', 2000)
@@ -732,7 +891,7 @@ var vm = new Vue({
                         }
                     } else {
                       if (type == 0) {
-                        if (str || item.follow1) {
+                        if (str || item.isFollowed) {
                           toastFn('取消关注成功!', 2000)
                         } else {
                           toastFn('关注成功!', 2000)
@@ -740,12 +899,15 @@ var vm = new Vue({
                       } else {
                         toastFn('取消认领成功!', 2000)
                       }
-                      this.follow = false
-                      this.claim = false
-                      $('.custom-checkbox').prop('checked', false)
-                      _this.selectName = selectDataIds
+                      // this.follow = false
+                      // this.claim = false
+                      // $('.custom-checkbox').prop('checked', false)
+                      // _this.selectName = selectDataIds
                       _this.getList(_this.listState.pageNum)
                     }
+                  } else {
+                    toastFn(res.error_msg, 2000)
+                  }
                 }.bind(this)
             })
         },
@@ -810,11 +972,12 @@ var vm = new Vue({
         },
         guanAndren(item, type, index) {
             if (type == 1) {
-                if (!item.claim1) {
-                    var top = 91 * (index + 1) + 'px'
+                if (!item.isReceived) {
+                    // 根据列表高度计算top值
+                    var top = 95 * (index + 1) + 'px'
                     this.datas = {
-                      name: item.Buyer,
-                      industry: item.Buyerclass
+                      name: item.buyer,
+                      industry: item.buyerClass
                     }
                     $('.tags-box').slideToggle(function () {
                         window.activeTags = []
@@ -938,11 +1101,16 @@ var vm = new Vue({
         },
         areaCityChange: function (area) {
             var city = []
+            var province = []
             for (var key in area) {
+              if (area[key].length === 0) {
+                province.push(key)
+              } else {
                 city = city.concat(area[key])
+              }
             }
-            this.entArea = area
-            // this.searchContent = ''
+            this.area.province = province
+            this.area.city = city
             this.doSearch()
         },
         isFilterShow: function () {
@@ -998,8 +1166,8 @@ var vm = new Vue({
               return mUnit.test(m, type, lv)
             }
         },
-        initCollectEvent () {
-            const _this = this
+        initCollectEvent: function () {
+            var _this = this
             // 自定义标签
             // 标签输入框事件
             $('.tags-box').click(function (e) {

+ 5 - 1
src/web/staticres/js/selector/no-data-pc.js

@@ -4,7 +4,7 @@
 //     <div class="tip-text"><p>{{ tipText }}</p></div>
 // </div>
 // `
-var noDataComponentTemplate = '<div class="no-data"><el-image src="/images/pc_12.png"></el-image><div class="tip-text"><p>{{ tipText }}</p></div></div>'
+var noDataComponentTemplate = '<div class="no-data"><el-image :src="images"></el-image><div class="tip-text"><p>{{ tipText }}</p></div></div>'
 var noDataComponent = {
     name: 'no-data-pc',
     template: noDataComponentTemplate,
@@ -12,6 +12,10 @@ var noDataComponent = {
         tipText: {
             type: String,
             default: '暂无数据'
+        },
+        images: {
+          type: String,
+          default: '/common-module/public/image/jy-back.png'
         }
     }
 }

+ 5 - 5
src/web/staticres/js/superSearch.js

@@ -336,12 +336,12 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
                 if (datas[i].site == '剑鱼信息发布平台') {
                   listHtml += '<span class="tags-item tags-publish">用户发布</span>'
                 }
-                if ($.trim(datas[i].area) != "" && datas[i].area != "A") {
+                if ($.trim(datas[i].area) != "" && datas[i].area != "A"&&datas[i].area.indexOf("免费注册")<0) {
                   listHtml += '<a class="tags-item" href="javascript:;"'+'onclick="gologin('+"'/list/area/"+datas[i].areaadd+".html')"+'">'+datas[i].area+'</a>';
                 } else {
                   listHtml += '<a href="#" style="display:none;"></a>';
                 }
-                if (typeof(type) != "undefined" && type != null && type != "") {
+                if (typeof(type) != "undefined" && type != null && type != ""&&type.indexOf("免费注册")<0) {
                   listHtml += '<a class="tags-item" href="javascript:;"'+'onclick="gologin('+"'/list/stype/"+datas[i].stypeadd+".html')"+'">'+type+'</a>';
                 } else {
                   listHtml += '<a href="#" style="display:none;"></a>';
@@ -351,7 +351,7 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
                 // } else {
                 //   listHtml += '<a href="javascript:volid(0);" style="display:none;"></a>';
                 // }
-                if (typeof(datas[i].buyerclass) != "undefined" && datas[i].buyerclass != null && datas[i].buyerclass != ""&&!is_field && datas[i].buyerclass !== '其它') {
+                if (typeof(datas[i].buyerclass) != "undefined" && datas[i].buyerclass != null && datas[i].buyerclass != ""&&!is_field && datas[i].buyerclass !== '其它'&&datas[i].buyerclass.indexOf("免费注册")<0) {
                   listHtml += '<a class="tags-item" href="javascript:volid(0);"'+'>'+datas[i].buyerclass+'</a>';
                 } else {
                   listHtml += '<a href="javascript:volid(0);" style="display:none;"></a>';
@@ -649,10 +649,10 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
 }
 
 function getacount(bidamount,budget){
-	if(typeof(bidamount) != "undefined" && bidamount != null && bidamount != ""){
+	if(typeof(bidamount) != "undefined" && bidamount != null && bidamount != ""&&bidamount!=="免费注册即可查看"){
 		return bidamount
 	}
-	if(typeof(budget) != "undefined" && budget != null && budget != ""){
+	if(typeof(budget) != "undefined" && budget != null && budget != ""&&budget!=="免费注册即可查看"){
 		return budget
 	}
 	return ""

+ 3 - 1
src/web/staticres/pccss/public-nav-1200.css

@@ -108,7 +108,9 @@
   font-size: 14px;
   margin-top: 20px;
 }
-
+input::placeholder{
+  color: #999!important;
+}
 input::-webkit-input-placeholder {
   color: rgba(255, 255, 255, 0.5);
 }

+ 100 - 18
src/web/staticres/pccss/pur-search-index-pc.css

@@ -24,7 +24,10 @@
 }
 .search-header {
     /* padding: 29px 0 15px; */
-    background-color: #f5f5fb;
+    /* background-color: #f5f5fb; */
+    /* margin-top: 24px; */
+    background: #FFFFFF;
+    border-radius: 8px;
 }
 .search-content {
     padding: 12px 0 28px 0;
@@ -51,7 +54,7 @@
 .input-container {
     position: relative;
 }
-.selector-card {
+.selector-card:not(:last-child) {
     border-bottom: 1px dashed #e0e0e0;
 }
 .selector-card-footer {
@@ -188,8 +191,13 @@
 }
 
 .search-pur-container {
-    margin-top: 28px;
+    margin-top: 16px;
     font-size: 16px;
+    border-radius: 8px;
+    min-height: 400px;
+    padding-bottom: 40px;
+    /* border: 1px solid transparent; */
+    background: #fff;
 }
 .search-pur-container .list-header {
     display: flex;
@@ -220,33 +228,95 @@
     padding: 0;
     margin-left: 20px;
 }
-.search-pur-container .list-header .r-cont .img-c {
+.search-pur-container .pur-info-list {
+    position: relative;
+}
+.search-pur-container .pur-info-list .list-item {
+    display: flex;
+    padding: 18px 16px;
+    border-bottom: 1px solid #EBEBEB;
+}
+.search-pur-container .pur-info-list .list-item:hover {
+    background: #F5F6F7;
+}
+.search-pur-container .list-logo{
+    width: 60px;
+    height: 60px;
+    margin-right: 32px;
+    border-radius: 4px;
+    padding: 8px 12px;
+    flex-shrink: 0;
+    color: #fff;
+    overflow: hidden;
+    font-size: 18px;
+    line-height: 22px
+}
+.search-pur-container .list-logo.bgc-default {
+  background-color: #2cb7ca;
+}
+.search-pur-container .list-logo.bgc-blue {
+  background-color: #f5af5c;
+}
+.search-pur-container .list-logo.bgc-orange {
+  background-color: #58a1e7;
+}
+.search-pur-container .list-logo.bgc-green {
+  background-color: #51cea2;
+}
+.search-pur-container .list-info{
+    flex: 1;
+}
+.search-pur-container .info-name {
+    margin-bottom: 4px;
+    font-size: 18px;
+    line-height: 28px;
+    color: #1D1D1D;
+    cursor: pointer;
+}
+.search-pur-container .info-detail{
+  display: flex;
+  margin-top: 8px;
+}
+.search-pur-container .info-item{
+    display: flex;
+    margin-right: 32px;
+    font-size: 14px;
+    line-height: 22px;
+}
+.search-pur-container .info-item .item-label{
+    color: #999999;
+}
+.search-pur-container .info-item .item-value{
+    color: #1D1D1D;
+}
+.search-pur-container .flex{
+  display: flex;
+}
+.search-pur-container .flex-between{
+    display: flex;
+    justify-content: space-between;
+}
+
+.search-pur-container  .r-cont .img-c {
     display: flex;
     align-items: center;
     cursor: pointer;
 }
-.search-pur-container .list-header .r-cont {
+.search-pur-container .r-cont {
     display: flex;
     align-items: center;
     font-size: 14px;
     color: #686868;
 }
-.search-pur-container .list-header .r-cont img {
+.search-pur-container .r-cont img {
     width: 20px;
     height: 20px;
     margin-right: 4px;
 }
-.search-pur-container .pur-info-list {
-    position: relative;
-}
-.search-pur-container .pur-info-list .list-item {
-    padding: 18px 16px;
-    border-bottom: 1px solid #EBEBEB;
-}
-.search-pur-container .pur-info-list .list-item:hover {
-    background: #F5F6F7;
-}
-.search-pur-container .pur-info-list .list-item .pur-top {
+
+
+
+/* .search-pur-container .pur-info-list .list-item .pur-top {
     border: none;
     padding: 0;
     height: auto;
@@ -280,7 +350,7 @@
 }
 .search-pur-container .pur-info-list .list-item .pur-bot span i {
     color: #1d1d1d;
-}
+} */
 
 
 
@@ -1017,4 +1087,16 @@
   background: #2cb7ca;
   transform: translateX(-50%);
   z-index: 9;
+}
+
+.no-data{
+  margin: 0 auto;
+  padding-top: 100px;
+}
+
+.search-pur-container .pur-info-list .list-item:hover .item-value .el-loading-spinner {
+  background: #F5F6F7;
+}
+.el-loading-mask{
+  background: #fff;
 }

+ 5 - 1
src/web/staticres/public-pc/css/pc-bottom.css

@@ -113,6 +113,11 @@
   /* background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKXSURBVHgB7ZiLcdswDEDhXgbwBuUG8QjqBPUGdSaIN7A6gbOB1AncTCBvYG8gdQJ7AxQ4kTkcReoTQ05yx3eHM02KIPgDSAIkEonER7IAJRBxST8rkp8kGYkhWdriK8mZpCF5XSwWf+GzwIaT7EguOJ6apCAx8JGQAc8TDQ91ZAv3xo56gXoU2C7Buxl/ihjCs/FCskaxPDhNkpGUdtRDnO7SiYjxbHg+1gD6bovhpXeCOaEG9pGRMzAROyt1QN8e5sAuC9Vpx/hyzECbwGjVqOAGbSc6ukETUrgJjJIBJbDd4D4b0IKUVZ7yApTB1kNJKtAA28022+gPtPN9qN63AaW8QXdedgPzcfX+v7x7sDDu5hCVNvCsbWE82r4pBiV6jHdM2w/Y9QqZzedYcPHzbzR+7Y12ZvM3IRt8YntgJdJ8fj9ywp7j/4iyDG4n1lbptWVClWMdkNH17JVdYT583Y1Im1CFXi/0FUgdcGB7rWT2Pd9UQ99MRXMGcvu7DXkMbM82Ll/tGqnZgaNIH6wbXFrhaC5HvQQlHiL5jUj755HY+f+J5GTLWQorId2/Izp83Y8iPd77BQLZRuTXIn/t1Vthf1TlMtPT1sXpxEgwndKJCvupI/X4XMP7QB5FOJ1j5PaGw0eJ6Xdl/OqHOaG4FMrds4kBZbB75x710qH2NioMMfTzDOHN/o+kpHNO49XJ6Ocg6nD5D/+72SFDfuEwPLIr+z272L3akrnReIPj4U7ssPu4VU81/gH0kC61gbCv54BmoF0quVd2JHm6+7Jx2A3nyCPfHCKz8e6jheYMyEjJz+6P0I2ecpaOJK/Qbuo57xjjwPALWwzdlzctsD8gOSpU9DLqcYDB1q+bQNGZlssZEolEwvEf7G8VfkMza2MAAAAASUVORK5CYII=); */
 }
 
+.j-bottom .icon-arrow--up,
+.right-side-box .icon-arrow--up {
+  margin-top: 11px;
+}
+
 /* 上箭头 */
 .icon-arrow--up {
   /* width: 56px;
@@ -130,7 +135,6 @@
   background-repeat: no-repeat;
   background-position: center center;
   background-image: url(/images/index/new/up.png);
-  margin-top: 11px;
 }
 
 .icon-arrow--up.white {

+ 25 - 0
src/web/staticres/public-pc/js/header-nav.js

@@ -357,3 +357,28 @@ function fixScaleScroll () {
     }
   })
 }
+
+// 更改页面head-title, meta-keywords、meta-description  
+// 页面SEO(TDK)
+function seoTdkUpdate (title, keywords, description) {
+  // console.log(goTemplateData, goTemplateData.inIframe);
+  // 目前仅在非工作桌面内设置(在工作桌面内设置会存在问题)
+  if (goTemplateData.inIframe) return
+  var _headDom = '',_title = '',_meta = ''
+  _headDom = document.getElementsByTagName('head')[0]
+  _title = _headDom.getElementsByTagName("title")[0]
+  _meta = _headDom.getElementsByTagName("meta")
+  _title.innerText = title
+  for (var index = 0; index < _meta.length; index++) { 
+    switch (_meta[index].name.toLowerCase()) {
+      case 'keywords':
+        _meta[index].content = keywords
+        break
+      case 'description':
+        _meta[index].content = description
+        break
+      default:
+        break
+    }
+  } 
+}

+ 29 - 2
src/web/staticres/tags/css/no-login-detail.css

@@ -189,6 +189,27 @@
   border: 1px solid #EBEBEB;
   color: #1D1D1D;
 }
+
+.no-login-detail .t-text-buyer {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  border: 0;
+}
+.no-login-detail .t-text-buyer .go-detail {
+  font-size: 14px;
+  margin-left: 22px;
+  color: #2CB7CA;
+  cursor: pointer;
+  text-decoration: none;
+  flex-shrink: 0;
+}
+.no-login-detail .t-text-buyer .go-detail:active,
+.no-login-detail .t-text-buyer .go-detail:focus,
+.no-login-detail .t-text-buyer .go-detail:visited{
+  text-decoration: none;
+  color: #2CB7CA;
+}
 #bidInfoCont table .tab-cont{
   width: 736px;
 }
@@ -215,7 +236,13 @@
   padding: 10px;
 }
 
-.no-login-detail .reg-service {}
+.no-login-detail .reg-service {
+  width: 828px;
+  height: 310px;
+  background: url(/tags/images/bg.png) no-repeat center;
+  background-size: contain;
+  cursor: pointer;
+}
 .no-login-detail .reg-service .service-top{
   border: 1px solid #F9E5C6;
   border-radius: 4px;
@@ -402,4 +429,4 @@
 }
 .no-login-detail .otherinfo .com-status{
 	float: right;
-}
+}

BIN
src/web/staticres/tags/images/bg.png


+ 6 - 6
src/web/staticres/tags/js/no-login-detail.js

@@ -248,7 +248,7 @@ if(goTemplateData.params.obj.subtype=="中标"||goTemplateData.params.obj.subtyp
     count++
   }
   if(count>=5){
-    $("#bidamount").text(bidmt)
+    $("#bidamount").html(bidmt)
     $("#bidInfoTitle").show();
     $("#bidInfoCont").show();
   }
@@ -773,7 +773,7 @@ $(function(){
       }
     }
   });
-  
+
 
   //
   var uli = 960;
@@ -1402,7 +1402,7 @@ var thishtlists = function(){
 	        hthtml += listtitle
 	      }
 	      hthtml +='</a></div></div>'
-	
+
 	      $(".animathistory .htcontent").append(hthtml);
 	    }
     }
@@ -1463,11 +1463,11 @@ if (goTemplateData.params.isVip || goTemplateData.params.isMember || goTemplateD
 var bidamount_class=goTemplateData.params.obj.bidamount
 var budget_class=goTemplateData.params.obj.budget
 var amount=getacount(bidamount_class,budget_class)
-if (amount && amount!="" && amount !== '略'){
+if (amount && amount!=="" && amount !== '略'&& amount.indexOf("免费注册")===-1){
   $(".com-statusbar").append('<span class="com-amount"><a>'+conversionMoeny(amount)+'</a></span>');
 }
 //
-if(publishtime != ""){
+if(publishtime !== ""){
   var diff =goTemplateData.params.obj.publishtimeShorDate
   if(diff != null){
     $(".com-statusbar").append('<span class="com-time"><i class="glyphicon bofangjilu"></i>'+diff+'</span>');
@@ -2183,7 +2183,7 @@ $(function() {
     // 中标联系方式
     var winnerTelContainer = $('#winnertel')
     var winnerTel = winnerTelContainer.text()
-    
+
     if (buyerTel === 'freeView') {
       buyerTelContainer.html('<span class="freeView">点击查看</span>')
     }

+ 6 - 6
src/web/templates/big-member/pc/page_tb.html

@@ -134,7 +134,7 @@
           </div>
           <div class="item-img-group">
             <img
-              src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb1.png'
+              src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb1.png?v=1'
               alt="采购单位通讯录"
             />
           </div>
@@ -164,35 +164,35 @@
               <div class="swiper-wrapper">
                 <div class="swiper-slide">
                   <img
-                    src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-1.png'
+                    src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-1.png?v=1'
                     alt="采购单位通讯录"
                     width="684px"
                   />
                 </div>
                 <div class="swiper-slide">
                   <img
-                    src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-2.png'
+                    src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-2.png?v=1'
                     alt="采购单位通讯录"
                     width="684px"
                   />
                 </div>
                 <div class="swiper-slide">
                     <img
-                      src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-3.png'
+                      src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-3.png?v=1'
                       alt="采购单位通讯录"
                       width="684px"
                     />
                   </div>
                   <div class="swiper-slide">
                     <img
-                      src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-4.png'
+                      src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-4.png?v=1'
                       alt="采购单位通讯录"
                       width="684px"
                     />
                   </div>
                 <div class="swiper-slide">
                   <img
-                          src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-5.png'
+                          src='{{Msg "seo" "cdn"}}/big-member/image/new_info/item-tb2-5.png?v=1'
                           alt="采购单位通讯录"
                           width="684px"
                   />

+ 13 - 0
src/web/templates/frontRouter/pc/entpc/sess/index.html

@@ -105,6 +105,19 @@
 <script>
     $(function () {
       haslogin({{.T.logid}});
+      // 采购单位画像TDK设置
+      var path = location.pathname
+      if (path.indexOf('unit_portrayal') > -1) {
+        try {
+          // 截取采购单位名称
+          var params = path.indexOf('?') > -1 ? path.match(/unit_portrayal\/(\S*)\?/)[1] : path.match(/unit_portrayal\/(\S*)/)[1]
+          var name = decodeURI(params)
+          var title = name + '招标采购 - 剑鱼标讯'
+          var keywords = name +',' + name + '招标,' + name + '采购,剑鱼标讯'
+          var desc = '剑鱼标讯为您提供' + name +'最新招标采购信息、采购单位通讯录、联系人、电话号码、年度项目统计、月度采购规模统计、重点合作企业、重点合作代理机构、各类招标方式占比等多维度信息查询服务,让您更全面的了解' + name + '的招标采购动态!'
+          seoTdkUpdate(title, keywords, desc)
+        } catch (error) {}
+      }
     })
 </script>
 <!--S-百度统计-->

+ 13 - 0
src/web/templates/frontRouter/pc/page_big_pc/sess/index.html

@@ -107,6 +107,19 @@
 <script>
     $(function () {
         haslogin({{.T.logid}});
+        // 采购单位画像TDK设置(也可在page_bigmember_pc子应用里通过MetaInfo插件设置)
+        var path = location.pathname
+        if (path.indexOf('unit_portrayal') > -1) {
+          try {
+            // 截取采购单位名称
+            var params = path.indexOf('?') > -1 ? path.match(/unit_portrayal\/(\S*)\?/)[1] : path.match(/unit_portrayal\/(\S*)/)[1]
+            var name = decodeURI(params)
+            var title = name + '招标采购 - 剑鱼标讯'
+            var keywords = name +',' + name + '招标,' + name + '采购,剑鱼标讯'
+            var desc = '剑鱼标讯为您提供' + name +'最新招标采购信息、采购单位通讯录、联系人、电话号码、年度项目统计、月度采购规模统计、重点合作企业、重点合作代理机构、各类招标方式占比等多维度信息查询服务,让您更全面的了解' + name + '的招标采购动态!'
+            seoTdkUpdate(title, keywords, desc)
+          } catch (error) {}
+        }
     })
     /**
      * @date 2022/12/28 山川环境嵌入搜索

+ 75 - 1
src/web/templates/frontRouter/pc/serviceSystem/free/index.html

@@ -1467,8 +1467,82 @@
                                   <div class="table_content_sortcell"><i class="right"></i></div>
                                   <div class="table_content_sortcell"><i class="right"></i></div>
                               </div>
-                            </div>
+                                <!-- <div class="table_content_r_item cell_wite">
+                                  <div class="table_content_longcell">
+                                    <p class="tit">
+                                      采购单位搜索【NEW】
+                                    </p>
+                                    <p class="text">
+                                      按地区、采购单位类型等高效精准定位目标客户,获取海量客户资源。
+                                    </p>
+                                  </div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                              </div>
+                              <div class="table_content_r_item">
+                                <div class="table_content_longcell">
+                                  <p class="tit">
+                                    企业搜索
+                                  </p>
+                                  <p class="text">
+                                    12+筛选维度灵活组合,搜索企业信息,实现精准分析客户和竞争对手、风险监控。
+                                  </p>
+                                </div>
+                                <div class="table_content_sortcell"><i class="right"></i></div>
+                                <div class="table_content_sortcell"><i class="right"></i></div>
+                                <div class="table_content_sortcell"><i class="right"></i></div>
+                                <div class="table_content_sortcell"><i class="right"></i></div>
+                                <div class="table_content_sortcell"><i class="right"></i></div>
+                            </div> -->
+                          </div>
                          </div>
+                         <div class="table_content">
+                          <div class="table_content_l">
+                             <span>采购单位数据库</span>
+                          </div>
+                          <div class="table_content_r">
+                              <div class="table_content_r_item  cell_wite">
+                                  <div class="table_content_longcell">
+                                      <p class="tit">
+                                        采购单位搜索【NEW】
+                                      </p>
+                                      <p class="text">
+                                        按地区、采购单位类型等高效精准定位目标客户,获取海量客户资源。
+                                      </p>
+                                  </div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                              </div>
+                          </div>
+                        </div>
+                        <div class="table_content">
+                          <div class="table_content_l">
+                             <span>企业数据库</span>
+                          </div>
+                          <div class="table_content_r">
+                              <div class="table_content_r_item">
+                                  <div class="table_content_longcell">
+                                      <p class="tit">
+                                        企业搜索
+                                      </p>
+                                      <p class="text">
+                                        12+筛选维度灵活组合,搜索企业信息,实现精准分析客户和竞争对手、风险监控。
+                                      </p>
+                                  </div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                                  <div class="table_content_sortcell"><i class="right"></i></div>
+                              </div>
+                          </div>
+                        </div>
                          <div class="table_content">
                             <div class="table_content_l">
                                <span>超前项目推荐</span>

+ 24 - 4
src/web/templates/pc/index.html

@@ -22,7 +22,7 @@
   <link href='{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}' rel="stylesheet">
   <link href="//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/theme-chalk/index.css" rel="stylesheet" />
   <link href='{{Msg "seo" "cdn"}}/css/collect-user-info.css?v={{Msg "seo" "version"}}' rel="stylesheet">
-  <link href='//cdn-common.jianyu360.com/cdn/assets/iconfont/pc/23.5.23/iconfont.css' rel="stylesheet" />
+  <link href='//cdn-common.jianyu360.com/cdn/assets/iconfont/pc/23.6.9/iconfont.css' rel="stylesheet" />
   <script src="//cdn-common.jianyu360.com/cdn/lib/vue/2.7.14/vue.min.js"></script>
   </head>
 	<body>
@@ -121,6 +121,13 @@
             </div>
           </div>
         </div>
+        {{if .T.hasLogin}}
+        {{else}}
+        <!-- 未登录引导注册广告 -->
+        <div class="w1200 jy-index-register-guide CfadeInUp">
+          <img onclick='openLoginDigForReg();openLoginDig();' src='{{Msg "seo" "cdn"}}/images/index/new/register-guide.png?v={{Msg "seo" "version"}}' alt="首页-引导注册">
+        </div>
+        {{end}}
         <!-- 独家行业洞察区域 -->
         <div class="jy-index-product CfadeInUp">
           <h3 class="module-title">核心功能推荐</h3>
@@ -166,6 +173,7 @@
             <span class="info-type"><i class="iconfont icon-danweileixing"></i>按信息类型</span>
             <span class="hot-bidding"><i class="iconfont icon-remenzhaobiao"></i>热门招标</span>
             <span class="hot-subject"><i class="iconfont icon-biaodewu"></i>热门标的物</span>
+            <span class="hot-buyer"><i class="iconfont icon-caigoudanwei"></i>热门采购单位</span>
             <span class="recommend"><i class="iconfont icon-shiyongtuijian"></i>实用内容推荐</span>
           </div>
           <div class="links-item-content">
@@ -254,6 +262,11 @@
                 {{end}}
               </ul>
             </div>
+            <div class="hot-buyer-content simple-show">
+                {{range $k,$v := .T.hotBuyers}}
+                  <a class="tab-link tab-label" href="{{$v.Url}}" target="_blank">{{$v.Name}}</a>
+                {{end}}
+            </div>
           </div>
         </div>
       </div>
@@ -589,7 +602,9 @@
         if(localStorage.pcMainSearchRangeForContent == 'true'){
           $('input[name="selectType"]').val('title,content')
         }
-        this.getBuyerSearchPower() // 采购单位搜索权限
+
+        // this.lunBoFn() // banner轮播
+        // this.getBuyerSearchPower() // 采购单位搜索权限
         // this.getOnlineDataFn() // 在线数据
         this.setCopyRightForBottom() // 设置copyright
         this.onClickEvent()
@@ -761,7 +776,7 @@
           adBottomFn()
         }, 2000)
         function adBottomFn () {
-          console.log(window.memberStatus, 'dahuiyuan');
+          // console.log(window.memberStatus, 'dahuiyuan');
           // 是大会员则不显示底部广告位
           if (window.memberStatus > 0) {
             // 首页底部广告位隐藏
@@ -1025,7 +1040,12 @@
       }else{
         submitNavHeaderSearch('zbIndex')
       }
-
+    } else if (activeTab === 'cg') {
+      if(!loginflag){
+        window.location.href= '/jylab/purSearch/index.html' + '?' + $('#zbIndex').serialize()
+      }else{
+        submitNavHeaderSearch('zbIndex')
+      }
     } else {
       sessionStorage.removeItem('is-click-search')
       submitNavHeaderSearch('zbIndex') //打开工作桌面并传入form ID

+ 18 - 1
src/web/templates/pc/notin.html

@@ -47,9 +47,26 @@ $(function(){
 		}
 	});
   $(".login-dig-icon-close").click(function(e){
-    window.location.href="/";
+    if(getParam('close_goBack') == '1'){
+      window.history.go(-1)
+    } else if(getParam('close_goUrl')){
+      window.location.href= decodeURIComponent(getParam('close_goUrl'))
+    }else{
+      window.location.href="/";
+    }  
   });
 });
+function getParam (name) {
+        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+        var r = window.location.search.substr(1).match(reg); //获取url中'?'符后的字符串并正则匹配
+
+        var context = '';
+        if (r != null) context = r[2];
+        // 释放变量
+        reg = null;
+        r = null;
+        return context == null || context == '' || context == 'undefined' ? '' : context;
+    }
 </script>
 {{include "/common/baiducc.html"}}
 </body>

+ 187 - 105
src/web/templates/pc/pursearchindex.html

@@ -1,9 +1,9 @@
 
 <html lang="zh-cn">
 	<head>
-		<title>招标搜索结果_{{Msg "seo" "qfw.swordfishsl.title"}}</title>
-		<meta name="Keywords" content="{{Msg "seo" "qfw.swordfishsl.key"}}"/>
-		<meta name="Description" content="{{Msg "seo" "qfw.swordfishsl.description"}}"/>
+		<title>{{if eq .T.isLogin 1}}招标搜索结果_{{Msg "seo" "qfw.swordfishsl.title"}}{{else}}{{if ne .T.searchvalue "" }}{{.T.searchvalue}}相关搜索结果 - 剑鱼标讯{{else}}采购单位查询_采购单位信息_招标采购单位大全 - 剑鱼标讯{{end}}{{end}}</title>
+		<meta name="Keywords" content="{{if eq .T.isLogin 1}}{{Msg "seo" "qfw.swordfishsl.key"}}{{else}}{{if ne .T.searchvalue "" }}{{.T.searchvalue}},{{.T.searchvalue}}招标,{{.T.searchvalue}}采购,剑鱼标讯{{else}}采购单位,采购人信息,招标单位,招标人信息,业主单位,剑鱼标讯{{end}}{{end}}"/>
+		<meta name="Description" content="{{if eq .T.isLogin 1}}{{Msg "seo" "qfw.swordfishsl.description"}}{{else}}{{if ne .T.searchvalue "" }}剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供{{.T.searchvalue}}相关的采购单位信息详情,帮助您全面了解采购单位最新动态,获取更多{{.T.searchvalue}}相关搜索结果就上剑鱼标讯!{{else}}剑鱼标讯是国内专业的招标采购单位信息查询平台,为您提供包括采购单位信息、招标单位信息、采购人信息、招标人信息、业主单位信息的检索查询服务,查看更多招标采购单位详细信息就用剑鱼标讯!{{end}}{{end}}"/>
 		<meta name="renderer" content="webkit">
 		<meta content="telephone=no" name="format-detection"/>
         <meta content="招标搜索" theme="light" name="enable-header"/>
@@ -23,7 +23,7 @@
         <style>
             .search-container {
                 line-height: 1;
-                padding-top: 64px;
+                padding-top: 88px;
                 min-height: calc(100vh - 364px);
             }
             .in-iframe .search-container {
@@ -49,16 +49,54 @@
             .in-iframe[data-page-name=entSearch] .search-header .search-header-content {
               padding-right: 24px;
             }
+            .selector-card-header{
+              min-width: 120px;
+            }
+            .select-group-container .bgc,
+            .selector-content .j-button-item.button-level-0{
+              font-weight: normal;
+            }
+            .selector-content .j-button-item.button-level-1{
+              color: #2abed1;
+              font-weight: normal;
+            }
+            .selector-card-container{
+              background-color: #fff;
+              border-radius: 8px;
+            }
+            /* .search-pur-container{
+              min-height: 400px;
+              padding-bottom: 40px;
+              border: 1px solid transparent;
+              background: #fff;
+            } */
+            .el-pagination-container{
+              margin-top: 0;
+            }
+            .el-pagination-container .el-pagination{
+              top: 24px;
+            }
+            .el-pagination__jump{
+              margin-left: 4px;
+            }
+            .item-value .el-loading-spinner{
+              margin-top: -14px;
+            }
+            .item-value .circular{
+              width: 24px;
+              height: 24px;
+            }
         </style>
 	</head>
 
 	<body>
 	{{include "/common/pchead.html"}}
-	<section class="search-container">
-        <div class="vue-search-container" id="pur-search-container" v-cloak>
+	<section class="search-container" style="background-color: #F5F5F5;">
+        <div class="w vue-search-container" id="pur-search-container" v-cloak>
             <div class="search-header">
                 <div class="search-header-tab">
-                  <span class="tab-item tab-active">采购单位搜索</span>
+                  <span class="tab-item" style="display:none;" v-show="!isLogin && !inIframe" @click="location.replace('/jylab/supsearch/index.html')">招标采购公告</span>
+                  <span class="tab-item tab-active" @click="location.replace('/jylab/purSearch/index.html')">采购单位搜索</span>
                 </div>
                 <div class="search-header-content w">
                     <div class="search-header-top">
@@ -67,7 +105,7 @@
                                 placeholder="输入采购单位名称"
                                 v-model.trim="searchContent"
                                 clearable
-                                @focus="preSearch.focus=true"
+                                @focus="onFocusSearch"
                                 @blur="preSearch.focus=false"
                                 @input="getPreSearchList"
                                 @keyup.enter.native="doSearch">
@@ -115,21 +153,45 @@
                 </div>
             </div>
             <div class="search-content w">
-                <div class="tit-r">
+                <!-- <div class="tit-r">
                     <span class="mesg-box" @click="yeFan">
                         <i class="el-icon-jy-top-mesg"></i>
                         <span>业务范围设置</span>
                     </span>
-                </div>
+                </div> -->
                 <div class="selector-card-container search-filters">
                     <div class="selector-card">
-                        <div class="selector-card-header">选择区域:</div>
+                        <div class="selector-card-header">所在地:</div>
                         <div class="selector-card-content">
-                            <area-city-component @change="areaCityChange"></area-city-component>
+                            <area-city-component :show-selected-list="false" @change="areaCityChange" style="padding-right:0;"></area-city-component>
                         </div>
                     </div>
+                    <div class="selector-card">
+                      <div class="selector-card-header">采购单位类型:</div>
+                      <div class="selector-card-content">
+                        <select-level2-component
+                            :init-selected="buyerClassObj"
+                            :map="buyClassMap"
+                            ref="buyerClassFilter"
+                            @change="buyerClassFilterChange"
+                        ></select-level2-component>
+                      </div>
+                    </div>
+                    <div class="selector-card">
+                      <div class="selector-card-header">采购单位联系方式:</div>
+                      <div class="selector-card-content flex mini-select">
+                        <el-select v-model="buyerPhoneState" @change="otherFilterChange" placeholder="采购单位联系方式">
+                          <el-option
+                              v-for="item in buyerPhoneOptions"
+                              :key="item.value"
+                              :label="item.label"
+                              :value="item.value">
+                          </el-option>
+                        </el-select>
+                      </div>
+                    </div>
                     <!--行业分类-->
-                    <div class="industry-lis-t">
+                    <!-- <div class="industry-lis-t">
                         <div class="indus-tit">行业分类:</div>
                         <div class="selector-content" :class="{ 'no-more': !showMore }">
                             <div class="select-group-container" >
@@ -179,14 +241,14 @@
                             <span class="action-text">${ showMore ? '收起' : '更多' }</span>
                             <span class="el-icon-arrow-down" :class="showMore ? 'rotate180' : ''"></span>
                         </span>
-                    </div>
+                    </div> -->
                     <!-- 客户分类 -->
-                    <div class="customer-card industry bus-card">
-                        <div class="leftTitle r-industry">客户分类:</div>
-                        <industry-selector @datachange="dataChange"></industry-selector>
-                    </div>
+                    <!-- <div class="customer-card industry bus-card">
+                        <div class="leftTitle r-industry">采购单位类型:</div>
+                        <industry-selector :useShowMore="false" @datachange="dataChange"></industry-selector>
+                    </div> -->
                     <!-- 业务范围 -->
-                    <div class="customer-card industry job-card">
+                    <!-- <div class="customer-card industry job-card">
                         <div class="leftTitle r-industry">业务范围:</div>
                         <div class="right_msg">
                             <span class="spa" :class="{g_active:qutive1}" @click="quanBu1('全部')">全部</span>
@@ -197,70 +259,88 @@
                                 :class="{'g_active':caiIndex1.indexOf(index)>-1}"
                                 @click="caiIndus1(item,index)"
                             >${String(item.key)}
-                                <!-- <i v-for="(ite,indx) in item.a_key" :key="indx">${keyChange(ite.appendkey,ite.key,ite.notkey)}</i> -->
                             </span>
                         </div>
-                    </div>
+                    </div> -->
                     <!-- 企业历史客户 -->
-                    <div class="qy-card">
+                    <!-- <div class="qy-card">
                         <div class="leftTitle r-industry">企业历史客户:</div>
                         <el-checkbox-group v-model="qyCheck" @change="qyChange">
                             <el-checkbox v-for="(item, index) in qyData" :label="item">${item}</el-checkbox>
                         </el-checkbox-group>
-                        <!-- <div class="stops qy-more">更多</div> -->
-                    </div>
+                    </div> -->
                 </div>
-                <div class="search-pur-container">
-                    <div class="list-header">
-                        <div class="r-head">
-                            <input class="custom-checkbox check-all" @click="allChange" name="bus-list" type="checkbox" dataid="" />
-                            <span>客户列表</span>
-                        </div>
-                        <div class="r-cont">
-                            <div class="img-c" @click="allGuanren(0)">
-                                <img src='{{Msg "seo" "cdn"}}/images/focused.png' v-if="follow">
-                                <img src='{{Msg "seo" "cdn"}}/images/focus.png' v-else>
-                                <i v-if="follow">已关注</i>
-                                <i v-else>关注</i>
-                            </div>
-                            <div class="img-c" @click="allGuanren(1)">
-                                <img src='{{Msg "seo" "cdn"}}/images/renling_active.png' v-if="claim" style="margin-left: 16px;">
-                                <img src='{{Msg "seo" "cdn"}}/images/renling.png' v-else style="margin-left: 16px;">
-                                <i v-if="claim">已认领</i>
-                                <i v-else>认领</i>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="pur-info-list" v-loading="listState.loading">
-                        <div class="list-item" v-for="(item, index) in listState.list" :key="index">
-                            <div class="list-header pur-top">
-                                <div class="tit">
-                                    <input class="custom-checkbox single-txt-checkbox" @click="singleChange()" name="bus-list" type="checkbox" :dataid="item.customerId" :dataname="item.Buyer" :dataindustry="item.Buyerclass" />
-                                    <div class="img-tit" @click="goTitle(item.Buyer)">${item.Buyer}</div>
+                <div class="search-pur-container" v-loading="listState.loading" ref="listContainer">
+                  <div>
+                      <div class="pur-info-list">
+                          <div class="list-item" v-for="(item, index) in listState.list" :key="index">
+                            <div class="list-logo" :class="item.randomBgc">${item.buyerShortName ? item.buyerShortName.slice(0,4) : item.buyer.slice(0,4)}</div>
+                            <div class="list-info">
+                              <div class="info-name" @click="goTitle(item.buyer)">${item.buyer}</div>
+                              <div class="info-detail  flex-between">
+                                <div class="flex">
+                                  <div class="info-item">
+                                    <span class="item-label">所在地:</span>
+                                    <span class="item-value">${item.province || '-'} ${item.city || ''}</span>
+                                  </div>
+                                  <div class="info-item">
+                                    <span class="item-label">采购单位类型:</span>
+                                    <span class="item-value">${item.buyerClass || '-'}</span>
+                                  </div>
                                 </div>
-                                <div class="r-cont">
-                                    <div class="img-c" @click="guanAndren(item, 0, index)">
-                                        <img src='{{Msg "seo" "cdn"}}/images/focused.png' v-if="item.follow1">
-                                        <img src='{{Msg "seo" "cdn"}}/images/focus.png' v-else>
-                                        <i v-if="item.follow1">已关注</i>
-                                        <i v-else>关注</i>
-                                    </div>
-                                    <div class="img-c" @click="guanAndren(item, 1, index)">
-                                        <img src='{{Msg "seo" "cdn"}}/images/renling_active.png' v-if="item.claim1" style="margin-left: 16px;">
-                                        <img src='{{Msg "seo" "cdn"}}/images/renling.png' v-else style="margin-left: 16px;">
-                                        <i v-if="item.claim1">已认领</i>
-                                        <i v-else>认领</i>
-                                    </div>
+                                <div class="r-cont" v-if="isLogin">
+                                  <div class="img-c" @click="guanAndren(item, 0, index)" v-show="isMember || isNewEntNiche">
+                                      <img src='{{Msg "seo" "cdn"}}/images/focused.png' v-if="item.isFollowed">
+                                      <img src='{{Msg "seo" "cdn"}}/images/focus.png' v-else>
+                                      <i v-if="item.follow1">已关注</i>
+                                      <i v-else>关注</i>
+                                  </div>
+                                  <div class="img-c" @click="guanAndren(item, 1, index)" v-show="isNewEntNiche || isEntService">
+                                      <img src='{{Msg "seo" "cdn"}}/images/renling_active.png' v-if="item.isReceived" style="margin-left: 16px;">
+                                      <img src='{{Msg "seo" "cdn"}}/images/renling.png' v-else style="margin-left: 16px;">
+                                      <i v-if="item.claim1">已认领</i>
+                                      <i v-else>认领</i>
+                                  </div>
                                 </div>
+                              </div>
+                              <!-- <div class="info-detail flex-between">
+                                <div class="flex">
+                                  <div class="info-item">
+                                    <span class="item-label">招标动态:</span>
+                                    <span class="item-value" v-loading="loadingOther">${item.biddingCount || '-'}</span>
+                                  </div>
+                                  <div class="info-item">
+                                    <span class="item-label">历史联系人:</span>
+                                    <span class="item-value" v-loading="loadingOther">${item.contactCount || '-'}</span>
+                                  </div>
+                                  <div class="info-item">
+                                    <span class="item-label">采购项目数量:</span>
+                                    <span class="item-value" v-loading="loadingOther">${item.projectCount || '-'}</span>
+                                  </div>
+                                  <div class="info-item">
+                                    <span class="item-label">采购规模:</span>
+                                    <span class="item-value" v-loading="loadingOther">${moneyUnit(item.bidAmountCount) || '-'}</span>
+                                  </div>
+                                </div>
+                                <div class="r-cont" v-if="isLogin">
+                                  <div class="img-c" @click="guanAndren(item, 0, index)" v-show="isMember || isNewEntNiche">
+                                      <img src='{{Msg "seo" "cdn"}}/images/focused.png' v-if="item.isFollowed">
+                                      <img src='{{Msg "seo" "cdn"}}/images/focus.png' v-else>
+                                      <i v-if="item.follow1">已关注</i>
+                                      <i v-else>关注</i>
+                                  </div>
+                                  <div class="img-c" @click="guanAndren(item, 1, index)" v-show="isNewEntNiche || isEntService">
+                                      <img src='{{Msg "seo" "cdn"}}/images/renling_active.png' v-if="item.isReceived" style="margin-left: 16px;">
+                                      <img src='{{Msg "seo" "cdn"}}/images/renling.png' v-else style="margin-left: 16px;">
+                                      <i v-if="item.claim1">已认领</i>
+                                      <i v-else>认领</i>
+                                  </div>
+                                </div>
+                              </div> -->
                             </div>
-                            <div class="pur-bot">
-                                <span>项目数量:<i>${item.PNCount || '-'}</i></span>
-                                <span>项目总金额:<i>${moneyUnit(item.Budget) || '-'}</i></span>
-                                <span>所在地:<i>${item.WProvince || '-'} ${item.WCity || ''}</i></span>
-                            </div>
-                        </div>
-                        <!-- 自定义标签弹框 -->
-                        <div class="tags-box">
+                          </div>
+                          <!-- 自定义标签弹框 -->
+                          <div class="tags-box">
                             <div class="tags-inputs">
                                 <div class="tag-input">
                                     <div class="tag-labels"></div>
@@ -274,23 +354,23 @@
                                 <div class="tags-button button-confirm">确认添加</div>
                                 <div class="tags-button button-cancel">暂不添加</div>
                             </div>
-                        </div>
-                    </div>
-                </div>
-                <no-data style="display: none;" v-show="listState.list.length === 0 && listState.loaded" tip-text="没有找到符合条件的企业"></no-data>
-                <div class="el-pagination-container" v-if="listState.total > 0">
-                    <el-pagination
-                        popper-class="pagination-custom-select"
-                        background
-                        layout="prev, pager, next, sizes, jumper"
-                        :current-page="listState.pageNum"
-                        :page-size="listState.pageSize"
-                        :total="listState.total"
-                        @current-change="onPageChange"
-                        @size-change="onSizeChange"
-                        :page-sizes="[5, 10, 50, 100]"
-                        :show-confirm-btn="true"
-                    ></el-pagination>
+                          </div>
+                      </div>
+                      <no-data style="display: none;" v-show="!listState.loading && listState.list.length === 0 && listState.loaded" tip-text="没有找到符合条件的企业"></no-data>
+                      <div v-loading="loadingOther" class="el-pagination-container" v-if="listState.list.length > 0 && listState.loaded">
+                        <el-pagination
+                            popper-class="pagination-custom-select"
+                            background
+                            layout="prev, pager, next, jumper"
+                            :current-page="listState.pageNum"
+                            :page-size="listState.pageSize"
+                            :total="listState.total"
+                            @current-change="onPageChange"
+                            @size-change="onSizeChange"
+                            :show-confirm-btn="true"
+                        ></el-pagination>
+                      </div>
+                  </div>
                 </div>
             </div>
             <div class="search-footer w"></div>
@@ -310,35 +390,37 @@
         }
         haslogin({{.T.logid}})
 	</script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/buyerClass.js'></script>
   <script src='{{Msg "seo" "cdn"}}/common-module/public/js/china-map-data.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/provinceMap.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/js/selector/select-list-pc.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/js/selector/select-level2-pc.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/js/selector/area-city-pc.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/js/selector/price-pc.js?v={{Msg "seo" "version"}}'></script>
-  <script src='{{Msg "seo" "cdn"}}/js/selector/bus-search-industry.js?v={{Msg "seo" "version"}}'></script>
+  <!-- <script src='{{Msg "seo" "cdn"}}/js/selector/bus-search-industry.js?v={{Msg "seo" "version"}}'></script> -->
   <script src='{{Msg "seo" "cdn"}}/js/selector/no-data-pc.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/js/purSearch.js?v={{Msg "seo" "version"}}'></script>
-  <script src='{{Msg "seo" "cdn"}}/js/pur-search-index-pc.js?v={{Msg "seo" "version"}}1'></script>
+  <script src='{{Msg "seo" "cdn"}}/js/pur-search-index-pc.js?v={{Msg "seo" "version"}}2'></script>
   <script type="text/javascript">
       var industry = {{.T.industry}}!=null?{{.T.industry}}:"";
       var industrylist = {{.T.industrylist}}!=null?{{.T.industrylist}}:"";
       var sortArray = {{.T.sortArray}}!=null?{{.T.sortArray}}:"";
       var selectPublishtime = {{.T.publishtime}}?{{.T.publishtime}}:"thisyear";
-      $(function() {
-          // 客户分类
-          $('.bus-card').find('.right_msg').css('height','22px')
-          $('.bus-card').find('.cus-more').click(function() {
-              var txts = $(this).html()
-              if (txts == '更多') {
-                  $(this).html('收起')
-                  $('.bus-card').find('.right_msg').css('height','auto')
-              } else {
-                  $(this).html('更多')
-                  $('.bus-card').find('.right_msg').css('height','22px')
-              }
-          })
+      // $(function() {
+      //     // 客户分类
+      //     $('.bus-card').find('.right_msg').css('height','22px')
+      //     $('.bus-card').find('.cus-more').click(function() {
+      //         var txts = $(this).html()
+      //         if (txts == '更多') {
+      //             $(this).html('收起')
+      //             $('.bus-card').find('.right_msg').css('height','auto')
+      //         } else {
+      //             $(this).html('更多')
+      //             $('.bus-card').find('.right_msg').css('height','22px')
+      //         }
+      //     })
 
-      })
+      // })
   </script>
   <script type="text/javascript">
     setTimeout(function(){

+ 3 - 0
src/web/templates/pc/subscribe_new.html

@@ -301,6 +301,7 @@
                     <li class="double"><div>推送设置</div><div>固定时间/实时推送</div></li>
                     <li class="gray double"><div>标讯高级搜索</div><div>按联系方式、附件、项目名称/标的物、发布时间搜索</div></li>
                     <li class="double"><div>企业搜索</div><div>按中标项目/标的物、联系方式等搜索企业信息</div></li>
+                    <li class="double"><div>采购单位搜索</div><div>按地区、采购单位类型等搜索采购单位信息,高效精准拓客</div></li>
                     <li class="gray">周报/月报</li>
                     <li class=" double"><div>标讯收藏</div><div>关注项目一键收藏,重要信息不遗漏</div></li>
                     <li class="gray">专属资源社群对接</li>
@@ -321,6 +322,7 @@
                     <li class="double"><i class="wrong"></i></li>
                     <li class="gray double"><i class="wrong"></i></li>
                     <li class="double">4条/次</li>
+                    <li class="double"><i class="right"></i></li>
                     <li class="gray "><i class="wrong"></i></li>
                     <li class=" double">100条</li>
                     <li class="gray"><i class="wrong"></i></li>
@@ -344,6 +346,7 @@
                     <li class="double">可选</li>
                     <li class="gold double"><i class="right"></i></li>
                     <li class=" double">150条/次</li>
+                    <li class=" double"><i class="right"></i></li>
                     <li class="gold "><i class="right"></i></li>
                     <li class="double">5000条</li>
                     <li class="gold "><i class="right"></i></li>

+ 3 - 0
src/web/templates/pc/supsearch.html

@@ -750,6 +750,7 @@
         <span class="search-tab-item nologin-hide" :class="{'tab-active': searchTab === 0}" @click="onSearchTab(0)">全部</span>
         <span class="search-tab-item" :class="{'tab-active': searchTab === 1}" @click="onSearchTab(1)">招标采购公告</span>
         <span class="search-tab-item badge-recommend nologin-hide" :class="{'tab-active': searchTab === 2}" @click="onSearchTab(2)">超前项目</span>
+        <span class="search-tab-item tab-item-buyer-search" style="display: none;"  @click="location.replace('/jylab/purSearch/index.html')">采购单位搜索</span>
       </div>
       <!--搜索-->
       <div class="searchInput clearfix" :class="{'change-search-input': showAddKeyword || keywordMult}">
@@ -1645,6 +1646,7 @@
       $('.city-list-divide').addClass('hide')
       $('#sideIcon').addClass('hide')
       searchInnerVue.$refs.areaRefs.shoWcity=false//隐藏地市
+      $('.tab-item-buyer-search').show()
     }
     window.loginCallback = function () {//登录成功回调
       $('#go-customer-4').removeClass('hide')
@@ -1653,6 +1655,7 @@
       $('#sideIcon').removeClass('hide')
       searchInnerVue.$refs.areaRefs.shoWcity=true //显示地市
       searchInnerVue.islogin=true
+      $('.tab-item-buyer-search').hide()
       /**
        * @date 2022/12/15 山川环境嵌入搜索
        */

+ 19 - 43
src/web/templates/pc/tags/detail.html

@@ -98,32 +98,39 @@
                 <table class="info-table">
                   <tr>
                     <td class="t-label ">省份</td>
-                    <td class="t-text">{{if eq .T.obj.area "A"}}全国{{else}}{{.T.obj.area}}{{end}}</td>
+                    <td class="t-text">{{if .T.obj.area}}{{if eq .T.obj.area "A"}}全国{{else}}{{Html .T.obj.area}}{{end}}{{end}}</td>
                     <td class="t-label ">城市</td>
-                    <td class="t-text">{{.T.obj.city}}</td>
+                    <td class="t-text">{{if .T.obj.city}}{{Html .T.obj.city}}{{end}}</td>
                   </tr>
                   <tr>
                     <td class="t-label " style="padding-right: 0px;">招标代理机构</td>
                     <td class="t-text">
-                      <div class="cont-cont">{{.T.obj.agency}}</div>
+                      <div class="cont-cont">{{if .T.obj.agency}}{{Html .T.obj.agency}}{{end}}</div>
                     </td>
                     <td class="t-label ">项目名称</td>
                     <td class="t-text">
-                      <div class="cont-cont">{{.T.obj.projectname}}</div>
+                      <div class="cont-cont">{{if .T.obj.projectname}}{{Html .T.obj.projectname}}{{end}}</div>
                     </td>
                   </tr>
                   <tr>
                     <td class="t-label ">采购单位</td>
-                    <td class="t-text">{{.T.obj.buyer}}</td>
+                    <td class="t-text t-text-buyer">
+                      <span>{{.T.obj.buyer}}</span>
+                      {{if .T.obj.buyer}}
+                        {{if ne  .T.obj.buyer ""}}
+                        <a href="/swordfish/page_big_pc/unit_portrayal/{{.T.obj.buyer}}" target="_blank" class="go-detail">立即查看</a>
+                        {{end}}
+                      {{end}}
+                    </td>
                     <td class="t-label " style="padding-right: 9px;">采购联系人</td>
                     <td class="t-text">
-                      <div class="cont-cont">{{.T.obj.buyerperson}}</div>
+                      <div class="cont-cont">{{if .T.obj.buyerperson}}{{Html .T.obj.buyerperson}}{{end}}</div>
                     </td>
                   </tr>
                   <tr>
                     <td class="t-label ">采购电话</td>
                     <td class="t-text">
-                      <div class="cont-cont buyertel">{{.T.obj.buyertel}}</div>
+                      <div class="cont-cont buyertel">{{if .T.obj.buyertel}}{{Html .T.obj.buyertel}}{{end}}</div>
                     </td>
                     <td class="t-label  piddingfour" id="tdbudget"></td>
                     <td class="t-text">
@@ -133,7 +140,7 @@
                   <tr id="baselast" style="display:none;">
                     <td class="t-label">拟定单一来源采购供应商</td>
                     <td class="t-text">
-                      <div class="cont-cont">{{.T.obj.winner}}</div>
+                      <div class="cont-cont">{{if .T.obj.winner}}{{Html .T.obj.winner}}{{end}}</div>
                     </td>
                     <td class="t-label"></td>
                     <td class="t-text">
@@ -152,7 +159,7 @@
                       <div>
                         {{ range $index, $value := .T.obj.winnerMap }}
                         <span style='position: relative;'>
-                          <span class="cont-cont portrait_img winners" >{{$index}}</span>
+                          <span class="cont-cont portrait_img winners" >{{Html $index}}</span>
                           <span class="winner-point">、</span>
                         </span>
                         {{ end }}
@@ -160,7 +167,7 @@
                       {{else}}
                       <div>
                           {{ range $index, $value := .T.obj.winnerMap }}
-                          <span class="cont-cont portrait_img no-show-tip winners">{{$index}}</span>
+                          <span class="cont-cont portrait_img no-show-tip winners">{{Html $index}}</span>
                           <span class='winner-point'>、</span>
                           {{end}}
                         </div>
@@ -191,39 +198,8 @@
                 {{Html (Regexp (Regexp (Regexp (Regexp (Regexp (Regexp .T.obj.detail "(\\n|\\\\n)\\s+" "\n") "(\\n|\\\\n)+" "<br/>") "<td>\\s*$" "") "<tr>\\s*$" "") "<tbody>\\s*$" "") "<table>\\s*$" "")}}
               </div>
             </div>
-            <div class="reg-service">
-              <div class="service-top">
-                <div class="s-t-header"></div>
-                <div class="s-t-content">
-                  <div class="s-t-item">
-                    <p class="item-icon item-icon-1"></p>
-                    <p class="item-hight-title">免费查看招标信息</p>
-                    <p class="item-text">精准匹配你需要的商机,极速推送,获取项目更精准。</p>
-                  </div>
-                  <div class="s-t-item">
-                    <p class="item-icon item-icon-2"></p>
-                    <p class="item-hight-title">潜在竞争对手/合作伙伴挖掘</p>
-                    <p class="item-text">提供个性化定制的标讯数据维度,成为新的拓客方式。</p>
-                  </div>
-                  <div class="s-t-item">
-                    <p class="item-icon item-icon-3"></p>
-                    <p class="item-hight-title">1V1专属服务</p>
-                    <p class="item-text">平台专属服务顾问1V1服务,9大行业社群免费进,行业交流、获取商机更便捷!</p>
-                  </div>
-                </div>
-              </div>
-              <div class="service-bottom">
-                <div class="s-b-header">登录后可查看全文</div>
-                <div class="s-b-group">
-                  <span class="login-btn login-node" id="login-main-btn">立即登录</span>
-                  <span class="reg-btn reg-node" id="reg-main-btn">还不是会员?立即免费注册</span>
-                </div>
-                <div class="s-b-phone">
-                  <i></i>
-                  <span>咨询热线:<span class="tel-num">400-108-6670</span></span>
-                </div>
-              </div>
-            </div>
+           <!--未登录展示的引导广告-->
+            <div class="reg-service login-node"></div>
           </div>
           <div class="bid-footer">
             <div class="otherinfo">

+ 1 - 2
src/web/templates/weixin/vipsubscribe/vip_introduce.html

@@ -79,8 +79,7 @@
 <!--                <img src="/common-module/vipsubscribe/image/info/cut_01.jpg">-->
                 <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_02.jpg?v={{Msg "seo" "version"}}">
                 <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_03.jpg?v={{Msg "seo" "version"}}">
-                <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_04.jpg?v={{Msg "seo" "version"}}">
-                <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_05.jpg?v={{Msg "seo" "version"}}">
+                <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/vip_vs.png?v={{Msg "seo" "version"}}">
                 <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_06.jpg?v={{Msg "seo" "version"}}">
                 <img src="{{Msg "seo" "cdn"}}/common-module/vipsubscribe/image/info/cut_07.jpg?v={{Msg "seo" "version"}}">
             </div>

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff