瀏覽代碼

Merge branch 'feature/v4.8.46' of https://jygit.jydev.jianyu360.cn/qmx/jy into dev/v4.8.46_wmh

wenmenghao321 2 年之前
父節點
當前提交
4442bee101
共有 100 個文件被更改,包括 2897 次插入1572 次删除
  1. 0 1
      src/config.json
  2. 1 1
      src/db.json
  3. 4 2
      src/go.mod
  4. 2 36
      src/go.sum
  5. 15 10
      src/jfw/front/classificationTag.go
  6. 4 3
      src/jfw/front/entsearch.go
  7. 49 43
      src/jfw/front/front.go
  8. 6 4
      src/jfw/front/frontRouter.go
  9. 25 27
      src/jfw/front/login.go
  10. 12 19
      src/jfw/front/org_structure.go
  11. 79 10
      src/jfw/front/pcIndex.go
  12. 10 17
      src/jfw/front/pchelper.go
  13. 5 0
      src/jfw/front/searchOptimize.go
  14. 233 201
      src/jfw/front/shorturl.go
  15. 12 7
      src/jfw/front/singleLogin.go
  16. 113 66
      src/jfw/front/supsearch.go
  17. 80 19
      src/jfw/front/swordfish.go
  18. 135 95
      src/jfw/front/tags.go
  19. 53 44
      src/jfw/modules/app/src/app/front/login.go
  20. 16 0
      src/jfw/modules/app/src/app/front/shorturl.go
  21. 2 1
      src/jfw/modules/app/src/app/tag/msg.go
  22. 5 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  23. 4 1
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  24. 6 1
      src/jfw/modules/app/src/web/staticres/jyapp/js/common.js
  25. 31 10
      src/jfw/modules/app/src/web/staticres/jyapp/me/css/login.css
  26. 52 7
      src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js
  27. 6 6
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  28. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_list.html
  29. 7 7
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  30. 3 2
      src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html
  31. 78 39
      src/jfw/modules/app/src/web/templates/me/login.html
  32. 60 63
      src/jfw/modules/app/src/web/templates/me/setpwd.html
  33. 9 0
      src/jfw/modules/app/src/web/templates/weixin/wxtsguide.html
  34. 16 1
      src/jfw/modules/bigmember/src/entity/marketAnalysis/commonSearch.go
  35. 3 2
      src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go
  36. 1 1
      src/jfw/modules/bigmember/src/go.mod
  37. 2 2
      src/jfw/modules/bigmember/src/go.sum
  38. 26 14
      src/jfw/modules/bigmember/src/service/analysis/forecastproject.go
  39. 9 0
      src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go
  40. 36 11
      src/jfw/modules/bigmember/src/service/portrait/subvipPortraitAction.go
  41. 19 16
      src/jfw/modules/bigmember/src/service/report/marketAnalysis.go
  42. 3 0
      src/jfw/modules/bigmember/src/service/use/use.go
  43. 1 0
      src/jfw/modules/publicapply/src/main.go
  44. 96 0
      src/jfw/modules/publicapply/src/password/password.go
  45. 9 9
      src/jfw/modules/subscribepay/src/entity/shareFission.go
  46. 4 4
      src/jfw/modules/subscribepay/src/go.mod
  47. 8 8
      src/jfw/modules/subscribepay/src/go.sum
  48. 23 24
      src/jfw/modules/subscribepay/src/service/userAccountInfo.go
  49. 1 2
      src/main.go
  50. 5 8
      src/seo.json
  51. 3 0
      src/web/staticres/big-member/js/unit_portrayal.js
  52. 15 9
      src/web/staticres/common-module/ad/js/index.js
  53. 1 1
      src/web/staticres/common-module/bidstatus-update/js/bid-status-update.js
  54. 1 1
      src/web/staticres/common-module/big-member/js/page_client_follow_list.js
  55. 41 40
      src/web/staticres/common-module/chart-module/js/chart-common.js
  56. 13 2
      src/web/staticres/common-module/collection/css/index.css
  57. 11 10
      src/web/staticres/common-module/collection/js/buyer-example.js
  58. 14 3
      src/web/staticres/common-module/collection/js/ent_portrait.js
  59. 1 1
      src/web/staticres/common-module/collection/js/index-wx.js
  60. 1 1
      src/web/staticres/common-module/collection/js/index.js
  61. 6 3
      src/web/staticres/common-module/collection/js/vip-dialog.js
  62. 9 9
      src/web/staticres/common-module/consult-dialog/js/index.js
  63. 1 0
      src/web/staticres/common-module/js/bundle.min.js
  64. 40 0
      src/web/staticres/common-module/message-tip/css/index.css
  65. 178 0
      src/web/staticres/common-module/message-tip/js/index.js
  66. 292 0
      src/web/staticres/common-module/message-tip/js/msgbuoy.js
  67. 126 126
      src/web/staticres/common-module/pc-dialog/js/leave-info-dialog.js
  68. 9 9
      src/web/staticres/common-module/perfect-info/js/perfect-info.js
  69. 7 4
      src/web/staticres/common-module/public/head.js
  70. 二進制
      src/web/staticres/commonFunctions/pc-set-password.png
  71. 4 1
      src/web/staticres/css/collect-user-info.css
  72. 1 1
      src/web/staticres/css/dataSmt/dataMart.css
  73. 1 1
      src/web/staticres/css/dataSmt/dataMart_detail.css
  74. 47 10
      src/web/staticres/css/pc.css
  75. 8 1
      src/web/staticres/css/pc/index.css
  76. 13 0
      src/web/staticres/css/selector/selector.css
  77. 11 2
      src/web/staticres/dataSmt/css/index.css
  78. 二進制
      src/web/staticres/dataSmt/images/zixun-font.png
  79. 6 6
      src/web/staticres/enterpriseCertificatio/css/enterpriseCertificatio.css
  80. 6 3
      src/web/staticres/frontRouter/pc/collection/js/index-pc.js
  81. 3 4
      src/web/staticres/frontRouter/pc/customExport/css/index.css
  82. 3 1
      src/web/staticres/frontRouter/pc/solution/css/solution.css
  83. 100 100
      src/web/staticres/frontRouter/pc/solution/js/pc-collect-solution-info.js
  84. 56 1
      src/web/staticres/frontRouter/pc/user/css/set_favorite.css
  85. 104 23
      src/web/staticres/frontRouter/pc/user/js/set_favorite.js
  86. 二進制
      src/web/staticres/images/phonelogin/icon-biyan.png
  87. 1 1
      src/web/staticres/js/ent-search-index-pc.js
  88. 1 2
      src/web/staticres/js/index/index.js
  89. 205 53
      src/web/staticres/js/login.js
  90. 0 143
      src/web/staticres/js/pc-collect-user-info.js
  91. 4 4
      src/web/staticres/js/pc-message-index.js
  92. 112 101
      src/web/staticres/js/pur-search-index-pc.js
  93. 2 2
      src/web/staticres/js/selector/area-city-pc.js
  94. 29 29
      src/web/staticres/js/selector/keyword-tags.js
  95. 2 2
      src/web/staticres/js/selector/no-data-pc.js
  96. 6 6
      src/web/staticres/js/superSearch.js
  97. 1 1
      src/web/staticres/public-pc/css/header-nav.css
  98. 10 3
      src/web/staticres/public-pc/css/pc-bottom.css
  99. 12 5
      src/web/staticres/public-pc/js/article-content.js
  100. 0 0
      src/web/staticres/public-pc/js/detection-min.js

文件差異過大導致無法顯示
+ 0 - 1
src/config.json


+ 1 - 1
src/db.json

@@ -41,7 +41,7 @@
   },
   "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.206:2711,newother=192.168.3.149:1712,poly=192.168.3.149:1713"
+      "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.206:2711,newother=192.168.3.149:1712,poly=192.168.3.149:1713,seoCache=192.168.3.149:1713,limitation=192.168.3.149:1713"
     },
     "login": {
       "address": "login=192.168.3.149:1712"

+ 4 - 2
src/go.mod

@@ -1,10 +1,10 @@
 module jy/src
 
-go 1.18
+go 1.20
 
 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/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v0.0.0-20230630032557-eac72f240f41
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
@@ -146,3 +146,5 @@ require (
 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect
 )
+
+replace github.com/go-xorm/xorm v0.7.9 => gitea.com/xorm/xorm v0.7.9

+ 2 - 36
src/go.sum

@@ -5,8 +5,8 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTmDxXPeNr5LWe2RmyJU+5aod1nptek=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/y6VxyycIy/LBWO7aYlxTiHKxmzv0=
+app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v0.0.0-20230630032557-eac72f240f41 h1:AQUCZbYnB6lddbJGvOsWwWKkJnQGh4atRtYHqXT0Kdc=
@@ -23,7 +23,6 @@ bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13 h1:aK3ya7aznINdAuEl7sKq9U2M
 bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13/go.mod h1:vDEKni2rnCraKgKnnCEIwsFmO92GxnpfKmNQ+83wKP0=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
 cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
 cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
@@ -83,9 +82,7 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67 h1:x98/gnpyNAiuvg/gX3KgdfKxnZj3t9pIl3BCVJg3qwg=
 github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67/go.mod h1:g1VZ0nbzBvfsWw22gNVOxWxJxpBR+CBiFNK2n2ogeUo=
-github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
 github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs=
-github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
 github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0=
 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -103,7 +100,6 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd
 github.com/antlr/antlr4 v0.0.0-20210105212045-464bcbc32de2/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
 github.com/antlr/antlr4 v0.0.0-20210319025552-3590d4d5e18c/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
 github.com/antonlindstrom/pgstore v0.0.0-20200229204646-b08ebf1105e0/go.mod h1:2Ti6VUHVxpC0VSmTZzEvpzysnaGAfGBOoMIz5ykPyyw=
-github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
 github.com/aws/aws-sdk-go v1.35.20/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
@@ -164,7 +160,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f/go.mod h1:QGrK8vMWWHQYQ3QU9bw9Y9OPNfxccGzfb41qjvVeXtY=
-github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
@@ -172,7 +167,6 @@ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3
 github.com/donnie4w/go-logger v0.0.0-20170827050443-4740c51383f4/go.mod h1:L7S4x0R7vv3xoOhGuyAJyCO2MYzWOpccM4Isn8jIUgY=
 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
 github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
@@ -258,7 +252,6 @@ github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Px
 github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
 github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
@@ -268,7 +261,6 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78
 github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
 github.com/go-xorm/builder v0.3.4/go.mod h1:KxkQkNN1DpPKTedxXyTQcmH+rXfvk4LZ9SOOBoZBAxw=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
-github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
 github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
 github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
 github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
@@ -301,7 +293,6 @@ github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/
 github.com/gogf/gf/v2 v2.4.4 h1:+s7PKxd4LJKjJn5ODZvYcbXMM5e+88Ww1W3GdOarLE8=
 github.com/gogf/gf/v2 v2.4.4/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -343,7 +334,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
 github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -401,7 +391,6 @@ github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97Dwqy
 github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
 github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
@@ -441,7 +430,6 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
 github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
 github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
 github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
-github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
 github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
 github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
 github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
@@ -470,7 +458,6 @@ github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4
 github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po=
 github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
 github.com/jackc/pgtype v1.6.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig=
-github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
 github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
 github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
 github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
@@ -583,7 +570,6 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
 github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -637,7 +623,6 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042
 github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
 github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
@@ -646,7 +631,6 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl
 github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
 github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
 github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A=
 github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM=
@@ -671,7 +655,6 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
 github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
 github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
@@ -681,13 +664,11 @@ github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrb
 github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI=
 github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
 github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
-github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
@@ -696,7 +677,6 @@ github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+
 github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM=
 github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
@@ -706,7 +686,6 @@ github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJf
 github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
 github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
 github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM=
-github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
@@ -831,7 +810,6 @@ github.com/zeromicro/go-zero v1.5.3 h1:9poyd+raeL7gSMUu6P19N7bssTppieR2j7Oos2j1y
 github.com/zeromicro/go-zero v1.5.3/go.mod h1:dmoBpgJTxt9KWmgrNGpv06XxZRPXMakrxUVgROFAR3g=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb h1:uWiILQloLUVdtPYr1ZZo2zqtlpzo4G8vUpglo/Fs2H8=
 github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb/go.mod h1:J3xKssoVdrwZ2E29fIox/EKxOZWimS7AZ4fOTCFkOLo=
-github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
 go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
@@ -848,7 +826,6 @@ go.mongodb.org/mongo-driver v1.9.0/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCu
 go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
 go.mongodb.org/mongo-driver v1.11.7 h1:LIwYxASDLGUg/8wOhgOOZhX8tQa/9tgZPgzZoVqJvcs=
 go.mongodb.org/mongo-driver v1.11.7/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY=
-go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -923,7 +900,6 @@ go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
 go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -987,7 +963,6 @@ golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73r
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -1064,7 +1039,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1168,7 +1142,6 @@ golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1239,7 +1212,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -1262,7 +1234,6 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
@@ -1270,7 +1241,6 @@ google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -1314,7 +1284,6 @@ google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2
 google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
 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=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -1412,7 +1381,6 @@ gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
 gorm.io/gorm v1.20.12/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
 gorm.io/gorm v1.21.3 h1:qDFi55ZOsjZTwk5eN+uhAmHi8GysJ/qCTichM/yO7ME=
 gorm.io/gorm v1.21.3/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
-honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1457,5 +1425,3 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
-xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=
-xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM=

+ 15 - 10
src/jfw/front/classificationTag.go

@@ -241,8 +241,8 @@ func GetLetterPaging(pageNum int, checkedLetter string) (letterList []map[string
 
 func GetLetterMap(pageSize, pageNum int64, letter string) ([]map[string]interface{}, int64) {
 	m := []map[string]interface{}{}
-	sql := `select id,name,letter from seo_words.seo_resource where letter = ? order by id desc`
-	cql := `select count(1) from seo_words.seo_resource where letter = ?`
+	sql := `select id,name,letter from seo_words.seo_resource where letter = ? and state=1 order by id desc`
+	cql := `select count(1) from seo_words.seo_resource where letter = ? and state=1`
 	offset := (pageNum - 1) * pageSize
 	sql += fmt.Sprintf(" limit %v,%v", offset, pageSize)
 	data := public.BaseMysql.SelectBySql(sql, letter)
@@ -263,7 +263,8 @@ func GetLetterMap(pageSize, pageNum int64, letter string) ([]map[string]interfac
 }
 
 func GetIndustry(industryHref string) []map[string]interface{} {
-	data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a left join  seo_words.seo_industry_class b on a.class_1=b.name order by a.class_1`)
+	//data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a left join  seo_words.seo_industry_class b on a.class_1=b.name order by a.class_1`)
+	data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a inner join  seo_words.seo_industry_class b on a.class_1=b.name and  a.class_2 !='药品'  order by a.class_1`)
 	industryArr := []string{}
 	industryMap := map[string][]map[string]interface{}{}
 	if len(*data) > 0 && data != nil {
@@ -308,10 +309,14 @@ func HotBuyerList(entIsNew bool) []*BuyerList {
 		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),
-			})
+			buyerId := qu.ObjToString(b["id"])
+			if name != "" && buyerId != "" {
+				idEncode := encrypt.EncodeArticleId2ByCheck(buyerId)
+				buyerList = append(buyerList, &BuyerList{
+					Name: name,
+					Url:  qu.If(entIsNew, fmt.Sprintf("/entpc/unit_portrayal_id/%s", idEncode), fmt.Sprintf("/swordfish/page_big_pc/unit_portrayal_id/%s", idEncode)).(string),
+				})
+			}
 		}
 		return buyerList
 	}
@@ -388,10 +393,10 @@ func HotKey() []string {
 		return rData
 	}
 	num := 7
-	count := public.BaseMysql.CountBySql(`select count(1) from seo_words.seo_resource;`)
+	count := public.BaseMysql.CountBySql(`select count(1) from seo_words.seo_resource where state=1;`)
 	rand.Seed(time.Now().UnixNano())
 	randNum := rand.Intn(int(count) - num)
-	data := public.BaseMysql.SelectBySql(`select name from seo_words.seo_resource limit ?,?`, randNum, num)
+	data := public.BaseMysql.SelectBySql(`select name from seo_words.seo_resource where state=1 limit ?,?`, randNum, num)
 	arr := []string{}
 	for _, v := range *data {
 		arr = append(arr, qu.ObjToString(v["name"]))
@@ -419,7 +424,7 @@ func NewIndexbids(session *httpsession.Session, r *http.Request) []map[string]in
 		_, total, _ := so.GetBidSearchList(true)
 		data.Count = total
 	*/
-	_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", "", "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 10, "")
+	_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", "拟建,招标预告,招标公告,招标结果,招标信用信息", "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 10, "")
 	if lists != nil {
 		for _, v1 := range *lists {
 			v1["_id"] = encrypt.CommonEncodeArticle("content", v1["_id"].(string))

+ 4 - 3
src/jfw/front/entsearch.go

@@ -19,8 +19,8 @@ import (
 
 type Entsearch struct {
 	*xweb.Action
-	bidsearchforentindex  xweb.Mapper `xweb:"/jylab/bidsearchforent/index.html"`
-	pcSearchZbqyAjax      xweb.Mapper `xweb:"/jylab/pcSearchZbqyAjax"`
+	//bidsearchforentindex  xweb.Mapper `xweb:"/jylab/bidsearchforent/index.html"`-- 此功能已取消
+	//pcSearchZbqyAjax      xweb.Mapper `xweb:"/jylab/pcSearchZbqyAjax"`-- 此功能已取消
 	recList               xweb.Mapper `xweb:"/jylab/bidsearchforent/recList"`
 	entSearchIndex        xweb.Mapper `xweb:"/jylab/entSearch/index.html"`
 	pushSearchIndex       xweb.Mapper `xweb:"/jylab/purSearch/index.html"`
@@ -90,6 +90,7 @@ func (e *Entsearch) PurScopebusniessIndex() error {
 	return e.Render("/pc/purScopebusniess.html", &e.T)
 }
 
+// 此功能已失效
 func (e *Entsearch) Bidsearchforentindex() error {
 	defer util.Catch()
 	var shareid = e.GetString("id")
@@ -192,7 +193,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"))

+ 49 - 43
src/jfw/front/front.go

@@ -150,12 +150,16 @@ type Front struct {
 	getAdByCode xweb.Mapper `xweb:"/front/getAdByCode"`
 }
 
-var sewx encrypt.SimpleEncrypt //微信的加密方法
-var mongodb = public.MQFW
-var urlMap map[string]interface{}
-
-var se = encrypt.SE //移到tools中
-var isIosReg = regexp.MustCompile("\\(i[^;]+;( U;)? CPU.+Mac OS X")
+var (
+	sewx                     encrypt.SimpleEncrypt //微信的加密方法
+	mongodb                  = public.MQFW
+	urlMap                   map[string]interface{}
+	se                       = encrypt.SE //移到tools中
+	isIosReg                 = regexp.MustCompile("\\(i[^;]+;( U;)? CPU.+Mac OS X")
+	redisLimitation          = "limitation"
+	detailRedisByPayTimeOut  = 7200
+	detailRedisByFreeTimeOut = 7200
+)
 
 func init() {
 	sewx = encrypt.SimpleEncrypt{Key: "topnet"}
@@ -163,27 +167,28 @@ func init() {
 	xweb.AddAction(&Short{})
 	xweb.AddAction(&OrgStructure{})
 	urlMap = config.Sysconfig["redirect"].(map[string]interface{})
+	detailRedisByPayTimeOut = util.If(util.IntAll(config.Sysconfig["detailRedisByPayTimeOut"]) > 0, util.IntAll(config.Sysconfig["detailRedisByPayTimeOut"]), detailRedisByPayTimeOut).(int)
+	detailRedisByFreeTimeOut = util.If(util.IntAll(config.Sysconfig["detailRedisByFreeTimeOut"]) > 0, util.IntAll(config.Sysconfig["detailRedisByFreeTimeOut"]), detailRedisByFreeTimeOut).(int)
 }
 
-//前端页面加载
+// 前端页面加载
 func (this *Front) ReloadTo(href string) {
 	this.T["transfer"] = fmt.Sprintf("%s/%s", config.Sysconfig["webdomain"].(string), href)
 	this.Render("/pc/reloadTo.html", &this.T)
 }
 
-//获取打赏标语
+// 获取打赏标语
 func (this *Front) RewardText() {
 	rewardText, _ := getRewardText()
 	this.Write(rewardText)
 	return
 }
 
-//
 func (f *Front) Hp() error {
 	return f.Redirect("/")
 }
 
-//二维码图片
+// 二维码图片
 func (f *Front) Qr() error {
 	w := f.ResponseWriter
 	w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
@@ -196,7 +201,7 @@ func (f *Front) Qr() error {
 	return err
 }
 
-//二维码图片
+// 二维码图片
 func (f *Front) Hpshare() error {
 	w := f.ResponseWriter
 	w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
@@ -237,7 +242,6 @@ func (p *Front) PayIndex() error {
 	return p.Render("/weixin/pay.html", &p.T)
 }
 
-//
 func (f *Front) RecInof() error {
 	var msg = ""
 	var flag = true
@@ -360,7 +364,7 @@ func (f *Front) RecInof() error {
 	return nil
 }
 
-//更新取到的权重最低的字段到bidding表
+// 更新取到的权重最低的字段到bidding表
 func updateLastWrongField(id, result string) {
 	if result == "" {
 		return
@@ -372,7 +376,7 @@ func updateLastWrongField(id, result string) {
 	})
 }
 
-//轮询查登录状态
+// 轮询查登录状态
 func (f *Front) AjaxPolling() {
 	reqType, _ := f.GetInteger("reqType")
 	if reqType == 1 {
@@ -419,7 +423,7 @@ func (f *Front) AjaxPolling() {
 	}
 }
 
-//广告服务
+// 广告服务
 func (f *Front) Advservices() error {
 	var shareid = f.GetString("id")
 	if len(shareid) == 0 {
@@ -430,12 +434,12 @@ func (f *Front) Advservices() error {
 	return f.Render("/pc/advservices.html", &f.T)
 }
 
-//移动端专题推广
+// 移动端专题推广
 func (f *Front) Mobtopics() error {
 	return f.Render("/active/mobtopics.html")
 }
 
-//移动端专题推广
+// 移动端专题推广
 func (f *Front) Extension(page string) error {
 	//今日头条和百度推广用的同一个页面,如以后有变动,需拆分成两个。
 	if page != "tengxun" {
@@ -444,13 +448,14 @@ func (f *Front) Extension(page string) error {
 	return f.Render("/active/ext-" + page + ".html")
 }
 
-//SEM推广
+// SEM推广
 func (f *Front) Topics() error {
 	f.T["logid"] = config.Seoconfig["jySEMtgy"].(string)
-	userId, _ := f.GetSession("userId").(string)
+	//userId, _ := f.GetSession("userId").(string)
 	f.DisableHttpCache()
 	//底部最新招标数据  3*6 条信息
-	news := PCS_list("", 18, userId) //Newbids("")[0].([]interface{})
+	//news := PCS_list("", 18, userId) //Newbids("")[0].([]interface{})
+	news := NewBidddingsForSEO("SEO", 3, 6)
 	listAll := [][]map[string]interface{}{}
 	i := 1
 	list := []map[string]interface{}{}
@@ -460,12 +465,18 @@ func (f *Front) Topics() error {
 			if data["publishtime"] == nil && data["time"] != nil {
 				continue
 			}
+			if util.ObjToString(data["_id"]) == "" {
+				continue
+			}
+			t := time.Unix(util.Int64All(data["publishtime"]), 0)
+			data["timetemp"] = fmt.Sprint(util.Int64All(data["publishtime"]))
+			data["_id"] = encrypt.EncodeArticleId2ByCheck(util.ObjToString(data["_id"]))
 			if (now-util.Int64All(data["publishtime"]))/60 < 60 {
 				data["printTime"] = fmt.Sprintf("%d分钟前", (now-util.Int64All(data["publishtime"]))/60)
 			} else if (now-util.Int64All(data["publishtime"]))/(60*60) < 24 {
 				data["printTime"] = fmt.Sprintf("%d小时前", (now-util.Int64All(data["publishtime"]))/(60*60))
 			} else {
-				data["printTime"] = data["time"]
+				data["printTime"] = util.TimeDiff(t)
 			}
 			data["index"] = i
 			i++
@@ -485,7 +496,6 @@ func (f *Front) Topics() error {
 	return f.Render("/pc/landingpage.html", &f.T)
 }
 
-//
 func (f *Front) Notin() error {
 	refer := "/"
 	tmp := f.Header("Referer")
@@ -507,7 +517,6 @@ func (f *Front) Notin() error {
 	return f.Render("/pc/notin.html", &f.T)
 }
 
-//
 func (f *Front) Followinfo() error {
 	var pid = f.GetString("pid")
 	var kid = f.GetString("kid")
@@ -592,7 +601,6 @@ func (f *Front) Followinfo() error {
 	return nil
 }
 
-//
 func (f *Front) Login(key string) error {
 	shareid := se.DecodeString(key)
 	openid := redis.GetStr("sso", "p_usershare_"+shareid)
@@ -615,7 +623,7 @@ func (f *Front) Login(key string) error {
 	return nil
 }
 
-//用户是否登录
+// 用户是否登录
 func (f *Front) HasSign() error {
 	sessVal := f.Session().GetMultiple()
 	if userId, _ := sessVal["mgoUserId"].(string); userId != "" {
@@ -690,7 +698,7 @@ func (f *Front) GetLoginNum(prestr string) error {
 	return nil
 }
 
-//一键报告
+// 一键报告
 func (m *Front) Onekey() error {
 	defer util.Catch()
 	fkid := encrypt.DecodeArticleId2ByCheck(m.GetString("fkid"))[0]
@@ -756,7 +764,6 @@ func (m *Front) Onekey() error {
 	return nil
 }
 
-//
 func (m *Front) Encrypt() error {
 	defer util.Catch()
 	id := m.GetString("id")
@@ -779,12 +786,11 @@ func (m *Front) Encrypt() error {
 	return nil
 }
 
-//
 func (m *Front) Wxerr() error {
 	return m.Render("/_err.html")
 }
 
-//查找用户并创建session
+// 查找用户并创建session
 func FindUserAndCreateSess(openid string, sess *httpsession.Session, typ string, flag, isSwitchToBestIdentity bool) (bool, *map[string]interface{}, map[string]interface{}) {
 	return CreateSession(map[string]interface{}{
 		"s_m_openid": openid,
@@ -833,6 +839,7 @@ func CreateSession(q map[string]interface{}, sess *httpsession.Session, typ stri
 		"result":      "ok",
 		"s_nickname":  s_nickname,
 		"s_headimage": sessionVal["s_avatar"],
+		"phone":       sessionVal["phone"],
 	}
 	if openid, _ := (*person)["s_m_openid"].(string); openid != "" {
 		infoData["openid"] = se.EncodeString(openid)
@@ -848,7 +855,7 @@ func CreateSession(q map[string]interface{}, sess *httpsession.Session, typ stri
 
 var bindUrl = "/front/account/phone/bind?mode=mergeBind"
 
-//微信跳转创建session
+// 微信跳转创建session
 func (m *Front) Sess(ostr string) error {
 	defer util.Catch()
 	if strings.Contains(ostr, "&") {
@@ -966,7 +973,7 @@ func (m *Front) Sess(ostr string) error {
 	return nil
 }
 
-//删除模板缓存
+// 删除模板缓存
 func (d *Front) Delc(url string) {
 	defer util.Catch()
 	d.App.TemplateMgr.CacheDelete(strings.Replace(url, "GG", "/", 1))
@@ -977,12 +984,12 @@ func (m *Front) Viewdemo() {
 	m.Redirect("/swordfish/guide/-1")
 }
 
-//剑鱼标讯用户协议
+// 剑鱼标讯用户协议
 func (m *Front) Wxprotocol() error {
 	return m.Render("/weixin/wxprotocol.html")
 }
 
-//推送列表
+// 推送列表
 func (m *Front) WxpushListInfo(_id string) error {
 	return m.Redirect("/swordfish/historypush")
 }
@@ -1062,7 +1069,7 @@ func (m *Front) Isrecord(name string) {
 	}
 }
 
-//招标订阅向导
+// 招标订阅向导
 func (f *Front) TSGuide() error {
 	defer util.Catch()
 	userid := util.ObjToString(f.GetSession("userId"))
@@ -1165,12 +1172,12 @@ func isInTSguide(userid string) bool {
 	return false
 }
 
-//查看原文中转
+// 查看原文中转
 func (f *Front) Transfer() error {
 	return f.Redirect(f.GetString("url"))
 }
 
-//关于我们
+// 关于我们
 func (f *Front) Aboutus() error {
 	code := f.GetString("code")
 	if mobileReg.MatchString(f.UserAgent()) {
@@ -1188,7 +1195,7 @@ func (f *Front) Aboutus() error {
 	return f.SetBody(content)
 }
 
-//商务合作
+// 商务合作
 func (f *Front) Busicooperation() error {
 	var shareid = f.GetString("id")
 	if len(shareid) == 0 {
@@ -1218,7 +1225,7 @@ func (f *Front) Gethotkey() error {
 	return nil
 }
 
-//redis存储用户搜索关键词 企业 项目信息
+// redis存储用户搜索关键词 企业 项目信息
 func (f *Front) Rediskw() error {
 	skw := f.GetString("skw")
 	num := f.GetString("num")
@@ -1285,7 +1292,7 @@ func (f *Front) DownloadJyApp() error {
 	return f.Redirect(getDownloadUri(code, source, domain+apkurl))
 }
 
-//获取app下载地址,不通code对应不通渠道的app包
+// 获取app下载地址,不通code对应不通渠道的app包
 func getDownloadUri(code, source, download string) string {
 	jyapp := config.Sysconfig["jyapp"].(map[string]interface{})
 	channelMap := jyapp["channelDir"].(map[string]interface{})
@@ -1377,7 +1384,7 @@ func (f *Front) LimitSearchText() {
 	f.Write("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">" + fmt.Sprintf(public.Lst.Msg, status, public.Lst.Count, public.Lst.TimeOut, public.Lst.TotalPage))
 }
 
-//设置js css 版本号,修改以后记得同步更新seo.json中的值
+// 设置js css 版本号,修改以后记得同步更新seo.json中的值
 func (f *Front) SetSeoVersion() {
 	//!@111qqq@! md5=51a3b7b4ed3cf140
 	if f.GetString("p") != "51a3b7b4ed3cf140" {
@@ -1505,7 +1512,6 @@ func (f *Front) YmResult() error {
 
 }
 
-//
 func (f *Front) JylabShareTimeline() {
 	userid := util.ObjToString(f.GetSession("userId"))
 	if userid == "" {
@@ -1531,7 +1537,8 @@ func (f *Front) JylabShareTimeline() {
 	}
 }
 
-/**
+/*
+*
 成功分享后 更改分享相关信息
 
 shareType - 分享类型 1-详情页 2-推送列表 3-实验室
@@ -1616,7 +1623,6 @@ func encodeURIComponent(str string) string {
 	return r
 }
 
-//
 func (f *Front) GetAdByCode() {
 	m := map[string]interface{}{}
 	if ad_name := f.GetString("ad_name"); ad_name != "" {

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

@@ -8,6 +8,7 @@ import (
 	"jy/src/jfw/wx"
 	"net/url"
 	"regexp"
+	"strings"
 
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 
@@ -211,11 +212,12 @@ var bigVipFreePageReg = regexp.MustCompile(`set_.*|free|unit_portrayal|analysis_
 // 工作桌面需求 不需要判断用户权限
 func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	//page := pageSign
-	//userid, _ := this.GetSession("userId").(string)
+	userid, _ := this.GetSession("userId").(string)
 	//没有登录跳转登录页面(采购单位画像除外)
-	//if !strings.Contains(pageSign, "unit_portrayal") && userid == "" {
-	//	return this.Redirect("/notin/page")
-	//}
+	if !strings.Contains(pageSign, "unit_portrayal") &&
+		!strings.Contains(pageSign, "ent_portrait") && userid == "" {
+		return this.Redirect("/notin/page")
+	}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 }
 

+ 25 - 27
src/jfw/front/login.go

@@ -1,7 +1,6 @@
 package front
 
 import (
-	"app.yhyue.com/moapp/jybase/redis"
 	"fmt"
 	"jy/src/jfw/config"
 	jutil "jy/src/jfw/jyutil"
@@ -10,6 +9,8 @@ import (
 	"strings"
 	"time"
 
+	"app.yhyue.com/moapp/jybase/redis"
+
 	"app.yhyue.com/moapp/jypkg/public"
 
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
@@ -18,10 +19,10 @@ import (
 
 	. "app.yhyue.com/moapp/jybase/mongodb"
 
+	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"go.mongodb.org/mongo-driver/bson/primitive"
 )
 
@@ -92,12 +93,19 @@ func (l *Login) Login() error {
 			} else if strings.TrimSpace(password) == "" {
 				return -2, false
 			}
-			user, ok := mongodb.FindOneByField("user", map[string]interface{}{
+			// user, ok := mongodb.FindOneByField("user", map[string]interface{}{
+			// 	"i_appid": 2,
+			// 	"s_phone": phone,
+			// }, `{"s_password":1}`)
+			user, ok := mongodb.Find("user", map[string]interface{}{
 				"i_appid": 2,
-				"s_phone": phone,
-			}, `{"s_password":1}`)
+				"$or": []map[string]interface{}{
+					{"s_phone": phone},
+					{"s_m_phone": phone},
+				},
+			}, `{"s_phone":-1}`, `{"_id":1,"s_password":1}`, false, 0, 1)
 			if ok && user != nil && len(*user) > 0 {
-				if qutil.ObjToString((*user)["s_password"]) == qutil.GetMd5String(password) {
+				if qutil.ObjToString((*user)[0]["s_password"]) == qutil.GetMd5String(password) {
 					ok, _, userInfo := afterLogin(phone, l.Session())
 					if ok {
 						result["userInfo"] = userInfo
@@ -172,31 +180,21 @@ func (l *Login) Login() error {
 					if source != "" {
 						data["s_tracksource"] = source
 					}
+					//获取base_user_id
+					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+						Appid: "10000",
+						Phone: phone,
+					}); resp != nil && resp.Data.Id > 0 {
+						data["base_user_id"] = resp.Data.Id
+					} else {
+						log.Println(phone, "调用usercenter失败")
+						return -4, false
+					}
 					_id := mongodb.Save("user", data)
 					if _id != "" {
-						func(phone, userid string) {
-							//用户中台存储  开始
-							formdata := map[string]interface{}{
-								"appid": "10000",
-								"phone": phone,
-							}
-							if s_company != "" {
-								formdata["company"] = s_company
-							}
-							// ck, _ := l.GetCookie("SESSIONID")
-
-							// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
-							if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-								Appid: "10000",
-								Phone: phone,
-							}, *config.Middleground); !ok {
-								log.Println("usercenter add error", userid, phone)
-							}
-
-							//用户中台存储  结束
-						}(phone, _id)
 						jy.ClearPhoneIdentSession(l.Session())
 						ok, _, userInfo := afterLogin(phone, l.Session())
+						userInfo["isNewUser"] = true
 						nsqPath, _ := config.Sysconfig["nsq"].(string)
 						nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
 						er := jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, jy.Jypc_phone_register, _id, jy.Jyweb_node2)

+ 12 - 19
src/jfw/front/org_structure.go

@@ -21,7 +21,6 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 
 	util "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
@@ -187,25 +186,19 @@ func (this *OrgStructure) AutoLogon() error {
 			if source != "" {
 				data["s_tracksource"] = source
 			}
-			if id := mongodb.Save("user", data); id != "" {
-				// ck, _ := this.GetCookie("SESSIONID")
-				// usercenter.AddBaseUser(mongodb, util.ObjToString(config.Sysconfig["userCenterApi"]), id, map[string]interface{}{
-				// 	"phone":    phone,
-				// 	"appid":    "10000",
-				// 	"nickname": name,
-				// 	"openid":   openId,
-				// 	"unionid":  unionId,
-				// }, ck)
-				if ok := jy.AddUser(mongodb, id, pb.UserAddReq{
-					Appid:    "10000",
-					Phone:    phone,
-					Nickname: name,
-					SOpenid:  openId,
-					Unionid:  unionId,
-				}, *config.Middleground); !ok {
-					log.Println("usercenter add error", id, phone)
+			if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+				Appid:    "10000",
+				Phone:    phone,
+				Nickname: name,
+				SOpenid:  openId,
+				Unionid:  unionId,
+			}); resp != nil && resp.Data.Id > 0 {
+				data["base_user_id"] = resp.Data.Id
+				if id := mongodb.Save("user", data); id != "" {
+					rb = true
 				}
-				rb = true
+			} else {
+				log.Println(phone, unionId, "调用usercenter失败")
 			}
 		}
 	}

+ 79 - 10
src/jfw/front/pcIndex.go

@@ -120,6 +120,7 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["hotSubject"] = HotSubjectMatter()
 			//实用内容推荐
 			m.T["recommend"] = ContentRecommendation()
+			m.T["jycmsLink"] = GetJycmsAreaLink()
 			//推荐标讯专区
 			m.T["recommendBeacon"] = RecommendationBeacon()
 			//热门采购单位
@@ -134,6 +135,44 @@ func (m *PcIndex) NewSordfish(flag string) error {
 	}
 }
 
+// GetJycmsAreaLink 获取资讯站地区首页地址
+func GetJycmsAreaLink() []map[string]interface{} {
+	redisKey := "IndexJycmsAreaLink"
+	if cache, err := redis.GetBytes("limitation", redisKey); err == nil && cache != nil && len(*cache) > 0 {
+		var rData []map[string]interface{}
+		_ = json.Unmarshal(*cache, &rData)
+		if len(rData) > 0 {
+			return rData
+		}
+	}
+
+	res := public.BaseMysql.Query("SELECT area,alias FROM global_common_data.code_area WHERE `code` LIKE '%%0000' AND alias IS NOT NULL")
+	if res == nil || len(*res) == 0 {
+		return nil
+	}
+	rData := make([]map[string]interface{}, 0, len(*res))
+	//TODO:因需求需要把内蒙古和河南位置对换
+	var ha, nmg int
+	for i, m := range *res {
+		alias, name := util.ObjToString(m["alias"]), util.ObjToString(m["area"])
+		tmp := map[string]interface{}{
+			"url":  fmt.Sprintf("/jycms/a_%s.html", alias),
+			"name": fmt.Sprintf("%s招标网", name),
+		}
+		if alias == "ha" {
+			ha = i
+		} else if alias == "nmg" {
+			nmg = i
+		}
+		rData = append(rData, tmp)
+	}
+	rData[nmg], rData[ha] = rData[ha], rData[nmg]
+	if len(rData) > 0 {
+		redis.Put("limitation", redisKey, rData, 60*60*24)
+	}
+	return rData
+}
+
 // 剑鱼标讯pc首页-统计
 func (m *PcIndex) NewSordfishC() error {
 	var shareid = m.GetString("id")
@@ -289,9 +328,10 @@ func GetInfoNum() (one map[string]interface{}) {
 // 标签查询
 func (f *PcIndex) SearchResult(at, name string) error {
 	defer util.Catch()
-	if at == "stype" && name == "NJ" {
-		return f.Redirect("/jylab/supsearch/proposedProject.html")
-	}
+	//NJ 已改成 NJXM  地址:/list/stype/NJXM.html
+	//if at == "stype" && name == "NJ" {
+	//	return f.Redirect("/jylab/supsearch/proposedProject.html")
+	//}
 	userId := util.ObjToString(f.GetSession("userId"))
 	var no = 5
 	var area = ""
@@ -315,6 +355,7 @@ func (f *PcIndex) SearchResult(at, name string) error {
 		shareid = "10" //fmt.Sprintf("%s%d", config.Seoconfig["jybqy"].(string)+fmt.Sprintf("%d", time.Now().UnixNano())[8:14], rand.Intn(9))
 	}
 	f.T["logid"] = config.Seoconfig["jybqy"].(string)
+	f.T["seo_title"], f.T["seo_keywords"], f.T["seo_description"] = "", "", ""
 	if at == "area" {
 		areamp, _ := config.Seoconfig["area"].(map[string]interface{})
 		if areamp != nil {
@@ -326,6 +367,9 @@ func (f *PcIndex) SearchResult(at, name string) error {
 				seodescription = areamp1["DESCRIPTION"].(string)
 			}
 		}
+		f.T["seo_title"] = fmt.Sprintf("%s免费招标信息_%s采购服务平台_%s中标公告-剑鱼标讯", area, area, area)
+		f.T["seo_keywords"] = fmt.Sprintf("%s免费招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", area, area, area, area, area)
+		f.T["seo_description"] = fmt.Sprintf("剑鱼标讯%s专栏,提供%s免费招标信息、%s招标公告、%s中标公告和%s招标采购等内容,以及%s招标信息搜索查询、订阅推送和数据定制化服务,每天实时更新%s的招标信息,随时随地免费查看。", area, area, area, area, area, area, area)
 	} else if at == "stype" {
 		stypemp, _ := config.Seoconfig["stype"].(map[string]interface{})
 		if stypemp != nil {
@@ -359,6 +403,9 @@ func (f *PcIndex) SearchResult(at, name string) error {
 				seodescription = citymp1["DESCRIPTION"].(string)
 			}
 		}
+		f.T["seo_title"] = fmt.Sprintf("%s免费招标信息_%s采购服务平台_%s中标公告-剑鱼标讯", city, city, city)
+		f.T["seo_keywords"] = fmt.Sprintf("%s免费招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", city, city, city, city, city)
+		f.T["seo_description"] = fmt.Sprintf("剑鱼标讯%s专栏,提供%s免费招标信息、%s招标公告、%s中标公告和%s招标采购等内容,以及%s招标信息搜索查询、订阅推送和数据定制化服务,每天实时更新%s的招标信息,随时随地免费查看。", city, city, city, city, city, city, city)
 	} else if at == "keywords" {
 		keywordsArr, _ := config.Seoconfig["keywordsArr"].([]interface{})
 		if len(keywordsArr) > 0 {
@@ -382,15 +429,37 @@ func (f *PcIndex) SearchResult(at, name string) error {
 				}
 			}
 		}
+		f.T["seo_title"] = fmt.Sprintf("%s免费招标信息网__%s采购服务平台_%s中标公告-剑鱼标讯", keywords, keywords, keywords)
+		f.T["seo_keywords"] = fmt.Sprintf("%s免费招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", keywords, keywords, keywords, keywords, keywords)
+		f.T["seo_description"] = fmt.Sprintf("剑鱼标讯%s专栏,提供%s免费招标信息、%s招标公告、%s中标公告和%s招标采购等内容,以及%s招标信息搜索查询、订阅推送和数据定制化服务,每天实时更新%s的招标信息,随时随地免费查看。", keywords, keywords, keywords, keywords, keywords, keywords, keywords)
+	}
+
+	if f.T["seo_title"] == "" {
+		f.T["seo_title"] = util.If(stype == "", fmt.Sprintf("剑鱼标讯官网_%s招标信息", seotitle), fmt.Sprintf("剑鱼标讯官网_%s", seotitle))
+	}
+	if f.T["seo_keywords"] == "" {
+		if area == "" {
+			if industry == "" {
+				f.T["seo_keywords"] = seokeywords
+			} else {
+				f.T["seo_keywords"] = fmt.Sprintf("%s", industry)
+			}
+		} else {
+			f.T["seo_keywords"] = fmt.Sprintf("%s招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", seokeywords, seokeywords, seokeywords, seokeywords, seokeywords)
+		}
+	}
+	if f.T["seo_description"] == "" {
+		if area == "" {
+			if industry == "" {
+				f.T["seo_description"] = seodescription
+			} else {
+				f.T["seo_description"] = fmt.Sprintf("剑鱼标讯提供%s全行业招标信息搜索查询、订阅推送和数据定制化服务,每天实时更新%s相关的招标信息,随时随地免费查看。", industry, industry)
+			}
+		} else {
+			f.T["seo_description"] = fmt.Sprintf("剑鱼标讯%s专栏,提供全行业最新的%s招标信息、%s招标公告、%s中标公告和%s招标采购等内容,强大的搜索查询功能,支持多条件筛选,让招投标更轻松。", seodescription, seodescription, seodescription, seodescription, seodescription)
+		}
 	}
 
-	f.T["seoarea"] = area
-	f.T["seostype"] = stype
-	f.T["seotitle"] = seotitle
-	f.T["seokeywords"] = seokeywords
-	f.T["seodption"] = seodescription
-	f.T["seocity"] = city
-	f.T["keywords"] = keywords
 	if area == "全国" {
 		return f.Redirect("/swordfish/searchinfolist.html")
 	}

+ 10 - 17
src/jfw/front/pchelper.go

@@ -141,24 +141,17 @@ func (l *PcHelper) Login() error {
 						if jy.IsEmail(email) {
 							data["s_email"] = email
 						}
+						if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+							Appid: "10000",
+							Phone: phone,
+						}); resp != nil && resp.Data.Id > 0 {
+							data["base_user_id"] = resp.Data.Id
+						} else {
+							log.Println(phone, "调用usercenter失败")
+							return -1
+						}
 						_id := mongodb.Save("user", data)
 						if _id != "" {
-							//用户中台存储  开始
-							func(phone, userId string) {
-								// formdata := map[string]interface{}{
-								// 	"appid": "10000",
-								// 	"phone": phone,
-								// }
-								//ck, _ := l.GetCookie("SESSIONID")
-								//usercenter.AddBaseUser(mongodb, util.ObjToString(config.Sysconfig["userCenterApi"]), userId, formdata, ck)
-								if ok := jy.AddUser(mongodb, userId, pb.UserAddReq{
-									Appid: "10000",
-									Phone: phone,
-								}, *config.Middleground); !ok {
-									log.Println("usercenter add error", userId, phone)
-								}
-							}(phone, _id)
-							//用户中台存储  结束
 							jy.ClearPhoneIdentSession(l.Session())
 							reToken = getUToken(mac, phone)
 							reOpenId = phone
@@ -171,7 +164,7 @@ func (l *PcHelper) Login() error {
 							updataMap["s_phone"] = phone
 						}
 						if len(updataMap) > 0 {
-                            jyutil.Compatible.Update( BsonIdToSId((*datas)[0]["_id"]), map[string]interface{}{
+							jyutil.Compatible.Update(BsonIdToSId((*datas)[0]["_id"]), map[string]interface{}{
 								"$set":   updataMap,
 								"$unset": map[string]interface{}{"s_m_phone": ""},
 							})

+ 5 - 0
src/jfw/front/searchOptimize.go

@@ -185,6 +185,11 @@ func (so *SearchOptimize) SearchParamsHandle() {
 	if so.PageNum <= 0 {
 		so.PageNum = 1
 	}
+	userCount := util.If(so.IsPay, bidsearch.SearchMaxPageCount_PAYED, bidsearch.SearchMaxPageCount_PC).(int)
+	if so.PageNum > userCount/so.PageSize {
+		so.PageNum = -1
+		so.PageSize = -1
+	}
 	//行业格式化
 	if so.Industry != "" {
 		so.Industry = strings.TrimSpace(so.Industry)

+ 233 - 201
src/jfw/front/shorturl.go

@@ -86,12 +86,12 @@ func (s *Short) Article(stype, id string) error {
 	userId, _ := s.GetSession("userId").(string)
 	//PC端未登录用户程序走此逻辑  WX端走原来逻辑
 	if !mobileReg.MatchString(s.Header("User-Agent")) && (stype == "content" || stype == "indexcontent") && userId == "" {
-		if seoAgentReg.MatchString(s.UserAgent()) {
-			sids := encrypt.CommonDecodeArticle(stype, id)
-			return s.NologinCommon("", stype, id, sids[0])
-		} else {
-			return s.Redirect("/notin/page")
-		}
+		//if seoAgentReg.MatchString(s.UserAgent()) {
+		sids := encrypt.CommonDecodeArticle(stype, id)
+		return s.NologinCommon("", stype, id, sids[0])
+		//} else {
+		//	return s.Redirect("/notin/page")
+		//}
 	}
 	return s.LoginCommon(userId, stype, id)
 }
@@ -202,7 +202,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			return nil
 		}
 		catchKey := fmt.Sprintf("jypcdetail_%s_%s_%s", userId, stype, sid)
-		if res := redis.Get("newother", catchKey); res == nil || res == "" {
+		if res := redis.Get(redisLimitation, catchKey); res == nil || res == "" {
 			industry := s.GetString("industry")
 			var shareid = s.GetString("id")
 			if len(shareid) == 0 {
@@ -265,7 +265,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 				obj["description"] = DescriptionHandle(stype, obj)
 				s.T["obj"] = obj
 				content, _ := s.Render4Cache("/pc/biddetail_rec.html", &s.T)
-				redis.Put("newother", catchKey, string(content), 60*20)
+				redis.Put(redisLimitation, catchKey, string(content), 60*20)
 				return s.SetBody(content)
 			}
 		} else {
@@ -296,6 +296,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		isEntniche    bool = userPower.EntnicheStatus > 0                                                 //商机管理
 		privatedata   bool = userPower.PrivateGD                                                          //广东移动DICT 用户
 		isEntService  bool = userPower.Data.Ent.PowerSource > 0 && userPower.Data.Entniche.IsEntPower > 0 //商机管理服务
+		newCanRead         = false
 	)
 	if res != nil && len(*res) > 0 {
 		if isVip && util.Int64All((*res)["l_vip_starttime"]) < util.Int64All(config.Sysconfig["contextOldVipLimit"]) {
@@ -319,6 +320,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 	s.T["isEntniche"] = isEntniche
 	s.T["isEntnicheNew"] = isEntnicheNew
 	s.T["isEntService"] = isEntService
+
 	if bm {
 		//判断有没有取关,取关的话,跳转到关于剑鱼标讯页面
 		if ssOpenid != nil && ssOpenid != "" {
@@ -344,6 +346,18 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			shareopenid, sid = SwiDef(sid_openid)
 		}
 
+		if stype == "advancedProject" {
+			//判断此用户是否有打开的权限
+			newUserId := s.GetSession("base_user_id")
+			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
+			//访问次数加1
+			if pushData == nil {
+				newCanRead = false
+			} else {
+				public.BaseMysql.UpdateOrDeleteBySql("UPDATE leadproject_push SET  visit_count=visit_count+1 ,lastvisit_time=? WHERE id = ?", time.Now().Format("2006-01-02 15:04:05"), (*pushData)["id"])
+				newCanRead = true
+			}
+		}
 		s.T["keywords"] = kds
 		if shareopenid != "" {
 			s.T["shareopenid"] = shareopenid
@@ -360,7 +374,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		s.T["nickname"] = mynickname
 		s.T["avatar"] = myavatar
 		s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url())
-		obj := wxvisitD(sid, userId, myopenid, stype, (isVip && isOldVip) || isMember || isEntniche)
+		obj := wxvisitD(sid, userId, myopenid, stype, (isVip && isOldVip) || isMember || isEntniche || newCanRead)
 		canRead := false
 		if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
 			((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
@@ -369,22 +383,8 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		} else {
 			canRead = SeeDetailLimit(obj, userId, sid)
 		}
-		if stype == "advancedProject" {
-			newCanRead := false
-			//判断此用户是否有打开的权限
-			newUserId := s.GetSession("base_user_id")
-			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
-			//访问次数加1
-			if pushData == nil {
-				newCanRead = false
-			} else {
-				public.BaseMysql.UpdateOrDeleteBySql("UPDATE leadproject_push SET  visit_count=visit_count+1 ,lastvisit_time=? WHERE id = ?", time.Now().Format("2006-01-02 15:04:05"), (*pushData)["id"])
-				newCanRead = true
-			}
-			if newCanRead || canRead {
-				obj = wxvisitD(sid, userId, myopenid, stype, true)
-				canRead = true
-			}
+		if newCanRead {
+			canRead = newCanRead
 			s.T["canRead"] = canRead
 		}
 		if len(obj) > 0 {
@@ -472,142 +472,159 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		}
 		sid := sids[0]
 		//免费用户浏览三级页判断留资与浏览次数
-		indust := s.GetString("industry")
+		//indust := s.GetString("industry")
 		if userId != "" && stype == "indexcontent" { //已登录用户直接跳转至正常三级页
 			return s.Redirect(fmt.Sprintf("/article/content/%s.html", encrypt.CommonEncodeArticle("content", sid)))
 		}
-		industry := s.GetString("industry")
-		var shareid = s.GetString("id")
-		if len(shareid) == 0 {
-			shareid = "10"
+		if stype == "advancedProject" {
+			//判断此用户是否有打开的权限
+			newUserId := s.GetSession("base_user_id")
+			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
+			//访问次数加1
+			if pushData == nil {
+				newCanRead = false
+			} else {
+				public.BaseMysql.UpdateOrDeleteBySql("UPDATE leadproject_push SET  visit_count=visit_count+1 ,lastvisit_time=? WHERE id = ?", time.Now().Format("2006-01-02 15:04:05"), (*pushData)["id"])
+				newCanRead = true
+			}
 		}
-		s.T["logid"] = config.Seoconfig["jysskzy"].(string)
-		s.T["shareid"] = se.EncodeString(shareid)
-		s.T["keywords"] = s.GetString("kds")
-		s.DisableHttpCache()
-		po, bo, wo, obj := pcVRT(sid, industry, stype, isVip || isMember || isEntniche)
-		if obj != nil && len(obj) > 0 {
-			var node bool
-			if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
-				((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
-				stype == "mailprivate" || stype == "indexcontent" || stype == "bdprivate" { //邮箱推送
-				node = true
+		var detailKey = func() string {
+			if (isVip && isOldVip) || isMember || isEntniche || newCanRead || stype == "mailprivate" || stype == "indexcontent" || stype == "bdprivate" {
+				return "pay" //可以看全部
+			} else if isVip && !isOldVip {
+				return "new_vip_pay" //新版超级订阅不能看 采购意向
+			} else if SeeDetailLimit(nil, userId, sid) {
+				return "saleLeads_free" //未留资 三篇非采购意向信息;留资后同pay
 			} else {
-				_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
-				node = SeeDetailLimit(objc, userId, sid)
+				return "free" //已经免费查看三篇招标信息,且未留资。任何信息都不能看 有遮罩
 			}
-
-			if obj["publishtime"] != nil {
-				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
+		}()
+		catchKey := fmt.Sprintf("jypcdetail_%s_%s_%s", detailKey, stype, sid)
+		log.Println(catchKey, "-缓存-", userId)
+		if res := redis.Get(redisLimitation, catchKey); res == nil || res == "" {
+			redisTimeOut := util.If((isVip && isOldVip) || isMember || isEntniche || newCanRead, detailRedisByPayTimeOut, detailRedisByFreeTimeOut).(int)
+			industry := s.GetString("industry")
+			var shareid = s.GetString("id")
+			if len(shareid) == 0 {
+				shareid = "10"
 			}
-			s.T["canRead"] = node
-			if stype == "advancedProject" {
-				canRead := false
-				//判断此用户是否有打开的权限
-				newUserId := s.GetSession("base_user_id")
-				pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
-				//访问次数加1
-				if pushData == nil {
-					canRead = false
+			s.T["logid"] = config.Seoconfig["jysskzy"].(string)
+			s.T["shareid"] = se.EncodeString(shareid)
+			s.T["keywords"] = s.GetString("kds")
+			s.DisableHttpCache()
+			po, bo, wo, obj := pcVRT(sid, industry, stype, isVip || isMember || isEntniche || newCanRead)
+			if obj != nil && len(obj) > 0 {
+				var node bool
+				if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
+					((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
+					stype == "mailprivate" || stype == "indexcontent" || stype == "bdprivate" { //邮箱推送
+					node = true
 				} else {
-					public.BaseMysql.UpdateOrDeleteBySql("UPDATE leadproject_push SET  visit_count=visit_count+1 ,lastvisit_time=? WHERE id = ?", time.Now().Format("2006-01-02 15:04:05"), (*pushData)["id"])
-					canRead = true
+					//_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
+					node = SeeDetailLimit(obj, userId, sid)
 				}
-				if canRead || node {
-					_, _, _, obj = pcVRT(sid, indust, stype, true)
-					canRead = true
-					node = canRead
-				}
-				s.T["canRead"] = canRead
-			}
-			if node || util.ObjToString(obj["subtype"]) == "拟建" {
-				if len(po) > 0 {
-					s.T["projectOther"] = po
-				}
-				if len(bo) > 0 {
-					s.T["buyerOther"] = bo
+
+				if obj["publishtime"] != nil {
+					obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
 				}
-				if len(wo) > 0 {
-					s.T["winnerOther"] = wo
+				s.T["canRead"] = node
+				if newCanRead {
+					s.T["canRead"] = newCanRead
 				}
-				//判断时间 //如果是seo页面超过时间访问的进入首页
-				comeinTime := time.Unix(util.Int64All(obj["comeintime"]), 0)
-				if stype == "indexcontent" {
-					if count := public.MQFW.Count("seobidding", map[string]interface{}{"bid": sid}); count <= 0 && comeinTime.Before(time.Now().Add(time.Duration(-util.IntAll(config.Sysconfig["seoBeforeTimeHour"]))*time.Hour)) {
-						return s.Redirect("/")
+				if node || util.ObjToString(obj["subtype"]) == "拟建" {
+					if len(po) > 0 {
+						s.T["projectOther"] = po
 					}
-				}
-				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, false)
-				//免费用户正文手机号替换
-				if obj["site"] == "剑鱼信息发布平台" && !isMember {
-					//采购电话中标单位电话置空
-					if util.InterfaceToStr(obj["buyertel"]) != "" {
-						obj["buyertel"] = "freeView"
+					if len(bo) > 0 {
+						s.T["buyerOther"] = bo
 					}
-					if util.InterfaceToStr(obj["winnertel"]) != "" {
-						obj["winnertel"] = "freeView"
+					if len(wo) > 0 {
+						s.T["winnerOther"] = wo
 					}
-					//正文电话 手机号 邮箱处理
-					if detail, _ := obj["detail"].(string); detail != "" {
-						//手机号
-						re1 := regexp.MustCompile("1[345789]{1}\\d{9}")
-						detail1 := re1.ReplaceAllString(detail, `<span class="freeView">点击查看</span>`)
-						code := util.InterfaceToStr(obj["projectcode"])
-						if code != "" {
-							detail1 = strings.ReplaceAll(detail1, code, "*********")
+					//判断时间 //如果是seo页面超过时间访问的进入首页
+					comeinTime := time.Unix(util.Int64All(obj["comeintime"]), 0)
+					if stype == "indexcontent" {
+						if count := public.MQFW.Count("seobidding", map[string]interface{}{"bid": sid}); count <= 0 && comeinTime.Before(time.Now().Add(time.Duration(-util.IntAll(config.Sysconfig["seoBeforeTimeHour"]))*time.Hour)) {
+							return s.Redirect("/")
 						}
-						//座机
-						re2 := regexp.MustCompile("((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?")
-						detail2 := re2.ReplaceAllString(detail1, `<span class="freeView">点击查看</span>`)
-						re4 := regexp.MustCompile("((400)-)(\\d{3,4}-)(\\d{3,})")
-						detail4 := re4.ReplaceAllString(detail2, `<span class="freeView">点击查看</span>`)
-						//邮箱
-						re3 := regexp.MustCompile("([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)")
-						detail3 := re3.ReplaceAllString(detail4, `<span class="freeView">点击查看</span>`)
-						obj["detail"] = strings.ReplaceAll(strings.ReplaceAll(detail3, `<span class="freeView">点击查看</span><span class="freeView">点击查看</span>`, `<span class="freeView">点击查看</span>`), "*********", code)
 					}
-				}
-				if obj["projectname"] != nil {
-					s.SetSession("projectname", obj["projectname"])
-				}
+					FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, false)
+					//免费用户正文手机号替换
+					if obj["site"] == "剑鱼信息发布平台" && !isMember {
+						//采购电话中标单位电话置空
+						if util.InterfaceToStr(obj["buyertel"]) != "" {
+							obj["buyertel"] = "freeView"
+						}
+						if util.InterfaceToStr(obj["winnertel"]) != "" {
+							obj["winnertel"] = "freeView"
+						}
+						//正文电话 手机号 邮箱处理
+						if detail, _ := obj["detail"].(string); detail != "" {
+							//手机号
+							re1 := regexp.MustCompile("1[345789]{1}\\d{9}")
+							detail1 := re1.ReplaceAllString(detail, `<span class="freeView">点击查看</span>`)
+							code := util.InterfaceToStr(obj["projectcode"])
+							if code != "" {
+								detail1 = strings.ReplaceAll(detail1, code, "*********")
+							}
+							//座机
+							re2 := regexp.MustCompile("((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?")
+							detail2 := re2.ReplaceAllString(detail1, `<span class="freeView">点击查看</span>`)
+							re4 := regexp.MustCompile("((400)-)(\\d{3,4}-)(\\d{3,})")
+							detail4 := re4.ReplaceAllString(detail2, `<span class="freeView">点击查看</span>`)
+							//邮箱
+							re3 := regexp.MustCompile("([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)")
+							detail3 := re3.ReplaceAllString(detail4, `<span class="freeView">点击查看</span>`)
+							obj["detail"] = strings.ReplaceAll(strings.ReplaceAll(detail3, `<span class="freeView">点击查看</span><span class="freeView">点击查看</span>`, `<span class="freeView">点击查看</span>`), "*********", code)
+						}
+					}
+					if obj["projectname"] != nil {
+						s.SetSession("projectname", obj["projectname"])
+					}
 
-				if obj["entidlist"] != nil { //大会员中标企业跳转至画像
-					s_winner := util.ObjToString(obj["s_winner"])
-					idObjs, _ := obj["entidlist"].([]interface{})
-					winnerIdArr := []string{}
-					for _, v := range strings.Split(s_winner, ",") {
-						if v == "-" || !isInStringArr(util.ObjArrToStringArr(idObjs), v) {
-							continue
+					if obj["entidlist"] != nil { //大会员中标企业跳转至画像
+						s_winner := util.ObjToString(obj["s_winner"])
+						idObjs, _ := obj["entidlist"].([]interface{})
+						winnerIdArr := []string{}
+						for _, v := range strings.Split(s_winner, ",") {
+							if v == "-" || !isInStringArr(util.ObjArrToStringArr(idObjs), v) {
+								continue
+							}
+							winnerIdArr = append(winnerIdArr, encrypt.EncodeArticleId2ByCheck(v))
+							obj["entIds"] = winnerIdArr
 						}
-						winnerIdArr = append(winnerIdArr, encrypt.EncodeArticleId2ByCheck(v))
-						obj["entIds"] = winnerIdArr
+					}
+					if !node {
+						//打码遮罩
+						//s.T["canRead"] = true
+						otherFilter(obj, userId != "")
+					}
+				} else {
+					obj = map[string]interface{}{
+						"title":    obj["title"],
+						"_id":      obj["_id"],
+						"subtype":  obj["subtype"],
+						"stypeadd": obj["stypeadd"],
 					}
 				}
-				if !node {
-					//打码遮罩
-					//s.T["canRead"] = true
-					otherFilter(obj, userId != "")
-				}
-			} else {
-				obj = map[string]interface{}{
-					"title":    obj["title"],
-					"_id":      obj["_id"],
-					"subtype":  obj["subtype"],
-					"stypeadd": obj["stypeadd"],
+
+				obj["urlpath"] = s.Uri()
+				obj["industry"] = industry
+				if ssOpenid != nil {
+					obj["ucbsId"] = encrypt.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
 				}
-			}
+				obj["keywords"] = KeyWordHandle(obj)
+				obj["description"] = DescriptionHandle(stype, obj)
+				s.T["obj"] = obj
+				s.T["url"] = s.Uri()
 
-			obj["urlpath"] = s.Uri()
-			obj["industry"] = industry
-			if ssOpenid != nil {
-				obj["ucbsId"] = encrypt.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
+				content, _ := s.Render4Cache("/pc/biddetail_rec.html", &s.T)
+				redis.Put(redisLimitation, catchKey, string(content), redisTimeOut)
+				return s.SetBody(content)
+				//return s.Render("/pc/biddetail_rec.html", &s.T)
 			}
-			obj["keywords"] = KeyWordHandle(obj)
-			obj["description"] = DescriptionHandle(stype, obj)
-			s.T["obj"] = obj
-			s.T["url"] = s.Uri()
-			return s.Render("/pc/biddetail_rec.html", &s.T)
-
+		} else {
+			return s.SetBody([]byte(res.(string)))
 		}
 	}
 	return nil
@@ -671,7 +688,7 @@ func SeeDetailLimit(obj map[string]interface{}, userId, sid string) bool {
 			return true
 		}
 
-		if seeRes := redis.Get("other", watchKey); seeRes != nil && seeRes != "" {
+		if seeRes := redis.Get(redisLimitation, watchKey); seeRes != nil && seeRes != "" {
 			if resVal, _ := seeRes.(string); resVal != "" {
 				sidss := strings.Split(resVal, "_")
 				canRead := config.Sysconfig["canReadNotice"]
@@ -679,7 +696,7 @@ func SeeDetailLimit(obj map[string]interface{}, userId, sid string) bool {
 					sidss = append(sidss, sid)
 					arrs := RemoveDuplicatesAndEmpty(sidss)
 					newVal := strings.Join(arrs, "_")
-					redis.Put("other", watchKey, newVal, jy.GetExpire())
+					redis.Put(redisLimitation, watchKey, newVal, jy.GetExpire())
 					return true
 				} else {
 					for _, v := range sidss {
@@ -691,7 +708,7 @@ func SeeDetailLimit(obj map[string]interface{}, userId, sid string) bool {
 				}
 			}
 		} else {
-			redis.Put("other", watchKey, sid, jy.GetExpire())
+			redis.Put(redisLimitation, watchKey, sid, jy.GetExpire())
 			return true
 		}
 	}
@@ -793,8 +810,8 @@ func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry,
 	if b && from_userid != "" && se.Decode4Hex(from_userid) != "" && se.Decode4Hex(from_userid) != userId && util.ObjToString(obj["subtype"]) != "拟建" { //分享开打的
 		article_id := encrypt.CommonDecodeArticle(stype, id)[0]
 		key := fmt.Sprintf("integral_article_%s_%s_%s", article_id, from_userid, userId)
-		if redis.Incr("other", key) == 1 {
-			redis.SetExpire("other", key, 60*60*24)
+		if redis.Incr(redisLimitation, key) == 1 {
+			redis.SetExpire(redisLimitation, key, 60*60*24)
 			err := jy.Publish(public.Mgo_Log, config.Sysconfig["nsq"].(string), config.Sysconfig["nsq_topic"].(string), jy.Jyweb_article_open, se.Decode4Hex(from_userid), jy.Jywx_node1)
 			if err != nil {
 				log.Println("nsq队列写入失败-->", jy.Jyweb_article_open, se.Decode4Hex(from_userid))
@@ -806,7 +823,7 @@ func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry,
 // disWord 为空时处理
 func disWordNil(disWord, userId string) string {
 	var from_userid string
-	redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
+	redisDis := redis.GetStr(redisLimitation, "DIS_"+disWord[1:])
 	if redisDis != "" {
 		suffix := disWord[len(disWord)-3:]
 		//公告三级页处理
@@ -996,6 +1013,19 @@ func Filter(obj map[string]interface{}) map[string]interface{} {
 		if !dv.(bool) {
 			continue
 		}
+		if obj["package"] != nil {
+			pk := util.ObjToMap(obj["package"])
+			for _, pv := range *pk {
+				if pv != nil {
+					if page := util.ObjToMap(pv); page != nil {
+						if (*page)[dk] != nil {
+							(*page)[dk] = mosaicText
+						}
+						delete(*page, "text")
+					}
+				}
+			}
+		}
 		//if util.ObjToString(obj[dk]) != "" {
 		//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
 		//}
@@ -1157,66 +1187,68 @@ func (s *Short) NologinArticle(stype, id string) error {
 func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 	tg := &Tags{}
 	catchKey := fmt.Sprintf("jypcdetail_nologin_%s_%s", stype, sid)
-	//if res := redis.Get("newother", catchKey); res == nil || res == "" {
-	industry := s.GetString("industry")
-	var shareid = s.GetString("id")
-	if len(shareid) == 0 {
-		shareid = "10"
-	}
-	s.T["logid"] = config.Seoconfig["jysskzy"].(string)
-	s.T["shareid"] = se.EncodeString(shareid)
-	//s.T["keywords"] = s.GetString("kds")
-
-	s.DisableHttpCache()
-	po, bo, wo, obj := pcVRT(sid, industry, stype, false)
-	if obj != nil && len(obj) > 0 {
-		if len(po) > 0 {
-			s.T["projectOther"] = po
-		}
-		if len(bo) > 0 {
-			s.T["buyerOther"] = bo
-		}
-		if len(wo) > 0 {
-			s.T["winnerOther"] = wo
+	if res := redis.Get(redisLimitation, catchKey); true || res == nil || res == "" {
+		industry := s.GetString("industry")
+		var shareid = s.GetString("id")
+		if len(shareid) == 0 {
+			shareid = "10"
 		}
-		FieldProcessing(obj, "", industry, id, "", userId, stype, false)
-		obj["urlpath"] = s.Uri()
-		obj["industry"] = industry
+		s.T["logid"] = config.Seoconfig["jysskzy"].(string)
+		s.T["shareid"] = se.EncodeString(shareid)
+		//s.T["keywords"] = s.GetString("kds")
+		s.DisableHttpCache()
+		po, bo, wo, obj := pcVRT(sid, industry, stype, false)
+		if obj != nil && len(obj) > 0 {
+			if obj["subtype"] == "采购意向" { //未登录不能访问采购意向
+				return s.Redirect("/notin/page", 302)
+			}
+			if len(po) > 0 {
+				s.T["projectOther"] = po
+			}
+			if len(bo) > 0 {
+				s.T["buyerOther"] = bo
+			}
+			if len(wo) > 0 {
+				s.T["winnerOther"] = wo
+			}
+			FieldProcessing(obj, "", industry, id, "", userId, stype, false)
+			obj["urlpath"] = s.Uri()
+			obj["industry"] = industry
 
-		if userId == "" {
-			obj["winnerTitle"] = obj["winner"]
-			obj["buyerTitle"] = obj["buyer"]
-			obj["projectnameTitle"] = obj["projectname"]
-			obj["projectcodeTitle"] = obj["projectcode"]
-			log.Println(time.Now().UnixNano())
-			if obj["subtype"] == "拟建" {
-				otherFilter(obj, false)
-			} else {
-				obj = Filter(obj)
+			if userId == "" {
+				obj["winnerTitle"] = obj["winner"]
+				obj["buyerTitle"] = obj["buyer"]
+				obj["projectnameTitle"] = obj["projectname"]
+				obj["projectcodeTitle"] = obj["projectcode"]
+				log.Println(time.Now().UnixNano())
+				if obj["subtype"] == "拟建" {
+					otherFilter(obj, false)
+				} else {
+					obj = Filter(obj)
+				}
+				//obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(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)
-		}
-		obj["keywords"] = KeyWordHandle(obj)
-		obj["description"] = DescriptionHandle("nologin", obj)
-		s.T["obj"] = obj
-		s.T["url"] = s.Uri()
-		s.T["newBidInfoList"] = tg.GetNewBidInfo()
-		s.T["industryInfoList"] = tg.GetConsult()
-		s.T["hotLabelList"] = tg.GetHotLabel(30)
-		s.T["simpleTemplateData"] = map[string]interface{}{
-			"obj": obj,
-		}
-		content, _ := s.Render4Cache("/pc/tags/detail.html", &s.T)
-		redis.Put("newother", catchKey, string(content), 60*2)
-		return s.SetBody(content)
-	}
-	//} else {
-	//	return s.SetBody([]byte(res.(string)))
-	//}
+			obj["agency"] = ""
+			if obj["publishtime"] != nil {
+				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
+			}
+			obj["keywords"] = KeyWordHandle(obj)
+			obj["description"] = DescriptionHandle("nologin", obj)
+			s.T["obj"] = obj
+			s.T["url"] = s.Uri()
+			s.T["newBidInfoList"] = tg.GetNewBidInfo()
+			s.T["industryInfoList"] = tg.GetConsult()
+			s.T["hotLabelList"] = tg.GetHotLabel(30)
+			s.T["simpleTemplateData"] = map[string]interface{}{
+				"obj": obj,
+			}
+			content, _ := s.Render4Cache("/pc/tags/detail.html", &s.T)
+			redis.Put(redisLimitation, catchKey, string(content), 60*2)
+			return s.SetBody(content)
+		}
+	} else {
+		return s.SetBody([]byte(res.(string)))
+	}
 	return nil
 }
 

+ 12 - 7
src/jfw/front/singleLogin.go

@@ -32,8 +32,8 @@ func init() {
 	xweb.AddAction(&SingleLogin{})
 }
 
-//ShortUrl
-//短地址跳转
+// ShortUrl
+// 短地址跳转
 func (this *SingleLogin) ShortUrl(key string) error {
 	defer qutil.Catch()
 	var redirectUrl = "/swordfish/about"
@@ -50,9 +50,10 @@ func (this *SingleLogin) ShortUrl(key string) error {
 	return this.Redirect(redirectUrl)
 }
 
-//SingleLogin
-//toHref 已关注跳转页面
-//unHref 为关注跳转页面,若无此字段会跳至关注二维码页面
+// SingleLogin
+// toHref 已关注跳转页面
+// unHref 为关注跳转页面,若无此字段会跳至关注二维码页面
+//
 //	*已有逻辑 1.线上课程推文,用户点击可登陆跳转;未关注扫码会回复课程链接
 //			2.文库赚积分
 func (this *SingleLogin) SingleLogin() error {
@@ -103,8 +104,12 @@ func (this *SingleLogin) SingleLogin() error {
 				redis.Put("other", fmt.Sprintf("digitalreplay_%s", openid), id, 24*60*60)
 			}(id)
 		}
-		if this.GetSession("userId") == nil {
-			loginCreateSess(openid, this.Session())
+		if this.GetSession("userId") == nil || this.GetSession("phone") == nil {
+			CreateSession(map[string]interface{}{
+				"s_m_openid": openid,
+				"s_unionid":  map[string]interface{}{"$ne": openid}, //处理排除未关注用户点击菜单创建的用户
+			}, this.Session(), "singleLogin", false, true)
+			//loginCreateSess(openid, this.Session())
 		}
 		return this.Redirect(qutil.ObjToString(data["toHref"]))
 	}

+ 113 - 66
src/jfw/front/supsearch.go

@@ -31,12 +31,12 @@ import (
 
 type Pcsearch struct {
 	*xweb.Action
-	pcSearchIndex   xweb.Mapper `xweb:"/jylab/(supsearch|medical|bi)/index.html"` //搜索首页
-	getNewBids      xweb.Mapper `xweb:"/jylab/supsearch/getNewBids"`              //最新招标信息
-	getstatus       xweb.Mapper `xweb:"/jylab/supsearch/getstatus"`               //实验室开启状态
-	proposedProject xweb.Mapper `xweb:"/jylab/supsearch/proposedProject.html"`    //拟建项目
-	qr              xweb.Mapper `xweb:"/jylab/supsearch/qr/(.*)"`                 //生成进入实验室的二维码
-	changePro       xweb.Mapper `xweb:"/jylab/changePro"`                         //修改提示信息状态
+	pcSearchIndex xweb.Mapper `xweb:"/jylab/(supsearch|medical|bi)/index.html"` //搜索首页
+	getNewBids    xweb.Mapper `xweb:"/jylab/supsearch/getNewBids"`              //最新招标信息
+	getstatus     xweb.Mapper `xweb:"/jylab/supsearch/getstatus"`               //实验室开启状态
+	//proposedProject xweb.Mapper `xweb:"/jylab/supsearch/proposedProject.html"`    //拟建项目-- 此功能已取消 影响es 检索功能
+	qr        xweb.Mapper `xweb:"/jylab/supsearch/qr/(.*)"` //生成进入实验室的二维码
+	changePro xweb.Mapper `xweb:"/jylab/changePro"`         //修改提示信息状态
 }
 
 var industrylist map[string][]string
@@ -134,6 +134,7 @@ func (p *Pcsearch) ChangePro() {
 	}
 }
 
+// 此功能已失效
 func (p *Pcsearch) ProposedProject() error {
 	defer util.Catch()
 	var shareid = p.GetString("id")
@@ -346,7 +347,16 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 	//p353包含采购意向与拟建
 	noLoginBl := false
 	if userId == "" {
-		//未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
+		//未登录用户访问全部信息类型 需要过滤掉 拟建
+		if strings.Contains(subtype, "采购意向") {
+			var ss []string
+			for _, v := range strings.Split(subtype, ",") {
+				if v != "采购意向" {
+					ss = append(ss, v)
+				}
+			}
+			subtype = strings.Join(ss, ",")
+		}
 		if subtype == "" {
 			subtype = "拟建,招标预告,招标公告,招标结果,招标信用信息"
 			noLoginBl = true
@@ -565,74 +575,111 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 	return p.Render("/pc/supsearch.html", &p.T)
 }
 
-// Newbids  最新招标信息
+// Newbids  最新招标信息 --已失效
 func Newbids(p, userId string) []map[string]interface{} {
-	//fmt.Println("11111", redis.Get("newother", "index_list"))
-	nologin := ""
-	count := 500
-	pagenum := 10
-	limit := 50
-	if userId == "" {
-		nologin = "_nologin"
-		count = bidsearch.SearchMaxPageCount_NOLOGIN
-		pagenum = 20
-		limit = 250
-	}
-	indexOk, _ := redis.Exists("newother", "index_list"+p+nologin)
+	return nil
+	////fmt.Println("11111", redis.Get("newother", "index_list"))
+	//nologin := ""
+	//count := 500
+	//pagenum := 10
+	//limit := 50
+	//if userId == "" {
+	//    nologin = "_nologin"
+	//    count = bidsearch.SearchMaxPageCount_NOLOGIN
+	//    pagenum = 20
+	//    limit = 250
+	//}
+	//indexOk, _ := redis.Exists("newother", "index_list"+p+nologin)
+	//pages := []map[string]interface{}{}
+	//if indexOk {
+	//    pages = util.ObjArrToMapArr(redis.Get("newother", "index_list"+p+nologin).([]interface{}))
+	//}
+	//if len(pages) == 0 {
+	//    var list *[]map[string]interface{}
+	//    subtype := ""
+	//    bidField := ""
+	//    // 判断是不是医疗行业
+	//    if p == "medical" {
+	//        bidField = "0101"
+	//    } else {
+	//        if len(p) > 0 {
+	//            subtype = "拟建"
+	//        }
+	//        //未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
+	//        if subtype == "" {
+	//            subtype = "拟建,招标预告,招标公告,招标结果,招标信用信息"
+	//        }
+	//    }
+	//    //查询置顶信息
+	//    var ss []map[string]interface{}
+	//    ls := top500(subtype, bidField, userId)
+	//    if ls != nil && len(*ls) > 0 {
+	//        ss = append(ss, *ls...)
+	//    }
+	//    //pages = append(pages, ls)
+	//    if ls == nil || len(*ls) < count {
+	//        intns := make([]int, 0)
+	//        for i := 0; i < pagenum; i++ {
+	//            if len(intns) == 0 {
+	//                intns = append(intns, rand.Intn(1000))
+	//            } else {
+	//                for {
+	//                    v := rand.Intn(intns[(i-1)] + 1000)
+	//                    if v-intns[(i-1)] > limit {
+	//                        intns = append(intns, v)
+	//                        break
+	//                    }
+	//                }
+	//            }
+	//        }
+	//        for i := 0; i < pagenum; i++ {
+	//            _, list = getLastNewsData("", "", "", "", subtype, "", "", "", "", "", "", "", "Y", intns[i], true, false, "", bidField, limit)
+	//            if list != nil && len(*list) > 0 {
+	//                ss = append(ss, *list...)
+	//            }
+	//        }
+	//    }
+	//    data := duplicateRemoval(ss)
+	//    if len(data) > 0 {
+	//        pages = data
+	//        redis.Put("newother", "index_list"+p+nologin, pages, 60*60*24)
+	//        pages = util.ObjArrToMapArr(redis.Get("newother", "index_list"+p+nologin).([]interface{}))
+	//    }
+	//}
+	//return pages
+}
+
+// Newbids  最新招标信息
+func NewBidddingsForSEO(p string, pageNum, limit int) []map[string]interface{} {
+	indexOk, _ := redis.Exists("newother", "index_list_"+p)
 	pages := []map[string]interface{}{}
 	if indexOk {
-		pages = util.ObjArrToMapArr(redis.Get("newother", "index_list"+p+nologin).([]interface{}))
-	}
-	if len(pages) == 0 {
-		var list *[]map[string]interface{}
-		subtype := ""
-		bidField := ""
-		// 判断是不是医疗行业
-		if p == "medical" {
-			bidField = "0101"
-		} else {
-			if len(p) > 0 {
-				subtype = "拟建"
-			}
-			//未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
-			if subtype == "" {
-				subtype = "拟建,招标预告,招标公告,招标结果,招标信用信息"
-			}
-		}
-		//查询置顶信息
+		pages = util.ObjArrToMapArr(redis.Get("newother", "index_list_"+p).([]interface{}))
+	} else {
 		var ss []map[string]interface{}
-		ls := top500(subtype, bidField, userId)
-		if ls != nil && len(*ls) > 0 {
-			ss = append(ss, *ls...)
-		}
-		//pages = append(pages, ls)
-		if ls == nil || len(*ls) < count {
-			intns := make([]int, 0)
-			for i := 0; i < pagenum; i++ {
-				if len(intns) == 0 {
-					intns = append(intns, rand.Intn(1000))
-				} else {
-					for {
-						v := rand.Intn(intns[(i-1)] + 1000)
-						if v-intns[(i-1)] > limit {
-							intns = append(intns, v)
-							break
-						}
+		intns := make([]int, 0)
+		for i := 0; i < pageNum; i++ {
+			if len(intns) == 0 {
+				intns = append(intns, rand.Intn(30))
+			} else {
+				for {
+					v := rand.Intn(intns[(i-1)] + 50)
+					if v-intns[(i-1)] > limit {
+						intns = append(intns, v)
+						break
 					}
 				}
 			}
-			for i := 0; i < pagenum; i++ {
-				_, list = getLastNewsData("", "", "", "", subtype, "", "", "", "", "", "", "", "Y", intns[i], true, false, "", bidField, limit)
-				if list != nil && len(*list) > 0 {
-					ss = append(ss, *list...)
-				}
+		}
+		for i := 0; i < pageNum; i++ {
+			list := elastic.GetPage(INDEX, TYPE, "", `{"publishtime":-1}`, bidField, intns[i], limit)
+			if list != nil && len(*list) > 0 {
+				ss = append(ss, *list...)
 			}
 		}
-		data := duplicateRemoval(ss)
-		if len(data) > 0 {
-			pages = data
-			redis.Put("newother", "index_list"+p+nologin, pages, 60*60*24)
-			pages = util.ObjArrToMapArr(redis.Get("newother", "index_list"+p+nologin).([]interface{}))
+		if len(ss) > 0 {
+			pages = ss
+			redis.Put("newother", "index_list_"+p, ss, 60*60*24)
 		}
 	}
 	return pages

+ 80 - 19
src/jfw/front/swordfish.go

@@ -113,6 +113,22 @@ func (m *Front) PcAjaxReq() {
 	if selectType == "" {
 		selectType = "title,content"
 	}
+	if userId == "" {
+		//未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
+		if strings.Contains(subtype, "采购意向") {
+			var ss []string
+			for _, v := range strings.Split(subtype, ",") {
+				if v != "采购意向" {
+					ss = append(ss, v)
+				}
+			}
+			subtype = strings.Join(ss, ",")
+		}
+		if subtype == "" {
+			subtype = "拟建,招标预告,招标公告,招标结果,招标信用信息"
+		}
+
+	}
 	industry := strings.TrimSpace(m.GetString("industry"))
 	minprice := m.GetString("minprice")               //最低价格
 	maxprice := m.GetString("maxprice")               //最高价格
@@ -172,9 +188,13 @@ func (m *Front) PcAjaxReq() {
 		if isLimit == 1 {
 			searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
 			so := NewSearchOptimize(userId, phone, area, city, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, currentPage, pageSize, searchGroup, searchMode, wordsMode, *userInfo, searchTypeSwitch, m.Request)
-			m.SetSession("selectType", so.SelectType)
-			heightKeys = so.HeightKeys
-			count, total, list = so.GetBidSearchList(false)
+			if so.PageNum < 0 && so.PageSize < 0 {
+				log.Printf("查询参数超出范围,有可能是异常请求; 用户id:%s;用户手机号:%s \n", userId, phone)
+			} else {
+				m.SetSession("selectType", so.SelectType)
+				heightKeys = so.HeightKeys
+				count, total, list = so.GetBidSearchList(false)
+			}
 		}
 	} else {
 		searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
@@ -789,42 +809,83 @@ func pcVRT(sid, industry, content string, isPayUser bool) (po, bo, wo []map[stri
 			objdata = obj
 			queryStr := ""
 			commonQuery := func(mustquery string) *[]map[string]interface{} {
-				return nil //elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
+				//付费用户可查看 详情页关联信息
+				if !isPayUser || content == "bdcontent" || content == "advancedProject" {
+					return nil //elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
+				}
+				return elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
 			}
 			//同一个项目的其他招标信息
 			projectName, _ := obj["projectname"].(string)
 			projectCode, _ := obj["projectcode"].(string)
 			if projectName != "" || projectCode != "" {
-				if projectName != "" && projectCode != "" {
-					projectName = strings.ReplaceAll(projectName, "\"", "###剑鱼###")
-					projectCode = strings.ReplaceAll(projectCode, "\"", "###剑鱼###")
-					queryStr = `{"$or":[{"TERM_projectname":"` + projectName + `"},{"TERM_projectcode":"` + projectCode + `"}]}`
-				} else if projectName != "" && projectCode == "" {
-					projectName = strings.ReplaceAll(projectName, "\"", "###剑鱼###")
-					queryStr = `{"TERM_projectname":"` + projectName + `"}`
-				} else if projectName == "" && projectCode != "" {
-					projectCode = strings.ReplaceAll(projectCode, "\"", "###剑鱼###")
-					queryStr = `{"TERM_projectcode":"` + projectCode + `"}`
+				projectNameCode := fmt.Sprintf("projectNameCode_%s_%s_%s", projectName, projectCode, util.If(isPayUser, "pay", "free"))
+				projectOther = EntAssociated(projectNameCode)
+				if projectOther == nil {
+					if projectName != "" && projectCode != "" {
+						projectName = strings.ReplaceAll(projectName, "\"", "###剑鱼###")
+						projectCode = strings.ReplaceAll(projectCode, "\"", "###剑鱼###")
+						queryStr = `{"$or":[{"TERM_projectname":"` + projectName + `"},{"TERM_projectcode":"` + projectCode + `"}]}`
+					} else if projectName != "" && projectCode == "" {
+						projectName = strings.ReplaceAll(projectName, "\"", "###剑鱼###")
+						queryStr = `{"TERM_projectname":"` + projectName + `"}`
+					} else if projectName == "" && projectCode != "" {
+						projectCode = strings.ReplaceAll(projectCode, "\"", "###剑鱼###")
+						queryStr = `{"TERM_projectcode":"` + projectCode + `"}`
+					}
+					projectOther = bidDataConvert(sid, commonQuery(queryStr))
+					if projectOther != nil && len(projectOther) > 0 {
+						if bytes, err := json.Marshal(projectOther); err == nil && len(bytes) > 0 {
+							_ = redis.PutBytes(RedisNameNew, projectNameCode, &bytes, 24*60*60)
+						}
+					}
 				}
-				projectOther = bidDataConvert(sid, commonQuery(queryStr))
 			}
 			//同一个业主最近的其他招标信息
 			buyer, _ := obj["buyer"].(string) //采购单位
 			if buyer != "" {
-				queryStr = `{"TERM_buyer":"` + buyer + `"}`
-				buyerOther = bidDataConvert(sid, commonQuery(queryStr))
+				buyerNameOther := fmt.Sprintf("buyerNameOther_%s_%s", buyer, util.If(isPayUser, "pay", "free"))
+				buyerOther = EntAssociated(buyerNameOther)
+				if buyerOther == nil {
+					queryStr = `{"TERM_buyer":"` + buyer + `"}`
+					buyerOther = bidDataConvert(sid, commonQuery(queryStr))
+					if buyerOther != nil && len(buyerOther) > 0 {
+						if bytes, err := json.Marshal(buyerOther); err == nil && len(bytes) > 0 {
+							_ = redis.PutBytes(RedisNameNew, buyerNameOther, &bytes, 24*60*60)
+						}
+					}
+				}
 			}
 			//同一中标人最近中标的其他信息
 			winner, _ := obj["winner"].(string) //中标人
 			if winner != "" {
-				queryStr = `{"TERM_s_winner":"` + winner + `"}`
-				winnerOther = bidDataConvert(sid, commonQuery(queryStr))
+				winnerNameOther := fmt.Sprintf("winnerNameOther_%s_%s", winner, util.If(isPayUser, "pay", "free"))
+				winnerOther = EntAssociated(winnerNameOther)
+				if winnerOther == nil {
+					queryStr = `{"TERM_s_winner":"` + winner + `"}`
+					winnerOther = bidDataConvert(sid, commonQuery(queryStr))
+					if winnerOther != nil && len(winnerOther) > 0 {
+						if bytes, err := json.Marshal(winnerOther); err == nil && len(bytes) > 0 {
+							_ = redis.PutBytes(RedisNameNew, winnerNameOther, &bytes, 24*60*60)
+						}
+					}
+				}
 			}
 		}
 	}
 	return projectOther, buyerOther, winnerOther, objdata
 }
 
+func EntAssociated(key string) []map[string]interface{} {
+	if bytes, err := redis.GetBytes(RedisNameNew, key); err == nil && bytes != nil {
+		var rData []map[string]interface{}
+		if err1 := json.Unmarshal(*bytes, &rData); err1 == nil {
+			return rData
+		}
+	}
+	return nil
+}
+
 // 获取权重最低的字段
 func getLowestField(subtype string) string {
 	fields := util.ObjToMap(config.Sysconfig["recoveryField"])

+ 135 - 95
src/jfw/front/tags.go

@@ -1,6 +1,7 @@
 package front
 
 import (
+	"context"
 	"fmt"
 	"jy/src/jfw/config"
 	"jy/src/jfw/jyutil"
@@ -24,6 +25,8 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 )
 
+const cacheTime = 60 * 60 * 8
+
 // 剑鱼标签页
 type Tags struct {
 	*xweb.Action
@@ -34,8 +37,32 @@ type Tags struct {
 var LetterArr = []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
 var bidField = `"_id","site","title","publishtime","toptype","subtype","type","area","href","bidopentime","winner","buyer","bidamount","budget","s_subscopeclass","projectname","detail"`
 
+var seoBidField = `"_id","title","publishtime","subtype","area","href","bidamount","budget","s_subscopeclass","projectname"`
+
+type reqLimit struct {
+	doPool   chan struct{}
+	waitPool chan struct{}
+}
+
+var reqLimitInit *reqLimit
+
 func init() {
 	xweb.AddAction(&Tags{})
+	do := qu.IntAll(config.Sysconfig["executionNum"])
+	wait := qu.IntAll(config.Sysconfig["awaitNum"])
+	//创建执行池 等待池
+	doPool := make(chan struct{}, do)
+	for i := 0; i < do; i++ {
+		doPool <- struct{}{}
+	}
+	waitPool := make(chan struct{}, wait)
+	for i := 0; i < wait; i++ {
+		waitPool <- struct{}{}
+	}
+	reqLimitInit = &reqLimit{
+		doPool:   doPool,
+		waitPool: waitPool,
+	}
 }
 
 /*
@@ -161,6 +188,7 @@ func (this *Tags) Index(types, name string) {
 		}
 	//行业_地区_信息类型
 	case "industry":
+		//areaHref = fmt.Sprintf("/tags/industry/all_%s_all.html", "%v")
 		if len(info) > 3 {
 			checkedKeywords, checkedIndustry, checkedIndustry_2 = this.GetInsturyKeywords(info[3])
 			crumbsNav2 = map[string]interface{}{
@@ -176,6 +204,8 @@ func (this *Tags) Index(types, name string) {
 			haveList = false
 			areaHref = fmt.Sprintf("/tags/industry/%s_%s_all.html", info[0], "%v")
 			industryHref = fmt.Sprintf("/tags/industry/%s_%s_all_%s.html", "%v", checkedArea, "%v")
+			//行业标签获取
+			this.T["industryList"] = this.GetIndustry(industryHref) //需要根据地区获取不同的标的物
 		}
 		crumbsNav1 = map[string]interface{}{
 			"name": fmt.Sprintf("招标行业分类"),
@@ -185,8 +215,6 @@ func (this *Tags) Index(types, name string) {
 	//地区标签获取
 	this.T["areaList"] = this.GetArea(areaHref)
 
-	//行业标签获取
-	this.T["industryList"] = this.GetIndustry(industryHref)
 	//标的物标签获取
 
 	//字母表获取
@@ -230,7 +258,7 @@ func (this *Tags) Index(types, name string) {
 		"infoType": fmt.Sprintf(stypeHref, "all"),
 	}
 	//TDK
-	this.T["tdk"] = this.GetTDK(haveList, types, checkedKeywords, pageNum, checkedLetter, qu.ObjToString(this.T["area"])+checkedKeywords+infotypeStr, qu.ObjToString(this.T["area"])+checkedKeywords+infotypeStr, checkedKeywords)
+	this.T["tdk"] = this.GetTDK(haveList, types, checkedKeywords, pageNum, checkedLetter, qu.ObjToString(this.T["area"])+checkedKeywords, qu.ObjToString(this.T["area"])+checkedKeywords+infotypeStr, checkedKeywords, filterInfoType)
 	if haveList {
 		//信息类型
 		isLimit := false
@@ -310,13 +338,13 @@ func (this *Tags) GetSEOArea() (provinceArr, cityArr, districtArr []string, name
 	codeArr = map[int64][]int64{}   //code 及 pcode的从属关系
 	data := []map[string]interface{}{}
 	rediskey := fmt.Sprintf("pcseo_area")
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		data = qu.ObjArrToMapArr(l)
 	} else {
 		list := public.BaseMysql.SelectBySql(`select name,code,level,pcode from seo_words.seo_area order by code`)
 		//获取组合成必要参数
 		if list != nil && len(*list) > 0 {
-			redis.Put("other", rediskey, *list, 2*60*60)
+			redis.Put("seoCache", rediskey, *list, cacheTime)
 			data = *list
 		}
 	}
@@ -384,10 +412,10 @@ func (this *Tags) GetkeysMap() []map[string][]map[string]interface{} {
 
 func (this *Tags) GetIndustry(industryHref string) interface{} {
 	rediskey := fmt.Sprintf("pcindex_getIndustry_%s", industryHref)
-	if l := redis.Get("other", rediskey); l != nil {
+	if l := redis.Get("seoCache", rediskey); l != nil {
 		return l
 	} else {
-		data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a left join  seo_words.seo_industry_class b on a.class_1=b.name order by a.class_1`)
+		data := public.BaseMysql.SelectBySql(`select a.id,a.name,b.id class_id,b.name class_1 from seo_words.seo_industry a inner join  seo_words.seo_industry_class b on a.class_1=b.name and  a.class_2 !='药品'  order by a.class_1`)
 		industryArr := []string{}
 		industryMap := map[string][]map[string]interface{}{}
 		if len(*data) > 0 && data != nil {
@@ -413,10 +441,9 @@ func (this *Tags) GetIndustry(industryHref string) interface{} {
 				v: industryMap[v],
 			})
 		}
-		redis.Put("other", rediskey, m, 2*60)
+		redis.Put("seoCache", rediskey, m, cacheTime)
 		return m
 	}
-	return nil
 }
 
 // 判断字符串是否再数组str内
@@ -432,7 +459,7 @@ func IsInArr(arr []string, s string) bool {
 // 获取最新招标信息
 func (this *Tags) GetNewBidInfo() (list []map[string]interface{}) {
 	rediskey := fmt.Sprintf("pcindex_newArticle")
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		list = qu.ObjArrToMapArr(l)
 	} else {
 		_, _, lists := bidsearch.GetPcBidSearchData("", "", "", "", "拟建,招标预告,招标公告,招标结果,招标信用信息", "", "", "", "", "", "", "", "", 1, false, nil, bidSearch_field_1, "", false, false, "", 50, "")
@@ -452,7 +479,7 @@ func (this *Tags) GetNewBidInfo() (list []map[string]interface{}) {
 				}
 			}
 			list = *lists
-			redis.Put("other", rediskey, list, 2*60*60)
+			redis.Put("seoCache", rediskey, list, cacheTime)
 		}
 	}
 	return list
@@ -461,26 +488,17 @@ func (this *Tags) GetNewBidInfo() (list []map[string]interface{}) {
 // 获取信息类型相关url
 func (this *Tags) GetStype(href string) (list []map[string]interface{}) {
 	rediskey := fmt.Sprintf("pcseo_stypelist_%s", href)
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		list = qu.ObjArrToMapArr(l)
 	} else {
 		m := []map[string]interface{}{}
-		var data []map[string]interface{}
-		//newData := public.BaseMysql.SelectBySql(`select id,name,pid from seo_words.seo_stype where name = "拟建项目" or name = "采购意向" order by id`)
-		//if newData != nil && len(*newData) > 0 {
-		//	data = append(data, *newData...)
-		//}
-		//oldData := public.BaseMysql.SelectBySql(`-- select id,name,pid from seo_words.seo_stype where  name != "拟建项目" and name != "采购意向" order by id`)
-		oldData := public.BaseMysql.SelectBySql(`select id,name,pid from seo_words.seo_stype order by id`)
-		if oldData != nil && len(*oldData) > 0 {
-			data = append(data, *oldData...)
-		}
+		data := public.BaseMysql.SelectBySql(`select id,name,pid from seo_words.seo_stype where name !="拟建项目" and name != "采购意向" and pid=0 order by id`)
 		codeMap := map[int64][]int64{}
 		level1 := []int64{}
 		nameToCode := map[string]int64{}
 		codeToName := map[int64]string{}
-		if len(data) > 0 {
-			for _, v := range data {
+		if data != nil && len(*data) > 0 {
+			for _, v := range *data {
 				name := qu.ObjToString(v["name"])
 				pid := qu.Int64All(v["pid"])
 				id := qu.Int64All(v["id"])
@@ -507,7 +525,7 @@ func (this *Tags) GetStype(href string) (list []map[string]interface{}) {
 			}
 		}
 		list = m
-		redis.Put("other", rediskey, list, 2*60)
+		redis.Put("seoCache", rediskey, list, cacheTime)
 	}
 	return list
 }
@@ -515,7 +533,7 @@ func (this *Tags) GetStype(href string) (list []map[string]interface{}) {
 // 剑鱼博客
 func (this *Tags) GetConsult() (list []map[string]interface{}) {
 	rediskey := fmt.Sprintf("pcseo_jybk")
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		list = qu.ObjArrToMapArr(l)
 	} else {
 
@@ -530,7 +548,7 @@ func (this *Tags) GetConsult() (list []map[string]interface{}) {
 				v["url"] = fmt.Sprintf("/jyblog/%s.html", qu.ObjToString(v["_id"]))
 			}
 			list = *rs
-			redis.Put("other", rediskey, list, 2*60*60)
+			redis.Put("seoCache", rediskey, list, cacheTime)
 		}
 	}
 	return list
@@ -538,8 +556,8 @@ func (this *Tags) GetConsult() (list []map[string]interface{}) {
 
 func (this *Tags) GetLetterMap(pageSize, pageNum int64, letter string) ([]map[string]interface{}, int64) {
 	m := []map[string]interface{}{}
-	sql := `select id,name,letter from seo_words.seo_resource where letter = ? order by id desc`
-	cql := `select count(1) from seo_words.seo_resource where letter = ?`
+	sql := `select id,name,letter from seo_words.seo_resource where letter = ? and state=1 order by id desc`
+	cql := `select count(1) from seo_words.seo_resource where letter = ? and state=1 `
 	offset := (pageNum - 1) * pageSize
 	sql += fmt.Sprintf(" limit %v,%v", offset, pageSize)
 	data := public.BaseMysql.SelectBySql(sql, letter)
@@ -561,12 +579,12 @@ func (this *Tags) GetLetterMap(pageSize, pageNum int64, letter string) ([]map[st
 
 func (this *Tags) GetHotLabel(length int64) []map[string]interface{} {
 	rediskey := fmt.Sprintf("pcseo_getHotLabel_%v", length)
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		return qu.ObjArrToMapArr(l)
 	} else {
 		m := []map[string]interface{}{}
-		sql := `select id,name,letter from seo_words.seo_resource`
-		cql := `select count(1) from seo_words.seo_resource `
+		sql := `select id,name,letter from seo_words.seo_resource where state=1`
+		cql := `select count(1) from seo_words.seo_resource where state=1`
 		count := public.BaseMysql.CountBySql(cql)
 		rand.Seed(time.Now().UnixNano())
 		offset := rand.Intn(int(count / length))
@@ -584,7 +602,7 @@ func (this *Tags) GetHotLabel(length int64) []map[string]interface{} {
 				})
 			}
 		}
-		redis.Put("other", rediskey, m, 60)
+		redis.Put("seoCache", rediskey, m, cacheTime)
 		return m
 	}
 	return nil
@@ -606,80 +624,83 @@ func GetBiddingPlatformType() (nameToCode map[string]int64, codeToName map[int64
 	return
 }
 
+// -2 等待池已满
+// -1 超时
+// 1:可以执行查询
+func (r *reqLimit) Limit(ctx context.Context) int {
+	ctx, cancel := context.WithTimeout(ctx, 3*time.Second)
+	defer cancel()
+	select {
+	case <-r.waitPool:
+		defer func() {
+			r.waitPool <- struct{}{}
+		}()
+		select {
+		case <-r.doPool:
+			return 1
+		case <-ctx.Done(): //超时
+			return -1
+		}
+	default:
+		return -2
+	}
+}
+
+func (r *reqLimit) Release() {
+	r.doPool <- struct{}{}
+}
+
+// GetBidding
+// 金额限制在"1000"~"100000000";需求因es压力过大,只返回60%的数据
 func (this *Tags) GetBidding(industry, area, city, stype, keyword string, request *http.Request, responseWriter http.ResponseWriter, session *httpsession.Session) ([]map[string]interface{}, int64, bool) {
 	rediskey := fmt.Sprintf("pcseo_getbidding_%s_%s_%s_%s_%s", industry, area, city, stype, keyword)
 	rediskeyCount := fmt.Sprintf("pcseo_getbidding_count_%s_%s_%s_%s_%s", industry, area, city, stype, keyword)
 
-	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil {
-		count := redis.GetInt("other", rediskeyCount)
+	if l, ok := redis.Get("seoCache", rediskey).([]interface{}); ok && l != nil {
+		count := redis.GetInt("seoCache", rediskeyCount)
 		return qu.ObjArrToMapArr(l), int64(count), false
 	} else {
 		if area != "" || stype != "" || industry != "" || city != "" || keyword != "" {
+			if flag := reqLimitInit.Limit(context.Background()); flag == 1 {
+				defer reqLimitInit.Release()
+			} else {
+				if flag == -2 {
+					log.Println("等待队列已满")
+				} else if flag == -1 {
+					log.Println("等待超时")
+				}
+				return nil, 0, true
+			}
+
 			if public.Lst.IsLimited(request, responseWriter, session, false) == 1 { //没有被限制
 				defer public.Lst.Limit()
 			} else {
 				return nil, 0, true
 			}
-			//
-			query1 := `{"query": {"bool": {"must":[`
-			query_start := `{"query": {"bool": {"must":[`
-			if area != "" {
-				query1 += `{"term":{"area":"` + area + `"}}`
-			}
-			if stype != "" {
-				if query1 != query_start {
-					query1 += ","
-				}
-				stype = getstype(stype)
-				query1 += `{"terms":{"subtype":[`
-				for k, v := range strings.Split(stype, ",") {
-					if k > 0 {
-						query1 += `,`
-					}
-					query1 += `"` + v + `"`
-				}
-				query1 += `]}}`
-			}
-			if industry != "" {
-				if query1 != query_start {
-					query1 += ","
-				}
-				query1 += `{"term":{"s_subscopeclass":"` + industry + `"}}`
-			}
-			if city != "" {
-				if query1 != query_start {
-					query1 += ","
-				}
-				query1 += `{"term":{"city":"` + city + `"}}`
-			}
-			if keyword != "" {
-				if query1 != query_start {
-					query1 += ","
-				}
-				query1 += `{ "bool": {"must": [ { "multi_match": { "query": "` + keyword + `","type": "phrase", "fields": [ "title","detail" ]}}]}}`
-			}
-			query1 += `],"should": [],"minimum_should_match": 0}}}`
-			log.Println("~~~query1:", query1)
-			query := getLastNewsQuery(area, "", stype, industry, city)
+			now := time.Now()
+			starttime := fmt.Sprint(time.Date(now.Year()-1, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
+			endtime := fmt.Sprint(now.Unix())
 			var datas *[]map[string]interface{}
 			var startPage int
+			var count int64
 			currentPage := 5
-			limitcount := qu.IntAllDef(config.Seoconfig["tagsLimitCount"], 50)
-			count := elastic.Count(INDEX, TYPE, query1)
+			limitCount := qu.IntAllDef(config.Seoconfig["tagsLimitCount"], 50)
 			if keyword == "" {
-				r := rand.New(rand.NewSource(time.Now().UnixNano()))
-				startPage = r.Intn(currentPage * limitcount)
+				query := bidsearch.GetSearchQuery("", industry, "0.1", "1000", "", "", "", "", bidsearch.GetBidSearchQuery(area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, "", ""), "", false, seoBidField)
+				count = elastic.Count(INDEX, TYPE, query)
+				if count == 0 {
+					return nil, 0, false
+				}
+				startPage = rand.New(rand.NewSource(time.Now().UnixNano())).Intn(currentPage * limitCount)
 				count1 := qu.IntAll(count)
 				if count1 < startPage || startPage < 0 {
 					startPage = 0
 				}
-				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, bidField, startPage, limitcount)
+				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, seoBidField, startPage, limitCount)
 			} else {
-				log.Println(keyword, area, city, industry)
-				_, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, "", stype, industry, "", "", "", "", "", "", "", 0, true, []string{"title", "detail"}, bidField, "", false, false, "", limitcount, "")
-
-				if datas != nil && len(*datas) > limitcount {
-					*datas = (*datas)[0:limitcount]
+				count, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, industry, "0.1", "1000", "", "", "", "", "", 0, true, []string{"title", "detail", "purchasing"}, seoBidField, "", false, false, "", limitCount, "")
+				if datas != nil && len(*datas) > limitCount {
+					*datas = (*datas)[0:limitCount]
 				}
 			}
 			if datas != nil && len(*datas) > 0 {
@@ -699,8 +720,8 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 					industry = strings.Split(industry, "_")[0]
 				}
 				public.BidListConvert(industry, datas)
-				redis.Put("other", rediskey, datas, 2*60)
-				redis.Put("other", rediskeyCount, count, 2*60)
+				redis.Put("seoCache", rediskey, datas, cacheTime)      //生产环境配置4G单独redis,超出4G自动清除
+				redis.Put("seoCache", rediskeyCount, count, cacheTime) //生产环境配置4G单独redis,超出4G自动清除
 				return *datas, count, false
 			}
 		}
@@ -773,7 +794,7 @@ func (this *Tags) GetLetterPaging(pageNum int, checkedLetter string) (letterList
 
 // itype 1:汇总页 2:标签页
 // stype area:地区  industy:行业 letter:字母类
-func (this *Tags) GetTDK(isDetails bool, stype string, keywords string, pagenum int, letter string, industryWord string, areaWord, letterWord string) map[string]interface{} {
+func (this *Tags) GetTDK(isDetails bool, stype string, keywords string, pagenum int, letter string, industryWord string, areaWord, letterWord, infoType string) map[string]interface{} {
 	title, keywordsContent, descriptionContent := "", "", ""
 	if !isDetails {
 		//汇总页
@@ -801,13 +822,32 @@ func (this *Tags) GetTDK(isDetails bool, stype string, keywords string, pagenum
 			keywordsContent = fmt.Sprintf("%s,%s招标,%s采购", areaWord, areaWord, areaWord)
 			descriptionContent = fmt.Sprintf("提供%s全部招标采购信息,登录后可以免费查看,涵盖%s拟建项目、采购意向、招标公告,中标结果等招投标信息。%s为您提供专业全面的招投标服务!", areaWord, areaWord, areaWord)
 		} else if stype == "industry" {
-			title = fmt.Sprintf("%s招标采购-%s招标信息-中标公告-剑鱼标讯", industryWord, industryWord)
-			keywordsContent = fmt.Sprintf("%s招标,%s采购,%s中标,%s招标采购信息", industryWord, industryWord, industryWord, industryWord)
-			descriptionContent = fmt.Sprintf("剑鱼标讯是%s招标采购的优质信息平台,免费提供全国%s招标采购信息、招标公告,中标结果等所有%s相关的招投标信息,选择优质%s招标信息网站,就用剑鱼标讯。", industryWord, industryWord, industryWord, industryWord)
+			if infoType == "招标预告" {
+				title = fmt.Sprintf("%s免费招标预告_%s采购信息预告-剑鱼标讯", industryWord, keywords)
+				keywordsContent = fmt.Sprintf("%s免费招标预告,%s招投标预告,%s采购预告", industryWord, industryWord, industryWord)
+				descriptionContent = fmt.Sprintf("剑鱼标讯%s招标信息预告专栏,免费提供%s招标采购预告信息,寻找优质免费%s招标预告信息网站,就用剑鱼标讯!", industryWord, industryWord, industryWord)
+			} else if infoType == "招标公告" {
+				title = fmt.Sprintf("%s免费招标公告_%s采购信息公告-剑鱼标讯", industryWord, keywords)
+				keywordsContent = fmt.Sprintf("%s免费招标公告,%s招投标公告,%s采购公告", industryWord, industryWord, industryWord)
+				descriptionContent = fmt.Sprintf("剑鱼标讯%s招标信息公告专栏,免费提供%s招标采购公告信息,寻找优质免费%s招标公告信息网站,就用剑鱼标讯!", industryWord, industryWord, industryWord)
+			} else if infoType == "招标结果" {
+				title = fmt.Sprintf("%s免费招标结果_%s采购信息结果-剑鱼标讯", industryWord, keywords)
+				keywordsContent = fmt.Sprintf("%s免费招标结果,%s招投标结果,%s采购结果", industryWord, industryWord, industryWord)
+				descriptionContent = fmt.Sprintf("剑鱼标讯%s招标结果专栏,免费提供%s招标采购结果内容,寻找优质免费%s招标结果信息网站,就用剑鱼标讯!", industryWord, industryWord, industryWord)
+			} else if infoType == "招标信用信息" {
+				title = fmt.Sprintf("%s招标采购信用信息查询网-剑鱼标讯", industryWord)
+				keywordsContent = fmt.Sprintf("%s招标信用,%s投标信用,%s采购信用查询", industryWord, industryWord, industryWord)
+				descriptionContent = fmt.Sprintf("剑鱼标讯%s招标信息查询专栏,免费提供%s招标信息查询内容,寻找优质免费%s招标信用查询网站,就用剑鱼标讯!", industryWord, industryWord, industryWord)
+			} else {
+				title = fmt.Sprintf("%s免费招标信息_%s采购服务平台-剑鱼标讯", industryWord, keywords)
+				keywordsContent = fmt.Sprintf("%s免费招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", industryWord, industryWord, industryWord, industryWord, industryWord)
+				descriptionContent = fmt.Sprintf("剑鱼标讯%s专栏,是%s招标采购的免费信息平台,免费提供%s招标采购信息、招标公告,中标结果等所有%s相关的招投标信息,寻找优质免费%s招标信息网站,就用剑鱼标讯!", industryWord, industryWord, industryWord, industryWord, industryWord)
+			}
+
 		} else if stype == "letter" {
-			title = fmt.Sprintf("%s招标采购-%s招标信息-中标公告-剑鱼标讯", letterWord, letterWord)
-			keywordsContent = fmt.Sprintf("%s招标,%s采购,%s中标,%s招标采购信息", letterWord, letterWord, letterWord, letterWord)
-			descriptionContent = fmt.Sprintf("剑鱼标讯是%s招标采购的优质信息平台,免费提供全国%s招标采购信息、招标公告,中标结果等所有%s相关的招投标信息,选择优质%s招标信息网站,就用剑鱼标讯。", letterWord, letterWord, letterWord, letterWord)
+			title = fmt.Sprintf("%s免费招标信息_%s采购平台-剑鱼标讯", letterWord, letterWord)
+			keywordsContent = fmt.Sprintf("%s免费招标信息,%s招标公告,%s中标公告,%s招标采购,%s招标网", letterWord, letterWord, letterWord, letterWord, letterWord)
+			descriptionContent = fmt.Sprintf("剑鱼标讯%s专栏,是%s招标采购的免费信息平台,免费提供全国%s招标采购信息、招标公告、中标结果等所有%s相关的招投标信息,寻找优质免费%s招标信息网站,就用剑鱼标讯!", letterWord, letterWord, letterWord, letterWord, letterWord)
 		}
 	}
 	return map[string]interface{}{

+ 53 - 44
src/jfw/modules/app/src/app/front/login.go

@@ -56,6 +56,7 @@ type Login struct {
 	afterPageLoadToCheck xweb.Mapper `xweb:"/jyapp/free/afterPageLoadToCheck"` //检测
 	channelSign          xweb.Mapper `xweb:"/jyapp/free/channelSign"`          //渠道统计
 	savePushIdMsg        xweb.Mapper `xweb:"/jyapp/free/savePushIdMsg"`        //推送id记录
+	setPwd               xweb.Mapper `xweb:"/jyapp/free/setPwd"`               //修改密码
 }
 
 var (
@@ -114,11 +115,15 @@ func (l *Login) Login() error {
 				return -1
 			}
 			query := map[string]interface{}{
-				"i_appid":    2,
-				"s_phone":    phone,
+				"i_appid": 2,
+				"$or": []map[string]interface{}{
+					{"s_phone": phone},
+					{"s_m_phone": phone},
+				},
 				"s_password": qutil.GetMd5String(password),
 			}
-			user, ok := mongodb.FindOne("user", query)
+			// user, ok := mongodb.FindOne("user", query)
+			user, ok := mongodb.Find("user", query, `{"s_phone":-1}`, `{"_id":1,"s_password":1}`, false, 0, 1)
 			//登录成功
 			if ok && user != nil && len(*user) > 0 {
 				rid := l.GetString("rid")
@@ -126,7 +131,7 @@ func (l *Login) Login() error {
 				channel := l.GetString("channel")
 				deviceId := l.GetString("deviceId")
 				phoneType := l.GetString("phoneType")
-				returnSign = afterLogin(*user, l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
+				returnSign = afterLogin((*user)[0], l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
 				return 1
 			}
 			return -1 //用户名或密码不正确
@@ -213,24 +218,18 @@ func (l *Login) Login() error {
 						data["s_email"] = email
 					}
 					data["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent"))
+
+					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+						Appid: "10000",
+						Phone: phone,
+					}); resp != nil && resp.Data.Id > 0 {
+						data["base_user_id"] = resp.Data.Id
+					} else {
+						log.Println(phone, "调用usercenter失败")
+						return -4
+					}
 					_id := mongodb.Save("user", data)
 					if _id != "" {
-						//用户中台同步
-						func(userid string) {
-							// formdata := map[string]interface{}{
-							// 	"appid": "10000",
-							// 	"phone": phone,
-							// }
-							// ck, _ := l.GetCookie("SESSIONID")
-							// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
-
-							if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-								Appid: "10000",
-								Phone: phone,
-							}, *config.Middleground); !ok {
-								log.Println("usercenter add error", userid, phone)
-							}
-						}(_id)
 						jy.ClearPhoneIdentSession(l.Session())
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 						addr, _ := config.Sysconfig["nsq"].(string)
@@ -258,6 +257,22 @@ func (l *Login) Login() error {
 						return 1
 					}
 				} else {
+					//以s_m_phone登录的 需要把s_m_phone转化为s_phone
+					updataMap := map[string]interface{}{}
+					if user["s_m_phone"] != nil {
+						updataMap["s_phone"] = phone
+					}
+					//注册邮箱
+					email := l.GetString("email")
+					if jy.IsEmail(email) {
+						updataMap["s_email"] = email
+					}
+					if len(updataMap) > 0 {
+						mongodb.UpdateById("user", BsonIdToSId(user["_id"]), map[string]interface{}{
+							"$set":   updataMap,
+							"$unset": map[string]interface{}{"s_m_phone": ""},
+						})
+					}
 					jy.ClearPhoneIdentSession(l.Session())
 					returnSign = afterLogin(user, l.Session(), rid, oid, phoneType, channel, deviceId, false, l.ResponseWriter)
 					return 1
@@ -623,8 +638,6 @@ func (l *Login) WxLogin() {
 			})
 			func(userid string) {
 				// //用户中台同步
-				// ck, _ := l.GetCookie("SESSIONID")
-				// usercenter.UpdateBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), BsonIdToSId((*user)["_id"]), ck)
 				if uinfo := jy.GetInfoForBaseUser(mongodb, userid); uinfo != nil {
 					jy.UpdateUser(mongodb, userid, *uinfo, *config.Middleground)
 				}
@@ -664,29 +677,21 @@ func (l *Login) WxLogin() {
 				newUser["s_email"] = email
 			}
 			newUser["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent")) //用户注册终端 ios 安卓 pc
+			nickname := qutil.ObjToString(qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname))
+			if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+				Appid:    "10000",
+				Nickname: nickname,
+				Headimg:  u.HeadImageUrl,
+				AOpenid:  u.OpenId,
+				Unionid:  u.UnionId,
+			}); resp != nil && resp.Data.Id > 0 {
+				newUser["base_user_id"] = resp.Data.Id
+			} else {
+				log.Println(u.UnionId, "调用usercenter失败")
+				return 0
+			}
+
 			if _id := mongodb.Save("user", newUser); _id != "" {
-				//用户中台同步
-				func(userid string) {
-					// formdata := map[string]interface{}{
-					// 	"appid":    "10000",
-					// 	"nickname": qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname),
-					// 	"headimg":  u.HeadImageUrl,
-					// 	"a_openid": u.OpenId,
-					// 	"unionid":  u.UnionId,
-					// }
-					// ck, _ := l.GetCookie("SESSIONID")
-					// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
-					nickname := qutil.ObjToString(qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname))
-					if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-						Appid:    "10000",
-						Nickname: nickname,
-						Headimg:  u.HeadImageUrl,
-						AOpenid:  u.OpenId,
-						Unionid:  u.UnionId,
-					}, *config.Middleground); !ok {
-						log.Println("usercenter add error", userid)
-					}
-				}(_id)
 				returnSign = afterLogin(newUser, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 				if disWord != "" {
 					redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
@@ -944,6 +949,10 @@ func (l *Login) Brand() {
 	})
 }
 
+func (l *Login) SetPwd() {
+	l.Render("/me/setpwd.html")
+}
+
 /**********************************************************************
 ***********************************************************************
 ***********************************************************************/

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

@@ -128,6 +128,9 @@ func (s *Short) Article(stype, id string) error {
 	var canRead bool
 	obj = wxvisitD(sid, userId, (isVip && isOldVip) || isEntniche || isMember)
 	if len(obj) > 0 {
+		if userId == "" && util.ObjToString(obj["subtype"]) == "采购意向" {
+			return s.Redirect("/jyapp/free/login")
+		}
 		if userId != "" {
 			if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
 				((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) { //新超级订阅非采购意向”和“拟建项目”
@@ -319,6 +322,19 @@ func Filter(obj map[string]interface{}) map[string]interface{} {
 		if !dv.(bool) {
 			continue
 		}
+		if obj["package"] != nil {
+			pk := util.ObjToMap(obj["package"])
+			for _, pv := range *pk {
+				if pv != nil {
+					if page := util.ObjToMap(pv); page != nil {
+						if (*page)[dk] != nil {
+							(*page)[dk] = mosaicText
+						}
+						delete(*page, "text")
+					}
+				}
+			}
+		}
 		//if util.ObjToString(obj[dk]) != "" {
 		//	detail = strings.ReplaceAll(detail, util.ObjToString(obj[dk]), detailText)
 		//}

+ 2 - 1
src/jfw/modules/app/src/app/tag/msg.go

@@ -3,10 +3,11 @@ package tag
 import (
 	"html/template"
 	"jy/src/jfw/modules/app/src/jfw/config"
-	util "app.yhyue.com/moapp/jybase/common"
 	"strconv"
 	"strings"
 	"time"
+
+	util "app.yhyue.com/moapp/jybase/common"
 )
 
 // Msg 从json配置文件中读取值

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

@@ -274,6 +274,9 @@ var vNode = {
         return item
       })
       return !isShow
+    },
+    isFreeOrNotLogin () {
+      return !this.isLogin || this.isFree
     }
   },
   methods: {
@@ -407,7 +410,7 @@ var vNode = {
     },
     // 获取画像信息
     getEntPortrait: function (callback) {
-      if(!this.isLogin) {
+      if(!this.isLogin || this.isFree) {
         return
       }
       var storageSet = JSON.parse(sessionStorage.getItem('winner_high_set'))
@@ -465,7 +468,7 @@ var vNode = {
               }
             }
           } else {
-            _this.$toast(res.error_msg)
+            // _this.$toast(res.error_msg)
             _this.show.yearData = false
             _this.show.monthData = false
             _this.show.areaData = false

+ 4 - 1
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -19,7 +19,7 @@ var vNode = {
       ], false
     ), '#FF9F40']
     return {
-      chartLoading: false,
+      chartLoading: true,
       showAll: false,
       buyer: {
         name: '',
@@ -148,6 +148,9 @@ var vNode = {
     }
   },
   computed: {
+    isFreeOrNotLogin () {
+      return !this.isLogin || this.userInfo.isFree
+    },
     allNot: function () {
       var show_1 = this.isShow.showDynamic;
       var show_2 = this.isShow.showYearData;

+ 6 - 1
src/jfw/modules/app/src/web/staticres/jyapp/js/common.js

@@ -1498,7 +1498,12 @@ function loginSuccess (result, loginType) {
       url: '/entbase/ent/mySelectent?t=' + new Date().getTime()
     })
   }
-
+  // 当前为新用户(即注册)--跳转设置密码页
+   if(result.userInfo && result.userInfo.isNewUser) {
+     var href ="/jyapp/free/setPwd";
+     window.location.href = href;
+     return
+   }
 
   if (loginType === 'is-wx') {
     // 检查是否绑定手机号

+ 31 - 10
src/jfw/modules/app/src/web/staticres/jyapp/me/css/login.css

@@ -2,7 +2,7 @@
 .login_main{
   margin: 12px 12px 0 12px;
   padding: .34rem 0 .68rem;
-  background: #fff;
+  /*background: #fff;*/
   box-shadow: 0px 2px 8px rgba(54, 147, 179, 0.051);
   border-radius: 8px;
 }
@@ -14,7 +14,7 @@
 
 .login div.pass {
   width: 100%;
-  background: #fff;
+  /*background: #fff;*/
   position: relative;
   border-bottom: 1px solid #E6E6E6;
   height: 1rem;
@@ -31,6 +31,9 @@
 	z-index: 2;
 	background-color: transparent;
 }
+.login div.onePass {
+    display:none;
+}
 .login div.onePass input{
 	padding-right: 80px;
 }
@@ -43,7 +46,11 @@
 }
 
 .login .forget {
-  margin-top: 18px;
+  margin-top: 12px;
+  text-align: center;
+  font-size: 14px;
+    color: #9B9CA3;
+    line-height:20px;
 }
 .login .btn{
   margin-top: 24px;
@@ -52,13 +59,16 @@
 .login .forget a {
   color: #2ABED1;
   font-size: 14px;
-  float: left;
 }
 
-.login .forget a.register {
-  float: right;
+.login .forget .forget-password{
+    display: none;
 }
 
+/*.login .forget a.register {*/
+/*  float: right;*/
+/*}*/
+
 .login .wx {
   text-align: center;
   margin-top:20px;
@@ -157,9 +167,9 @@
 .header-tab-active{
 	color: #2CB7CA;
 }
-.login .code{
-	display: none;
-}
+/*.login .code{*/
+/*	display: none;*/
+/*}*/
 .login>.code>span{
 	text-align: right;
 	width: 2rem;
@@ -223,4 +233,15 @@
 }
 .jyapp-icon-zuojiantou-x:after{
 	top:38px;
-}
+}
+/*重置input默认样式*/
+/*input:-webkit-autofill{*/
+/*    -webkit-box-shadow: 0 0 0px 1000px transparent inset;*/
+/*    transition:  background-color 5000s ease-in-out 0s !important;*/
+/*}*/
+/*input:-internal-autofill-previewed,*/
+/*input:-internal-autofill-selected {*/
+/*    background-color: #f5ffff !important;*/
+/*    !*transition:  background-color 5000s ease-in-out 0s !important;*!*/
+/*}*/
+

+ 52 - 7
src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js

@@ -51,7 +51,11 @@ var Guide = {
 			}else{
 				indexTemp = 0;
 			}
-			html += '<li style="'+thisStyle+'">'+i+'</li>';
+      if(this.selectIndustrys && this.selectIndustrys.length >0 && this.selectIndustrys.indexOf(i) > -1) {
+        html += '<li style="'+thisStyle+'" class="active">'+i+'</li>';
+      } else {
+        html += '<li style="'+thisStyle+'">'+i+'</li>';
+      }
 		}
 		$(".step-1>div").css("padding","0px "+thisMarginLeft+"px");
 		$("#industry").html(html);
@@ -69,6 +73,7 @@ var Guide = {
 		        localStorage.removeItem("tsGuide_keywords");
 		        localStorage.removeItem("tsGuide_preview");
 		        localStorage.removeItem("tsGuide_step");
+            localStorage.removeItem("tsGuide_area");
 		    }
 			//Android客户端没有使用
 //			if (!mySysIsIos()){
@@ -118,10 +123,21 @@ var Guide = {
 			}else{
 				$(".relRecom").hide();
 			}
-			$(".step-1").hide();
-			this.setInputEmpty();
-			$(".com-top-one .nextStep").attr("disabled",$("#haskeywords li").length == 0);
-			$(".step-2").show();
+      this.setInputEmpty();
+      $(".com-top-one .nextStep").attr("disabled",$("#haskeywords li").length == 0);
+      $(".step-1").hide();
+      $(".step-2").show();
+      $(".relRecom,.com-top-one").hide();
+      // 获取已配置过的关键词
+      getHadKeywords(index, function(keys) {
+        if(keys.length > 0) {
+          $("body").removeClass("step-3-body");
+          $(".relRecom,.com-top-one").hide();
+          $(".com-top-two-b,.com-top-two").show();
+        } else {
+          $(".relRecom,.com-top-one").show();
+        }
+      })
 		}else if(index == 2){
 			$("body").removeClass("step-3-body");
 			$(".relRecom,.com-top-one").hide();
@@ -171,7 +187,6 @@ var Guide = {
 			$(".com-top-one").show();
 			$("body").removeClass("step-3-body");
 		}else if(index == 4){
-			this.removeLast();
 			this.saveLSkeywords(true);
 			$(".step-3").hide();
 			$(".com-top-two-b").show();
@@ -418,6 +433,7 @@ var Guide = {
 			$(".step-3").show();
 		}
 		localStorage.tsGuide_status = "0";
+    getHadKeywords(localStorage.tsGuide_step)
 	},
 	saveLSinputvalue: function(value,comStartFlag){
 		value = $.trim(value);
@@ -839,6 +855,35 @@ var JYAlert = function(T,comStartFlag){
 		$("#myModal").modal("show");
 	}
 }
+// 获取已经设置过的关键词
+function getHadKeywords(step, callback){
+  $.ajax({
+    url: "/publicapply/free/subscribe",
+    type: "post",
+    success: function(res){
+      if(res.error_code === 0 && res.data){
+        var keysArr = res.data.keys ?  res.data.keys : []
+        var keys = []
+        keysArr.forEach(function(e) {
+          keys = keys.concat(e.key)
+        })
+        callback && callback(keys)
+        if (keys.length > 0) {
+          Guide.saveLSkeywords(false)
+          if(step === 1) {
+            Guide.nextStep(2)
+          }
+          $("#haskeywords li").remove();
+          for( var i=0; i< keys.length; i++) {
+            Guide.appendHaskeywords(keys[i])
+          }
+        }
+      }
+    },
+    error: function(){
+    }
+  });
+}
 //
 $(function(){
   Guide.clearHistoryPushDataCache()
@@ -863,12 +908,12 @@ $(function(){
 	if(!isiOS){
 		$("#adjustment").height($(window).height() / 2);
 	}
-	Guide.initStep_1();
 	if(localStorage && localStorage.tsGuide_step){
 		Guide.backInit();
 	}else{
 		$(".step-1").show();
 	}
+  Guide.initStep_1();
 	$("#input-keyword-1").blur(function(){
 		var thisValue = $.trim($(this).val());
 		if(thisValue != ""){

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

@@ -390,12 +390,12 @@
           </div>
         </div>
         <!-- 免费用户采购单位全景分析提示 -->
-        <div v-if="canFreeExp && isLogin" style="margin-top: .24rem; " class="free-give">
-          <div class="go-text"> 免费赠送1次【企业中标分析】权益体验机会!</div>
-          <div class="go-btn" @click="goGiveAnalysis">去解锁</div>
-        </div>
+<!--        <div v-if="canFreeExp && isLogin" style="margin-top: .24rem; " class="free-give">-->
+<!--          <div class="go-text"> 免费赠送1次【企业中标分析】权益体验机会!</div>-->
+<!--          <div class="go-btn" @click="goGiveAnalysis">去解锁</div>-->
+<!--        </div>-->
         <!-- 中标信息统计结果-->
-        <div class="bg-white tab-card" v-if="isLogin">
+        <div class="bg-white tab-card" v-if="!isFreeOrNotLogin">
           <div class="tab-card-title" style="padding: 0.16rem .32rem .12rem;">中标信息统计结果</div>
           <div class="card-row zb-info">
             <div class="card-column">
@@ -429,7 +429,7 @@
           </div>
         </div>
         <!-- 中标信息统计结果--未登录-->
-        <div class="bg-white tab-card charts"  style="margin-bottom: 10px;" v-if="!isLogin">
+        <div class="bg-white tab-card charts"  style="margin-bottom: 10px;" v-if="isFreeOrNotLogin">
             <div class="tab-card-title">中标信息统计结果</div>
             <div class="vip_component" v-if="getStatus && hideDt"
                  style="height:5.8rem;background:url('/common-module/collection/image/bg/qy-zbtj-bg.png?v={{Msg "seo" "version"}}') 40% 0 no-repeat;background-size:110% 100%;"

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

@@ -495,7 +495,6 @@
                     return
                 }
                 var _this = this
-                _this.projectCellInfo = item
                 var params = { bidIds: item.sid }
                 $.ajax({
                     url: '/jyapi/jybx/core/participate/in/info',
@@ -503,6 +502,7 @@
                     contentType: 'application/json',
                     data: JSON.stringify(params),
                     success: function (res) {
+                        _this.projectCellInfo = item
                         if (res.error_code === 0 && res.data) {
                             // _this.$toast('已参标,请前往我的参标项目列表查看。')
                             _this.$set(item, 'isCB', {

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

@@ -280,10 +280,10 @@
           </van-sticky>
         </div>
         <!-- 免费用户采购单位全景分析提示 -->
-        <div v-if="getfreeBuyerPort && isLogin" class="free-give">
-          <div class="go-text"> 免费赠送1次【采购单位全景分析】权益体验机会!</div>
-          <div class="go-btn" @click="goGiveAnalysis">去解锁</div>
-        </div>
+<!--        <div v-if="getfreeBuyerPort && isLogin" class="free-give">-->
+<!--          <div class="go-text"> 免费赠送1次【采购单位全景分析】权益体验机会!</div>-->
+<!--          <div class="go-btn" @click="goGiveAnalysis">去解锁</div>-->
+<!--        </div>-->
         <!-- 采购单位通讯录 -->
         <div v-if="getStatus">
           <div class="vip_component"
@@ -306,7 +306,7 @@
             <van-icon name="arrow"></van-icon>
           </div>
         </div>
-        <div class="buyer-statistic" v-if="userInfo.isLogin">
+        <div class="buyer-statistic" v-if="!isFreeOrNotLogin">
           <div class="statistic-title">统计信息</div>
           <div class="buyer-info">
             <div class="bi-item">
@@ -337,7 +337,7 @@
           <p class="jy-empty-text">对不起,没有匹配到相关信息, <br>修改时间范围或换个搜索词试试吧</p>
         </div>
         <!-- 招标动态 -->
-        <div class="dynamic" v-if="isShow.showDynamic && userInfo.isLogin">
+        <div class="dynamic" v-if="isShow.showDynamic && !isFreeOrNotLogin">
           <!--                <div class="d_title">招标动态</div>-->
           <div class="selected-export-box">
             <div class="selected-export">
@@ -426,7 +426,7 @@
           <!--                </div>-->
         </div>
         <!-- 数据部分 -->
-        <div>
+        <div v-if="!isFreeOrNotLogin">
           <!-- 年度项目统计 -->
           <div class="years" v-if="isShow.showYearData">
             <div class="chart_title">年度项目统计</div>

+ 3 - 2
src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html

@@ -131,7 +131,7 @@
             <div class="j-main">
               <div class="emptycom">
                 <div class="emptyimg">
-                  <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+                  <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
                 </div>
                 <div class="emptytext">
                   暂无数据
@@ -145,11 +145,12 @@
         <div class="j-main">
           <div class="emptycom">
             <div class="emptyimg">
-              <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+              <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
             </div>
             <div class="emptytext">
               您还没有收藏标讯
             </div>
+            <div class="empty-btn" @click="location.href='/jy_mobile/search/middle/bidding'">前往收藏</div>
           </div>
         </div>
       </div>

+ 78 - 39
src/jfw/modules/app/src/web/templates/me/login.html

@@ -132,8 +132,8 @@
   </div>
   <div class="login_main">
     <span class="header-tab">
-      <a class="header-tab-active">密码登录</a>
-      <a>验证码登录</a>
+      <a class="header-tab-active">验证码登录/注册</a>
+      <a>码登录</a>
       <i></i>
     </span>
     <div class="login">
@@ -154,10 +154,11 @@
         <img class="closeQc" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/cancel.png?v={{Msg "seo" "version"}}"/>
         <span id="sendIdentCode">获取验证码</span>
       </div>
-      <button type="button" id="btn" class="disabled btn" />登录</button>
+      <button type="button" id="btn" class="disabled btn" />登录 / 注册</button>
       <div class="forget">
-        <a href="javascript:void(0)">忘记密码?</a>
-        <a href="javascript:void(0)" class="register">立即注册</a>
+        <a class="forget-password" href="javascript:void(0)">忘记密码?</a>
+<!--        <a href="javascript:void(0)" class="register">立即注册</a>-->
+          <span class="tip">未注册用户验证通过后自动注册</span>
         <div class="clearfix"></div>
       </div>
     </div>
@@ -188,6 +189,9 @@
   </div>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/ad/js/index.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}'></script>
+    <!--S 加载荟聚SDK初始化及剑鱼自定义埋点注入 -->
+    <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/fotter.js?v={{Msg "seo" "version" }}'></script>
+    <!--E 加载荟聚SDK初始化及剑鱼自定义埋点注入 -->
   <script>
     var Activedatastring = `register`
     var ActivedataType = `jy-app-${Activedatastring}-login`
@@ -197,10 +201,31 @@
     * 获取后台广告方法
     *  getActiveInfo: function (active_codes_map,isAppsion)
     * @param {Array|String} active_codes_map 广告id标识符--数组集合["jy-wx-course-pay-success"]
-    * @param {String} isAppsion 请求环境、app、weixin、pc
+    * @parRam {String} isAppsion 请求环境、app、weixin、pc
     */
     getActive.getActiveInfo(Activedata,'Applink')
   </script>
+    <script type="text/javascript">
+      // var platform = utils.isWeiXinBrowser ? 'wx' : 'app'
+      // 注册埋点
+      function trackClick (c_type) {
+        if (!c_type) return
+        try {
+          clab_tracker.track('c_register', {
+            c_platform: 'app',
+            c_type: c_type,
+            date: new Date()
+          })
+        } catch (error) {
+          console.dir(error)
+        }
+      }
+      // 埋点
+      window.onload = function () {
+        // 埋点
+        trackClick('注册行为-打开登录/注册页面')
+      }
+    </script>
 	<script type="text/javascript">
 		var wait = 60;
     var inment_H5 = true
@@ -259,10 +284,10 @@
 				if($(this).index() == 0){
 					window.location.href = "/jyapp/free/forgetPwd";
 				}else{
-          var href ="/jyapp/free/register";
-          if (disWord!=null){
-          sessionStorage.setItem("disWord_reg",disWord)
-          }
+                  var href ="/jyapp/free/register";
+                  if (disWord!=null){
+                    sessionStorage.setItem("disWord_reg",disWord)
+                  }
 					window.location.href = href;
 				}
 			});
@@ -270,14 +295,20 @@
 			$(".header-tab>a").on("tap",function(){
 				$(".header-tab>a").removeClass("header-tab-active");
 				$(this).addClass("header-tab-active");
-				if($(this).index() == 0){
+				if($(this).index() == 1){
 					$(".login .onePass").show();
 					$(".login .code").css("display","none");
-					$(".header-tab>i").css("left",left_1);
+					$(".header-tab>i").css("left",left_2);
+                  $('.forget-password').show()
+                  $('.forget .tip').hide()
+                  $('#btn').text('登录')
 				}else{
 					$(".login .onePass").hide();
 					$(".login .code").css("display","table");
-					$(".header-tab>i").css("left",left_2);
+					$(".header-tab>i").css("left",left_1);
+					$('.forget-password').hide()
+                    $('.forget .tip').show()
+                   $('#btn').text('登录 / 注册')
 				}
 				changeBtnStatus();
 			});
@@ -301,6 +332,7 @@
 					return
 				}
         if ($('#sendIdentCode').html() !== '获取验证码') return
+              trackClick('注册行为-获取验证码')
 				var thisClass = this;
 				$.post("/jyapp/free/login",{reqType:"sendIdentCode",phone: phone,token: getCipherText(phone)},function(r){
 					if(r.status==-1){
@@ -399,31 +431,32 @@
 					},2000)
 				} else {
 					var phone = $.trim($("#tel").val());
-					if($(".header-tab>a.header-tab-active").index() == 0){
-            var params = {}
-            if (utils.$envs.inApp) {
-              params = {
-                reqType:"phoneLogin",
-                phone:phone,
-                password:$(".onePass input").val(),
-                rid:JyObj.getPushRid(),
-                oid:getOtherPushId(),
-                phoneType:getPhoneType(),
-                channel:getChannel(),
-                deviceId:getDeviceId()
-              }
-            } else {
-              params = {
-                reqType:"phoneLogin",
-                phone:phone,
-                password:$(".onePass input").val(),
-                rid:'',
-                oid:'',
-                phoneType:'',
-                channel:'',
-                deviceId:''
-              }
-            }
+					if($(".header-tab>a.header-tab-active").index() == 1){
+                    var params = {}
+                    if (utils.$envs.inApp) {
+                      params = {
+                        reqType:"phoneLogin",
+                        phone:phone,
+                        password:$(".onePass input").val(),
+                        rid:JyObj.getPushRid(),
+                        oid:getOtherPushId(),
+                        phoneType:getPhoneType(),
+                        channel:getChannel(),
+                        deviceId:getDeviceId()
+                      }
+                    } else {
+                      params = {
+                        reqType:"phoneLogin",
+                        phone:phone,
+                        password:$(".onePass input").val(),
+                        rid:'',
+                        oid:'',
+                        phoneType:'',
+                        channel:'',
+                        deviceId:''
+                      }
+                    }
+                    // 账号密码登录
 						$.post("/jyapp/free/login",params,function(r){
 							if(r.status==1){
 								if(localStorage){
@@ -436,6 +469,9 @@
 							}
 						});
 					}else{
+                      trackClick('注册行为-登录/注册')
+					  // 验证码登录/注册
+                      // {reqType:"identCodeLogin",phone:phone,identCode:$("#identCode").val(),rid:JyObj.getPushRid(),oid:getOtherPushId(),phoneType:getPhoneType(),channel:getChannel(),deviceId:getDeviceId(),disWord:disWord}
 						$.post("/jyapp/free/login",{reqType:"identCodeLogin",phone:phone,identCode:$("#identCode").val(),rid:JyObj.getPushRid(),oid:getOtherPushId(),phoneType:getPhoneType(),channel:getChannel(),deviceId:getDeviceId(),disWord:disWord},function(r){
 							if(r.status==1){
 								if(localStorage){
@@ -443,6 +479,8 @@
 								}
 								$('.rules').hide()
 								loginSuccess(r);
+							}else if (r.status==-4){
+								showTip("系统错误,请重试",1000);
 							}else{
 								showTip("验证码错误",1000);
 							}
@@ -488,6 +526,7 @@
 		function changeBtnStatus(){
 			var password = $(".onePass input").val();
 			var phone = $.trim($("#tel").val());
+			var identCode = $.trim($("#identCode").val())
 			if(phone.length >= 11){
 				dcsOne = true;
 				if(wait == 60){
@@ -498,7 +537,7 @@
 	     		$("#sendIdentCode").css("color","#888888")
 			}
 			if($.trim(phone).length > 0 && (Verification.isPhone(phone) || CreatePhone.isPhone(phone))){
-				if($(".header-tab>a.header-tab-active").index() == 0){
+				if($(".header-tab>a.header-tab-active").index() == 1){
 					if($.trim(password).length > 0 && password.length >= 6){
 						$("#btn").removeClass("disabled");
 					}else{

+ 60 - 63
src/jfw/modules/app/src/web/templates/me/setpwd.html

@@ -15,14 +15,53 @@
 
 		<title>设置密码</title>
 	</head>
-
+    <style>
+        body {
+            background: url(/jyapp/me/images/bg_banner.png) no-repeat;
+        }
+        #header.regpass{
+            background: url(/jyapp/me/images/register_logo.png?v=51430) no-repeat;
+            background-size: 100%;
+        }
+        #header .cancel {
+            position: absolute;
+            top: 0.84rem;
+            left: 0.24rem;
+            width: 0.48rem;
+            height: 0.48rem;
+            padding-left: 0;
+        }
+        #header .cancel>img{
+            width:100%;
+            height:100%;
+        }
+        .btn{
+            margin-top: 24px;
+        }
+        .default-btn{
+            border-radius: 8px;
+            border: 1px solid rgba(0, 0, 0, 0.05);
+            background: transparent;
+            color: rgba(23, 24, 38, .65) !important;
+        }
+        .tip-row{
+            color: #9B9CA3;
+            text-align: center;
+            font-size: 12px;
+            line-height: 18px;
+            margin-top:12px;
+        }
+       [type='password']{
+            background: transparent;
+        }
+    </style>
 	<body>
 
 		<div id="header" class="reg regpass">
-			<a href="javascript:;" class="cancle" style="padding: 15px;display: inline-block;">
-				<span class="jyapp-icon jyapp-icon-zuojiantou" style="font-size:0.4rem;"></span>
+			<a href="javascript:;" class="cancel">
+                <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/me/images/back.png?v={{Msg "seo" "version"}}" alt="" />
+<!--				<span class="jyapp-icon jyapp-icon-zuojiantou" style="font-size:0.4rem;"></span>-->
 			</a>
-			<h2>欢迎加入剑鱼标讯</h2>
 		</div>
 
 		<div class="takeIn">
@@ -39,6 +78,8 @@
 				<div class="tran-line-bottom"></div>
 			</div>
 			<center><button type="button" name="btn" id="btn" class="disabled btn">完成</button></center>
+            <button type="button" name="btn" id="noSet" class="default-btn btn">暂不设置</button>
+            <p class="tip-row">您可前往【我的-设置-账号与安全】<br>设置或修改密码</p>
 		</div>
     <!--S 加载荟聚SDK初始化及剑鱼自定义埋点注入 -->
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/header.js?v={{Msg "seo" "version"}}'></script>
@@ -104,7 +145,7 @@
 					},100);
 					commonMethod();
 				});
-				$(".closeQc").on("tap",function(){
+				$(".closeQc").on(isIos?"tap":"click",function(){
 					if($(this).prev().val().length>0){
 						$(this).prev().val("").focus();
 						$(this).hide();
@@ -138,79 +179,35 @@
 					}
           $(this).addClass("disabled");
           let params = {
-            reqType:"save",
             password:$(".onePass input").val(),
-            rid:JyObj.getPushRid(),
-            oid:getOtherPushId(),
-            phoneType:getPhoneType(),
-            channel:getChannel(),
-            deviceId:getDeviceId(),
-            s_entname:entname,
-            disWord:disWord
-          }
-          if (platform.inH5) {
-            params = {
-              reqType:"save",
-              password:$(".onePass input").val(),
-              rid:'',
-              oid:'',
-              phoneType:'',
-              channel:'',
-              deviceId:'',
-              s_entname:entname,
-              disWord:disWord
-            }
           }
           // 埋点
-          trackClick('注册行为-点击完成设置密码')
+          trackClick('注册行为-设置密码-确定')
           $.ajax({
-    				url: "/jyapp/free/register",
+    				url: "/publicapply/password/update",
     				type: "post",
-    				data: params,
+                    contentType: 'application/json',
+    				data: JSON.stringify(params),
     				dataType: "json",
     				success: function(r){
   						var url = null;
-  						if(r.status=="timeout"){
-  							url = "/jyapp/free/register";
-  							EasyAlert.show("页面超时,请重新进入");
-  						}else if(r.status=="userExists"){
-  							url = "/jyapp/free/register";
-  							EasyAlert.show("手机号已被注册");
-  						}else if(r.status=="saveError"){
-  							EasyAlert.show("数据提交失败");
-  						}else if(r.status=="y"){
-  							loginSuccess(r);
-  						}
-  						if(url != null){
-  							setTimeout(function() {
-  								window.location.href = url;
-  							}, 1000);
+  						if (r.data){
+                          checkNeedGoNewUserSettingPage()
+  						} else {
+                          EasyAlert.show("保存失败");
   						}
     				},
     				error: function(){
     					$(this).removeClass("disabled");
     				}
     			});
-					//$.post("/jyapp/free/register",{reqType:"save",password:$(".onePass input").val(),rid:JyObj.getPushRid(),oid:getOtherPushId(),phoneType:getPhoneType(),channel:getChannel(),deviceId:getDeviceId()},function(r){
-					//	var url = null;
-					//	if(r.status=="timeout"){
-					//		url = "/jyapp/free/register";
-					//		EasyAlert.show("页面超时,请重新进入");
-					//	}else if(r.status=="userExists"){
-					//		url = "/jyapp/free/register";
-					//		EasyAlert.show("手机号已被注册");
-					//	}else if(r.status=="saveError"){
-					//		EasyAlert.show("数据提交失败");
-					//	}else if(r.status=="y"){
-					//		loginSuccess(r);
-					//	}
-					//	if(url != null){
-					//		setTimeout(function() {
-					//			window.location.href = url;
-					//		}, 1000);
-					//	}
-					//});
 				})
+              // 暂不设置--跳转兴趣爱好设置页面
+              $("#noSet").on("tap", function () {
+                // 埋点
+                trackClick('注册行为-设置密码-暂不订阅')
+                checkNeedGoNewUserSettingPage()
+              })
 			})
 			function commonMethod(){
 				if($.trim($(".onePass input").val()).length >= 6 && $.trim($(".againPass input").val()).length >= 6){

+ 9 - 0
src/jfw/modules/app/src/web/templates/weixin/wxtsguide.html

@@ -368,6 +368,11 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 				showPopForArea: false
 			}
 		},
+        created: function () {
+          if(localStorage && localStorage.tsGuide_area) {
+             this.selectArea =  localStorage.tsGuide_area
+          }
+        },
 		methods: {
 			togglePopForArea (status) {
 				this.showPopForArea = status
@@ -387,6 +392,10 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 				} else {
 					this.selectArea = selectArea
 				}
+				// 存储所选地区(h5页面刷新页面,需要重新获取地区用以请求接口)
+                if(localStorage) {
+                  localStorage.tsGuide_area = this.selectArea
+                }
 				this.togglePopForArea(false)
 			},
 		}

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

@@ -2,6 +2,8 @@ package marketAnalysis
 
 import (
 	qutil "app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
+	mgo "app.yhyue.com/moapp/jybase/mongodb"
 	"fmt"
 	"strings"
 )
@@ -46,7 +48,20 @@ func (mae *MarketAnalysisEntity) GetCommonQuerySql() string {
 	}
 	//中标企业
 	if mae.FormatParam.Winner != "" {
-		musts = append(musts, fmt.Sprintf(`{"term":{"s_winner":"%s"}}`, mae.FormatParam.Winner))
+		var winnerId string
+		if mgo.IsObjectIdHex(mae.FormatParam.Winner) {
+			winnerId = mae.FormatParam.Winner
+		} else {
+			rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query": {"bool": {"must": [{"term": {"company_name": "%s"}}]}},"_source":["_id"],"size": 1}`, mae.FormatParam.Winner))
+			if rData != nil && len(*rData) > 0 {
+				winnerId = qutil.InterfaceToStr((*rData)[0]["_id"])
+			}
+		}
+		if winnerId != "" {
+			musts = append(musts, fmt.Sprintf(`{"term":{"entidlist":"%s"}}`, winnerId))
+		} else {
+			musts = append(musts, fmt.Sprintf(`{"term":{"s_winner":"%s"}}`, mae.FormatParam.Winner))
+		}
 	}
 	//采购单位
 	if mae.FormatParam.Buyer != "" {

+ 3 - 2
src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go

@@ -16,11 +16,11 @@ import (
 
 const (
 	buyer_query_address    = `{"query":{"bool":{"must":[{"term":{"buyer_name":"%s"}}]}},"size":1,"_source":["city","province","buyerclass"]}`
-	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation"}},"allWinnerList":{"terms":{"field":"entidlist","size":10000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
+	buyerPortraitSearchSql = `{"query":{"bool":{"must":[%s]}},"aggs":{"year_bidamount":{"range":{"field":"jgtime","ranges":[%s]},"aggs":{"count":{"sum":{"field":"bidamount"}}}},"fail_count":{"filter":{"bool":{"must":[{"term":{"bidstatus":"流标"}}]}}},"winner_count":{"cardinality":{"field":"entidlist"}},"bidamount_count":{"sum":{"field":"bidamount"}},"moneyRange":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"moneyRangeValue":{"range":{"field":"bidamount","ranges":[%s]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"bidtypeData":{"filter":{"bool":{"must":{"terms":{"bidtype":["招标","邀标","询价","单一","竞价","竞谈"]}}}},"aggs":{"bidtype_group":{"terms":{"field":"bidtype"},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}}}},"bidamount_count":{"sum":{"field":"bidamount"}}}},"topScopeclassData":{"terms":{"field":"topscopeclass","size":12,"order":[{"bidamount_count":"desc"}]},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"top_scopeclass_rate_time_avg":` + YearRate + `}},"allScopeclassData":` + YearRate + `,"topAgencyData":{"terms":{"field":"agency","size":10,"order":[{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}}}},"topWinner":{"terms":{"field":"entidlist","size":50,"order":[{"count_bidamount":"desc"},{"_count":"desc"},{"last_with_time":"desc"}]},"aggs":{"last_with_time":{"max":{"field":"jgtime"}},"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":{"filter":{"bool":{"must":{"range":{"project_rate":{"gte":0,"lte":0.6}}}}},"aggs":{"bidamount_count":{"sum":{"field":"bidamount"}},"budget_count":{"sum":{"field":"budget"}}}}}},"firstWinner":{"terms":{"field":"first_cooperation","size":50}},"allWinnerList":{"terms":{"field":"entidlist","size":10000},"aggs":{"count_bidamount":{"sum":{"field":"bidamount"}},"avg_data":` + BaseRate + `}}},"size":0}`
 	queryTermByIdSql       = `{"terms":{"_id":[%s]}}`
 
 	queryMustSql                = `{"query":{"bool":{"must":[%s]}}}`
-	buyerWithEntThreadSearchNum = 50
+	buyerWithEntThreadSearchNum = 50 * 4
 	buyerWithEntPortraitSqlPage = `{"query":{"bool":{"must":[%s]}},"_source":["_id","company_area","capital","establish_date","tag_business"],"from":%d,"size":%d}`
 )
 
@@ -579,6 +579,7 @@ func GetWithEntPortraitData(listDataItf interface{}, province string, bidamountO
 
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(queryTermByIdSql, `"`+strings.Join(winnerIdList, `","`)+`"`)
+
 	searchNum := elastic.Count("qyxy", "qyxy", fmt.Sprintf(queryMustSql, doSearchSql))
 	if searchNum == 0 {
 		return nil, 0, errors.New("中标企业数量为空")

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

@@ -3,7 +3,7 @@ module jy/src/jfw/modules/bigmember/src
 go 1.19
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
+	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13

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

@@ -5,8 +5,8 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTmDxXPeNr5LWe2RmyJU+5aod1nptek=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/y6VxyycIy/LBWO7aYlxTiHKxmzv0=
+app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v0.0.0-20230710012638-0d2f7219700e h1:phO8+opFgz3p1XebtdLepM1u8q/TE/EgLYjP4Ebt/jU=

+ 26 - 14
src/jfw/modules/bigmember/src/service/analysis/forecastproject.go

@@ -32,24 +32,35 @@ const (
 	bidSearch_field = ``
 
 	forecastQuery            = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match":1}}}`
-	filter_must_time         = `{"bool":{"should":[{"bool":{"must":[{"range":{"yucetime":{"gte":%d}}}],"must_not":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}}]}},{"bool":{"must":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}},{"range":{"yuceendtime":{"gte":%d}}}]}}]}}`
+	filter_must_time         = `{"bool":{"%s":[{"exists":{"field":"top_category"}}]}},{"bool":{"should":[{"bool":{"must":[{"range":{"yucetime":{"gte":%d}}}],"must_not":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}}]}},{"bool":{"must":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}},{"range":{"yuceendtime":{"gte":%d,"lte":%d}}}]}}]}}`
 	filter_must_area_city    = `{"bool":{"should":[%s]}}`
 	query_should_keys        = `{"bool":{"must":[%s],"must_not":[%s]}}`
 	query_should_multi_match = `{"multi_match":{"query":"%s","type":"phrase","fields":["results.purchasing.mypurchasing"]}}`
 )
 
-/**
+/*
+*
 @author:王山
 @descript:中标项目预测
 @date:2022-03-08
 @demand:
+
 	有yuceendtime字段,按照yuceendtime大于当前时间||无yuceendtime字段,按照yucetime字段最近三个月查询数据;
 	另有省份、城市、采购单位类型等;from 赵龙玥
-**/
-func getForecastProjectSql(scd *util.ViewCondition) string {
+
+*
+*/
+func getForecastProjectSql(scd *util.ViewCondition, startTime, endTime int, dataType string) string {
 	musts := []string{}
 	bools := []string{}
-	musts = append(musts, fmt.Sprintf(filter_must_time, time.Now().AddDate(0, -3, 0).Unix(), time.Now().Unix()))
+	if endTime == 0 {
+		endTime = int(time.Now().Unix())
+	}
+	if dataType == "nj" {
+		musts = append(musts, fmt.Sprintf(filter_must_time, "must", startTime, startTime, endTime))
+	} else {
+		musts = append(musts, fmt.Sprintf(filter_must_time, "must_not", startTime, startTime, endTime))
+	}
 	//省份
 	areaCity := []string{}
 	if len(scd.Area) > 0 {
@@ -231,6 +242,9 @@ func (this *Analysis) ForPList() {
 		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
+		startTime, _ := this.GetInteger("startTime")
+		endTime, _ := this.GetInteger("endTime")
+		dataType := this.GetString("dataType")
 		if pageSize == 0 {
 			pageSize = 10
 		}
@@ -241,7 +255,7 @@ func (this *Analysis) ForPList() {
 			if (*o_mb)["o_member_jy"] != nil {
 				o_member_jy = qutil.ObjToMap((*o_mb)["o_member_jy"])
 				//项目预测检索库
-				flist, fcount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize)
+				flist, fcount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize, startTime, endTime, dataType)
 				if pageNum == 1 {
 					if (*o_member_jy)["a_items"] != nil {
 						a_items := qutil.ObjArrToMapArr((*o_member_jy)["a_items"].([]interface{}))
@@ -288,7 +302,7 @@ type ForecastInfo struct {
 	Jyhref     string   `json:"jyhref"`
 }
 
-//合并去重
+// 合并去重
 func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 	var idMap = map[string]bool{}
 	var res = []*ForecastInfo{}
@@ -335,8 +349,7 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 
 var d = &dfa.DFA{}
 
-//
-func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int) (list []map[string]interface{}, count int64) {
+func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int, startTime, endTime int, dataType string) (list []map[string]interface{}, count int64) {
 	if userId == "" {
 		return
 	}
@@ -364,7 +377,7 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
 		return
 	}
 	// qstr := GetMemberForecastSql(sql)
-	qstr := getForecastProjectSql(sql)
+	qstr := getForecastProjectSql(sql, startTime, endTime, dataType)
 	count = elastic.Count(INDEX, TYPE, qstr)
 	list = *elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*pageSize, pageSize, 0, false)
 	if list != nil {
@@ -395,7 +408,7 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
 	return
 }
 
-//获取大会员forecast 检索库查询语句 - 查询逻辑有调整 dev4.6.8 -ws 新方法:getForecastProjectSql()
+// 获取大会员forecast 检索库查询语句 - 查询逻辑有调整 dev4.6.8 -ws 新方法:getForecastProjectSql()
 func GetMemberForecastSql(scd *util.ViewCondition) string {
 	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
@@ -495,7 +508,7 @@ func GetMemberForecastSql(scd *util.ViewCondition) string {
 	return qstr
 }
 
-//member_jy
+// member_jy
 func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
 	if o_member_jy["a_items"] == nil {
 		return nil
@@ -529,7 +542,7 @@ func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
 	}
 }
 
-//关键词 附加词 排除词
+// 关键词 附加词 排除词
 func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.ViewKeyWord) {
 	if a_items == nil {
 		return
@@ -574,7 +587,6 @@ func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.Vi
 	return
 }
 
-//
 func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
 	if area == nil {
 		return

+ 9 - 0
src/jfw/modules/bigmember/src/service/portrait/memberPortraitAction.go

@@ -412,6 +412,14 @@ func (this *EntPortrait) BuyerPortrait() {
 			return nil, err
 		}
 		entName := this.GetString("buyer")
+		//id转中文
+		if len(entName) > 0 && len([]rune(entName)) == len(entName) {
+			//获取中文名字
+			entName = getBuyerNameById(util.DecodeId(entName))
+		}
+		if entName == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
 		flag := this.GetString("flag") //分段请求标识
 		rData, err := cepm.BuyerPortraitData(&entity.PortraitScreen{
 			Ent:        entName,
@@ -427,6 +435,7 @@ func (this *EntPortrait) BuyerPortrait() {
 		if err != nil {
 			return nil, err
 		}
+		rData["name"] = entName
 		return rData, nil
 	}()
 	if errMsg != nil {

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

@@ -72,10 +72,13 @@ func (this *SubVipPortrait) SubVipWinnerNewMsg() {
 		if entId == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
+		cepm, power, err, free := entity.CreateSubVipPortraitManager(userId, "entNewMsg", entId, true, this.Session())
 		if err != nil {
 			return nil, err
 		}
+		if free {
+			return nil, errors.New("无查看权益")
+		}
 		if power <= 1 {
 			return nil, errors.New("非法请求")
 		}
@@ -191,10 +194,13 @@ func (this *SubVipPortrait) SubVipPortrait() {
 		if entId == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
-		cepm, power, err, _ := entity.CreateSubVipPortraitManager(userId, "entPortrait", entId, true, this.Session())
+		cepm, power, err, free := entity.CreateSubVipPortraitManager(userId, "entPortrait", entId, true, this.Session())
 		if err != nil {
 			return nil, err
 		}
+		if free {
+			return nil, fmt.Errorf("无查看权益")
+		}
 		rData, err := cepm.WinnerPortraitData(&entity.PortraitScreen{
 			Ent:        entId,
 			Match:      this.GetString("match"),
@@ -339,10 +345,13 @@ func (this *SubVipPortrait) BuyerNewMsg() {
 		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
-		cepm, power, err, _ := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
+		cepm, power, err, free := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyer, false, this.Session())
 		if err != nil {
 			return nil, err
 		}
+		if free {
+			return nil, fmt.Errorf("无查看权益")
+		}
 		//免费用户仅可查看三条记录
 		rData, total, err := cepm.GetBuyerNewMsg(&entity.PortraitProjectScreen{
 			Screen: &entity.PortraitScreen{
@@ -453,11 +462,22 @@ func (this *SubVipPortrait) BuyerPortrait() {
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	rData, errMsg := func() (interface{}, error) {
 		buyerName := this.GetString("buyer")
+		//id转中文
+		if len(buyerName) > 0 && len([]rune(buyerName)) == len(buyerName) {
+			//获取中文名字
+			buyerName = getBuyerNameById(util.DecodeId(buyerName))
+		}
 		if buyerName == "" {
 			return nil, fmt.Errorf("参数异常")
 		}
+
+		cepm, power, err, isFree := entity.CreateSubVipPortraitManagerForOpen(userId, "buyerPortrait", buyerName, false, this.Session())
+		cepm.Session = this.Session()
+		if err != nil {
+			return nil, err
+		}
 		redisKey := fmt.Sprintf("buyerPortraitKey_%s", buyerName)
-		if userId == "" {
+		if userId == "" || isFree {
 			if bytes, err := redis.GetBytes("other", redisKey); err == nil && bytes != nil {
 				rData := make(map[string]interface{})
 				if err = json.Unmarshal(*bytes, &rData); err != nil {
@@ -465,7 +485,7 @@ func (this *SubVipPortrait) BuyerPortrait() {
 					return rData, nil
 				}
 			}
-			q := `{"size": 1,"_source": ["buyerclass","province","city"],"query": {"match_phrase": {"name": "%s"}}}`
+			q := `{"size": 1,"_source": ["buyerclass","province","city","name"],"query": {"match_phrase": {"name": "%s"}}}`
 			data := elastic.Get("buyer", "buyer", fmt.Sprintf(q, buyerName))
 			if data != nil && len(*data) > 0 {
 				rData := (*data)[0]
@@ -476,11 +496,6 @@ func (this *SubVipPortrait) BuyerPortrait() {
 			}
 			return nil, nil
 		}
-		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 != "" {
@@ -503,6 +518,7 @@ func (this *SubVipPortrait) BuyerPortrait() {
 		if power == 3 {
 			rData["onTrial"] = true
 		}
+		rData["name"] = buyerName
 		return rData, nil
 	}()
 	if errMsg != nil {
@@ -532,7 +548,7 @@ func getEntListMsg(ids []string) (dMap map[string]map[string]interface{}) {
 // getBuyerListMsg 获取采购单位基本信息
 func getBuyerListMsg(buyerNames []string) (dMap map[string]map[string]interface{}) {
 	dMap = make(map[string]map[string]interface{})
-	rData := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query":{"bool":{"must":[{"terms":{"buyer_name":["%s"]}}]}},"size":%d,"_source":["buyer_name","city","province","buyerclass"]}`, strings.Join(buyerNames, `","`), len(buyerNames)))
+	rData := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query":{"bool":{"must":[{"term":{"_id":"%s"}}]}},"size":1,"_source":["name"]}`, strings.Join(buyerNames, `","`)))
 	if rData == nil || len(*rData) == 0 {
 		return
 	}
@@ -554,3 +570,12 @@ func getBuyerListMsg(buyerNames []string) (dMap map[string]map[string]interface{
 	}
 	return
 }
+
+func getBuyerNameById(buyerId string) (buyerName string) {
+	r := elastic.Get("buyer", "buyer", fmt.Sprintf(`{"query":{"bool":{"must":[{"terms":{"_id":["%s"]}}]}},"size":1,"_source":["name"]}`, buyerId))
+	if r == nil || len(*r) == 0 {
+		return
+	}
+	buyerName, _ = (*r)[0]["name"].(string)
+	return
+}

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

@@ -61,24 +61,27 @@ func (this *MarketAnalysis) ProjectInfo() {
 		}
 		mae := &marketAnalysis.MarketAnalysisEntity{MgoRecordId: rid, BaseParam: bParam, UId: userId, Pid: pid}
 		//参数验证 --:回显字段keysItems、area、industry、buyerclass
-		if bParam.KeysItemsStr == "" || bParam.Area == "" || bParam.Industry == "" || bParam.BuyerClass == "" {
-			//原查询条件
-			maePrimary := &marketAnalysis.MarketAnalysisEntity{MgoRecordId: rid, UId: userId, Pid: pid}
-			if err := maePrimary.GetAnalysisFromMgoDb(); err == nil {
-				if bParam.KeysItemsStr == "" || len([]rune(bParam.KeysItemsStr)) < 3 { //分析内容【字符串】结构和o_member_jy.a_items保持一致
-					mae.BaseParam.KeysItemsStr = maePrimary.BaseParam.KeysItemsStr
-				}
-				if bParam.Area == "" || len([]rune(bParam.Area)) < 3 { //省份【字符串】多个省份用逗号拼接
-					mae.BaseParam.Area = maePrimary.BaseParam.Area
-				}
-				if bParam.Industry == "" || len([]rune(bParam.Industry)) < 3 { //行业【字符串】多个行业用逗号拼接
-					mae.BaseParam.Industry = maePrimary.BaseParam.Industry
-				}
-				if bParam.BuyerClass == "" || len([]rune(bParam.BuyerClass)) < 3 { //采购单位类型【字符串】多个采购单位类型用逗号拼接
-					mae.BaseParam.BuyerClass = maePrimary.BaseParam.BuyerClass
-				}
+
+		//原查询条件
+		maePrimary := &marketAnalysis.MarketAnalysisEntity{MgoRecordId: rid, UId: userId, Pid: pid}
+		if err := maePrimary.GetAnalysisFromMgoDb(); err == nil {
+			if bParam.KeysItemsStr == "" || bParam.KeysItemsStr == "{}" || len([]rune(bParam.KeysItemsStr)) < 2 { //分析内容【字符串】结构和o_member_jy.a_items保持一致
+				mae.BaseParam.KeysItemsStr = maePrimary.BaseParam.KeysItemsStr
+			}
+			if bParam.Area == "" || bParam.Area == "{}" || len([]rune(bParam.Area)) < 2 { //省份【字符串】多个省份用逗号拼接
+				mae.BaseParam.Area = maePrimary.BaseParam.Area
+			}
+			if bParam.Industry == "" || bParam.Industry == "{}" || len([]rune(bParam.Industry)) < 2 { //行业【字符串】多个行业用逗号拼接
+				mae.BaseParam.Industry = maePrimary.BaseParam.Industry
+			}
+			if bParam.BuyerClass == "" || bParam.BuyerClass == "{}" || len([]rune(bParam.BuyerClass)) < 2 { //采购单位类型【字符串】多个采购单位类型用逗号拼接
+				mae.BaseParam.BuyerClass = maePrimary.BaseParam.BuyerClass
+			}
+			if bParam.MatchingMode == "" { //匹配模式
+				mae.BaseParam.MatchingMode = maePrimary.BaseParam.MatchingMode
 			}
 		}
+
 		if err := mae.ForMatData(); err != nil {
 			return nil, err
 		}

+ 3 - 0
src/jfw/modules/bigmember/src/service/use/use.go

@@ -763,6 +763,9 @@ func (u *Use) IsAdd() {
 		}
 		userInfo.Powers = power
 		userInfo.CustomerService = config.Config.Customers
+		if userInfo.IsFree && userInfo.FreeBuyerPort == 1 { // 免费用户采购单位画像赠送次数临时不予展示 后续需求完善在与修改
+			userInfo.FreeBuyerPort = 0
+		}
 		return Result{Data: userInfo}
 	}()
 	u.ServeJson(r)

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

@@ -20,6 +20,7 @@ import (
 	_ "jy/src/jfw/modules/publicapply/src/me"
 	_ "jy/src/jfw/modules/publicapply/src/message"
 	_ "jy/src/jfw/modules/publicapply/src/npsValue"
+	_ "jy/src/jfw/modules/publicapply/src/password"
 	_ "jy/src/jfw/modules/publicapply/src/project"
 	_ "jy/src/jfw/modules/publicapply/src/transfer"
 	"net/http"

+ 96 - 0
src/jfw/modules/publicapply/src/password/password.go

@@ -0,0 +1,96 @@
+package password
+
+import (
+	"encoding/json"
+	"fmt"
+	"jy/src/jfw/modules/publicapply/src/db"
+	"regexp"
+	"strings"
+
+	. "app.yhyue.com/moapp/jybase/api"
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+)
+
+func init() {
+	xweb.AddAction(&Password{})
+}
+
+type Password struct {
+	*xweb.Action
+	check  xweb.Mapper `xweb:"/password/check"`  //校验密码
+	update xweb.Mapper `xweb:"/password/update"` //修改密码
+}
+
+var (
+	passwordReg = regexp.MustCompile(".{6,}")
+)
+
+func (this *Password) Check() {
+	userId, _ := this.GetSession("mgoUserId").(string)
+	defer common.Catch()
+	rData, errMsg := func() (interface{}, error) {
+		if userId == "" {
+			return false, fmt.Errorf(Error_msg_1001)
+		}
+		infoMap := map[string]interface{}{}
+		body := xweb.FilterXSS(string(this.Body()))
+		//接收参数
+		json.Unmarshal([]byte(body), &infoMap)
+
+		password := common.ObjToString(infoMap["password"])
+		if data, ok := db.Mgo.FindById("user", userId, `{"s_password":1}`); ok && data != nil && len(*data) > 0 {
+			if password == "" {
+				if (*data)["s_password"] == nil || common.ObjToString((*data)["s_password"]) == "" {
+					return 2, nil
+				} else {
+					return 3, nil
+				}
+			} else {
+				if common.GetMd5String(password) != common.ObjToString((*data)["s_password"]) {
+					return 0, fmt.Errorf("密码校验失败")
+				} else {
+					return 1, nil
+				}
+			}
+		}
+		return false, fmt.Errorf(Error_msg_1003)
+	}()
+	this.ServeJson(NewResult(rData, errMsg))
+}
+
+func (this *Password) Update() {
+	userId, _ := this.GetSession("mgoUserId").(string)
+	defer common.Catch()
+	rData, errMsg := func() (interface{}, error) {
+		if userId == "" {
+			return false, fmt.Errorf(Error_msg_1001)
+		}
+		infoMap := map[string]interface{}{}
+		if string(this.Body()) == "" {
+			return false, fmt.Errorf(Error_msg_1003)
+		}
+		body := xweb.FilterXSS(string(this.Body()))
+		//接收参数
+		json.Unmarshal([]byte(body), &infoMap)
+		if len(infoMap) == 0 {
+			return false, fmt.Errorf(Error_msg_1002)
+		}
+		//必填项
+		if infoMap["password"] == nil {
+			return false, fmt.Errorf(Error_msg_1002)
+		}
+		password := strings.TrimSpace(common.ObjToString(infoMap["password"]))
+
+		if !passwordReg.MatchString(password) {
+			return false, fmt.Errorf(Error_msg_1003)
+		}
+		ok := db.Mgo.UpdateById("user", userId, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"s_password": common.GetMd5String(password),
+			},
+		})
+		return ok, nil
+	}()
+	this.ServeJson(NewResult(rData, errMsg))
+}

+ 9 - 9
src/jfw/modules/subscribepay/src/entity/shareFission.go

@@ -44,14 +44,14 @@ const (
 
 var jianyubiReg = regexp.MustCompile(`达到(\d+)剑鱼币`)
 
-//增加权益
+// 增加权益
 func (this *ShareFission) AddPower(r *http.Request) {
 	if this.ShareUid != "" { //有分享人
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, this.UserId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, this.UserId, jy.Jywx_node1, nil)
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, this.UserId)
 		}
-		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, this.ShareUid, jy.Jywx_node1)
+		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, this.ShareUid, jy.Jywx_node1, nil)
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, this.ShareUid)
 		}
@@ -60,7 +60,7 @@ func (this *ShareFission) AddPower(r *http.Request) {
 	} else { //无分享人-新用户
 		// 年终报告分享过来的
 		if this.NewSource == "reportShare" {
-			err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_report_invited, this.UserId, jy.Jywx_node1)
+			err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_report_invited, this.UserId, jy.Jywx_node1, nil)
 			if err != nil {
 				log.Println("nsq队列写入失败-->", err, jy.Jywx_report_invited, this.UserId)
 			}
@@ -72,7 +72,7 @@ func (this *ShareFission) AddPower(r *http.Request) {
 		} else if qu.IsWxBrowser(r) { //微信端绑定手机号
 			e_code = jy.Jywx_subscribe_new
 		}
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, e_code, this.UserId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, e_code, this.UserId, jy.Jywx_node1, nil)
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, e_code, this.UserId)
 		}
@@ -83,11 +83,11 @@ var mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
 
 func AddPower(s_m_openid, userId string, r *http.Request) {
 	if shareUid := redis.GetStr(config.Config.ShareRedisName, fmt.Sprintf("rec_%s", s_m_openid)); shareUid != "" {
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, userId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, userId, jy.Jywx_node1, nil)
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, userId)
 		}
-		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, shareUid, jy.Jywx_node1)
+		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, shareUid, jy.Jywx_node1, nil)
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, shareUid)
 		}
@@ -97,8 +97,8 @@ func AddPower(s_m_openid, userId string, r *http.Request) {
 }
 
 /*
-	starttime,endtime:权益开始结束时间
-	types:订单类型  1: 仅延长周期  2: 开通权益
+starttime,endtime:权益开始结束时间
+types:订单类型  1: 仅延长周期  2: 开通权益
 */
 func Order(userid, starttime, endtime string, types, dayNum int, remark string) bool {
 	_, buyset, isvip := JyVipSubStruct.GetVipDetail(userid)

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

@@ -3,9 +3,9 @@ module jy/src/jfw/modules/subscribepay/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
+	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064
+	app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13
 	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
@@ -128,7 +128,7 @@ require (
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
 	google.golang.org/grpc v1.56.1 // indirect
-	google.golang.org/protobuf v1.30.0 // indirect
+	google.golang.org/protobuf v1.31.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
@@ -137,7 +137,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
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 // 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

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

@@ -5,12 +5,12 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTmDxXPeNr5LWe2RmyJU+5aod1nptek=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+see7t8ZTxnsCJaz5PGRqJXzwR6f7s=
+app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b/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-20230627060822-53aa53e4d064 h1:iHqmyjzumVbeWeN1f4l+cpuRBizCO/VZvOUyGD5b/EM=
-app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064/go.mod h1:JBkMSnaOQbfV80laTPwjzjfP6nLXOQpJBaNUdvKV2tw=
+app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13 h1:SHHxYLu6EQRvwykoQk55vuAITLDV5dwWt1MACiXr9bs=
+app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13/go.mod h1:VaHDi3twSg4G84k2+UFOe7ZCw5EqUZVAkW2N2dHeMbU=
 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=
@@ -1359,8 +1359,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
@@ -1423,8 +1423,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=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 h1:BItxi1gkQUs3sjxaBk6tc34fZWSO4hUSXcTM3PcnY4I=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 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=

+ 23 - 24
src/jfw/modules/subscribepay/src/service/userAccountInfo.go

@@ -15,6 +15,7 @@ import (
 	. "app.yhyue.com/moapp/jybase/api"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
@@ -24,7 +25,6 @@ import (
 	"app.yhyue.com/moapp/jybase/usercenter"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"app.yhyue.com/moapp/jybase/dchest/captcha"
 )
 
 type UserAccount struct {
@@ -387,7 +387,7 @@ func (this *UserAccount) PhoneBind() {
 			if unionid == "" {
 				return "", fmt.Errorf("获取账户信息异常")
 			}
-			exists, relationPhoneId := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, phoneVerify)
+			exists, relationPhoneId := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(userId, unionid, phoneVerify)
 			if exists { //再次校验是否使用
 				return nil, fmt.Errorf("手机号已被绑定")
 			}
@@ -776,30 +776,29 @@ func (this *UserAccount) WxUnBind() {
 				"i_ratemode": 2,
 				// "i_newfree":  1, //新免费用户=>新订阅设置页面 20211122
 			}
+			userAddReq := &pb.UserAddReq{
+				Appid:   "10000",
+				Unionid: qutil.ObjToString((*unsetMap)["s_unionid"]),
+				SOpenid: s_m_openid,
+			}
+			if qutil.ObjToString((*unsetMap)["s_nickname"]) != "" {
+				userAddReq.Nickname = qutil.ObjToString((*unsetMap)["s_nickname"])
+			}
+			if qutil.ObjToString((*unsetMap)["s_headimageurl"]) != "" {
+				userAddReq.Headimg = qutil.ObjToString((*unsetMap)["s_headimageurl"])
+			}
+			if qutil.ObjToString((*unsetMap)["a_m_openid"]) != "" {
+				userAddReq.AOpenid = qutil.ObjToString((*unsetMap)["a_m_openid"])
+			}
+			if resp := config.Middleground.UserCenter.UserAdd(*userAddReq); resp != nil && resp.Data.Id > 0 {
+				(*unsetMap)["base_user_id"] = resp.Data.Id
+			} else {
+				log.Println(qutil.ObjToString((*unsetMap)["s_unionid"]), "调用usercenter失败")
+				return nil, DBUPDATE_ERROR
+			}
 			//公众号微信关注移至另一用户中  此时微信公众号用户session问题错乱
 			if saveId := util.MQFW.Save("user", unsetMap); saveId == "" {
 				return nil, DBUPDATE_ERROR
-			} else {
-				//用户中台存储  开始
-				func(phone, userid string) {
-					userAddReq := &pb.UserAddReq{
-						Appid:   "10000",
-						Unionid: qutil.ObjToString((*unsetMap)["s_unionid"]),
-						SOpenid: s_m_openid,
-					}
-					if qutil.ObjToString((*unsetMap)["s_nickname"]) != "" {
-						userAddReq.Nickname = qutil.ObjToString((*unsetMap)["s_nickname"])
-					}
-					if qutil.ObjToString((*unsetMap)["s_headimageurl"]) != "" {
-						userAddReq.Headimg = qutil.ObjToString((*unsetMap)["s_headimageurl"])
-					}
-					if qutil.ObjToString((*unsetMap)["a_m_openid"]) != "" {
-						userAddReq.AOpenid = qutil.ObjToString((*unsetMap)["a_m_openid"])
-					}
-					if ok := jy.AddUser(util.MQFW, userid, *userAddReq, *config.Middleground); !ok {
-						log.Println("usercenter add error", userid, phone)
-					}
-				}(phone, saveId)
 			}
 			flushWxsession = true
 		}
@@ -894,7 +893,7 @@ func phoneStep(sess *httpsession.Session, step int, phone, code, sign string) (s
 			if unionid == "" {
 				return "", fmt.Errorf("获取账户信息异常")
 			}
-			if exists, _ := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, phone); exists {
+			if exists, _ := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, unionid, phone); exists {
 				return "", fmt.Errorf("手机号已被使用")
 			}
 		}

+ 1 - 2
src/main.go

@@ -1,14 +1,13 @@
 package main
 
 import (
+	"app.yhyue.com/moapp/jylog"
 	_ "jy/src/jfw/active"
 	"jy/src/jfw/config"
 	. "jy/src/jfw/config"
 	_ "jy/src/jfw/site"
 
 	"app.yhyue.com/moapp/jybase/fsw"
-	"app.yhyue.com/moapp/jylog"
-
 	// _ "jy/src/jfw/modules/app/src/jfw/course"  线下课程 dev3.5.2 21年2.24 下线
 	_ "jy/src/jfw/filter"
 	"jy/src/jfw/front"

+ 5 - 8
src/seo.json

@@ -1,6 +1,11 @@
 {
     "cdn": "",
     "qfw": {
+      "index": {
+        "description": "剑鱼标讯是国内专业的招标大数据服务平台,专注于全国招标采购信息的搜索查询、订阅推送和数据定制化服务。提供涵盖拟在建项目、招标预告、招标公告、中标公告、政府采购、企业工商信息等多种信息类型,帮助企业全方位掌握市场动态变化。招投标大数据平台就用剑鱼标讯。",
+        "key": "招标网站,招标信息查询,剑鱼标讯,招标采购信息,招标大数据平台",
+        "title": "剑鱼标讯官网-招标信息查询_全国招标采购信息订阅推送_专业招标大数据服务平台"
+      },
       "swordfish": {
         "description": "行业资讯栏目提供全网最全的招投标新闻资讯、舆情信息、行业动态、采购案例,覆盖建筑工程、弱电安防、能源化工、医疗卫生、信息技术、办公文教、机械设备、水利水电、交通运输、市政设施等",
         "key": "招投标资讯,招投标新闻舆情,建筑工程资讯,招标采购动态,剑鱼标讯",
@@ -3583,14 +3588,6 @@
 				"DESCRIPTION": "心电图机",
 				"INDUSTRY": "YLWS"
 			}
-		}, {
-			"RUXIAN": {
-				"NAME": "乳腺",
-				"TITLE": "乳腺",
-				"KEYWORDS": "乳腺",
-				"DESCRIPTION": "乳腺",
-				"INDUSTRY": "YLWS"
-			}
 		}, {
 			"BCHAO": {
 				"NAME": "B超",

+ 3 - 0
src/web/staticres/big-member/js/unit_portrayal.js

@@ -148,6 +148,9 @@ var vNode = {
         }
     },
     computed: {
+      isFreeOrNotLogin () {
+        return !this.userInfo.isLogin || this.userInfo.isFree
+      },
         allNot: function() {
             var show_1 = this.isShow.showDynamic;
             var show_2 = this.isShow.showYearData;

+ 15 - 9
src/web/staticres/common-module/ad/js/index.js

@@ -7,29 +7,29 @@
 // url转base64 方法
 // base64 编码
 function getBase64Image(img) {
-  const canvas = document.createElement('canvas')
+  var canvas = document.createElement('canvas')
   canvas.width = img.width
   canvas.height = img.height
-  const ctx = canvas.getContext('2d')
+  var ctx = canvas.getContext('2d')
   ctx.drawImage(img, 0, 0, img.width, img.height)
-  const dataURL = canvas.toDataURL('image/png')
+  var dataURL = canvas.toDataURL('image/png')
   return dataURL
 }
 
 function getImage64Url(url, ref) {
 
   // var that = this
-  const image = document.createElement('img')
+  var image = document.createElement('img')
   image.setAttribute('crossorigin', 'anonymous')
   image.src = url + '?v=' + Math.random() // 处理缓存
   image.crossOrigin = 'anonymous'
   image.onload = function () {
-    const base64 = getBase64Image(image)
+    var base64 = getBase64Image(image)
     console.log(base64);
   }
 }
 
-// const ua = window.navigator.userAgent
+// var ua = window.navigator.userAgent
 // let _isIOS     = -1;
 // function isIOS() {
 //   if (_isIOS === -1) {
@@ -74,6 +74,12 @@ var getActive = {
         // JSON.stringify()
     }).done(function (res) {
       // res.error_code =1
+      // Object.value 兼容处理
+      Object.values = function (obj) {
+        return Object.keys(obj).map(function(e) {
+          return obj[e]
+        })
+      }
       if (res.error_code === 0 && res.data && Object.values(res.data)[0] && Object.values(res.data)[0] !=null && Object.values(res.data)[0][0]) {
         // weixin、pc环境
         var img = new Image()
@@ -100,7 +106,7 @@ var getActive = {
                     scale: 3,
                     imageTimeout: 30000,
                     allowTaint: true, // 允许跨域图片
-                }).then(canvas => {
+                }).then(function(canvas) {
                     var imgUrl = imgsrcArr.base64 || canvas.toDataURL('image/png')
                     console.log(imgUrl)
                     // $(".active-tip-group img").attr('src', imgUrl)
@@ -110,7 +116,7 @@ var getActive = {
                     try {
                       window.JyObj.savePic(imgUrl)
 
-                      setTimeout(() => {
+                      setTimeout(function() {
                           weui.toast('图片已保存,快去扫码识别吧', {
                             duration: 800,
                             className: 'text-overflow100'
@@ -128,7 +134,7 @@ var getActive = {
                 })
             }else {
                 window.JyObj.savePic(window.picImgUrl)
-                setTimeout(() => {
+                setTimeout(function() {
                   weui.toast('图片已保存,快去扫码识别吧', {
                     duration: 800,
                     className: 'text-overflow100'

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

@@ -240,13 +240,13 @@ var bidStatusNode = {
       handler (newval) {
         this.resetUpdate()
         this.getProDetail()
+        this.getBidContent()
       },
       immediate: true
     },
     showBidStatus: {
       handler (newval) {
         this.resetUpdate()
-        this.getBidContent()
       },
       immediate: true
     }

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

@@ -404,7 +404,6 @@ var vNode = {
               return
             }
             var _this = this
-            _this.projectCellInfo = item
             var params = { bidIds: item.sid }
             $.ajax({
                 url: '/jyapi/jybx/core/participate/in/info',
@@ -412,6 +411,7 @@ var vNode = {
                 contentType: 'application/json',
                 data: JSON.stringify(params),
                 success: function (res) {
+                    _this.projectCellInfo = item
                     if (res.error_code === 0 && res.data) {
                         // _this.$toast('已参标,请前往我的参标项目列表查看。')
                         _this.$set(item, 'isCB', {

+ 41 - 40
src/web/staticres/common-module/chart-module/js/chart-common.js

@@ -13,46 +13,47 @@
  */
 
 
-var chartTemplate =
-`
-  <template>
-      <ve-histogram
-        v-if='type==="ve-histogram"'
-        :id="type"
-        :colors="histogramChart.options.colors"
-        :width="histogramChart.options.width"
-        :height="histogramChart.options.height"
-        :data="chartData"
-        :settings="histogramChart.options.settings"
-        :after-config="histogramChart.options.config"
-        :after-set-option="extend"
-        :extend="histogramChart.defaultOptions"
-        >
-      </ve-histogram>
-      <ve-histogram
-        v-else-if='type==="ve-finehistogram"'
-        :id="type"
-        :height="barLineChart.options.height"
-        :width="barLineChart.options.width ? barLineChart.options.width : null"
-        :colors="barLineChart.options.colors"
-        :data="chartData"
-        :settings="barLineChart.options.settings"
-        :after-config="barLineChart.options.config"
-        :after-set-option="barExtend"
-        :extend="barLineChart.defaultOptions"
-        >
-      </ve-histogram>
-      <div v-else-if='type==="ve-treemap"' class="rect-tree-map-chart" style="height: 100%"></div>
-      <ve-line
-        v-else-if='type==="ve-line"'
-        :data="chartData"
-        :height="lineChart.options.height"
-        :after-config="lineChart.options.config"
-        :extend="lineChart.defaultOption"
-        >
-      </ve-line>
-  </template>
-`
+// var chartTemplate =
+// `
+//   <template>
+//       <ve-histogram
+//         v-if='type==="ve-histogram"'
+//         :id="type"
+//         :colors="histogramChart.options.colors"
+//         :width="histogramChart.options.width"
+//         :height="histogramChart.options.height"
+//         :data="chartData"
+//         :settings="histogramChart.options.settings"
+//         :after-config="histogramChart.options.config"
+//         :after-set-option="extend"
+//         :extend="histogramChart.defaultOptions"
+//         >
+//       </ve-histogram>
+//       <ve-histogram
+//         v-else-if='type==="ve-finehistogram"'
+//         :id="type"
+//         :height="barLineChart.options.height"
+//         :width="barLineChart.options.width ? barLineChart.options.width : null"
+//         :colors="barLineChart.options.colors"
+//         :data="chartData"
+//         :settings="barLineChart.options.settings"
+//         :after-config="barLineChart.options.config"
+//         :after-set-option="barExtend"
+//         :extend="barLineChart.defaultOptions"
+//         >
+//       </ve-histogram>
+//       <div v-else-if='type==="ve-treemap"' class="rect-tree-map-chart" style="height: 100%"></div>
+//       <ve-line
+//         v-else-if='type==="ve-line"'
+//         :data="chartData"
+//         :height="lineChart.options.height"
+//         :after-config="lineChart.options.config"
+//         :extend="lineChart.defaultOption"
+//         >
+//       </ve-line>
+//   </template>
+// `
+var chartTemplate = "\n  <template>\n      <ve-histogram\n        v-if='type===\"ve-histogram\"'\n        :id=\"type\"\n        :colors=\"histogramChart.options.colors\"\n        :width=\"histogramChart.options.width\"\n        :height=\"histogramChart.options.height\"\n        :data=\"chartData\"\n        :settings=\"histogramChart.options.settings\"\n        :after-config=\"histogramChart.options.config\"\n        :after-set-option=\"extend\"\n        :extend=\"histogramChart.defaultOptions\"\n        >\n      </ve-histogram>\n      <ve-histogram\n        v-else-if='type===\"ve-finehistogram\"'\n        :id=\"type\"\n        :height=\"barLineChart.options.height\"\n        :width=\"barLineChart.options.width ? barLineChart.options.width : null\"\n        :colors=\"barLineChart.options.colors\"\n        :data=\"chartData\"\n        :settings=\"barLineChart.options.settings\"\n        :after-config=\"barLineChart.options.config\"\n        :after-set-option=\"barExtend\"\n        :extend=\"barLineChart.defaultOptions\"\n        >\n      </ve-histogram>\n      <div v-else-if='type===\"ve-treemap\"' class=\"rect-tree-map-chart\" style=\"height: 100%\"></div>\n      <ve-line\n        v-else-if='type===\"ve-line\"'\n        :data=\"chartData\"\n        :height=\"lineChart.options.height\"\n        :after-config=\"lineChart.options.config\"\n        :extend=\"lineChart.defaultOption\"\n        >\n      </ve-line>\n  </template>\n";
 var vComponentChart = function (el, chartData, config, type) {
   new Vue({
     delimiters: ['${', '}'],

+ 13 - 2
src/web/staticres/common-module/collection/css/index.css

@@ -920,7 +920,7 @@
 /* 空状态样式 */
 
 .emptycom {
-    margin-top: 3.6rem;
+    /* margin-top: 3.6rem; */
     display: -webkit-box;
     display: -webkit-flex;
     display: flex;
@@ -935,6 +935,7 @@
     -webkit-align-items: center;
     align-items: center;
     width: 100%;
+    height: 100%;
 }
 
 .emptycom .emptyimg {
@@ -955,7 +956,17 @@
     color: #5f5e64;
     line-height: .4rem;
 }
-
+.emptycom .empty-btn{
+  width: 3.3rem;
+  height: .8rem;
+  line-height: .8rem;
+  margin-top: .48rem;
+  background: #2ABED1;
+  color: #fff;
+  font-size: .32rem;
+  border-radius: 4px;
+  text-align: center;
+}
 
 /* vip弹窗样式 */
 .vip_component {

+ 11 - 10
src/web/staticres/common-module/collection/js/buyer-example.js

@@ -150,21 +150,21 @@ var buyerExample = {
         case 'item_9': {
           textMap.headText.top = '深入分析采购单位合作企业规模情况,辅助'
           textMap.headText.bot = '投标决策'
-          textMap.source = 'buyer_portrait_withCapitalData_freeuser'
+          textMap.source = 'buyer_portrait_cooperative_ent_capital'
           break
         }
          // 合作企业年龄分布
         case 'item_10': {
           textMap.headText.top = '洞察采购单位合作企业成立时间,预判企业'
           textMap.headText.bot = '实力'
-          textMap.source = 'buyer_portrait_withEstablishData_freeuser'
+          textMap.source = 'buyer_portrait_cooperative_ent_age'
           break
         }
         // 合作企业注册地分布
         case 'item_11': {
           textMap.headText.top = '获取采购单位合作企业注册地详情,了解业务'
           textMap.headText.bot = '分布情况'
-          textMap.source = 'buyer_portrait_withAreaData_freeuser'
+          textMap.source = 'buyer_portrait_cooperative_ent_register_area'
           break
         }
         // 重点合作代理机构
@@ -178,14 +178,14 @@ var buyerExample = {
         case 'item_13': {
           textMap.headText.top = '精准分析采购单位历史运作项目,'
           textMap.headText.bot = '采购动态一目了然'
-          textMap.source = 'buyer_portrait_topAgencyData_freeuser'
+          textMap.source = 'buyer_portrait_bidInfoDesc'
           break
         }
         // 招标动态
         case 'item_14': {
           textMap.headText.top = '查看采购单位最新招标动态,及时跟踪采'
           textMap.headText.bot = '购需求'
-          textMap.source = 'buyer_portrait_topAgencyData_freeuser'
+          textMap.source = 'buyer_portrait_bidInfoList'
           break
         }
       }
@@ -197,7 +197,7 @@ var buyerExample = {
       var info = this.userinfo
       var usage = this.useage
       // 【登录查看】:未登录,点击跳转到登录
-      // 【立即解锁】:未体验过采购单位画像的免费用户,点击进行“欢迎体验采购单位全景分析”留资
+      // 【免费体验】:未体验过采购单位画像的免费用户,点击进行“欢迎体验采购单位全景分析”留资
       // 【去开通】:已体验过1次采购单位画像的免费用户,点击进入超级订阅购买页
       // 【前往升级】:超级订阅老版用户+购买了非全国采购单位画像余额为0的超级订阅新版用户,点击进入超级订阅升级页
       // 【联系客服】:购买了全国采购单位画像余额为0的超级订阅新版用户+无采购单位画像权限的大会员客户;点击调起智齿在线客服
@@ -205,7 +205,8 @@ var buyerExample = {
         btnText = '登录查看'
       } else if (info.isFree) {
         if (info.freeBuyerPort === 0) {
-          btnText = '立即解锁'
+          // btnText = '免费体验'
+          btnText = '免费体验'
         } else {
           btnText = '去开通'
         }
@@ -250,7 +251,7 @@ var buyerExample = {
       `
       var isWeixin = utils.isWeiXinBrowser
       if(!isWeixin) {
-        if (this.getTextMap.btnText == '立即解锁') {
+        if (this.getTextMap.btnText == '免费体验') {
           // 留资
           location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
         } else if (this.getTextMap.btnText == '联系客服') {
@@ -299,7 +300,7 @@ var buyerExample = {
           }
         }
       } else {
-        if (this.getTextMap.btnText == '立即解锁') {
+        if (this.getTextMap.btnText == '免费体验') {
           // 留资
           location.href = '/weixin/frontPage/bigmember/free/perfect_info?source=' + source
         } else if (this.getTextMap.btnText == '联系客服') {
@@ -351,7 +352,7 @@ var buyerExample = {
       console.log(_this.getTextMap.btnText)
       if(_this.getTextMap.btnText == '登录查看'){
         window.location.href = "/jyapp/free/login?to=back";
-      } else if (_this.getTextMap.btnText == '立即解锁') {
+      } else if (_this.getTextMap.btnText == '免费体验') {
         $.ajax({
           type: 'POST',
           url: '/publicapply/drainage/buyerunit',

+ 14 - 3
src/web/staticres/common-module/collection/js/ent_portrait.js

@@ -139,7 +139,11 @@ var vNode = {
       isSC:0, //0未收藏 1收藏
       idx:[],
       list:[],
-      entParams: {}
+      entParams: {},
+      // 用户是否登录
+      isLogin: true,
+      // 是否是免费用户
+      isFree: false
     }
   },
   created: function () {
@@ -276,6 +280,9 @@ var vNode = {
         return item
       })
       return !isShow
+    },
+    isFreeOrNotLogin () {
+      return this.isFree
     }
   },
   methods: {
@@ -408,6 +415,9 @@ var vNode = {
     },
     // 获取画像信息
     getEntPortrait: function (callback) {
+      if (this.isFree) {
+        return
+      }
       var storageSet = JSON.parse(sessionStorage.getItem('winner_high_set'))
       // if (!storageSet) return
       var _this = this
@@ -463,7 +473,7 @@ var vNode = {
               }
             }
           } else {
-            _this.$toast(res.error_msg)
+            // _this.$toast(res.error_msg)
             _this.show.yearData = false
             _this.show.monthData = false
             _this.show.areaData = false
@@ -655,7 +665,7 @@ var vNode = {
     getEntBaseInfo: function () {
       var _this = this
       let urls = ''
-      if (_this.powerInfo.memberStatus <= 0 || _this.svip) {
+      if (_this.powerInfo.memberStatus <= 0 || _this.svip || _this.isFree) {
         urls = '/bigmember/portrait/subVipPortrait/entDetail'
       } else {
         urls = '/bigmember/portrait/ent/detail'
@@ -791,6 +801,7 @@ var vNode = {
               }
 	            //免费用户体验权限
 	            if(res.data.isFree){
+                _this.isFree = true
                 if (res.data.freeEntPort==0) {
                   _this.canFreeExp=true
                 } else {

+ 1 - 1
src/web/staticres/common-module/collection/js/index-wx.js

@@ -382,7 +382,6 @@ var vNode = {
         return
       }
       var _this = this
-      _this.projectCellInfo = item
       var params = { bidIds: item._id }
       $.ajax({
           url: '/jyapi/jybx/core/participate/in/info',
@@ -390,6 +389,7 @@ var vNode = {
           contentType: 'application/json',
           data: JSON.stringify(params),
           success: function (res) {
+              _this.projectCellInfo = item
               if (res.error_code === 0 && res.data) {
                   // _this.$toast('已参标,请前往我的参标项目列表查看。')
                   _this.$set(item, 'isCB', {

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

@@ -384,7 +384,6 @@ var vNode = {
         return
       }
       var _this = this
-      _this.projectCellInfo = item
       var params = { bidIds: item._id }
       $.ajax({
           url: '/jyapi/jybx/core/participate/in/info',
@@ -392,6 +391,7 @@ var vNode = {
           contentType: 'application/json',
           data: JSON.stringify(params),
           success: function (res) {
+              _this.projectCellInfo = item
               if (res.error_code === 0 && res.data) {
                   // _this.$toast('已参标,请前往我的参标项目列表查看。')
                   _this.showBidStatus = true

+ 6 - 3
src/web/staticres/common-module/collection/js/vip-dialog.js

@@ -134,7 +134,8 @@ var vipComponent = {
 
         // (2)【立即解锁】:未体验过企业画像的免费用户,中标分析各模块,点击进行“欢迎体验企业中标分析”留资;
         if (this.canFreeExp) {
-          textMap.btnText = '立即解锁'
+          // textMap.btnText = '立即解锁'
+          textMap.btnText = '免费体验'
         } else {
           if (this.power.vipStatus <= 0) {
             textMap.btnText = '去开通'
@@ -149,6 +150,7 @@ var vipComponent = {
         case 'item_1': {
           textMap.headText.top = '通过实时监控项目的招标、中标、合同等'
           textMap.headText.bot = '信息,全面挖掘更多潜在商机!'
+          textMap.source = 'ent_portrait_winnerNewMsg_freeuser'
           break
         }
           // 年度项目统计
@@ -226,15 +228,16 @@ var vipComponent = {
         // 统计信息-概况
         case 'item_10': {
           textMap.titleText = ''
-          textMap.btnText = '登录查看'
+          textMap.btnText = this.power.isMember > 0 && this.power.arr.indexOf(4) == -1 ? '联系客服' : '免费体验'
           textMap.headText.top = '全面透视企业历史中标项目、中标'
           textMap.headText.bot = '金额、客户数量'
-          textMap.source = 'ent_portrait_changeList'
+          textMap.source = 'ent_portrait_bidInfoDesc'
           break
         }
         default: {
           textMap.headText.top = '通过实时监控项目的招标、中标、合同等'
           textMap.headText.bot = '信息,全面挖掘更多潜在商机!'
+          textMap.source = 'ent_portrait_new_free'
           break
         }
       }

+ 9 - 9
src/web/staticres/common-module/consult-dialog/js/index.js

@@ -14,14 +14,14 @@ var consultDialog = new Vue({
           vipshow: false
       }
   },
-  created() {
+  created: function () {
   },
-  mounted() {
+  mounted: function () {
     this.getimage()
   },
   methods: {
-      getimage() {
-          let this_ = this
+      getimage: function () {
+          var this_ = this
           $.ajax({
               type: 'POST',
               url: '/bigmember/use/equity',
@@ -30,8 +30,8 @@ var consultDialog = new Vue({
               },
               success: function (res) {
                   if (res.data) {
-                      let customers = res.data.customers
-                      customers.forEach(ele => {
+                      var customers = res.data.customers
+                      customers.forEach(function (ele) {
                           if (ele.vip == false) {
                               this_.img = ele.wxer
 
@@ -45,8 +45,8 @@ var consultDialog = new Vue({
               }
           })
       },
-      getstates() {
-        let this_ = this
+      getstates: function () {
+        var this_ = this
         $.ajax({
             type: 'POST',
             url: '/bigmember/use/isAdd',
@@ -80,7 +80,7 @@ var consultDialog = new Vue({
             }
         })
     },
-    close(val) {
+    close: function (val) {
           this[val] = false
    },   
   }

文件差異過大導致無法顯示
+ 1 - 0
src/web/staticres/common-module/js/bundle.min.js


+ 40 - 0
src/web/staticres/common-module/message-tip/css/index.css

@@ -0,0 +1,40 @@
+/* 模态提示框  css*/
+
+.text-overflow100 .weui-toast {
+  margin-left: 0;
+  width: 4.5rem;
+  min-height: .42rem;
+  font-size: 20px;
+  /* -webkit-transform: translateX(-50%);
+          transform: translateX(-50%); */
+    transform: translate(-50%, -30%);
+
+  }
+  .text-overflow100 .weui-icon_toast {
+    margin: 0;
+  }
+
+
+  .j-toast .weui-toast {
+    font-size: 0.3rem;
+    padding: 0.15rem 0.2rem;
+    max-width: 6rem;
+    min-height: 0;
+    width: auto;
+    height: auto;
+    top: 45%;
+    left: 50%;
+    margin-left: 0;
+    transform: translate(-50%, -50%);
+    background-color: rgba(0, 0, 0, 0.72) !important;
+    border-radius: 8px;
+  }
+
+  .j-toast .weui-icon_toast {
+    display: none;
+  }
+
+  .j-toast .weui-toast__content {
+    margin: 0;
+    color: #FFFFFF;
+  }

+ 178 - 0
src/web/staticres/common-module/message-tip/js/index.js

@@ -0,0 +1,178 @@
+/**
+ * 获取动态广告栏属性
+ * @param type
+ * @returns {Object|*}
+ */
+
+// url转base64 方法
+// base64 编码
+function getBase64Image(img) {
+  var canvas = document.createElement('canvas')
+  canvas.width = img.width
+  canvas.height = img.height
+  var ctx = canvas.getContext('2d')
+  ctx.drawImage(img, 0, 0, img.width, img.height)
+  var dataURL = canvas.toDataURL('image/png')
+  return dataURL
+}
+
+function getImage64Url(url, ref) {
+
+  // var that = this
+  var image = document.createElement('img')
+  image.setAttribute('crossorigin', 'anonymous')
+  image.src = url + '?v=' + Math.random() // 处理缓存
+  image.crossOrigin = 'anonymous'
+  image.onload = function () {
+    var base64 = getBase64Image(image)
+    console.log(base64);
+  }
+}
+
+// var ua = window.navigator.userAgent
+// let _isIOS     = -1;
+// function isIOS() {
+//   if (_isIOS === -1) {
+//     _isIOS = /iPhone|iPod|iPad/i.test(ua) ? 1 : 0;
+//   }
+//   return _isIOS === 1;
+// }
+
+
+var getActive = {
+  // 版本号
+  version: '0.0.1',
+  drawBase64Image: function (img) {
+    var canvas = document.createElement('canvas')
+    canvas.width = img.width
+    canvas.height = img.height
+    var ctx = canvas.getContext('2d')
+    ctx.drawImage(img, 0, 0, img.width, img.height)
+    var dataURL = canvas.toDataURL('image/png')
+    return dataURL
+
+  },
+  /**
+   * 获取后台广告方法
+   * @param {Array|String} active_codes_map 广告id标识符--数组集合["jy-wx-course-pay-success"]
+   * @param {String} active_tip_group 展示广告的容器demo节点
+   * @param {String} isAppsion 请求环境、app、weixin、pc
+   * @returns {Object|Array}
+   */
+  getActiveInfo: function (active_codes_map,isAppsion) {
+    // 如果执行环境是app
+    var isAppsionApp = isAppsion === 'App'
+    $.ajax({
+      url: '/publicapply/free/getJyAdList',
+      type: 'POST',
+      dataType: "json",
+      traditional: true,
+      //强制请求头数据格式 'application/json'
+      headers: {'Content-Type': 'application/json'},
+      data:active_codes_map,
+        // JSON.stringify({codes:["jy-wx-course-pay-success","jy-pc-dataPackage-pay-success"] })
+        // JSON.stringify()
+    }).done(function (res) {
+      // res.error_code =1
+      // Object.value 兼容处理
+      Object.values = function (obj) {
+        return Object.keys(obj).map(function(e) {
+          return obj[e]
+        })
+      }
+      if (res.error_code === 0 && res.data && Object.values(res.data)[0] && Object.values(res.data)[0] !=null && Object.values(res.data)[0][0]) {
+        // weixin、pc环境
+        var img = new Image()
+        var imgsrcArr = Object.values(res.data)[0][0]
+        img.src = imgsrcArr.s_pic
+         img.onload= function() {
+          $(".active-tip-group").show()
+        }
+        $(".active-tip-group img").attr('src', imgsrcArr.s_pic + '?v=' + Math.random())
+
+        // 如果是app环境 ,调用原生方法、执行保存
+        // var isAppsionType = isAppsionApp || utils.isIos || utils.isAndroid
+        var that = this
+        var isAppsionType = isAppsionApp
+        if (isAppsionType) {
+
+          // APP 保存图片
+          $('.active-tip-group').off('click').on('click', function () {
+            if(!window.picImgUrl) {
+                html2canvas(document.querySelector('.active-tip-group'), {
+                    // allowTaint: true,
+                    useCORS: true,
+                    backgroundColor: null,
+                    scale: 3,
+                    imageTimeout: 30000,
+                    allowTaint: true, // 允许跨域图片
+                }).then(function(canvas) {
+                    var imgUrl = imgsrcArr.base64 || canvas.toDataURL('image/png')
+                    console.log(imgUrl)
+                    // $(".active-tip-group img").attr('src', imgUrl)
+                    imgUrl = imgUrl.replace('data:image/png;base64,', '')
+                    // console.log(imgUrl)
+                    window.picImgUrl = imgUrl
+                    try {
+                      window.JyObj.savePic(imgUrl)
+
+                      setTimeout(function() {
+                          weui.toast('图片已保存,快去扫码识别吧', {
+                            duration: 800,
+                            className: 'text-overflow100'
+                          })
+                        }, 2300)
+
+                    } catch (e) {
+                      weui.toast('保存失败', {
+                        duration: 800,
+                        className: 'j-toast'
+                      })
+                      console.log(e)
+                      // location.href=imgsrcArr.s_link
+                    }
+                })
+            }else {
+                window.JyObj.savePic(window.picImgUrl)
+                setTimeout(function() {
+                  weui.toast('图片已保存,快去扫码识别吧', {
+                    duration: 800,
+                    className: 'text-overflow100'
+                  })
+                }, 2300)
+            }
+         })
+        } // App打开新窗口等 用 @param {String} isAppsion === 'Applink'
+        else if ((isAppsion === 'Applink') && imgsrcArr.o_extend && imgsrcArr.o_extend.linktype === 'abroad') {
+          $(".active-tip-group").on('click', function () {
+            try {
+              JyObj.openExternalLink(imgsrcArr.s_link, imgsrcArr.o_extend.title || '剑鱼标讯');
+            } catch (e) {
+              console.log(e);
+            }
+          })
+          if (isIOS()) {
+            $('.rules').css('margin-top', '0.28rem')
+          }
+        } else {
+          // weixin、pc环境 直接跳转
+          if (imgsrcArr.s_link) {
+            $(".active-tip-group").on('click', function () {
+              try {
+                location.href=imgsrcArr.s_link
+              } catch (e) {
+                console.log(e);
+              }
+            })
+          }
+        }
+      } else {
+        $('.rules').css('margin-top', '0.8rem')
+        $('.ad_space').hide()
+        $('.login-dig-box').css('left', 'calc(50vw - 181px)')
+      }
+    })
+  }
+}
+
+

文件差異過大導致無法顯示
+ 292 - 0
src/web/staticres/common-module/message-tip/js/msgbuoy.js


文件差異過大導致無法顯示
+ 126 - 126
src/web/staticres/common-module/pc-dialog/js/leave-info-dialog.js


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

@@ -1,5 +1,5 @@
-var freeBuyerText = '请留下联系方式,立即免费体验【采购单位全景分析】1次,帮你全面洞察采购单位,开发新客户!'
-var freeEntText = '请留下联系方式,立即免费体验【企业中标分析】1次,多维度可视化分析竞争对手!'
+var freeBuyerText = '请留下联系方式,我们会尽快联系您!体验采购单位画像分析,为你挖掘客户!'
+var freeEntText = '请留下联系方式,我们会尽快联系您!体验企业画像分析,帮你透视企业!'
 var freeAttachText = '请留下联系方式,立即免费体验【附件下载】1次,招标文件/采购清单一键下载,商机更完整!'
 var analysisTipText = '请完善个人信息,辅助你做投标决策及报价参考!'
 
@@ -45,7 +45,7 @@ var titleMap = {
   wx_search_dzhfxbg: '欢迎体验剑鱼大会员',
   app_analysis_ProjectDetails: '欢迎体验剑鱼大会员',
   wx_analysis_ProjectDetails: '欢迎体验剑鱼大会员',
- 
+
   // 数据超市列表-申请数据定制
   app_DataSupermarket_Customization: '量身定制数据解决方案',
   wx_DataSupermarket_Customization: '量身定制数据解决方案',
@@ -1076,12 +1076,12 @@ var vNode = {
                 // 免费用户体验
                 if (source.indexOf('_freeuser') > -1) {
                   var text = ''
-                  if (source.indexOf('buyer_portrait') > -1) {
-                    text = '采购单位全景分析'
-                  }
-                  if (source.indexOf('ent_portrait') > -1) {
-                    text = '企业中标分析'
-                  }
+                  // if (source.indexOf('buyer_portrait') > -1) {
+                  //   text = '采购单位全景分析'
+                  // }
+                  // if (source.indexOf('ent_portrait') > -1) {
+                  //   text = '企业中标分析'
+                  // }
                   if (source.indexOf('article_attach') > -1) {
                     text = '附件下载'
                   }

+ 7 - 4
src/web/staticres/common-module/public/head.js

@@ -8,10 +8,13 @@
     productionMain: /jianyu360\.cn$/g, // 主站
     pcCMS: /jianyu360\.cn\/jycms/g, // pcCMS
   }
-  if (patterns.pcCMS.test(uLocation)) {
-    // 剑鱼PC端CMS专用百度统计
-    hm.src = "https://hm.baidu.com/hm.js?32344152a6d39fdf42b2a171d0a8eab7";
-  } else if (patterns.productionMain.test(host)) {
+  // SEO运营要求百度统计依旧使用主域名代码
+  // if (patterns.pcCMS.test(uLocation)) {
+  //   // 剑鱼PC端CMS专用百度统计
+  //   hm.src = "https://hm.baidu.com/hm.js?32344152a6d39fdf42b2a171d0a8eab7";
+  // } else
+
+  if (patterns.productionMain.test(host)) {
     // 主站百度统计
     hm.src = "https://hm.baidu.com/hm.js?52c42de35032567eb9d7a24a43c84bda";
   } else {

二進制
src/web/staticres/commonFunctions/pc-set-password.png


+ 4 - 1
src/web/staticres/css/collect-user-info.css

@@ -71,7 +71,10 @@
    height: 15px;
    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAMAAADW3miqAAAAAXNSR0IArs4c6QAAAGZQTFRFAAAA72AA/3AA/2sA72AA92gA9GUA82QA8mMA8mIA9GUA9mUA9GQA9mYA9WQA92YA82QA9WYA9mYA82MA9GUA9WUA9GQA9GQA9GUA9mUA9GQA9GUA9WUA9WUA9mYA9GQA9WUA9WUAxGzfPAAAACF0Uk5TABAQHyAgMEBQYGBvcHB/f4CAj5CQn6C/v7/Pz8/f3+/vjAXRyAAAAShJREFUOMvFlMF2gjAQRSdUiKW2xhBtbU3M/f+fdKEwAeI53clqIJc3k5eZiLzuMdZfrnA9++1TZH9leuJ+U2M+CgQg9mvGA2RnW5HGhgTgl8wRSFbf+wQc1zqhmVU4LLV64DCWFrt75IBPZTYRwkMAOD8+D5DNBH1BahS6jBnTpC8iEab9OnI3xraQ2kKq+5vBau5Qh5yu/CgvIl0RWy0wg26iK+qTFvIjBPTn95nRuvQvKMNbHTKa7q8sfAbZmf2HOlSYY1V0AUUYG9kUxs6gvjwKB9GsIRPLOkzW/iogD6lVO3bAfoLC1EDMhmEA/D2jC62IiPGszv20GCIbgdOyKwaA6K0Rae19TCv906f5cOZdrcNaV2DZNc+ug234zpB/g21eeG/dACciJl5v+GSeAAAAAElFTkSuQmCC) no-repeat;
    background-size: contain;
-   }
+}
+.warm-prompt .icon-warning::before{
+  content: '';
+}
  .warm-prompt .warm-text{
   /* text-align: center; */
  line-height: 30px;

+ 1 - 1
src/web/staticres/css/dataSmt/dataMart.css

@@ -424,7 +424,7 @@
   top: 16px;
   cursor: pointer;
 }
-.dataMart .dataMart_dialog .content h1{
+.dataMart .dataMart_dialog .content h4{
 font-size: 18px;
 font-weight: 400;
 line-height: 28px;

+ 1 - 1
src/web/staticres/css/dataSmt/dataMart_detail.css

@@ -211,7 +211,7 @@
 .professionalTeam{
   background-image: url(/images/dataSmt/team.png);
 }
-.dataMart_detail .middle .coreAdvantage .item .box h1{
+.dataMart_detail .middle .coreAdvantage .item .box h3{
  font-size: 20px;
  line-height: 32px;
  color: #1D1D1D;

+ 47 - 10
src/web/staticres/css/pc.css

@@ -370,7 +370,8 @@ form{
 .j-bottom{
 	background-color: #2B2D30;
 	color: #fff;
-	padding: 40px 0px 25px 0px;
+	/* padding: 40px 0px 25px 0px; */
+	padding: 0px 0px 25px 0px;
 	text-align: center;
 	font-weight: normal;
 }
@@ -1963,13 +1964,14 @@ form{
 
 
 .jy_classify{
- padding: 32px 0 68px;
+ padding: 40px 0 68px;
  display: flex;
  justify-content: space-between;
 }
 .jy_classify_l{
   position: relative;
 	display: flex;
+  flex: 1;
   /* border-right: 1px solid rgba(255, 255, 255, 0.12); */
 }
 .jy_classify_l::after{
@@ -1984,7 +1986,7 @@ form{
 }
 .jy_classify_l dl{
 	margin-right: 40px;
-	flex: 1;
+	/* flex: 1; */
 }
 .jy_classify_l dl dt,
 .jy_classify_l dl dt > a{
@@ -4717,7 +4719,7 @@ h6 {
 
 .login-dig-tabbar-navbar .line-box {
   margin-top: 8px;
-  width: 80px;
+  width: 118px;
   height: 3px;
   background: #2CB7CA;
   transition: all 0.33s;
@@ -4731,6 +4733,14 @@ h6 {
   transform: translateX(104px);
 }
 
+.login-dig-tabbar-navbar .line-box.pass-line-box{
+  width: 80px;
+}
+
+.login-dig-tabbar-navbar span + span.is-active + .line-box.pass-line-box{
+  transform: translateX(140px);
+}
+
 .login-dig-tabbar-content {
   display: none;
 }
@@ -4755,7 +4765,7 @@ h6 {
 .login-dig-box .footer-action-container {
   display: flex;
   align-items: center;
-  justify-content: space-between;
+  justify-content: center;
   margin-top: 12px;
 }
 .login-dig-box .auto-login-container {
@@ -4858,6 +4868,20 @@ h6 {
   border: 1px solid #2CB7CA;
 }
 
+.login-dig-cancel-button {
+  margin-top: 12px;
+  cursor: pointer;
+  width: 280px;
+  height: 44px;
+  background: #FFFFFF;
+  border-radius: 63px;
+  font-size: 16px;
+  line-height: 24px;
+  color: #1D1D1D;
+  border: 1px solid rgba(0, 0, 0, 0.05);
+}
+
+
 .login-dig-submit-button:disabled {
   border-color: #E0E0E0;
   background: #E0E0E0;
@@ -4921,6 +4945,7 @@ h6 {
   animation: resetBg .1s forwards;
   box-shadow: none !important;
   padding: 0px;
+  background: transparent;
 }
 
 .login-dig-input-box input::placeholder {
@@ -4960,8 +4985,11 @@ h6 {
 }
 
 .login-dig-input-box .after-input-box .verify-img {
-  border-radius: 20px;
+  width: 88px;
+  height: 40px;
+  border-radius: 130px;
   margin-right: -14px;
+  background-color: #FFFFFF;
 }
 
 .login-dig-footer-box {
@@ -4999,7 +5027,7 @@ h6 {
   margin-top: 48px;
   /* padding: 4px 20px; */
   box-sizing: border-box;
-  width: 152px;
+  width: 222px;
   height: 32px;
   background: rgba(44, 183, 202, 0.08);
   border-radius: 52px;
@@ -5071,11 +5099,20 @@ h6 {
 .login-dig-icon-pass {
   background: url("/images/phonelogin/icon-pass.png");
   background-size: 18px 18px;
-  width: 18px;
+  width: 20px;
   height: 18px;
   display: inline-block;
 }
 
+.login-dig-icon-biyan {
+  background: url("/images/phonelogin/icon-biyan.png");
+  background-size: 16px 16px;
+  width: 20px;
+  height: 20px;
+  display: inline-block;
+}
+
+
 .login-dig-icon-guard {
   background: url("/images/phonelogin/icon-guard.png");
   background-size: 18px 18px;
@@ -5166,7 +5203,7 @@ h6 {
 .forget-pass-link {
   font-size: 13px;
   line-height: 20px;
-  color: #686868 !important;
+  color: #2CB7CA;
   text-decoration: none;
   cursor: pointer;
 }
@@ -5229,7 +5266,7 @@ h6 {
   width: 360px;
   padding: 32px 40px 36px;
 }
-.ad_space{
+.login_ad_space{
   width: 360px;
 }
 .ad_small_space{

+ 8 - 1
src/web/staticres/css/pc/index.css

@@ -436,6 +436,7 @@
 }
 .hot-search .right-con .a_box{
   margin-bottom: -10px;
+  flex: 1;
 }
 .hot-search .right-con a {
   margin-right: 22px;
@@ -1343,6 +1344,7 @@
 
 .jy-index-links .links-item-content {
   margin: 24px 4px;
+  flex: 1;
 }
 
 .jy-index-links .links-item-content>div {
@@ -1616,12 +1618,12 @@ color: #999999;
   line-height: 20px;
   color: #333333;
   text-decoration: none;
-
   overflow: hidden;
   max-width: 440px;
   text-overflow: ellipsis;
   white-space: nowrap;
   display: inline-block;
+  width: 440px;
 }
 
 .jy-index-recommend .recommend-context .item-one ul li:hover a {
@@ -1756,3 +1758,8 @@ margin-top: 2px;
 text-align: center;
 
 }
+
+/* 首页底部pc-bottom单独设置的样式 */
+.jy_classify{
+  padding-top: 32px!important;
+}

+ 13 - 0
src/web/staticres/css/selector/selector.css

@@ -30,6 +30,17 @@
     font-size: 16px;
     line-height: 24px;
 }
+.no-data .tip-btn{
+  width: 108px;
+  height: 30px;
+  margin-top: 24px;
+  background: #2ABED1;
+  color: #fff;
+  font-size: 14px;
+  border-radius: 4px;
+  outline: 0;
+  border: 0;
+}
 
 .selector-card-container {
     padding: 0 14px;
@@ -138,6 +149,7 @@
     display: flex;
     align-items: center;
     flex-wrap: wrap;
+    width: 100%;
 }
 .select-group-container.right-line::after {
     content: '';
@@ -182,6 +194,7 @@
 /* mini-select */
 .mini-select .el-input__inner {
     height: 30px;
+    line-height: 30px;
 }
 .mini-select .el-input__icon {
     display: flex;

+ 11 - 2
src/web/staticres/dataSmt/css/index.css

@@ -403,10 +403,19 @@ a:focus{
 }
 
 .data-scene .scene-btn > span{
-  background-image: linear-gradient(#33CCCC, #3399FF);
+  /* background: linear-gradient(#33CCCC, #3399FF);
   -webkit-background-clip: text;
+  -moz-background-clip:text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
   color: transparent;
-  font-size: 20px;
+  font-size: 20px; */
+  display: inline-block;
+  width: 80px;
+  height: 30px;
+  margin: 9px auto;
+  background: url(/dataSmt/images/zixun-font.png) no-repeat center center;
+  background-size: contain;
 }
 
 .btn-light{

二進制
src/web/staticres/dataSmt/images/zixun-font.png


+ 6 - 6
src/web/staticres/enterpriseCertificatio/css/enterpriseCertificatio.css

@@ -238,7 +238,7 @@
   margin-top: 121px;
 }
 
-.system_certificatio h1 {
+.system_certificatio h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;
@@ -309,7 +309,7 @@
   margin-top: 112px;
 }
 
-.credit_authentication h1 {
+.credit_authentication h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;
@@ -374,7 +374,7 @@
   padding-top: 72px;
 }
 
-.service_system h1 {
+.service_system h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;
@@ -447,7 +447,7 @@
   padding-top: 72px;
 }
 
-.awarded_marks h1 {
+.awarded_marks h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;
@@ -586,7 +586,7 @@
   background: linear-gradient(180deg, #E6F1FF 0%, #F0F8FF 100%);
 }
 
-.service_process h1 {
+.service_process h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;
@@ -655,7 +655,7 @@
   padding-top: 72px;
 }
 
-.cooperation h1 {
+.cooperation h2 {
   font-style: normal;
   font-weight: 700;
   font-size: 36px;

+ 6 - 3
src/web/staticres/frontRouter/pc/collection/js/index-pc.js

@@ -327,7 +327,7 @@ var vm = new Vue({
             }
             this.getList()
         },
-        contains(arr, ele) {
+        contains: function (arr, ele) {
           if(arr.length == 0){
             return;
           }
@@ -764,7 +764,7 @@ var vm = new Vue({
             })
         },
        // 获取参标数据
-       getBidIsJoin() {
+       getBidIsJoin: function () {
           var _this = this
           var paramsData = {
            ids: _this.listState.list.map(function(item){
@@ -803,7 +803,7 @@ var vm = new Vue({
        * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传(bidIds和projectIds必传一个)
        * @param callback
        */
-      joinBidAction (item) {
+      joinBidAction: function (item) {
         if(item.joinBid) {
           return this.showToast('如需终止参标,需要在详情页进行操作。')
         }
@@ -837,5 +837,8 @@ var vm = new Vue({
           }
         })
       },
+      goCollect: function () {
+        window.open('/jylab/supsearch/index.html')
+      }
     }
 })

+ 3 - 4
src/web/staticres/frontRouter/pc/customExport/css/index.css

@@ -206,21 +206,20 @@ h2.title{
   color:rgba(255, 255, 255, 0.88);
   margin-top:12px;
 }
-.title{
+.custom-export-index .title{
   margin:40px auto;
   background: url(/frontRouter/pc/customExport/image/export-b-title.png) no-repeat center;
   background-size: contain;
-  height:162px;
 }
 
-.core-advantage-box{
+.custom-export-index .core-advantage-box{
   padding-top:68px;
   height:642px;
   width: 100%;
   background-image:url(/frontRouter/pc/customExport/image/core-bg.png);
   color: rgba(30, 30, 30, 0.88);
 }
-.core-advantage-box h2{
+.custom-export-index .core-advantage-box h2{
   margin:0 auto;
   background-image: url(/frontRouter/pc/customExport/image/core-title.png);
 }

+ 3 - 1
src/web/staticres/frontRouter/pc/solution/css/solution.css

@@ -21,7 +21,8 @@
   background-size: 360px 360px;
   background-position: 840px 45px;
 }
-.main-2-text{
+.main-2-text,
+.main-title-desc{
   font-size: 18px;
   font-family: Microsoft YaHei, Microsoft YaHei-Bold;
   font-weight: 700;
@@ -30,6 +31,7 @@
   line-height: 28px;
 }
 .main-title{
+  display: inline;
   font-size: 36px;
   font-family: Microsoft YaHei, Microsoft YaHei-Bold;
   font-weight: 700;

文件差異過大導致無法顯示
+ 100 - 100
src/web/staticres/frontRouter/pc/solution/js/pc-collect-solution-info.js


+ 56 - 1
src/web/staticres/frontRouter/pc/user/css/set_favorite.css

@@ -189,6 +189,14 @@
 .add-input-group .input-container {
     display: flex;
     align-items: center;
+    flex-wrap: wrap;
+    justify-content: flex-start;
+}
+.add-input-group .input-container .key-input{
+  margin-bottom: 20px;
+}
+.add-input-group .input-container .key-input:nth-child(odd){
+  margin-right: 20px;
 }
 .add-input-group .input-container .el-input {
     width: 310px;
@@ -196,9 +204,11 @@
 .add-input-group .input-container .el-input__inner {
     height: 36px;
     line-height: 36px;
+    border: 0.5px solid rgba(0, 0, 0, 0.1);
+    background: transparent;
+    color: #686868;
 }
 .add-input-group .add-input--button {
-    margin-left: 18px;
     color: #2ABED1;
 }
 .add-input-group .add-input--button[disabled] {
@@ -222,3 +232,48 @@
     margin-top: 8px;
     color: #FF9F40;
 }
+
+.ent-input-group .input-container {
+  position: relative;
+}
+
+.ent-input-group .input-container .asso_popup{
+  position: absolute;
+  top: 48px;
+  background: #fff;
+  max-height: 224px;
+  min-height: 56px;
+  overflow: hidden;
+  overflow-y: auto;
+  border-radius: 8px;
+}
+
+.ent-input-group .input-container .asso_popup ul{
+  width: 540px;
+  margin-top: 8px;
+  padding-left: 16px;
+}
+
+.ent-input-group .input-container .asso_list{
+  width: 540px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  padding: 14px 56px 14px 0;
+  border-bottom: 0.5px solid rgba(0, 0, 0, 0.05);
+  cursor: pointer;
+}
+
+.ent-input-group .input-container .el-input {
+  width: 540px;
+}
+
+.ent-input-group .input-container .el-input .el-input__inner{
+  border: 0.5px solid rgba(0, 0, 0, 0.1);
+  background: transparent;
+  color: #686868;
+}
+
+.highlight {
+  color: #2ABED1;
+}

+ 104 - 23
src/web/staticres/frontRouter/pc/user/js/set_favorite.js

@@ -6,6 +6,18 @@ const postUserSaleDataExample = {
     department: '产品',
     keyword: '自行车,手机,摩托,工程,医疗,app'
 }
+// 防抖
+function debounce(fn, delay) {
+  var timer
+  return function () {
+    var context = this
+    var args = arguments
+    clearTimeout(timer)
+    timer = setTimeout(function () {
+      fn.apply(context, args)
+    }, delay)
+  }
+}
 var favorite = new Vue({
     el: '#main-app',
     delimiters: ['${', '}'],
@@ -17,32 +29,78 @@ var favorite = new Vue({
                 scale: '',
                 position: '',
                 department: '',
-                keyword: ''
+                keyword: '',
+                company: ''
             },
             newUserSaleData: [],
             // 关键词示范
-            inputKewArr: [],
-            // 关键词输入框
-            kewmodeldata: '',
+            inputKewArr: [
+              '',
+              '',
+              '',
+              '',
+              ''
+            ],
             // 用户选中信息
             selectInfo: {},
-            selectPopInfo: {}
+            selectPopInfo: {},
+            showSearchResult: false, // 联想弹窗
+            companyList: [], // 企业列表
+
         }
     },
     computed: {
         inputKewLength: function () {
-            return this.inputKewArr.length >= 10
+            return this.inputKewArr.filter(input => input.trim() !== '').length
         }
     },
     created: function () {
         this.getNewUerSales()
     },
     methods: {
+        highlight(text) {
+          const regex = new RegExp(this.codesArr.company, 'gi');
+          return text.replace(regex, '<span class="highlight">$&</span>');
+        },
         showToast: function (text) {
             EasyAlert.show(text, '', 2000)
         },
-        inputformatter () {
-            this.kewmodeldata = this.kewmodeldata.replace(/\s+/g, '')
+        // inputformatter () {
+        //     this.kewmodeldata = this.kewmodeldata.replace(/\s+/g, '')
+        // },
+        // 选择企业
+        selectEnt (data) {
+          this.codesArr.company = data
+          this.showSearchResult = false
+        },
+        entInputFormatter: debounce(function(val){
+          console.log(val)
+          if(val === '') { this.showSearchResult = false}
+          this.setAssotionData(val)
+        }, 600),
+        // 企业名称联想
+        setAssotionData (name) {
+          if (!name || name.length < 2) return
+          var _this = this
+          $.ajax({
+            type:'POST',
+            url:'/jypay/user/company/association',
+            data: {
+              name: name
+            },
+            heads : {
+              'content-type': 'application/x-www-form-urlencoded'
+            },
+            success:function (res) {
+              console.log(res)
+              if (res.data && res.data.length > 0) {
+                _this.companyList = res.data
+                _this.showSearchResult = true
+              } else {
+                _this.showSearchResult = false
+              }
+            }
+          })
         },
         positionShow: function (item, index, data) {
             if (index === 0) return true
@@ -69,29 +127,50 @@ var favorite = new Vue({
             }
             
         },
-        // 添加关键词
-        kewsureBtn: function (index) {
-            this.setPageTrack(`添加-${this.kewmodeldata}`, index)
-            var item = this.kewmodeldata
+        // 添加关键词输入框
+        kewsureBtn: function () {
+          if(this.inputKewArr.length <= 10) {
+            const arr = ['', '', '', '', '']
+            this.inputKewArr = this.inputKewArr.concat(arr)
+          }
+        },
+        setCompanyBlur () {
+          setTimeout(() => {
+            this.showSearchResult=false
+          }, 500)
+        },
+        // 输入框失去焦点校验
+        inputformatter: function (value, index) {
+            this.setPageTrack(`添加-${value}`, index)
+            var item = value
             // 验证关键词 重复否
-            var isinputKew = this.inputKewArr.some(function (v) {
-                return v === item
+            var isinputKew = this.inputKewArr.some(function (v, i) {
+              if (i !== index) {
+                if (v === '' && item === '') {
+                  return false
+                } else {
+                  return v === item
+                }
+              } else {
+                return false
+              }
             })
       
             if (isinputKew) {
                 this.showToast('关键词重复')
-                return false
+                this.inputKewArr[index] = ''
             }
-            if (this.kewmodeldata.length > 15) {
+            if (value.length > 15) {
                 this.showToast('关键词超15个字')
-                return false
-            }
-            if (this.kewmodeldata === '') {
-              return false
+                this.inputKewArr[index] = ''
             }
+            this.$forceUpdate()
+            // if (this.kewmodeldata === '') {
+            //   return false
+            // }
       
-            this.inputKewArr.push(this.kewmodeldata)
-            this.kewmodeldata = ''
+            // this.inputKewArr.push(this.kewmodeldata)
+            // this.kewmodeldata = ''
         },
         // 取消关键字
         canlekewBtn (item) {
@@ -165,8 +244,10 @@ var favorite = new Vue({
         postNewUerData (type, callback) {
             var _this = this
             this.setPageTrack(`点击-${type ? '开启剑鱼之旅' : '跳过'}`)
+            const keyarr = _this.inputKewArr.filter(v => v.trim() !== '')
             const codesArr = {
-                keyword: _this.inputKewArr.join(',') || ''
+                keyword: keyarr.join(',') || '',
+                company: _this.codesArr.company
             }
             // 设置单选、多选选择参数
             Object.keys(_this.selectInfo).forEach(function (v) {

二進制
src/web/staticres/images/phonelogin/icon-biyan.png


+ 1 - 1
src/web/staticres/js/ent-search-index-pc.js

@@ -322,7 +322,7 @@ var vm = new Vue({
             type: 'company',
             el: '.search-header-top .input-container',
             submitSelector: '.search-button',
-            change: (val) => {
+            change: function(val) {
               this.searchContent = val
             }
           })

+ 1 - 2
src/web/staticres/js/index/index.js

@@ -81,8 +81,7 @@ function rgbToHsl(rgb) {
   }
   s = Math.round(s * 100 * 1.5)+ '%'; //转换成百分比的形式
   l = Math.round(l * 100 * 0.8)+ '%';
-  const str = "hsl(" + h + "," + s + "," + l + ")";
-  console.log('str', str)
+  var str = "hsl(" + h + "," + s + "," + l + ")";
   return str
 }
 

+ 205 - 53
src/web/staticres/js/login.js

@@ -441,7 +441,7 @@ function checkMenuForEnt () {
 }
 var msgTimer = null
 function toReaded(ids, type, url) {
-    const _this = this
+    var _this = this
     $.ajax({
         type: 'POST',
         url:'/jymessageCenter/markRead',
@@ -489,7 +489,10 @@ var logic = function(data,num){
 		$("#bidcommunity").modal("hide")
 		clearInterval(loginfg);
 		loginflag = true;
-		processpage(data.shareid,num);
+    if(!data.phone && data.openid) {
+      window.location.href = '/swordfish/frontPage/userMerge/sess/bind'
+    }
+		processpage(data,num);
 		//登录成功,停止轮询
 		LoginPolling.stop();
 		//登录成功,停止心跳监测
@@ -529,7 +532,7 @@ var logic = function(data,num){
 }
 
 //登录后处理页面逻辑
-var processpage = function(shareid,num){
+var processpage = function(item,num){
   var backToUrl = getParam('backTo')
   if (backToUrl) {
     return location.replace(decodeURIComponent(backToUrl))
@@ -777,7 +780,7 @@ var afterSignoutClearCookit = function(){
 }
 
 var afterLoginSetCookit = function(name,value,time){
-	let expires = new Date(time)
+	var expires = new Date(time)
 	try{
 		$.cookie(name,value,{expires:expires.toGMTString(),path:"/",domain:document.domain.replace(/[^.]+/,"")});
 	}catch(e){
@@ -877,6 +880,7 @@ $(function(){
 	var Direct = {
         verify: {},
         forge: {},
+        loginInfo: {},
         instance: {},
         ajaxSms: function (e, type) {
             var _this = this;
@@ -1006,6 +1010,27 @@ $(function(){
               }
             });
         },
+        // 设置密码
+        ajaxSetPassword: function (e, arr) {
+          var payload = {
+            password: arr[0].value
+          };
+          $.ajax({
+            url: "/publicapply/password/update",
+            type: "POST",
+            contentType: "application/json",
+            data: JSON.stringify(payload),
+            success: function(r) {
+              e.setAttribute('data-loading', 'false');
+              if (r) {
+                // 密码保存成功,走登录成功步骤
+                logic(Direct.loginInfo.userInfo, mynum);
+              } else {
+                arr[1].showError('密码保存失败');
+              }
+            }
+          });
+        },
         // 手机号+密码登录
         ajaxLoginPass: function (e, arr) {
             var payload = {
@@ -1049,6 +1074,7 @@ $(function(){
                                     location.href = '/'
                                   })
                                 } else {
+                                  checkNeedGoNewUserSettingPage()
                                   history.back()
                                 }
                               }
@@ -1058,6 +1084,7 @@ $(function(){
                               location.href =  '/swordfish/frontPage/userMerge/sess/merge?token=' + r.data.mergeToken
                               return
                             } else {
+                              checkNeedGoNewUserSettingPage()
                               $("#bidLogin").modal("hide")
                               sessionStorage.setItem('bind-phone', arr[0].value.trim())
                               typeof window.callBindPhoneSuccess === 'function' && window.callBindPhoneSuccess(true)
@@ -1070,19 +1097,19 @@ $(function(){
                     }
                 });
             } else {
-            	    var source =	 getParam("source");//百度SEM
-				if (source!=null){
-					var pathname = window.location.pathname;
-					if (pathname=="/front/structed/pc_index.html"){//结构化数据
-						source+="_structed";
-					}else if (pathname=="/bid/pc/page/bidfile_landpage"){//招标文件解读
-						source+="_bidfile";
-					}else if (pathname=="/big/page/index"){//大会员
-						source+="_member";
-					}
-				}else{
-					source="";
-				}
+                var source =	 getParam("source");//百度SEM
+                if (source!=null){
+                  var pathname = window.location.pathname;
+                  if (pathname=="/front/structed/pc_index.html"){//结构化数据
+                    source+="_structed";
+                  }else if (pathname=="/bid/pc/page/bidfile_landpage"){//招标文件解读
+                    source+="_bidfile";
+                  }else if (pathname=="/big/page/index"){//大会员
+                    source+="_member";
+                  }
+                }else{
+                  source="";
+                }
                 var payload = {
                   reqType:"identCodeLogin",
                   identCode:arr[2].value,
@@ -1093,13 +1120,32 @@ $(function(){
                 $.post("/phone/login",payload,function(r){
                   e.setAttribute('data-loading', 'false')
                   if(r.status==1){
+                    if (r.userInfo.isNewUser) {
+                      trackClick('注册行为-打开设置密码弹窗')
+                      Direct.showSetPassModule(true)
+                      Direct.loginInfo = r
+                    } else {
                       logic(r.userInfo,mynum);
+                    }
                   }else if(r.status==-1){
                       arr[2].showError('短信验证码输入错误')
+                  }else if(r.status==-4){
+                      arr[2].showError('系统错误,请重试')
                   }
                 });
             }
         },
+        // 新用户设置密码
+        showSetPassModule: function (type) {
+          var otherArr = ['.login-dig-footer-box .wx-logo-box', '.login-dig-footer-box .login-dig-text-split' ,'.login-dig-tabbar-navbar', '.login-dig-tabbar-content', '.login-dig-tabbar-content.is-active', '.pass-bottom', '.login-dig-wx-qrcode-box', '.login-dig-top-back-box', '.code-bottom']
+          var setPassArr = ['.login-dig-tabbar-content.set-password', '.login-dig-tabbar-navbar.set-pass-module', '.set-pass-bottom']
+          for(var i=0;i<otherArr.length;i++){
+            document.querySelector(otherArr[i]).style.display = (type ? 'none' : '')
+          }
+          for(var i=0;i<setPassArr.length;i++){
+            document.querySelector(setPassArr[i]).style.display = (type ? 'block' : 'none')
+          }
+        },
         ajaxRegister: function (e, arr) {
           var source =	 getParam("source");//百度SEM
           if (source!=null){
@@ -1205,6 +1251,9 @@ $(function(){
 		if($("#bidLogin").attr("data-rec")){
       $("#bidLogin").removeAttr("data-rec");
 		}
+    if(Direct.loginInfo.userInfo.result === 'ok') {
+      location.reload()
+    }
 	});
     function startTimeDown (type) {
         var nowCount = 60
@@ -1261,9 +1310,9 @@ $(function(){
                 nowQ = 'bind-phone'
                 // getNewVerify()
             }
-            if (e.getAttribute('data-name') === 'register_get_sms') {
-              nowQ = 'register'
-              trackClick('注册行为-发送验证码')
+            if (e.getAttribute('data-name') === 'verify_get_sms' && !isBindPage) {
+              nowQ = 'verify'
+              trackClick('注册行为-验证码登录/注册-获取验证码')
             }
             if(isBindPage) {
               trackClick('绑定-发送验证码')
@@ -1465,6 +1514,15 @@ $(function(){
             if (e.target.classList.contains('is-active')) {
                 return
             }
+            if(e.target.innerText === '密码登录') {
+              $('.code-bottom').hide()
+              $('.pass-bottom').show()
+              $('.line-box').addClass('pass-line-box')
+            } else {
+              $('.pass-bottom').hide()
+              $('.code-bottom').show()
+              $('.line-box').removeClass('pass-line-box')
+            }
             var SelectName = e.target.getAttribute('name')
             document.querySelector('.login-dig-tabbar-navbar span.is-active').classList.toggle('is-active')
             e.target.classList.toggle('is-active')
@@ -1511,6 +1569,8 @@ $(function(){
                 e.setAttribute('data-loading', 'true')
                 if(isBindPage){
                   trackClick('绑定-立即绑定')
+                } else {
+                  trackClick('注册行为-登录/注册')
                 }
                 Direct.ajaxLoginSms(e, verifySubmit.arr)
             },
@@ -1536,7 +1596,11 @@ $(function(){
                 if (type) {
                     Ele.classList.remove('is-stop')
                 } else {
-                    Ele.classList.add('is-stop')
+                    if(isBindPage) {
+                      Ele.classList.remove('is-stop')
+                    } else {
+                      Ele.classList.add('is-stop')
+                    }
                 }
             }
         }
@@ -1594,11 +1658,11 @@ $(function(){
             check: function () {
                 var submitEle = document.querySelector(this.el)
                 var checkStauts = false
-				for(var i=0;i<this.arr.length;i++){
-					if (!this.arr[i].next) {
-                        checkStauts = true
-                    }
-				}
+                for(var i=0;i<this.arr.length;i++){
+                  if (!this.arr[i].next) {
+                    checkStauts = true
+                  }
+				        }
                 if (checkStauts) {
                     submitEle.setAttribute('disabled', checkStauts)
                 } else {
@@ -1624,6 +1688,75 @@ $(function(){
         })
         passSubmit.init([passPhone, passPass])
         Direct.instance.password = passSubmit
+
+        // 设置密码
+        var setPassSubmit = {
+          el: 'button[name="set_pass_submit"]',
+          init: function (arr) {
+            this.arr = arr
+            this.check()
+            var submitEle = document.querySelector(this.el)
+            submitEle.addEventListener('click', this.submit)
+          },
+          submit: function (e) {
+            var e = e.target
+            if (e.getAttribute('data-loading') === 'true') return
+            trackClick('注册行为-设置密码-确定')
+            Direct.ajaxSetPassword(e, setPassSubmit.arr)
+            // e.setAttribute('data-loading', 'true')
+            // Direct.ajaxLoginPass(e, passSubmit.arr)
+          },
+          check: function () {
+            var submitEle = document.querySelector(this.el)
+            var checkStauts = false
+            for(var i=0;i<this.arr.length;i++){
+              if (!this.arr[i].next) {
+                checkStauts = true
+              }
+            }
+            if (checkStauts) {
+                submitEle.setAttribute('disabled', checkStauts)
+            } else {
+              if (this.arr[0].value !== this.arr[1].value) {
+                  this.arr[1].showError('两次密码输入不一致')
+              } else {
+                  submitEle.removeAttribute('disabled')
+              }
+            }
+          }
+        }
+
+        // 暂不设置密码,走登录成功步骤
+        var setPassCancel = {
+          el: 'button[name="set_pass_cancel"]',
+          init: function () {
+            var submitEle = document.querySelector(this.el)
+            submitEle.addEventListener('click', this.submit)
+          },
+          submit: function (e) {
+            trackClick('注册行为-设置密码-暂不订阅')
+            logic(Direct.loginInfo.userInfo,mynum);
+          },
+        }
+
+        var setInitPass = createFormStauts({
+          el: '.login-dig-input-box input[name="init_pass"]',
+          rule: ruleForPass,
+          event: ['input', 'blur'],
+          upStatus: function () {
+            setPassSubmit.check()
+          }
+        })
+        var setCheckPass = createFormStauts({
+          el: '.login-dig-input-box input[name="check_pass"]',
+          rule: ruleForPass,
+          event: ['input', 'blur'],
+          upStatus: function () {
+            setPassSubmit.check()
+          }
+        })
+        setPassSubmit.init([setInitPass, setCheckPass])
+        setPassCancel.init()
     }
     function initForgetDirect () {
         // 判断是否需要初始化
@@ -1906,32 +2039,40 @@ function openLoginDig(type, redirectUrl) {
 	    }
 	}
   $("#bidLogin").modal("show");
-  if (type) {
-    window.needToWork = true
-    try {
-      var injectLogic = logic
-      logic = function (data, num) {
-        if (data.result === 'ok') {
-        	//判断是否需要设置cookie
-			if(data.cValue){
-				afterLoginSetCookit(data.cName,data.cValue,data.expires)
-			}
-          // 检查是否需要新窗口打开<新用户兴趣偏好设置页面>
-          checkNeedGoNewUserSettingPage()
-          // 需要登陆后重定向的页面
-          if(redirectUrl){
-            location.href = redirectUrl
-            return
-          }
-          if (needToWork) {
-            location.href = '/page_workDesktop/'
-            return
-          }
+  try {
+    var injectLogic = logic
+    logic = function (data, num) {
+      window.needToWork = Boolean(type)
+      if (data.result === 'ok') {
+        //判断是否需要设置cookie
+        if(data.cValue){
+          afterLoginSetCookit(data.cName,data.cValue,data.expires)
+        }
+        // 判断是否绑定手机号
+        if(!data.phone && data.openid) {
+          window.location.href = '/swordfish/frontPage/userMerge/sess/bind'
+          return
+        }
+        // 检查是否需要新窗口打开<新用户兴趣偏好设置页面>
+        checkNeedGoNewUserSettingPage()
+        if (redirectUrl === 'reload') {
+          return location.reload()
+        }
+        // 需要登陆后重定向的页面
+        if(redirectUrl){
+          location.href = redirectUrl
+          return
+        }
+        if (needToWork) {
+          location.href = '/page_workDesktop/'
+          return
         }
-        injectLogic(data, num)
       }
-    } catch (e) {}
-  }
+      injectLogic(data, num)
+    }
+  } catch (e) {}
+  // 埋点
+  trackClick('注册行为-登录或注册弹窗')
 }
 function openBindPhoneDig() {
     openLoginDigForWx(false);
@@ -1948,12 +2089,23 @@ function openBindPhoneDig() {
     }
     $("#bidLogin").modal("show");
 }
+// 密码切换显示/隐藏
+function switchPassShow (e, str) {
+  e.preventDefault()
+  const type = $(str).attr('type')
+  if(type === 'password') {
+    $(str).attr('type', 'text')
+  } else {
+    $(str).attr('type', 'password')
+  }
+}
 function closeLoginDig() {
   $("#bidLogin").modal("hide");
+  window.location.reload()
 }
 function openLoginDigForWx (type) {
-	var otherArr = ['.login-dig-footer-box .wx-logo-box', '.login-dig-footer-box .login-dig-text-split' ,'.login-dig-tabbar-navbar', '.login-dig-tabbar-content', '.login-dig-tabbar-content.is-active']
-	var wxArr = ['.login-dig-wx-qrcode-box', '.login-dig-top-back-box']
+	var otherArr = ['.login-dig-footer-box .wx-logo-box', '.login-dig-footer-box .login-dig-text-split' ,'.login-dig-tabbar-navbar', '.login-dig-tabbar-content', '.login-dig-tabbar-content.is-active', '.pass-bottom']
+	var wxArr = ['.login-dig-wx-qrcode-box', '.login-dig-top-back-box', '.code-bottom']
 	for(var i=0;i<otherArr.length;i++){
 		document.querySelector(otherArr[i]).style.display = (type ? 'none' : '')
 	}
@@ -1971,7 +2123,7 @@ function openLoginDigForReg (type) {
   $('.login-dig-reg').show()
   $('.login-dig-footer-box').hide()
   // 埋点
-  trackClick('注册行为-打开注册页面')
+  trackClick('注册行为-登录或注册弹窗')
 }
 
 function backLogin (type) {

文件差異過大導致無法顯示
+ 0 - 143
src/web/staticres/js/pc-collect-user-info.js


+ 4 - 4
src/web/staticres/js/pc-message-index.js

@@ -17,7 +17,7 @@ var vmMesg = new Vue({
   },
   methods: {
     getList: function() {
-      const _this = this
+      var _this = this
       $.ajax({
         type: 'POST',
         url: '/jymessageCenter/latestNews',
@@ -45,7 +45,7 @@ var vmMesg = new Vue({
       })
     },
     readed: function(ids, type, url) {
-      const _this = this
+      var _this = this
       $.ajax({
         type: 'POST',
         url:'/jymessageCenter/markRead',
@@ -72,7 +72,7 @@ var vmMesg = new Vue({
       }
     },
     checkCounts: function() {
-      const _this = this
+      var _this = this
       Notification.requestPermission(function(status) {
         console.info(status, '----------')
         if(status === 'granted'){
@@ -115,7 +115,7 @@ var vmMesg = new Vue({
       location.href = '/swordfish/frontPage/messageCenter/sess/index'
     },
     msgType: function(val) {
-      const obj = {
+      var obj = {
         '1': '活动优惠',
         '2': '服务通知',
         '3': '订阅消息',

+ 112 - 101
src/web/staticres/js/pur-search-index-pc.js

@@ -1,8 +1,8 @@
 function getRandomString (len) {
     let randomString = ''
     if (len) {
-      const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
-      const maxPos = $chars.length
+      var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
+      var maxPos = $chars.length
       for (let i = 0; i < len; i++) {
         randomString += $chars.charAt(Math.floor(Math.random() * maxPos))
       }
@@ -12,10 +12,10 @@ function getRandomString (len) {
     return randomString
 }
 // toast上限提示
-function toastFn (text, duration = 1000) {
-    // if (duration) {
-    //   duration = 1000
-    // }
+function toastFn (text, duration) {
+    if (!duration) {
+      duration = 1000
+    }
     var _html = ""
     _html+='<div class="custom-toast"><div class="mask" style="background-color: transparent;"></div><div class="toast-container">'
     _html+='<span>' + text + '</span></div></div>'
@@ -27,10 +27,10 @@ function toastFn (text, duration = 1000) {
 function formatKeywordsList (res) {
     // if (!res || !res.a_items) return
     // const data = res.a_items
-    const newArr = []
-    res.forEach((v) => {
+    var newArr = []
+    res.forEach(function(v) {
       if (v.a_key) {
-        v.a_key.forEach((s) => {
+        v.a_key.forEach(function(s) {
           newArr.push(s)
         })
       }
@@ -216,7 +216,7 @@ var vm = new Vue({
         this.initCollectEvent()
         this.initDOMEvents()
         ewmMoveHover()
-        this.$on('updatescope', (data) => {
+        this.$on('updatescope', function(data) {
             this.setData.keyList = data
         })
         /**
@@ -228,7 +228,7 @@ var vm = new Vue({
             type: 'buyer',
             el: '.search-header-top .input-container',
             submitSelector: '.search-button',
-            change: (val) => {
+            change: function(val) {
               this.searchContent = val
             }
           })
@@ -280,10 +280,10 @@ var vm = new Vue({
         otherFilterChange: function () {
           this.doSearch()
         },
-        updatescope(data) {
+        updatescope: function(data) {
             // console.log(data)
         },
-        initPageData () {
+        initPageData: function () {
           if (pageInfo.searchContent) {
               this.searchContent = pageInfo.searchContent
               console.info(this.searchContent)
@@ -333,7 +333,7 @@ var vm = new Vue({
                 }.bind(this)
             })
         }, 200),
-        goSearch(name) {
+        goSearch: function(name) {
             this.searchContent = name
             this.preSearch.hover = false
             this.listState.pageNum = 1
@@ -351,7 +351,7 @@ var vm = new Vue({
                 $("#bidLogin").modal("show");
             }
         },
-        yeFan() {
+        yeFan: function() {
           if (goTemplateData.inIframe) {
             window.$BRACE.methods.open({
               route: {
@@ -363,25 +363,25 @@ var vm = new Vue({
           }
         },
         // 整理数据列表
-        initIndustryMap () {
-            const industryListMap = []
+        initIndustryMap: function () {
+            var industryListMap = []
             // 全部
-            const all = JSON.parse(JSON.stringify(this.industryExp))
+            var all = JSON.parse(JSON.stringify(this.industryExp))
             all.selected = true
-            all.id = `lv0-${getRandomString(8).toLowerCase()}`
+            all.id = 'lv0-' + getRandomString(8).toLowerCase()
             industryListMap.push(all)
-            for (const key in this.industryListMapExp) {
-                const level1 = JSON.parse(JSON.stringify(this.industryExp))
+            for (var key in this.industryListMapExp) {
+                var level1 = JSON.parse(JSON.stringify(this.industryExp))
                 level1.name = key
                 level1.level = 1
-                level1.id = `lv1-${getRandomString(8).toLowerCase()}`
+                level1.id = 'lv1-' + getRandomString(8).toLowerCase()
 
-                const level2Arr = []
-                this.industryListMapExp[key].forEach(item => {
-                    const level2 = JSON.parse(JSON.stringify(this.industryExp))
+                var level2Arr = []
+                this.industryListMapExp[key].forEach(function(item) {
+                    var level2 = JSON.parse(JSON.stringify(this.industryExp))
                     level2.name = item
                     level2.level = 2
-                    level2.id = `lv2-${getRandomString(8).toLowerCase()}`
+                    level2.id = 'lv2-' + getRandomString(8).toLowerCase()
                     level2Arr.push(level2)
                 })
 
@@ -390,21 +390,23 @@ var vm = new Vue({
             }
 
             this.industryListMap = industryListMap
-            const tempArr = []
-            this.industryListMap.forEach(v => {
-                const tempNode = v
+            var tempArr = []
+            this.industryListMap.forEach(function(v) {
+                var tempNode = v
                 tempNode.zindex = 1
                 tempArr.push(tempNode)
-                tempNode?.children.forEach(s => {
-                    const tempS = s
-                    tempS.zindex = 2
-                    tempArr.push(tempS)
-                })
+                if (tempNode.children) {
+                  tempNode.children.forEach(function(s) {
+                      var tempS = s
+                      tempS.zindex = 2
+                      tempArr.push(tempS)
+                  })
+                }
             })
             this.getIndustryListMap = tempArr
         },
         // 按钮点击事件
-        changeIndustryState (item) {
+        changeIndustryState: function (item) {
           // 循环所有数据,判断并改变状态
           switch (item.level) {
             case 0: {
@@ -416,7 +418,7 @@ var vm = new Vue({
 
               this.industryListMap[0].selected = false
               // 二级子按钮状态跟随一级按钮
-              item.children.forEach(level2 => {
+              item.children.forEach(function(level2) {
                 level2.selected = item.selected
               })
               break
@@ -425,10 +427,10 @@ var vm = new Vue({
               item.selected = !item.selected
 
               // 找到当前点击的父级元素
-              this.industryListMap.forEach(level1 => {
-                const selectedStateArr = []
+              this.industryListMap.forEach(function(level1) {
+                var selectedStateArr = []
                 if (item.level !== 0) {
-                  level1.children.forEach(level2 => {
+                  level1.children.forEach(function(level2) {
                     selectedStateArr.push(level2.selected)
                   })
                   if (selectedStateArr.indexOf(false) === -1) {
@@ -448,7 +450,7 @@ var vm = new Vue({
           }
 
           if (item.level !== 0) {
-            const allSelected = this.checkAllSelectedState()
+            var allSelected = this.checkAllSelectedState()
             if (allSelected.allSelected || allSelected.allNotSelected) {
               this.setIndustryState()
             }
@@ -461,17 +463,17 @@ var vm = new Vue({
           this.doSearch()
         },
         // 检查是否全部选中了/全部不选中
-        checkAllSelectedState () {
+        checkAllSelectedState: function () {
           // 一级标签选中状态(如果一级标签全部被选中,则说明,全部按钮被选中)
-          const level1StateArr = []
+          var level1StateArr = []
           // 所有标签选中状态
-          const allSelectedArr = []
+          var allSelectedArr = []
 
-          this.industryListMap.forEach(level1 => {
+          this.industryListMap.forEach(function(level1) {
             if (level1.level !== 0) {
               level1StateArr.push(level1.selected)
               allSelectedArr.push(level1.selected)
-              level1.children.forEach(level2 => {
+              level1.children.forEach(function(level2) {
                 allSelectedArr.push(level2.selected)
               })
             }
@@ -488,13 +490,13 @@ var vm = new Vue({
          * 初始化页面选中状态
          * @param { Array | undefined } data 要恢复的数据
          */
-        setIndustryState (data) {
+        setIndustryState: function (data) {
             // 设置全部按钮
             if (!data || Object.keys(data).length === 0) {
             // 其他全部设置不选中,全部按钮设置选中
-            this.industryListMap.forEach(item => {
+            this.industryListMap.forEach(function(item) {
                 item.selected = false
-                item.children.forEach(iitem => {
+                item.children.forEach(function(iitem) {
                 iitem.selected = false
                 })
             })
@@ -504,7 +506,7 @@ var vm = new Vue({
             this.setIndustryState()
             this.industryListMap[0].selected = false
 
-            this.industryListMap.forEach(item => {
+            this.industryListMap.forEach(function(item) {
                 if (data[item.name]) {
                 // 如果恢复数组长度等于页面二级标签长度,则一级标签点亮
                 if (data[item.name].length === item.children.length) {
@@ -520,12 +522,12 @@ var vm = new Vue({
             }
         },
         // 获取选中的数据
-        getSelected () {
-            const map = {}
-            this.industryListMap.forEach(item => {
-                const mapArr = []
+        getSelected: function () {
+            var map = {}
+            this.industryListMap.forEach(function(item) {
+                var mapArr = []
                 if (item.level !== 0) {
-                    item.children.forEach(iitem => {
+                    item.children.forEach(function(iitem) {
                     if (iitem.selected) {
                         mapArr.push(iitem.name)
                     }
@@ -535,18 +537,18 @@ var vm = new Vue({
                     map[item.name] = mapArr
                 }
             })
-            const tempArr = []
-            Object.keys(map).forEach(v => {
-                const tempItem = map[v]
+            var tempArr = []
+            Object.keys(map).forEach(function(v) {
+                var tempItem = map[v]
                 if (Array.isArray(tempItem)) {
-                tempItem.forEach(vv => {
-                    tempArr.push(`${v}_${vv}`)
+                tempItem.forEach(function(vv) {
+                    tempArr.push(v + '_' + vv)
                 })
                 }
             })
             return tempArr
         },
-        dataChange(val) {
+        dataChange: function(val) {
           this.tempData = val
           this.doSearch()
         },
@@ -669,7 +671,7 @@ var vm = new Vue({
 	          document.body.scrollTop = oTop
             this.getList()
         },
-        goTitle(name) {
+        goTitle: function(name) {
             if (this.isNewEntNiche) {
               window.open('/entpc/unit_portrayal/' + name)
             } else {
@@ -677,14 +679,14 @@ var vm = new Vue({
             }
         },
         // 全选
-        allChange() {
-            const str1 = $('.check-all').prop('checked')
-            const str2 = $('.custom-checkbox:not(".check-all")')
-            const arr = $('.custom-checkbox:not(".check-all"):checked')
+        allChange: function() {
+            var str1 = $('.check-all').prop('checked')
+            var str2 = $('.custom-checkbox:not(".check-all")')
+            var arr = $('.custom-checkbox:not(".check-all"):checked')
             let arrs1 = [], arrs2 = [], arrs3= []
             if (str1) {
                 str2.prop('checked', true)
-                this.listState.list.forEach(v => {
+                this.listState.list.forEach(function(v) {
                     arrs1.push(v.Buyer)
                     arrs2.push(v.Buyerclass)
                     arrs3.push(v.customerId)
@@ -692,7 +694,7 @@ var vm = new Vue({
                 selectDataIds = this.unique(selectDataIds.concat(arrs1))
             } else {
               $('.custom-checkbox:not(".check-all"):checked').each(function(){
-                const dataName = $(this).attr('dataname')
+                var dataName = $(this).attr('dataname')
                 selectDataIds.forEach(function(item) {
                   if(dataName == item) {
                     selectDataIds.remove(item)
@@ -707,7 +709,7 @@ var vm = new Vue({
             this.selectId = arrs3
         },
         // 单选
-        singleChange () {
+        singleChange: function () {
             let arr1 = [], arr2 = [], arr3 = []
             $('.custom-checkbox:not(".check-all"):checked').each(function(){
                 if ($(this).attr('dataname')) {
@@ -751,13 +753,16 @@ var vm = new Vue({
             }
         },
         // 数组去重
-        unique(arr) {
-          const res = new Map();
-          return arr.filter((arr) => !res.has(arr) && res.set(arr, 1));
+        unique: function(arr) {
+          var res = new Map()
+          // return arr.filter((arr) => !res.has(arr) && res.set(arr, 1));
+          return arr.filter(function (arr) {
+            return !res.has(arr) && res.set(arr, 1)
+          })
         },
         // 是否关注企业
-        attentionCheck(arrs, item) {
-            const _this = this
+        attentionCheck: function(arrs, item) {
+            var _this = this
             $.ajax({
                 url: '/entnicheNew/customer/check',
                 method: 'POST',
@@ -767,7 +772,7 @@ var vm = new Vue({
                     if (res.data.names) {
                         this.attentionName = res.data.names
                     }
-                    arrs.forEach(v => {
+                    arrs.forEach(function(v) {
                         if (res.data.names.indexOf(v.Buyer) > -1) {
                             v.isFollowed = true
                         } else {
@@ -779,7 +784,7 @@ var vm = new Vue({
             })
         },
         // 是否认领企业
-        claimcheck(arrs, item) {
+        claimcheck: function(arrs, item) {
             $.ajax({
                 url: '/entnicheNew/customer/claimcheck',
                 method: 'POST',
@@ -788,13 +793,13 @@ var vm = new Vue({
                 success: function (res) {
                     if (res.data.names) {
                       this.claimcheckName = []
-                      res.data.names.forEach(s => {
+                      res.data.names.forEach(function(s) {
                         this.claimcheckName.push(s.split(',')[0])
                       })
                     }
-                    arrs.forEach(v => {
+                    arrs.forEach(function(v) {
                       let renName = res.data.names.join(',')
-                      res.data.names.forEach(s => {
+                      res.data.names.forEach(function(s) {
                         if (renName.indexOf(v.Buyer) > -1) {
                           v.claim1 = true
                           if (s.split(',')[0] == v.Buyer) {
@@ -809,13 +814,13 @@ var vm = new Vue({
                     this.listState.list = arrs
                     this.listState.loading = false
                     this.$nextTick(function() {
-                      let checkNum = 0
-                      const inputs = $('.custom-checkbox:not(".check-all")')
+                      var checkNum = 0
+                      var inputs = $('.custom-checkbox:not(".check-all")')
                       $('.check-all').prop('checked', false)
                       $('.custom-checkbox:not(".check-all")').each(function(){
                         $(this).prop('checked', false)
-                        const that = this
-                        const dataName = $(this).attr('dataname')
+                        var that = this
+                        var dataName = $(this).attr('dataname')
                         selectDataIds.forEach(function(item) {
                           if(dataName == item) {
                             checkNum++
@@ -833,7 +838,7 @@ var vm = new Vue({
             })
         },
         // 关注、认领接口
-        attention(item, type, str, per) {
+        attention: function(item, type, str, per) {
             let obj = {}, _this = this
             if (type == 0) {
                 // 商机管理的关注
@@ -911,7 +916,7 @@ var vm = new Vue({
                 }.bind(this)
             })
         },
-        arrDefault(array1, array2) {//比较的两个数组
+        arrDefault: function(array1, array2) {//比较的两个数组
             var tempArray1 = []
             var tempArray2 = []
             for(var i=0;i<array2.length;i++){
@@ -926,7 +931,7 @@ var vm = new Vue({
             }
             return tempArray2
         },
-        allGuanren (type) {
+        allGuanren: function (type) {
             if (this.selectName.length == 0) {
                 toastFn('至少选择一项', 1500)
             } else {
@@ -970,7 +975,7 @@ var vm = new Vue({
                 }
             }
         },
-        guanAndren(item, type, index) {
+        guanAndren: function(item, type, index) {
             if (type == 1) {
                 if (!item.isReceived) {
                     // 根据列表高度计算top值
@@ -996,7 +1001,7 @@ var vm = new Vue({
                 this.attention(item, type, '')
             }
         },
-        caiIndus(val, index) {
+        caiIndus: function(val, index) {
             let arrIndex = this.caiIndex.indexOf(index);
             if(arrIndex>-1){
                 this.caiIndex.splice(arrIndex,1);
@@ -1018,13 +1023,13 @@ var vm = new Vue({
             // this.searchContent = ''
             this.doSearch()
         },
-        quanBu() {
+        quanBu: function() {
             this.caiIndex = [];
             this.qutive = true;
             this.indusList = [];
             this.doSearch()
         },
-        caiIndus1(val, index) {
+        caiIndus1: function(val, index) {
             let arrIndex = this.caiIndex1.indexOf(index);
             if(arrIndex>-1){
                 this.caiIndex1.splice(arrIndex,1);
@@ -1046,16 +1051,16 @@ var vm = new Vue({
             // this.searchContent = ''
             this.doSearch()
         },
-        quanBu1() {
+        quanBu1: function() {
             this.caiIndex1 = [];
             this.qutive1 = true;
             this.indusList1 = [];
             this.doSearch()
         },
-        cusMore() {
+        cusMore: function() {
             console.log('1212')
         },
-        qyCustmer() {
+        qyCustmer: function() {
             $.ajax({
                 url: '/entnicheNew/customer/history',
                 method: 'GET',
@@ -1066,12 +1071,12 @@ var vm = new Vue({
                 }.bind(this)
             })
         },
-        qyChange() {
+        qyChange: function() {
             // this.searchContent = ''
             this.doSearch()
         },
-        jobRange() {
-            const decide = window.localStorage.getItem('bus-key-group-SCOPE')
+        jobRange: function() {
+            var decide = window.localStorage.getItem('bus-key-group-SCOPE')
             if (decide) {
                 this.jobData = JSON.parse(decide)
             } else {
@@ -1080,8 +1085,8 @@ var vm = new Vue({
                     method: 'POST',
                     success: function (res) {
                         if ($.isArray(res.data.data) && res.error_code == 0) {
-                            res.data.data.forEach(v => {
-                                v.a_key.forEach(t => {
+                            res.data.data.forEach(function(v) {
+                                v.a_key.forEach(function(t) {
                                     this.jobData.push(t)
                                 })
                             })
@@ -1090,7 +1095,7 @@ var vm = new Vue({
                 })
             }
         },
-        keyChange(appendkey, key, notkey) {
+        keyChange: function(appendkey, key, notkey) {
             let str = String(appendkey.concat(key).concat(notkey)).replace(/,/g, ' ')
             return str
         },
@@ -1121,10 +1126,16 @@ var vm = new Vue({
             }
             this.filterShow = !this.filterShow
         },
-        moneyUnit (m, type = 'string', lv = 0) {
-            const mUnit = {
+        moneyUnit: function (m, type, lv) {
+            if (!type) {
+              type = 'string'
+            }
+            if (!lv) {
+              lv = 0
+            }
+            var mUnit = {
               levelArr: ['元', '万元', '亿元', '万亿元'],
-              test (num, type, lv) {
+              test: function (num, type, lv) {
                 if (num === 0) {
                   if (type === 'string') {
                     return '0元'

文件差異過大導致無法顯示
+ 2 - 2
src/web/staticres/js/selector/area-city-pc.js


+ 29 - 29
src/web/staticres/js/selector/keyword-tags.js

@@ -1,33 +1,33 @@
-var keywordTagsComponentTemplate = `
-  <div class="add-keyword-container">
-    <div class="add-keyword-tags">
-      <el-tag
-        :key="tag"
-        v-for="tag in list"
-        closable
-        :disable-transitions="false"
-        @close="handleClose(tag)">
-        {{tag}}
-      </el-tag>
-    </div>
-    <div v-if="list.length < maxListLength" style="margin-top:6px;">
-      <el-input
-        class="add-keyword-input"
-        type="text"
-        :placeholder="placeholder"
-        v-model.trim="addKeywordVal"
-        :maxlength="maxLength"
-        show-word-limit
-        :disabled="disabled"
-        @keyup.native="onKeyup"
-      ></el-input>
-      <span class="add-keyword-btn" :class="{'focus': addKeywordVal}" @click="addKeyTags">添加</span>
-    </div>
-    <slot name="radio"></slot>
-  </div>
-`
+// var keywordTagsComponentTemplate = `
+//   <div class="add-keyword-container">
+//     <div class="add-keyword-tags">
+//       <el-tag
+//         :key="tag"
+//         v-for="tag in list"
+//         closable
+//         :disable-transitions="false"
+//         @close="handleClose(tag)">
+//         {{tag}}
+//       </el-tag>
+//     </div>
+//     <div v-if="list.length < maxListLength" style="margin-top:6px;">
+//       <el-input
+//         class="add-keyword-input"
+//         type="text"
+//         :placeholder="placeholder"
+//         v-model.trim="addKeywordVal"
+//         :maxlength="maxLength"
+//         show-word-limit
+//         :disabled="disabled"
+//         @keyup.native="onKeyup"
+//       ></el-input>
+//       <span class="add-keyword-btn" :class="{'focus': addKeywordVal}" @click="addKeyTags">添加</span>
+//     </div>
+//     <slot name="radio"></slot>
+//   </div>
+// `
 
-// var keywordTagsComponentTemplate = "\n<div class=\"selector-content select-list-content\" ref=\"selectContainer\">\n    <span class=\"action-button show-more\" @click=\"showMore = !showMore\" v-if=\"needShowMore\">\n        <span class=\"action-text\">{{ showMore ? '\u6536\u8D77' : '\u66F4\u591A' }}</span>\n        <span class=\"el-icon-arrow-down\" :class=\"showMore ? 'rotate180' : ''\"></span>\n    </span>\n    <div class=\"select-group-container\" v-if=\"selectButtonType === 'checkbox'\">\n        <el-checkbox\n            v-for=\"(item, index) in selectList\"\n            :key=\"index\"\n            :name=\"item.value\"\n            ref=\"selectItem\"\n            v-model=\"item.selected\"\n            v-show=\"showAll(item)\"\n            @change=\"changeState(item)\"\n        >{{ item.label }}</el-checkbox>\n    </div>\n    <div class=\"select-group-container\" v-else-if=\"selectButtonType === 'button'\">\n        <div\n            v-for=\"(item, index) in selectList\"\n            :key=\"index\"\n            ref=\"selectItem\"\n            class=\"j-button-item bgc\"\n            v-show=\"showAll(item)\"\n            :class=\"{\n                active: item.selected,\n                all: item.label === selectItemExp.label\n            }\"\n            @click=\"changeState(item)\"\n        >{{ item.label }}</div>\n    </div>\n</div>\n";
+var keywordTagsComponentTemplate = "\n  <div class=\"add-keyword-container\">\n    <div class=\"add-keyword-tags\">\n      <el-tag\n        :key=\"tag\"\n        v-for=\"tag in list\"\n        closable\n        :disable-transitions=\"false\"\n        @close=\"handleClose(tag)\">\n        {{tag}}\n      </el-tag>\n    </div>\n    <div v-if=\"list.length < maxListLength\" style=\"margin-top:6px;\">\n      <el-input\n        class=\"add-keyword-input\"\n        type=\"text\"\n        :placeholder=\"placeholder\"\n        v-model.trim=\"addKeywordVal\"\n        :maxlength=\"maxLength\"\n        show-word-limit\n        :disabled=\"disabled\"\n        @keyup.native=\"onKeyup\"\n      ></el-input>\n      <span class=\"add-keyword-btn\" :class=\"{'focus': addKeywordVal}\" @click=\"addKeyTags\">\u6DFB\u52A0</span>\n    </div>\n    <slot name=\"radio\"></slot>\n  </div>\n";
 
 var keywordTagsComponent = {
     name: 'keyword-tags-pc',

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

@@ -1,10 +1,10 @@
 // var noDataComponentTemplate = `
 // <div class="no-data">
 //     <el-image src="/images/pc_12.png"></el-image>
-//     <div class="tip-text"><p>{{ tipText }}</p></div>
+//     <div class="tip-text"><p>{{ tipText }}</p><slot></slot></div>
 // </div>
 // `
-var noDataComponentTemplate = '<div class="no-data"><el-image :src="images"></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><slot></slot></div></div>'
 var noDataComponent = {
     name: 'no-data-pc',
     template: noDataComponentTemplate,

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

@@ -1767,7 +1767,7 @@ var InBIInjectHooks = {
     })
   },
   // 添加标讯信息
-  setInfoId (ids) {
+  setInfoId: function (ids) {
     $.ajax({
       url: '/jyapi/biService/addProject',
       type: 'POST',
@@ -1786,7 +1786,7 @@ var InBIInjectHooks = {
     })
   },
   // 刷新视图
-  upDateView () {
+  upDateView: function () {
     var _this = this
     $(".liLuceneList").each(function () {
       var nowId = $(this).find('.custom-checkbox').attr('dataid')
@@ -1797,20 +1797,20 @@ var InBIInjectHooks = {
       $(this).find('.custom-checkbox').prop('disabled', hasNowId)
     })
   },
-  getCheckIds () {
+  getCheckIds: function () {
     return selectDataIds || []
   },
-  checkInBI () {
+  checkInBI: function () {
     var inInjectBI = getParam('report') === 'bi' || (location.href.indexOf('/jylab/bi/index') !== -1)
     return inInjectBI
   },
-  check () {
+  check: function () {
     if (this.checkInBI()) {
       // 获取数据
       this.getInfoIds()
     }
   },
-  inject () {
+  inject: function () {
     if (this.checkInBI()) {
       $("body").addClass('in-iframe in-bi')
 

+ 1 - 1
src/web/staticres/public-pc/css/header-nav.css

@@ -256,7 +256,7 @@
 }
 #public-nav[data-theme] .btn_box .nav-badge-box:hover {
   background-color: #2ABED1!important;
-  color: #ffff!important;
+  color: #fff!important;
   border: 1px solid #2ABED1 !important;
 }
 #public-nav {

+ 10 - 3
src/web/staticres/public-pc/css/pc-bottom.css

@@ -752,9 +752,16 @@
   display: none!important;
 }
 .jy_classify_r{
-  position: relative;
+  /* position: relative; */
+  display: inline-block;
+  padding-left: 64px;
+  padding-right: 20px;
+  border-left: 1px solid rgba(255, 255, 255, 0.12);
+}
+.jy_classify_r_box{
+  display: inline-block;
 }
-.jy_classify_r::after{
+/* .jy_classify_r::after{
   position: absolute;
   content: '';
   top: 0;
@@ -764,7 +771,7 @@
   background: rgba(255, 255, 255, 0.12);
   z-index: 9;
 
-}
+} */
 
 .right-side-box {
   display: none;

+ 12 - 5
src/web/staticres/public-pc/js/article-content.js

@@ -952,11 +952,15 @@ $(function(){
       if(pckorigin==undefined){
         pckorigin=packageCon[n].type+packageCon[n].origin
       }
-      // var pckbidamount = packageCon[n].bidamount;  //18年开发的时候 预算金额用的中标金额字段bidamount,原因已不可察;23年调整 改为预算字段budget
-      var pckbidamount = packageCon[n].budget;
+      var pckbidamount = packageCon[n].bidamount;
       if(pckbidamount==undefined){
         pckbidamount=""
       }
+
+      var pckbudget = packageCon[n].budget;
+      if(pckbudget==undefined){
+        pckbudget=""
+      }
       pkchtml+='<div class="baseInfo">分包</div>'
         +'<div class="baseTable"><table>'
         +'<tr id="left-three-gray">'
@@ -969,7 +973,7 @@ $(function(){
           +'</td>'
         pkchtml+='<td class="tab-type piddingfour">项目预算(元)</td>'
         pkchtml+='<td class="tab-cont">'
-          +'<div class="cont-cont">'+pckbidamount+'</div>'
+          +'<div class="cont-cont">'+pckbudget+'</div>'
           +'<div class="cont-recy" onclick="recoveryerr(this,\''+n+'-bidamount\',\'\')">纠错</div>'
           +'<div style="display:none;"></div>'
           +'</td>'
@@ -977,6 +981,7 @@ $(function(){
       }else{
         var winnername = "";
         var abountname = "";
+        var pckPrice = pckbidamount;
         pkchtml+='<td class="cd-type">分包/标段</td>'
         if(goTemplateData.params.obj.subtype=="单一"){
           pkchtml+='<td class="cd-type">拟定单一来源采购供应商</td>'
@@ -988,6 +993,7 @@ $(function(){
         if(goTemplateData.params.obj.subtype=="单一"){
           pkchtml+='<td class="cd-type piddingfour">项目预算(元)</td>'
           abountname = "项目预算(元)";
+          pckPrice = pckbudget
         }else{
           pkchtml+='<td class="cd-type piddingfour">中标金额(元)</td>'
           abountname = "中标金额(元)";
@@ -1005,7 +1011,7 @@ $(function(){
           +'<div style="display:none;"></div>'
           +'</td>'
         pkchtml+='<td class="cd-cont amountpck">'
-          +'<div class="cont-cont">'+pckbidamount+'</div>'
+          +'<div class="cont-cont">'+pckPrice+'</div>'
           +'<div class="cont-recy" onclick="recoveryerr(this,\''+n+'-bidamount\',\''+abountname+'\')">纠错</div>'
           +'<div style="display:none;"></div>'
           +'</td>'
@@ -1842,7 +1848,8 @@ if(buyerclass && buyerclass !== '其它'){ // 标签栏插入标签
 var bidamount_class=goTemplateData.params.obj.bidamount
 var budget_class=goTemplateData.params.obj.budget
 var amount=getacount(bidamount_class,budget_class)
-var amountNoMask = amount !== '略'&& amount.indexOf("免费注册")===-1 && amount.indexOf('登录')===-1 && amount.indexOf('登陆')===-1 && amount.indexOf('解锁')===-1
+amountStr = amount + ''
+var amountNoMask = amountStr !== '略'&& amountStr.indexOf("免费注册")===-1 && amountStr.indexOf('登录')===-1 && amountStr.indexOf('登陆')===-1 && amountStr.indexOf('解锁')===-1
 if (amount && amountNoMask){ // 标签栏插入标签
   $(".com-tagsbar").append('<span class="com-amount"><a>'+conversionMoeny(amount)+'</a></span>');
 }

文件差異過大導致無法顯示
+ 0 - 0
src/web/staticres/public-pc/js/detection-min.js


部分文件因文件數量過多而無法顯示