Bläddra i källkod

Merge branch 'hotfix/v4.8.68.1' into dev/v4.8.68.1_rjj

# Conflicts:
#	src/go.mod
#	src/go.sum
#	src/jfw/modules/app/src/go.mod
#	src/jfw/modules/app/src/go.sum
renjiaojiao 1 år sedan
förälder
incheckning
cf83f19f67
91 ändrade filer med 4010 tillägg och 1373 borttagningar
  1. 1 4
      src/config.json
  2. 8 0
      src/export.json
  3. 1 1
      src/go.mod
  4. 3 4
      src/go.sum
  5. 2 0
      src/jfw/config/config.go
  6. 4 5
      src/jfw/filter/anonymousUser.go
  7. 85 27
      src/jfw/front/dataExport.go
  8. 6 5
      src/jfw/front/front.go
  9. 10 7
      src/jfw/front/login.go
  10. 11 5
      src/jfw/front/pcIndex.go
  11. 41 25
      src/jfw/front/shorturl.go
  12. 55 26
      src/jfw/front/supsearch.go
  13. 10 4
      src/jfw/front/swordfish.go
  14. 48 7
      src/jfw/front/wx_dataExport.go
  15. 48 7
      src/jfw/modules/app/src/app/front/dataExport.go
  16. 6 5
      src/jfw/modules/app/src/app/front/front.go
  17. 17 7
      src/jfw/modules/app/src/app/front/shorturl.go
  18. 2 1
      src/jfw/modules/app/src/app/front/swordfish.go
  19. 15 2
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  20. 5 0
      src/jfw/modules/app/src/app/tag/msg.go
  21. 1 4
      src/jfw/modules/app/src/config.json
  22. 8 0
      src/jfw/modules/app/src/export.json
  23. 1 2
      src/jfw/modules/app/src/go.sum
  24. 2 0
      src/jfw/modules/app/src/jfw/config/config.go
  25. 1 1
      src/jfw/modules/app/src/main.go
  26. 2 1
      src/jfw/modules/app/src/web/staticres/jyapp/dataExport/css/keyWord.css
  27. 10 2
      src/jfw/modules/app/src/web/staticres/jyapp/dataExport/js/additionWord.js
  28. 22 3
      src/jfw/modules/app/src/web/staticres/jyapp/dataExport/js/keyWord.js
  29. 53 2
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_appended.html
  30. 43 5
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html
  31. 53 3
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_exclude.html
  32. 404 313
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWord.html
  33. 110 7
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWordInput.html
  34. 304 239
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html
  35. 16 0
      src/jfw/modules/app/src/web/templates/frontRouter/bigmember/free/perfect_info.html
  36. 145 7
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  37. 4 4
      src/jfw/modules/bigmember/src/go.mod
  38. 8 8
      src/jfw/modules/bigmember/src/go.sum
  39. 2 1
      src/jfw/modules/bigmember/src/service/chatShare/obtainDetails.go
  40. 3 1
      src/jfw/modules/publicapply/src/ad/service/actions.go
  41. 1 1
      src/jfw/modules/publicapply/src/dataexport/service/action.go
  42. 4 0
      src/jfw/modules/publicapply/src/filter/sessionfilter.go
  43. 3 3
      src/jfw/modules/publicapply/src/go.mod
  44. 6 6
      src/jfw/modules/publicapply/src/go.sum
  45. 327 10
      src/jfw/modules/publicapply/src/userbase/entity/entity.go
  46. 17 1
      src/jfw/modules/publicapply/src/userbase/initjson/ub.go
  47. 39 0
      src/jfw/modules/publicapply/src/userbase/original_power.json
  48. 8 7
      src/jfw/modules/publicapply/src/userbase/service/action.go
  49. 182 4
      src/jfw/modules/publicapply/src/userbase/service/service.go
  50. 2 2
      src/jfw/modules/subscribepay/src/go.mod
  51. 4 4
      src/jfw/modules/subscribepay/src/go.sum
  52. 28 19
      src/jfw/modules/subscribepay/src/service/userAccountInfo.go
  53. 20 19
      src/jfw/qrmanager/qrmanager.go
  54. 1 0
      src/jfw/tag/a_init.go
  55. 6 3
      src/jfw/tag/msg.go
  56. 13 2
      src/jfw/timetask/timetask.go
  57. 25 6
      src/web/staticres/brand/css/brand.css
  58. 26 2
      src/web/staticres/common-module/pc-dialog/js/leave-info-dialog.js
  59. 62 0
      src/web/staticres/common-module/perfect-info/index.css
  60. 214 23
      src/web/staticres/common-module/perfect-info/js/perfect-info.js
  61. BIN
      src/web/staticres/common-module/vipsubscribe/image/info/vip_vs.png
  62. 6 2
      src/web/staticres/css/collect-user-info.css
  63. 1 1
      src/web/staticres/css/dev2/newBidSearch.css
  64. 6 2
      src/web/staticres/css/dev2/superSearch-inside.css
  65. 1 1
      src/web/staticres/css/subscribe_new.css
  66. 34 11
      src/web/staticres/dataExport/js/conditions_order.js
  67. 1 1
      src/web/staticres/frontRouter/pc/coupon/css/coupon-list.css
  68. 7 1
      src/web/staticres/js/biddingSearch.js
  69. 17 2
      src/web/staticres/js/guide-intro-dialog.js
  70. 1 1
      src/web/staticres/js/pc-collect-user-info.js
  71. 54 0
      src/web/staticres/pccss/pc-detail.css
  72. 160 27
      src/web/staticres/public-pc/js/article-content.js
  73. 1 1
      src/web/staticres/public-pc/js/baiducc.js
  74. 1 1
      src/web/staticres/site/common/css/slide-leave-info.css
  75. 1 1
      src/web/staticres/tags/js/no-login-detail.js
  76. 13 3
      src/web/staticres/wx_dataExport/js/additionWord.js
  77. 22 3
      src/web/staticres/wx_dataExport/js/keyWord.js
  78. 14 21
      src/web/templates/frontRouter/pc/brand/free/index.html
  79. 22 0
      src/web/templates/frontRouter/pc/serviceSystem/free/index.html
  80. 16 0
      src/web/templates/frontRouter/wx/bigmember/free/perfect_info.html
  81. 54 1
      src/web/templates/pc/biddetail_rec.html
  82. 121 8
      src/web/templates/pc/dataExport_sieve.html
  83. 11 1
      src/web/templates/pc/subscribe_new.html
  84. 11 42
      src/web/templates/pc/supsearch.html
  85. 54 3
      src/web/templates/weixin/dataExport/dataExport_appended.html
  86. 61 24
      src/web/templates/weixin/dataExport/dataExport_buyerEdit.html
  87. 46 3
      src/web/templates/weixin/dataExport/dataExport_exclude.html
  88. 400 325
      src/web/templates/weixin/dataExport/dataExport_keyWord.html
  89. 101 3
      src/web/templates/weixin/dataExport/dataExport_keyWordInput.html
  90. 67 22
      src/web/templates/weixin/dataExport/dataExport_winnerEdit.html
  91. 148 5
      src/web/templates/weixin/wxinfocontent_rec.html

+ 1 - 4
src/config.json

@@ -448,8 +448,5 @@
   "hotSubjectMatter": "A4纸,安全标志,安全挡板,安全隔离网,安全网,办公耗材,办公家具,办公设备,办公椅,办公用房,办公用品,办公桌,保护装置,保密柜,笔记本,笔记本电脑,变压器,仓库,插线板,充电桩,触控一体机,传感器,打印机,打印机耗材,打印设备,档案袋,档案盒,道路工程,地铁,电池,电缆,电流互感器,电梯,电线,订书机,订书针,对讲机,多功能一体机,多媒体设备,发电机,防冻液,防护栏杆,防护门,防护棚,防雷设施,防水工程,服务器,服装,复印机,复印纸,钢板,钢结构,钢筋,工作服,工作站,公路,公用工程,固体胶,光伏,光盘,航标灯,回形针,机房空调,机柜,机油,鸡蛋,计算机,记号笔,记事本,继电器,家具,监测仪,监视器,检测报告,检测仪器,剪刀,建筑工程,交换机,交通设施,胶带,胶水,脚手架,井架,警示灯,救护车,救生设施,刻录机,空调,空气调节器,垃圾袋,垃圾桶,冷却塔,冷水机组,楼层呼唤器,路灯,绿化工程,毛巾,美工刀,门禁,密集架,灭火器,抹布,墨盒,逆变器,牛皮纸,配电箱,喷壶,起重机,汽油,桥梁,热泵机组,热水器,弱电系统,扫描仪,摄像头,生活用房,食堂,市政工程,双面胶,水电站,水桶,宿舍,碎纸机,台式机,太阳能,碳粉,天然气,投影仪,图书,土石方,拖把,挖掘机,网线,文件袋,文件柜,无人机,无线电,硒鼓,洗洁精,洗手液,洗衣粉,显示屏,橡皮,消防立管,消防器材,消防水泵,消防箱,新能源,蓄电池,液晶显示器,医疗器械,医疗设备,移动工作站,移动硬盘,预埋钢板,园林工程,纸杯,中性笔,桩基,装修工程",
   "biddingRelatesLevel": 0,
   "ipInitAuthentication": "qwertyuiopzxcvbnm1234567890asdfghjkl",
-  "node": 1,
-  "keywordRestrict": 100,
-  "buyerRestrict": 100,
-  "winnerRestrict": 100
+  "node": 1
 }

+ 8 - 0
src/export.json

@@ -0,0 +1,8 @@
+{
+  "exportLimit": {
+    "wordsLimit": 100,
+    "countLimit": 300,
+    "buyerLimit": 100,
+    "winnerLimit": 100
+  }
+}

+ 1 - 1
src/go.mod

@@ -4,7 +4,7 @@ go 1.19
 
 require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
-	app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6
+	app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.1.3-0.20231124005722-02c6f093a121
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e

+ 3 - 4
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-20231026082242-8eb41c7bdda6 h1:uyaBp5Iuc/Il4+O2n92CyU9LPvHetFzQVC8iS9iLFOc=
-app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
+app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4 h1:qfqQL2GJV3N31DFMz6ZNHQk1NYJjk+Y7h1tZwmuzaaE=
+app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v1.0.7-0.20231114075116-499de5b076d3 h1:6Jv5DcoGYCsHVMwUjvlZubuTgY/vu4fWP5+rcXIKNj0=
@@ -16,8 +16,7 @@ app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8vi
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
 bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=

+ 2 - 0
src/jfw/config/config.go

@@ -21,6 +21,7 @@ var (
 	//seo.josn 配置文件中的版本号,可以动态更新
 	Seoconfig_Version    string
 	Sysconfig            map[string]interface{}
+	ExportConfig         map[string]interface{}
 	Seoconfig            map[string]interface{}
 	WeixinConfig         map[string]interface{}
 	PhoneFilterConfig    map[string]interface{}
@@ -49,6 +50,7 @@ type entnichePcConf struct {
 func init() {
 	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.yaml")
 	util.ReadConfig(&Sysconfig)
+	util.ReadConfig("./export.json", &ExportConfig)
 	IpInit()
 	//ClickhouseInit()
 	//log.Println("sysconfig:", Sysconfig)

+ 4 - 5
src/jfw/filter/anonymousUser.go

@@ -15,7 +15,6 @@ import (
 	"fmt"
 	"github.com/bwmarrin/snowflake"
 	"io/ioutil"
-	"jy/src/jfw/config"
 	"log"
 	"net/http"
 	"strings"
@@ -112,8 +111,8 @@ func (sk *AnonymousAuth) Do() {
 				Value:    util.InterfaceToStr(guestUID),
 				Path:     "/",
 				HttpOnly: true,
-				Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
-				Expires:  time.Now().AddDate(10, 0, 0),
+				//Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
+				Expires: time.Now().AddDate(10, 0, 0),
 			}
 			http.SetCookie(sk.W, cookie)
 			//未登录用户增加匿名身份信息
@@ -168,8 +167,8 @@ func (sk *AnonymousAuth) Do() {
 				Value:    trustedId,
 				Path:     "/",
 				HttpOnly: true,
-				Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
-				Expires:  time.Now().AddDate(10, 0, 0),
+				//Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
+				Expires: time.Now().AddDate(10, 0, 0),
 			}
 			http.SetCookie(sk.W, cookie)
 			public.BaseMysql.Update("anonymous_identity", map[string]interface{}{"guestUID": jyGuestUID.Value},

+ 85 - 27
src/jfw/front/dataExport.go

@@ -145,7 +145,6 @@ func (d *DataExport) SieveData() {
 		subTypeArr = strings.Split(subType, ",")
 		log.Println("subTypeArr", subTypeArr)
 	}
-	log.Println("keywordParam", keyword)
 	if keyword != "" {
 		err := json.Unmarshal([]byte(keyword), &keywordList)
 		if err != nil {
@@ -190,14 +189,55 @@ func (d *DataExport) SieveData() {
 			selectType = strings.Replace(strings.Join(detail, ","), "detail", "title,detail", -1)
 		}
 	}
-	if len(keywordList) > util.IntAllDef(config.Sysconfig["keywordRestrict"], 100) {
-		keywordList = keywordList[:util.IntAllDef(config.Sysconfig["keywordRestrict"], 100)]
+
+	exportLimit := util.StructToMapMore(config.ExportConfig["exportLimit"])
+	wordsLimit := util.IntAllDef(exportLimit["wordsLimit"], 100)
+	countLimit := util.IntAllDef(exportLimit["countLimit"], 300)
+	buyerLimit := util.IntAllDef(exportLimit["buyerLimit"], 100)
+	winnerLimit := util.IntAllDef(exportLimit["winnerLimit"], 100)
+
+	var count int
+	for k, kw := range keywordList {
+		if kw.Keyword != "" {
+			count++
+		}
+		count += len(kw.Appended)
+		count += len(kw.Exclude)
+		if len([]rune(kw.Keyword)) > wordsLimit {
+			keywordList[k].Keyword = util.SubString(kw.Keyword, 0, wordsLimit)
+		}
+
+		for k1, ad := range kw.Appended {
+			if len([]rune(ad)) > wordsLimit {
+				keywordList[k].Appended[k1] = util.SubString(ad, 0, wordsLimit)
+			}
+		}
+		for k1, el := range kw.Exclude {
+			if len([]rune(el)) > wordsLimit {
+				keywordList[k].Exclude[k1] = util.SubString(el, 0, wordsLimit)
+			}
+		}
 	}
-	if len(buyerArr) > util.IntAllDef(config.Sysconfig["buyerRestrict"], 100) {
-		buyerArr = buyerArr[:util.IntAllDef(config.Sysconfig["buyerRestrict"], 100)]
+	if count > countLimit {
+		d.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("关键词信息超过上限%d", countLimit),
+		})
+		return
 	}
-	if len(winnerArr) > util.IntAllDef(config.Sysconfig["winnerRestrict"], 100) {
-		winnerArr = winnerArr[:util.IntAllDef(config.Sysconfig["winnerRestrict"], 100)]
+	if len(buyerArr) > buyerLimit {
+		d.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("采购单位超过上限%d", buyerLimit),
+		})
+		return
+	}
+	if len(winnerArr) > winnerLimit {
+		d.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("中标单位超过上限%d", winnerLimit),
+		})
+		return
 	}
 	sieveCondition := map[string]interface{}{
 		"publishtime": publishtime,
@@ -217,11 +257,12 @@ func (d *DataExport) SieveData() {
 		"comeintime":  time.Now().Unix(),
 		"comeinfrom":  "exportPage",
 	}
-	if d.GetSession("s_m_openid") != nil {
-		sieveCondition["s_openid"] = d.GetSession("s_m_openid").(string)
+	sessVal := d.Session().GetMultiple()
+	if sessVal["s_m_openid"] != nil {
+		sieveCondition["s_openid"] = util.ObjToString(sessVal["s_m_openid"])
 	}
-	if d.GetSession("userId") != nil {
-		sieveCondition["s_userid"] = d.GetSession("userId").(string)
+	if sessVal["userId"] != nil {
+		sieveCondition["s_userid"] = util.ObjToString(sessVal["userId"])
 	}
 	_id := mongodb.Save(dataexport.ExportTable, sieveCondition)
 	_res := map[string]interface{}{
@@ -250,6 +291,7 @@ func (d *DataExport) SieveData() {
 				}
 			}
 		}
+
 		list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
 		/*if msgCount > 20000 {
 			msgCount = 20000
@@ -409,8 +451,9 @@ func (d *DataExport) GetOrderCode(order_code string) error {
 
 // ---------------------------生成订单预览----------------------------------
 func (d *DataExport) SuperSearchExport() error {
-	openid := util.ObjToString(d.GetSession("s_m_openid"))
-	userId := util.ObjToString(d.GetSession("userId"))
+	sessVal := d.Session().GetMultiple()
+	openid := util.ObjToString(sessVal["s_m_openid"])
+	userId := util.ObjToString(sessVal["userId"])
 	searchGroup, _ := d.GetInteger("searchGroup")
 	searchMode, _ := d.GetInteger("searchMode")
 	wordsMode, _ := d.GetInteger("wordsMode")
@@ -486,8 +529,9 @@ func (d *DataExport) SuperSearchExport() error {
 }
 func (d *DataExport) ToCreateOrderPage(_id string) error {
 	id := encrypt.SE.Decode4Hex(_id)
-	openid := util.ObjToString(d.GetSession("s_m_openid"))
-	userId := util.ObjToString(d.GetSession("userId"))
+	sessVal := d.Session().GetMultiple()
+	openid := util.ObjToString(sessVal["s_m_openid"])
+	userId := util.ObjToString(sessVal["userId"])
 	if userId == "" {
 		return errors.New("未登录")
 	}
@@ -514,10 +558,10 @@ func (d *DataExport) ToCreateOrderPage(_id string) error {
 		"id":         id,       //用户的筛选条件mongodb中的id string
 		"data_count": msgCount, //匹配到的数据总数 int
 	})
-	resEmail, _ := d.GetSession("DataExportVerifyEmail_val").(string)
-	resPhone, _ := d.GetSession("DataExportVerifyPhone_val").(string)
+	resEmail := util.ObjToString(sessVal["DataExportVerifyEmail_val"])
+	resPhone := util.ObjToString(sessVal["DataExportVerifyPhone_val"])
 	if resEmail != "" {
-		lastSendDEVerify := util.Int64All(d.GetSession("CreatEVerifyTime"))
+		lastSendDEVerify := util.Int64All(sessVal["CreatEVerifyTime"])
 		timeSpaceing := lastSendDEVerify - time.Now().Unix() + 60*5
 		d.T["email"] = resEmail
 		d.T["timeSpaceing"] = timeSpaceing
@@ -528,7 +572,7 @@ func (d *DataExport) ToCreateOrderPage(_id string) error {
 
 	if resEmail == "" || resPhone == "" {
 		lastEmail, lastPhone := "", ""
-		if lastPhone, lastEmail = dataexport.GetLastExportPhoneAndMail(public.Mysql, userId, util.ObjToString(d.GetSession("entUserId"))); lastPhone == "" || lastEmail == "" {
+		if lastPhone, lastEmail = dataexport.GetLastExportPhoneAndMail(public.Mysql, userId, util.ObjToString(sessVal["entUserId"])); lastPhone == "" || lastEmail == "" {
 			userData := jyutil.Compatible.Select(userId, `{"s_myemail":1,"s_phone":1,"s_m_phone":1}`)
 			if userData != nil && len(*userData) > 0 {
 				if lastEmail == "" {
@@ -558,7 +602,7 @@ func (d *DataExport) ToCreateOrderPage(_id string) error {
 	}
 	d.T["_id"] = _id
 	d.T["msgCount"] = msgCount
-	incurKey := fmt.Sprintf("PreviewData_%s_%d", d.GetSession("userId"), time.Now().Day())
+	incurKey := fmt.Sprintf("PreviewData_%s_%d", util.ObjToString(sessVal["userId"]), time.Now().Day())
 	d.T["PreviewData"] = util.IntAll(redis.Get("other", incurKey))
 	d.Render("/pc/createOrderPage.html", &d.T)
 	return nil
@@ -566,13 +610,14 @@ func (d *DataExport) ToCreateOrderPage(_id string) error {
 
 func (d *DataExport) PreviewData(source, _id string) error {
 	if !strings.Contains(source, "app") {
-		userId := util.ObjToString(d.GetSession("userId"))
+		sessVal := d.Session().GetMultiple()
+		userId := util.ObjToString(sessVal["userId"])
 		//	openid := util.ObjToString(d.GetSession("s_m_openid"))
 		if userId == "" {
 			return errors.New("未登录")
 		}
 		//数据预览每天限制50次
-		incurKey := fmt.Sprintf("PreviewData_%s_%d", d.GetSession("userId"), time.Now().Day())
+		incurKey := fmt.Sprintf("PreviewData_%s_%d", util.ObjToString(sessVal["userId"]), time.Now().Day())
 		times := util.IntAll(redis.Get("other", incurKey))
 		if times >= 50 {
 			return errors.New("超出预览次数")
@@ -632,6 +677,18 @@ func subUrl(list *[]map[string]interface{}, dataType string) *[]map[string]inter
 		if len(url) > 40 { //截取剑鱼标讯地址
 			v["url"] = url[:40] + "*****" + url[len(url)-10:]
 		}
+
+		re := regexp.MustCompile(`\/\/([^\/]+)`)
+		// 使用正则表达式查找匹配的结果
+		match := re.FindStringSubmatch(href)
+		if len(match) > 1 {
+			data := match[1]
+			ds := strings.Split(data, ".")
+			if len(ds) > 2 {
+				href = strings.Replace(href, ds[1], "****", 1)
+			}
+		}
+
 		if len(href) > 40 { //截取原文地址
 			v["href"] = href[:40] + "*****" + href[len(href)-10:]
 		} else if len(href) > 0 {
@@ -659,10 +716,11 @@ func (d *DataExport) SendMailVerify() {
 	email := d.GetString("email")
 	if isEmail(email) {
 		var email_used = true
-		if email != d.GetSession("DataExportVerifyEmail") {
+		sessVal := d.Session().GetMultiple()
+		if email != util.ObjToString(sessVal["DataExportVerifyEmail"]) {
 			d.DelSession("CreatEVerifyTime")
 			//			openid := util.ObjToString(d.GetSession("s_m_openid"))
-			userId := util.ObjToString(d.GetSession("userId"))
+			userId := util.ObjToString(sessVal["userId"])
 			emails := public.Mysql.FindOne("dataexport_order", map[string]interface{}{
 				"user_mail": email,
 				"user_id":   userId,
@@ -677,9 +735,9 @@ func (d *DataExport) SendMailVerify() {
 			}
 		}
 		if email_used {
-			lastSendDEVerify := util.Int64All(d.GetSession("CreatEVerifyTime"))
+			lastSendDEVerify := util.Int64All(sessVal["CreatEVerifyTime"])
 			timeSpaceing := lastSendDEVerify - time.Now().Unix() + 60*5
-			incurKey := fmt.Sprintf("SendEmail_%s_%d", d.GetSession("userId"), time.Now().Day())
+			incurKey := fmt.Sprintf("SendEmail_%s_%d", util.ObjToString(sessVal["userId"]), time.Now().Day())
 			//log.Println(incurKey)
 			if lastSendDEVerify == 0 || timeSpaceing < 0 {
 				//每日限制10次
@@ -696,7 +754,7 @@ func (d *DataExport) SendMailVerify() {
 					d.SetSession("DataExportVerifyEmail", email)
 					d.SetSession("DataExportVerify", verifyStr)
 					d.SetSession("CreatEVerifyTime", time.Now().Unix())
-					log.Println("====================", verifyStr, "====================", d.GetSession("CreatEVerifyTime"), "====================")
+					log.Println("====================", verifyStr, "====================", sessVal["CreatEVerifyTime"], "====================")
 					//发送邮箱验证码
 					go public.SendMailIdentCode(email, verifyStr, config.GmailAuth)
 					d.T["success"] = true

+ 6 - 5
src/jfw/front/front.go

@@ -1097,7 +1097,8 @@ func (m *Front) Isrecord(name string) {
 // 招标订阅向导
 func (f *Front) TSGuide() error {
 	defer util.Catch()
-	userid := util.ObjToString(f.GetSession("userId"))
+	sessVal := f.Session().GetMultiple()
+	userid := util.ObjToString(sessVal["userId"])
 	if userid == "" {
 		return f.Redirect("/swordfish/share/-1")
 	}
@@ -1149,12 +1150,12 @@ func (f *Front) TSGuide() error {
 				}
 				nsqPath, _ := config.Sysconfig["nsq"].(string)
 				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
-				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(sessVal["mgoUserId"]), jy.Jywx_node1, map[string]interface{}{
 					"code":       1015, //首次订阅
 					"types":      "subscribeKeyWords",
 					"num":        50,
-					"baseUserId": f.GetSession("base_user_id"),
-					"positionId": f.GetSession("positionId"),
+					"baseUserId": sessVal["base_user_id"],
+					"positionId": sessVal["positionId"],
 				})
 				result["flag"] = jyutil.Compatible.Update(userid, bson.M{"$set": saveData})
 			}
@@ -1173,7 +1174,7 @@ func (f *Front) TSGuide() error {
 			result["data"] = rlt
 		}
 		if result["flag"] != nil && result["flag"].(bool) {
-			positionId := util.Int64All(f.GetSession("positionId"))
+			positionId := util.Int64All(sessVal["positionId"])
 			s_positionId := fmt.Sprint(positionId)
 			jy.ClearBigVipUserPower(s_positionId)
 			config.Middleground.UserCenter.WorkDesktopClearUserInfo(pb.WorkDesktopClearUserInfoReq{

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

@@ -140,8 +140,9 @@ func (l *Login) Login() error {
 			}
 			return 0, false
 		} else if reqType == "identCodeLogin" { //短信验证码登录
-			phone, _ := l.GetSession("identCodeKey").(string)
-			if phone == "" || l.GetSession("identCodeValue") == nil || l.GetString("identCode") != l.GetSession("identCodeValue") { //验证码不正确
+			sessVal := l.Session().GetMultiple()
+			phone := qutil.ObjToString(sessVal["identCodeKey"])
+			if phone == "" || sessVal["identCodeValue"] == nil || l.GetString("identCode") != sessVal["identCodeValue"] { //验证码不正确
 				return -1, false
 			} else {
 				//用户不存在
@@ -208,6 +209,7 @@ func (l *Login) Login() error {
 							log.Println("nsq队列写入失败-->", jy.Jypc_phone_register, _id)
 						}
 						if ok {
+							sessVal = l.Session().GetMultiple()
 							result["userInfo"] = userInfo
 							go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
 							jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", _id, jy.Jyweb_node2, map[string]interface{}{
@@ -215,7 +217,7 @@ func (l *Login) Login() error {
 								"types":      "bindPhone",
 								"num":        50,
 								"baseUserId": resp.Data.Id,
-								"positionId": l.GetSession("positionId"),
+								"positionId": sessVal["positionId"],
 							})
 							return 2, true
 						}
@@ -254,12 +256,13 @@ func (l *Login) Login() error {
 		return 0, false
 	}()
 	if status >= 1 && isLogin {
+		sessVal := l.Session().GetMultiple()
 		//登录source 更新 p414
-		mgoUserId := qutil.ObjToString(l.GetSession("mgoUserId"))
+		mgoUserId := qutil.ObjToString(sessVal["mgoUserId"])
 		us := jy.UserSource{
 			UserId:           mgoUserId,
-			PositionId:       qutil.Int64All(l.GetSession("positionId")),
-			Phone:            qutil.ObjToString(l.GetSession("phone")),
+			PositionId:       qutil.Int64All(sessVal["positionId"]),
+			Phone:            qutil.ObjToString(sessVal["phone"]),
 			State:            qutil.If(status == 2, status, 1).(int), //注册/登录标志 1:登录;2:注册
 			ChannelCode:      channelCode,
 			EncryptionUserId: encrypt.SE.EncodeString(mgoUserId),
@@ -273,7 +276,7 @@ func (l *Login) Login() error {
 		}(us)
 		//当前用户登录选择 下次自动登录
 		if isAutoLogin && err == nil {
-			baseUserId := qutil.Int64All(l.GetSession("base_user_id"))
+			baseUserId := qutil.Int64All(sessVal["base_user_id"])
 			if baseUserId > 0 {
 				//往cookie中加入标识
 				jutil.SetCookieValueForAutoLogin(l.ResponseWriter, baseUserId)

+ 11 - 5
src/jfw/front/pcIndex.go

@@ -77,7 +77,9 @@ func (m *PcIndex) NewSordfish(flag string) error {
 		pageSize = 50
 	}
 	var shareid = m.GetString("id")
-	userId, _ := m.GetSession("userId").(string)
+	//userId, _ := m.GetSession("userId").(string)
+	sessVal := m.Session().GetMultiple()
+	userId := util.ObjToString(sessVal["userId"])
 	pcindexKey := "jypcindex"
 	if cacheKey, _ := config.Sysconfig["pcindexCacheKey"].(string); cacheKey != "" {
 		pcindexKey = cacheKey
@@ -94,7 +96,7 @@ func (m *PcIndex) NewSordfish(flag string) error {
 	m.T["userCard"] = "f"
 	regex, _ := regexp.Compile("(Android|Mobile)")
 	var isLogin bool
-	if util.ObjToString(m.GetSession("userId")) != "" {
+	if userId != "" {
 		isLogin = true
 		userPower := jy.GetBigVipUserBaseMsg(m.Session(), *config.Middleground)
 		switch {
@@ -107,10 +109,14 @@ func (m *PcIndex) NewSordfish(flag string) error {
 		}
 	}
 	if ispc == 0 && len(regex.FindAllString(m.Header("User-Agent"), -1)) > 0 {
-		m.T["s_m_openid"] = util.ObjToString(m.GetSession("s_m_openid"))
+		//m.T["s_m_openid"] = util.ObjToString(m.GetSession("s_m_openid"))
+		//m.T["signature"] = wx.SignJSSDK(m.Site() + m.Url())
+		//m.T["nickname"] = util.ObjToString(m.GetSession("s_nickname"))
+		//m.T["avatar"] = util.ObjToString(m.GetSession("s_avatar"))
+		m.T["s_m_openid"] = util.ObjToString(sessVal["s_m_openid"])
+		m.T["nickname"] = util.ObjToString(sessVal["s_nickname"])
+		m.T["avatar"] = util.ObjToString(sessVal["s_avatar"])
 		m.T["signature"] = wx.SignJSSDK(m.Site() + m.Url())
-		m.T["nickname"] = util.ObjToString(m.GetSession("s_nickname"))
-		m.T["avatar"] = util.ObjToString(m.GetSession("s_avatar"))
 		return m.Render("/pc/mobileindex.html", &m.T)
 	} else {
 		//信息条数(上线以来..)

+ 41 - 25
src/jfw/front/shorturl.go

@@ -97,8 +97,10 @@ func (s *Short) Article(stype, id string) error {
 	bm := mobileReg.MatchString(s.Header("User-Agent"))
 	//是否是微信浏览器
 	isWxB := public.CheckWxBrowser(s.Request)
-	userId, _ := s.GetSession("userId").(string)
+	//userId, _ := s.GetSession("userId").(string)
+	sess := s.Session().GetMultiple()
 	//未登录用户是否访问的微信浏览器
+	userId, _ := sess["userId"].(string)
 	if userId == "" {
 		if IsWxBrowserContent[stype] {
 			if s.GetString("state") == "wx" {
@@ -108,7 +110,9 @@ func (s *Short) Article(stype, id string) error {
 						if CheckUserIsSubscribe(openid) {
 							FindUserAndCreateSess(openid, s.Session(), "wx", false, true)
 							//生session后 重新获取一下
-							userId, _ = s.GetSession("userId").(string)
+							//userId, _ = s.GetSession("userId").(string)
+							sess = s.Session().GetMultiple()
+							userId, _ = sess["userId"].(string)
 						} else if !bm { //未关注用户 pc端到关注页面
 							log.Println("PC微信端浏览器 未关注用户 访问地址----")
 							s.Request.Header.Del("Referer")
@@ -131,10 +135,10 @@ func (s *Short) Article(stype, id string) error {
 		//	return s.Redirect("/notin/page")
 		//}
 	}
-	return s.LoginCommon(userId, stype, id, bm)
+	return s.LoginCommon(sess, stype, id, bm)
 }
 
-func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
+func (s *Short) LoginCommon(sess map[string]interface{}, stype, id string, bm bool) error {
 	//电脑端 剑鱼快照页面访问
 	if stype == "content" && !bm {
 		//工作桌面内嵌 快照页
@@ -149,7 +153,8 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 			return s.Redirect(fmt.Sprintf("%s%s%s", config.Sysconfig["workDesktopUrl"].(string), config.Sysconfig["webdomain"].(string), url.QueryEscape(strings.Replace(s.Request.URL.String(), replaceStr, paramSuffix, 1))))
 		}
 	}
-	getsession := s.Session().GetMultiple()
+	userId, _ := sess["userId"].(string)
+	//getsession := s.Session().GetMultiple()
 	//先判断是否有session
 	source := s.GetString("source")
 	disWord := s.GetString("disWord")
@@ -230,7 +235,7 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 			s.T["logid"] = config.Seoconfig["jysskzy"].(string)
 			s.T["shareid"] = se.EncodeString(shareid)
 			s.T["keywords"] = s.GetString("kds")
-			ssOpenid := getsession["s_m_openid"]
+			ssOpenid := sess["s_m_openid"]
 			po, bo, wo, obj := pcVRT(sid, industry, stype, true, true)
 			if obj != nil && len(obj) > 0 {
 
@@ -291,7 +296,7 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 			return s.SetBody([]byte(res.(string)))
 		}
 	}
-	ssOpenid := getsession["s_m_openid"]
+	ssOpenid := sess["s_m_openid"]
 	var (
 		res *map[string]interface{}
 		ok  bool
@@ -305,7 +310,6 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 		//判断用户是否是vip
 		res = jyutil.Compatible.Select(userId, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1,"l_vip_starttime":1}`)
 	}
-	entid := util.Int64All(s.GetSession("entId"))
 	userPower := jy.GetBigVipUserBaseMsg(s.Session(), *config.Middleground)
 	var (
 		isEntnicheNew bool = userPower.EntIsNew                                                           //新版超级订阅
@@ -322,7 +326,8 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 			isOldVip = true
 		}
 	}
-	entId := util.IntAll(entid)
+	//entid := util.Int64All(s.GetSession("entId"))
+	entId := util.IntAll(sess["entId"])
 	if entId > 0 && userPower.EntInfo[entId] != nil {
 		isEntniche = userPower.EntInfo[entId].Status == 1 && userPower.EntInfo[entId].IsPower
 		isEntnicheNew = userPower.EntInfo[entId].IsNew && isEntniche
@@ -366,7 +371,8 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 
 		if stype == "advancedProject" {
 			//判断此用户是否有打开的权限
-			newUserId := s.GetSession("base_user_id")
+			//newUserId := s.GetSession("base_user_id")
+			newUserId := sess["base_user_id"]
 			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
 			//访问次数加1
 			if pushData == nil {
@@ -380,15 +386,17 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 		if shareopenid != "" {
 			s.T["shareopenid"] = shareopenid
 		}
-		myopenid, _ := getsession["s_m_openid"].(string)
+		myopenid, _ := sess["s_m_openid"].(string)
 		if myopenid == "" {
 			myopenid = shareopenid
 			s.T["openid"] = myopenid //"-1"
 		} else {
 			s.T["openid"] = se.EncodeString(myopenid) //"-1"
 		}
-		mynickname, _ := s.GetSession("s_nickname").(string)
-		myavatar, _ := s.GetSession("s_avatar").(string)
+		//mynickname, _ := s.GetSession("s_nickname").(string)
+		//myavatar, _ := s.GetSession("s_avatar").(string)
+		mynickname := util.ObjToString(sess["s_nickname"])
+		myavatar := util.ObjToString(sess["s_avatar"])
 		s.T["nickname"] = mynickname
 		s.T["avatar"] = myavatar
 		s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url())
@@ -457,9 +465,10 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 				s.T["advertcode"] = s.GetString("advertcode")
 			} else {
 				obj = map[string]interface{}{
-					"title":   obj["title"],
-					"_id":     obj["_id"],
-					"subtype": obj["subtype"],
+					"title":        obj["title"],
+					"_id":          obj["_id"],
+					"subtype":      obj["subtype"],
+					"originalShow": false,
 				}
 			}
 			//纠错随机回复
@@ -496,7 +505,8 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 		}
 		if stype == "advancedProject" {
 			//判断此用户是否有打开的权限
-			newUserId := s.GetSession("base_user_id")
+			//newUserId := s.GetSession("base_user_id")
+			newUserId := sess["base_user_id"]
 			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
 			//访问次数加1
 			if pushData == nil {
@@ -620,10 +630,11 @@ func (s *Short) LoginCommon(userId, stype, id string, bm bool) error {
 					}
 				} else {
 					obj = map[string]interface{}{
-						"title":    obj["title"],
-						"_id":      obj["_id"],
-						"subtype":  obj["subtype"],
-						"stypeadd": obj["stypeadd"],
+						"title":        obj["title"],
+						"_id":          obj["_id"],
+						"subtype":      obj["subtype"],
+						"stypeadd":     obj["stypeadd"],
+						"originalShow": false,
 					}
 				}
 
@@ -784,15 +795,19 @@ func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry,
 		obj["buyerperson"] = ""
 		obj["buyertel"] = ""
 	}
+	href, _ := obj["href"].(string)
 	if !b {
-		href, _ := obj["href"].(string)
 		href = strings.Replace(href, "\n", "", -1)
 		if href != "" && !strings.HasPrefix(href, "http") {
 			href = "http://" + href
 		}
 		obj["url"] = href
 	}
-
+	//P385 查看原文
+	obj["originalShow"] = false
+	if href != "" && userId != "" {
+		obj["originalShow"] = true
+	}
 	//大会员中标企业跳转至画像
 	if obj["entidlist"] != nil {
 		if s_winner := util.ObjToString(obj["s_winner"]); s_winner != "" {
@@ -1188,14 +1203,15 @@ func SearchFilter(obj map[string]interface{}) map[string]interface{} {
 }
 
 func (s *Short) NologinArticle(stype, id string) error {
-	userId := util.ObjToString(s.GetSession("userId"))
+	sess := s.Session().GetMultiple()
+	userId := util.ObjToString(sess["userId"])
 	sids := encrypt.CommonDecodeArticle(stype, id)
 	if len(sids) == 0 || (len(sids) > 0 && sids[0] == "") {
 		s.Redirect("/notin/page", 302)
 		return nil
 	}
 	if userId != "" { //已登录用户直接跳转至正常三级页
-		return s.LoginCommon(userId, stype, id, mobileReg.MatchString(s.Header("User-Agent"))) //是否是移动端
+		return s.LoginCommon(sess, stype, id, mobileReg.MatchString(s.Header("User-Agent"))) //是否是移动端
 	}
 	if detailNeedMosaic == nil {
 		detailNeedMosaic, _ = config.Sysconfig["detailNeedMosaic"].(map[string]interface{})

+ 55 - 26
src/jfw/front/supsearch.go

@@ -243,12 +243,15 @@ func (p *Pcsearch) Getstatus() error {
 }
 
 func (p *Pcsearch) GetNewBids() error {
+	sessVal := p.Session().GetMultiple()
 	pagenum, _ := p.GetInteger("pageNumber")
 	pageSize, _ := p.GetInteger("pageSize")
 	pageType := p.GetString("pageType")
 	bidField := p.GetString("bid_field")
-	userId, _ := p.GetSession("userId").(string)
-	baseUserId := p.GetSession("base_user_id")
+	//userId, _ := p.GetSession("userId").(string)
+	userId := util.ObjToString(sessVal["base_user_id"])
+	//baseUserId := p.GetSession("base_user_id")
+	baseUserId := util.Int64All(sessVal["base_user_id"])
 	searchGroup, _ := p.GetInteger("searchGroup") //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
 	vipStatus := jy.GetVipState(p.Session(), *config.Middleground, userId)
 	// 如果是领域化数据j
@@ -273,7 +276,7 @@ func (p *Pcsearch) GetNewBids() error {
 		PageNum:     pagenum,
 		PageSize:    pageSize,
 		BidField:    bidField,
-		NewUserId:   util.Int64All(baseUserId),
+		NewUserId:   baseUserId,
 		SearchGroup: searchGroup,
 		IsPay:       vipStatus.IsPayedUser(),
 		R:           p.Request,
@@ -321,6 +324,7 @@ func (p *Pcsearch) GetNewBids() error {
 // PcSearchIndex 路由搜索
 func (p *Pcsearch) PcSearchIndex(module string) error {
 	defer util.Catch()
+	sessVal := p.Session().GetMultiple()
 	p.T["logid"] = config.Seoconfig["jysslby"].(string)
 	pageSize, _ := p.GetInteger("pageSize")
 	if pageSize == 0 {
@@ -342,8 +346,10 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 	wordsMode, _ := p.GetInteger("wordsMode")         //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
 	additionalWords := p.GetString("additionalWords") //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
 	//--end--
-	userId, _ := p.GetSession("userId").(string)
-	phone, _ := p.GetSession("phone").(string)
+	//userId, _ := p.GetSession("userId").(string)
+	//phone, _ := p.GetSession("phone").(string)
+	userId := util.ObjToString(sessVal["userId"])
+	phone := util.ObjToString(sessVal["phone"])
 	selectType := p.GetString("selectType") //搜索范围
 	if selectType == "" {
 		selectType = "title,content"
@@ -410,27 +416,50 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 	}
 	//历史导出数据回显
 	if strings.Contains(p.Url(), "?goback") {
-		keywords = util.ObjToString(p.GetSession("Echo_keywords"))
-		publishtime = util.ObjToString(p.GetSession("Echo_publishtime"))
-		area = util.ObjToString(p.GetSession("Echo_area"))
-		subtype = util.ObjToString(p.GetSession("Echo_subtype"))
-		minprice = util.ObjToString(p.GetSession("Echo_minprice"))
-		maxprice = util.ObjToString(p.GetSession("Echo_maxprice"))
-		buyerclass = util.ObjToString(p.GetSession("Echo_buyerclass"))
-		selectType = util.ObjToString(p.GetSession("Echo_selectType"))
-		timeslot = util.ObjToString(p.GetSession("Echo_timeslot"))
-		hasBuyerTel = util.ObjToString(p.GetSession("Echo_hasBuyertel"))
-		hasWinnerTel = util.ObjToString(p.GetSession("Echo_hasWinnertel"))
-		industry = util.ObjToString(p.GetSession("Echo_industry"))
-		notkey = util.ObjToString(p.GetSession("Echo_notkey"))
-		fileExists = util.ObjToString(p.GetSession("Echo_fileExists"))
-		city = util.ObjToString(p.GetSession("Echo_city"))
-		bidField = util.ObjToString(p.GetSession("Echo_bid_field"))              // 领域化数据 0101-医疗行业
-		territorialization = util.ObjToString(p.GetSession("Echo_bid_field"))    // 领域化数据 0101-医疗行业
-		searchGroup = util.IntAll(p.GetSession("Echo_searchGroup"))              //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
-		searchMode = util.IntAll(p.GetSession("Echo_searchMode"))                //搜索模式;默认0:精准模式(不进行系统分词);1:模糊模式(进行系统分词)。
-		wordsMode = util.IntAll(p.GetSession("Echo_wordsMode"))                  //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
-		additionalWords = util.ObjToString(p.GetSession("Echo_additionalWords")) //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
+		//keywords = util.ObjToString(p.GetSession("Echo_keywords"))
+		//publishtime = util.ObjToString(p.GetSession("Echo_publishtime"))
+		//area = util.ObjToString(p.GetSession("Echo_area"))
+		//subtype = util.ObjToString(p.GetSession("Echo_subtype"))
+		//minprice = util.ObjToString(p.GetSession("Echo_minprice"))
+		//maxprice = util.ObjToString(p.GetSession("Echo_maxprice"))
+		//buyerclass = util.ObjToString(p.GetSession("Echo_buyerclass"))
+		//selectType = util.ObjToString(p.GetSession("Echo_selectType"))
+		//timeslot = util.ObjToString(p.GetSession("Echo_timeslot"))
+		//hasBuyerTel = util.ObjToString(p.GetSession("Echo_hasBuyertel"))
+		//hasWinnerTel = util.ObjToString(p.GetSession("Echo_hasWinnertel"))
+		//industry = util.ObjToString(p.GetSession("Echo_industry"))
+		//notkey = util.ObjToString(p.GetSession("Echo_notkey"))
+		//fileExists = util.ObjToString(p.GetSession("Echo_fileExists"))
+		//city = util.ObjToString(p.GetSession("Echo_city"))
+		//bidField = util.ObjToString(p.GetSession("Echo_bid_field"))              // 领域化数据 0101-医疗行业
+		//territorialization = util.ObjToString(p.GetSession("Echo_bid_field"))    // 领域化数据 0101-医疗行业
+		//searchGroup = util.IntAll(p.GetSession("Echo_searchGroup"))              //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
+		//searchMode = util.IntAll(p.GetSession("Echo_searchMode"))                //搜索模式;默认0:精准模式(不进行系统分词);1:模糊模式(进行系统分词)。
+		//wordsMode = util.IntAll(p.GetSession("Echo_wordsMode"))                  //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
+		//additionalWords = util.ObjToString(p.GetSession("Echo_additionalWords")) //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
+		//queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
+
+		keywords = util.ObjToString(sessVal["Echo_keywords"])
+		publishtime = util.ObjToString(sessVal["Echo_publishtime"])
+		area = util.ObjToString(sessVal["Echo_area"])
+		subtype = util.ObjToString(sessVal["Echo_subtype"])
+		minprice = util.ObjToString(sessVal["Echo_minprice"])
+		maxprice = util.ObjToString(sessVal["Echo_maxprice"])
+		buyerclass = util.ObjToString(sessVal["Echo_buyerclass"])
+		selectType = util.ObjToString(sessVal["Echo_selectType"])
+		timeslot = util.ObjToString(sessVal["Echo_timeslot"])
+		hasBuyerTel = util.ObjToString(sessVal["Echo_hasBuyertel"])
+		hasWinnerTel = util.ObjToString(sessVal["Echo_hasWinnertel"])
+		industry = util.ObjToString(sessVal["Echo_industry"])
+		notkey = util.ObjToString(sessVal["Echo_notkey"])
+		fileExists = util.ObjToString(sessVal["Echo_fileExists"])
+		city = util.ObjToString(sessVal["Echo_city"])
+		bidField = util.ObjToString(sessVal["Echo_bid_field"])              // 领域化数据 0101-医疗行业
+		territorialization = util.ObjToString(sessVal["Echo_bid_field"])    // 领域化数据 0101-医疗行业
+		searchGroup = util.IntAll(sessVal["Echo_searchGroup"])              //搜索分组;默认0:全部;1:招标采购搜索;2:超前项目。
+		searchMode = util.IntAll(sessVal["Echo_searchMode"])                //搜索模式;默认0:精准模式(不进行系统分词);1:模糊模式(进行系统分词)。
+		wordsMode = util.IntAll(sessVal["Echo_wordsMode"])                  //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
+		additionalWords = util.ObjToString(sessVal["Echo_additionalWords"]) //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
 		queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
 	}
 	keywordsLimit := util.IntAllDef(config.Sysconfig["keywordsLimit"], 35)

+ 10 - 4
src/jfw/front/swordfish.go

@@ -82,8 +82,9 @@ func (m *Front) Searchinfolist(p string) error {
 func (m *Front) PcAjaxReq() {
 	territorialization := m.GetString("bid_field") // 领域类型 0101- 医疗
 	tabularflag := m.GetString("tabularflag")
-	userId := util.ObjToString(m.GetSession("userId"))
-	phone := util.ObjToString(m.GetSession("phone"))
+	sessVal := m.Session().GetMultiple()
+	userId := util.ObjToString(sessVal["userId"])
+	phone := util.ObjToString(sessVal["phone"])
 	currentPage, _ := m.GetInteger("pageNumber")
 	pageSize, _ := m.GetInteger("pageSize")
 	if pageSize == 0 {
@@ -751,9 +752,14 @@ func ObjData(isPayUser bool, sid, content string, lent int) (t bool, obj map[str
 		obj["_id"] = encrypt.EncodeArticleId2ByCheck(sid)
 		infoformat := util.IntAllDef(obj["infoformat"], 1)
 		obj["infoformat"] = infoformat
-		//精准字段(竞争对手的地址) 或  拟建项目
-		if obj["competehref"] != nil || infoformat == 2 {
+		// p385调整为 除了从竞品爬虫到的新数据,不展示“查看原文链接”入口,其他公告都展示“查看原文链接”入口(包含客户管理系统-结构化数据,查看的标讯详情页)
+		// 精准字段(竞争对手的地址) 或  拟建项目
+		//competehref字段来源:
+		//1、竞品采集 href="#" competehref=原网址
+		//2、2021-11-01后新增的爬虫 href=原网址 competehref="#"
+		if util.ObjToString(obj["href"]) == "#" || infoformat == 2 || util.ObjToString(obj["site"]) == "剑鱼信息发布平台" {
 			delete(obj, "href")
+			delete(obj, "competehref")
 		}
 		if strings.Trim(util.ObjToString(obj["detail"]), " ") == "" {
 			obj["detail"] = ""

+ 48 - 7
src/jfw/front/wx_dataExport.go

@@ -3,6 +3,7 @@ package front
 import (
 	"encoding/json"
 	"errors"
+	"fmt"
 	"jy/src/jfw/config"
 	"jy/src/jfw/wx"
 	"log"
@@ -171,15 +172,46 @@ func (w *WxDataExport) SaveData() error {
 	if winner != "" {
 		winnerArr = strings.Split(winner, ",")
 	}
+	exportLimit := util.StructToMapMore(config.ExportConfig["exportLimit"])
 	if keyWord != "" {
+		countLimit := util.IntAllDef(exportLimit["countLimit"], 300)
+		var count int
+		wordsLimit := util.IntAllDef(exportLimit["wordsLimit"], 100)
 		if json.Unmarshal([]byte(keyWord), &keyWordArr) == nil {
 			for k, v := range keyWordArr {
+				if v.Keyword != "" {
+					count++
+				}
+				if len([]rune(v.Keyword)) > wordsLimit {
+					keyWordArr[k].Keyword = util.SubString(v.Keyword, 0, wordsLimit)
+				}
 				if v.Appended == nil {
 					keyWordArr[k].Appended = []string{}
+				} else {
+					for k1, ad := range v.Appended {
+						if len([]rune(ad)) > wordsLimit {
+							keyWordArr[k].Appended[k1] = util.SubString(ad, 0, wordsLimit)
+						}
+					}
 				}
 				if v.Exclude == nil {
 					keyWordArr[k].Exclude = []string{}
+				} else {
+					for k1, el := range v.Exclude {
+						if len([]rune(el)) > wordsLimit {
+							keyWordArr[k].Exclude[k1] = util.SubString(el, 0, wordsLimit)
+						}
+					}
 				}
+				count += len(v.Appended)
+				count += len(v.Exclude)
+			}
+			if count > countLimit {
+				w.ServeJson(map[string]interface{}{
+					"error_code": -1,
+					"error_msg":  fmt.Sprintf("关键词信息超过上限%d", countLimit),
+				})
+				return nil
 			}
 		} else {
 			log.Println("keyWord param 反序列化异常,查看前后台字段是否对应")
@@ -207,14 +239,23 @@ func (w *WxDataExport) SaveData() error {
 			selectType = strings.Replace(strings.Join(detail, ","), "detail", "title,detail", -1)
 		}
 	}
-	if len(keyWordArr) > util.IntAllDef(config.Sysconfig["keywordRestrict"], 100) {
-		keyWordArr = keyWordArr[:util.IntAllDef(config.Sysconfig["keywordRestrict"], 100)]
-	}
-	if len(buyerArr) > util.IntAllDef(config.Sysconfig["buyerRestrict"], 100) {
-		buyerArr = buyerArr[:util.IntAllDef(config.Sysconfig["buyerRestrict"], 100)]
+
+	buyerLimit := util.IntAllDef(exportLimit["buyerLimit"], 100)
+	winnerLimit := util.IntAllDef(exportLimit["winnerLimit"], 100)
+
+	if len(buyerArr) > buyerLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("采购单位超过上限%d", buyerLimit),
+		})
+		return nil
 	}
-	if len(winnerArr) > util.IntAllDef(config.Sysconfig["winnerRestrict"], 100) {
-		winnerArr = winnerArr[:util.IntAllDef(config.Sysconfig["winnerRestrict"], 100)]
+	if len(winnerArr) > winnerLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("中标单位超过上限%d", winnerLimit),
+		})
+		return nil
 	}
 	saveData := map[string]interface{}{
 		"publishtime": publishtime,

+ 48 - 7
src/jfw/modules/app/src/app/front/dataExport.go

@@ -3,6 +3,7 @@ package front
 import (
 	"encoding/json"
 	"errors"
+	"fmt"
 	"jy/src/jfw/modules/app/src/jfw/config"
 	"log"
 	"strings"
@@ -174,19 +175,50 @@ func (w *WxDataExport) SaveData() error {
 	if winner != "" {
 		winnerArr = strings.Split(winner, ",")
 	}
+	exportLimit := util.StructToMapMore(config.ExportConfig["exportLimit"])
 	if keyWord != "" {
+		countLimit := util.IntAllDef(exportLimit["countLimit"], 300)
+		var count int
+		wordsLimit := util.IntAllDef(exportLimit["wordsLimit"], 100)
 		err := json.Unmarshal([]byte(keyWord), &keyWordArr)
 		if err != nil {
 			log.Println("keyWord param 反序列化异常,查看前后台字段是否对应")
 		} else {
 			log.Println("keyWordArr", len(keyWordArr), keyWordArr)
 			for k, v := range keyWordArr {
+				if v.Keyword != "" {
+					count++
+				}
+				if len([]rune(v.Keyword)) > wordsLimit {
+					keyWordArr[k].Keyword = util.SubString(v.Keyword, 0, wordsLimit)
+				}
 				if v.Appended == nil {
 					keyWordArr[k].Appended = []string{}
+				} else {
+					for k1, ad := range v.Appended {
+						if len([]rune(ad)) > wordsLimit {
+							keyWordArr[k].Appended[k1] = util.SubString(ad, 0, wordsLimit)
+						}
+					}
 				}
 				if v.Exclude == nil {
 					keyWordArr[k].Exclude = []string{}
+				} else {
+					for k1, el := range v.Exclude {
+						if len([]rune(el)) > wordsLimit {
+							keyWordArr[k].Exclude[k1] = util.SubString(el, 0, wordsLimit)
+						}
+					}
 				}
+				count += len(v.Appended)
+				count += len(v.Exclude)
+			}
+			if count > countLimit {
+				w.ServeJson(map[string]interface{}{
+					"error_code": -1,
+					"error_msg":  fmt.Sprintf("关键词信息超过上限%d", countLimit),
+				})
+				return nil
 			}
 		}
 	}
@@ -212,14 +244,23 @@ func (w *WxDataExport) SaveData() error {
 			selectType = strings.Replace(strings.Join(detail, ","), "detail", "title,detail", -1)
 		}
 	}
-	if len(keyWordArr) > util.IntAllDef(config.Seoconfig["keywordRestrict"], 100) {
-		keyWordArr = keyWordArr[:util.IntAllDef(config.Sysconfig["keywordRestrict"], 100)]
-	}
-	if len(buyerArr) > util.IntAllDef(config.Sysconfig["buyerRestrict"], 100) {
-		buyerArr = buyerArr[:util.IntAllDef(config.Sysconfig["buyerRestrict"], 100)]
+
+	buyerLimit := util.IntAllDef(exportLimit["buyerLimit"], 100)
+	winnerLimit := util.IntAllDef(exportLimit["winnerLimit"], 100)
+
+	if len(buyerArr) > buyerLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("采购单位超过上限%d", buyerLimit),
+		})
+		return nil
 	}
-	if len(winnerArr) > util.IntAllDef(config.Sysconfig["winnerRestrict"], 100) {
-		winnerArr = winnerArr[:util.IntAllDef(config.Sysconfig["winnerRestrict"], 100)]
+	if len(winnerArr) > winnerLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("中标单位超过上限%d", winnerLimit),
+		})
+		return nil
 	}
 	saveData := map[string]interface{}{
 		"publishtime": publishtime,

+ 6 - 5
src/jfw/modules/app/src/app/front/front.go

@@ -293,7 +293,8 @@ func (m *Front) Feedback() error {
 // 招标订阅向导
 func (f *Front) TSGuide() error {
 	defer util.Catch()
-	userid := util.ObjToString(f.GetSession("userId"))
+	sessVal := f.Session().GetMultiple()
+	userid := util.ObjToString(sessVal["userId"])
 	if f.Method() == "GET" {
 		if !isInTSguide(userid, f.Session()) {
 			return f.Redirect("/jyapp/wxkeyset/keyset/index")
@@ -342,12 +343,12 @@ func (f *Front) TSGuide() error {
 				}
 				nsqPath, _ := config.Sysconfig["nsq"].(string)
 				nsq_topic, _ := config.Sysconfig["nsq_topic"].(string)
-				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(f.GetSession("mgoUserId")), jy.Jywx_node1, map[string]interface{}{
+				jy.Publish(public.Mgo_Log, nsqPath, nsq_topic, "task", util.ObjToString(sessVal["mgoUserId"]), jy.Jywx_node1, map[string]interface{}{
 					"code":       1015, //首次订阅
 					"types":      "subscribeKeyWords",
 					"num":        50,
-					"baseUserId": f.GetSession("base_user_id"),
-					"positionId": f.GetSession("positionId"),
+					"baseUserId": sessVal["base_user_id"],
+					"positionId": sessVal["positionId"],
 				})
 				result["flag"] = utils.Compatible.Update(userid, map[string]interface{}{"$set": saveData})
 			}
@@ -366,7 +367,7 @@ func (f *Front) TSGuide() error {
 			result["data"] = rlt
 		}
 
-		positionId := util.Int64All(f.GetSession("positionId"))
+		positionId := util.Int64All(sessVal["positionId"])
 		s_positionId := fmt.Sprint(positionId)
 		jy.ClearBigVipUserPower(s_positionId)
 		config.Middleground.UserCenter.WorkDesktopClearUserInfo(pb.WorkDesktopClearUserInfoReq{

+ 17 - 7
src/jfw/modules/app/src/app/front/shorturl.go

@@ -82,7 +82,9 @@ func (s *Short) WhiteList() error {
 
 func (s *Short) Article(contentType, stype, id string) error {
 	//先判断是否有session
-	userId, _ := s.GetSession("userId").(string)
+	sess := s.Session().GetMultiple()
+	userId := util.ObjToString(sess["userId"])
+	//userId, _ := s.GetSession("userId").(string)
 	//if userId == "" {
 	//	return s.Redirect("/jyapp/free/swordfish/about", 302)
 	//}
@@ -110,7 +112,7 @@ func (s *Short) Article(contentType, stype, id string) error {
 			isEntService = userPower.Data.Ent.PowerSource > 0 && userPower.Data.Entniche.IsEntPower > 0 //商机管理服务
 		} //用户邮箱
 		_, isOldVip, _, _, _ = UserPermission(userId)
-		entId := util.IntAll(s.GetSession("entId"))
+		entId := util.IntAll(sess["entId"])
 		if entId > 0 && userPower.EntInfo[entId] != nil {
 			isEntniche = userPower.EntInfo[entId].Status == 1 && userPower.EntInfo[entId].IsPower
 			isEntnicheNew = userPower.EntInfo[entId].IsNew && isEntniche
@@ -208,7 +210,7 @@ func (s *Short) Article(contentType, stype, id string) error {
 		if stype == "advancedProject" {
 			newCanRead := false
 			//判断此用户是否有打开的权限
-			newUserId := s.GetSession("base_user_id")
+			newUserId := sess["base_user_id"]
 			pushData := public.BaseMysql.FindOne("leadproject_push", map[string]interface{}{"user_id": newUserId, "info_id": sid}, "id", "")
 			//访问次数加1
 			if pushData == nil {
@@ -316,12 +318,20 @@ func (s *Short) Article(contentType, stype, id string) error {
 			if obj["l_publishtime"] != nil {
 				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["l_publishtime"]), 0).Format(date.Date_Short_Layout)
 			}
+			//P385 查看原文
+			href, _ := obj["href"].(string)
+			obj["originalShow"] = false
+			if href != "" {
+				obj["originalShow"] = true
+				delete(obj, "href")
+			}
 		} else {
 			obj = map[string]interface{}{
-				"title":      obj["title"],
-				"_id":        obj["_id"],
-				"subtype":    obj["subtype"],
-				"hasSession": false,
+				"title":        obj["title"],
+				"_id":          obj["_id"],
+				"subtype":      obj["subtype"],
+				"hasSession":   false,
+				"originalShow": false,
 			}
 		}
 		if userId == "" && ipTrue {

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

@@ -542,8 +542,9 @@ func wxvisitD(sid, userId string, isPayUser bool) (objdata map[string]interface{
 			var infoformat = util.IntAllDef(obj["infoformat"], 1)
 			obj["infoformat"] = infoformat
 			//精准字段(竞争对手的地址) 或  拟建项目
-			if obj["competehref"] != nil || infoformat == 2 {
+			if util.ObjToString(obj["href"]) == "#" || infoformat == 2 || util.ObjToString(obj["site"]) == "剑鱼信息发布平台" {
 				delete(obj, "href")
+				delete(obj, "competehref")
 			}
 			//if userId != "" {
 			//pcode, _ := obj["projectcode"].(string)

+ 15 - 2
src/jfw/modules/app/src/app/front/ws_dataExport.go

@@ -41,13 +41,14 @@ func init() {
 }
 
 func (w *WsDataExport) GetPreview() error {
-	userId := util.ObjToString(w.GetSession("userId"))
+	sessVal := w.Session().GetMultiple()
+	userId := util.ObjToString(sessVal["userId"])
 	if userId == "" {
 		return errors.New("未登录")
 	}
 	_res := make(map[string]interface{})
 	//数据预览每天限制50次
-	incurKey := fmt.Sprintf("PreviewData_%s_%d", w.GetSession("userId"), time.Now().Day())
+	incurKey := fmt.Sprintf("PreviewData_%s_%d", sessVal["userId"], time.Now().Day())
 	times := util.IntAll(redis.Get("other", incurKey))
 	if times >= 50 {
 		_res["msg"] = "超出预览次数"
@@ -213,6 +214,18 @@ func subUrl(list *[]map[string]interface{}, dataType string) *[]map[string]inter
 		if len(url) > 40 { //截取剑鱼标讯地址
 			v["url"] = url[:40] + "*****" + url[len(url)-10:]
 		}
+
+		re := regexp.MustCompile(`\/\/([^\/]+)`)
+		// 使用正则表达式查找匹配的结果
+		match := re.FindStringSubmatch(href)
+		if len(match) > 1 {
+			data := match[1]
+			ds := strings.Split(data, ".")
+			if len(ds) > 2 {
+				href = strings.Replace(href, ds[1], "****", 1)
+			}
+		}
+
 		if len(href) > 40 { //截取原文地址
 			v["href"] = href[:40] + "*****" + href[len(href)-10:]
 		} else if len(href) > 0 {

+ 5 - 0
src/jfw/modules/app/src/app/tag/msg.go

@@ -15,6 +15,11 @@ func Msg(mtype, key string) string {
 	return readproperty(mtype, key)
 }
 
+// 从json配置文件中读取值
+func Export() map[string]interface{} {
+	return config.ExportConfig
+}
+
 func Cdns(host, mtype, key string) string {
 	if host == "" {
 		return readproperty(mtype, key)

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

@@ -252,8 +252,5 @@
     "projecttype": true,
     "approvecity": true
   },
-  "ipInitAuthentication": "qwertyuiopzxcvbnm1234567890asdfghjkl",
-  "keywordRestrict": 100,
-  "buyerRestrict": 100,
-  "winnerRestrict": 100
+  "ipInitAuthentication": "qwertyuiopzxcvbnm1234567890asdfghjkl"
 }

+ 8 - 0
src/jfw/modules/app/src/export.json

@@ -0,0 +1,8 @@
+{
+  "exportLimit": {
+    "wordsLimit": 100,
+    "countLimit": 300,
+    "buyerLimit": 100,
+    "winnerLimit": 100
+  }
+}

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

@@ -16,8 +16,7 @@ app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8vi
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
 bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=

+ 2 - 0
src/jfw/modules/app/src/jfw/config/config.go

@@ -15,6 +15,7 @@ import (
 var (
 	// Seoconfig_Version seo.josn 配置文件中的版本号,可以动态更新
 	Seoconfig_Version string
+	ExportConfig      map[string]interface{}
 	// Seoconfig_Mod_Version Seoconfig_Version 作为固定版本号 除非大版本更新需要改动,其他都更改Seoconfig_Mod_Version  王山  2020/06/11
 	Seoconfig_Mod_Version string
 	Seoconfig_Cdns        map[string]interface{}
@@ -30,6 +31,7 @@ var (
 func init() {
 	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.yaml")
 	util.ReadConfig(&Sysconfig)
+	util.ReadConfig("./export.json", &ExportConfig)
 	IpInit()
 	mails, _ := Sysconfig["mail"].([]interface{})
 	mailConfigArrMap := util.ObjArrToMapArr(mails)

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

@@ -68,7 +68,7 @@ func initXweb() {
 	xweb.RootApp().AppConfig.CacheTemplates = Sysconfig["cacheflag"].(bool)
 	xweb.RootApp().AddTmplVar("Msg", tag.Msg)
 	xweb.RootApp().AddTmplVar("Cdns", tag.Cdns)
-
+	xweb.RootApp().AddTmplVar("Export", tag.Export)
 	xweb.RootApp().AddTmplVar("Ad", tag.Ad)
 	xweb.RootApp().AddTmplVar("SafeUrl", tag.SafeUrl)
 	xweb.RootApp().Logger.SetOutputLevel(1) //输出日志,改为4则不输出任何日志

+ 2 - 1
src/jfw/modules/app/src/web/staticres/jyapp/dataExport/css/keyWord.css

@@ -243,8 +243,9 @@
 .text-overflow100 .weui-toast {
   margin-left: 0;
   width: 4.4rem;
+  padding: .16rem 0;
   min-height: .42rem;
-  font-size: 20px;
+  font-size: .28rem;
   -webkit-transform: translateX(-50%);
           transform: translateX(-50%);
 }

+ 10 - 2
src/jfw/modules/app/src/web/staticres/jyapp/dataExport/js/additionWord.js

@@ -13,16 +13,24 @@ $(function(){
             $(".enter.addkeyWord").show();
             $(".addKeyWord").hide();
             $(".showKeyWord").hide();
+            $('#add-buyer-word').hide()
         } else {
             $(".enter.addkeyWord").hide();
             $(".showKeyWord").show();
             $(".addKeyWord").show();
+            if (showKeyWordLength >= buyerLimit) {
+              $('#add-buyer-word').hide()
+              $('.buyer-more-tips').show()
+            } else {
+              $('#add-buyer-word').show()
+              $('.buyer-more-tips').hide()
+            }
         }
     }
     hasWords();
     
     // 添加按钮
-    $(".addKeyWord i").on('click',function(){
+    $(".addKeyBtn i").on('click',function(){
         window.location.href="/jyapp/front/dataExport/buyerInput";
     });
 
@@ -98,7 +106,7 @@ $(function(){
         var buttonDOM = $('.enter.addkeyWord .btn button')[0]
         buttonDOM.style.opacity = .5
         buttonDOM.setAttribute("disabled", true)
-
+        hasWords()
     })
 
     // 编辑

+ 22 - 3
src/jfw/modules/app/src/web/staticres/jyapp/dataExport/js/keyWord.js

@@ -27,7 +27,18 @@ $(function(){
         } else {
             $(".enter.addkeyWord").hide();
             $(".showKeyWord").show();
-            $(".addKeyWord").show();
+            // $(".addKeyWord").show();
+        }
+        if (getTotal() >= wordsLimit) {
+          $('.addKeyWord').hide()
+          $('.keyword-more-tips').show()
+          $('.addAdjunctWord.add-append-btn').attr('disabled', true)
+          $('.addExclusion.add-exclude-btn').attr('disabled', true)
+        } else {
+          $('.addKeyWord').show()
+          $('.keyword-more-tips').hide()
+          $('.addAdjunctWord.add-append-btn').removeAttr('disabled')
+          $('.addExclusion.add-exclude-btn').removeAttr('disabled')
         }
     }
     hasWords();
@@ -253,7 +264,7 @@ $(function(){
         var buttonDOM = $('.enter.addkeyWord .btn button')[0];
         buttonDOM.style.opacity = .5;
         buttonDOM.setAttribute("disabled", true);
-
+        hasWords();
     });
 
     // 编辑
@@ -270,22 +281,28 @@ $(function(){
                     var appended = keyWordArr[i].appended.length;
                     if(appended < 1){
                         str =  "添加 附加词";
+                        $(".addAdjunctWord").addClass('add-append-btn')
                     }else{
                         str = "编辑 附加词 ("+appended+")";
+                        $(".addAdjunctWord").removeAttr('disabled').removeClass('add-append-btn')
                     }
                 }else{
                     str =  "添加 附加词";
+                    $(".addAdjunctWord").addClass('add-append-btn')
                 }
                 $(this).parent().next().find(".addAdjunctWord").text(str);
                 if(keyWordArr[i].exclude!=null&&keyWordArr[i].exclude !== undefined){
                     var exclude = keyWordArr[i].exclude.length;
                     if(exclude < 1){
                         strs = "添加 排除词";
+                        $(".addExclusion").addClass('add-exclude-btn')
                     }else{
                         strs = "编辑 排除词 ("+exclude+")";
+                        $(".addExclusion").removeAttr('disabled').removeClass('add-exclude-btn')
                     }
                 }else{
                     strs = "添加 排除词";
+                    $(".addExclusion").addClass('add-exclude-btn')
                 }
                 $(this).parent().next().find(".addExclusion").text(strs);
             }
@@ -293,6 +310,7 @@ $(function(){
         $(this).parent().hide();
         $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
         $(oSpan).val('').focus().val(val);
+        hasWords()
         $(".addKeyWord").hide();
     });
 
@@ -377,7 +395,8 @@ $(function(){
             $this.parent().siblings().find('.key').text(keyWord)
             $this.parent().hide().siblings().show()
         }
-        $(".addKeyWord").show();
+        // $(".addKeyWord").show();
+        hasWords()
     })
 
     //去空格方法

+ 53 - 2
src/jfw/modules/app/src/web/templates/dataExport/dataExport_appended.html

@@ -103,6 +103,11 @@
         <i class="iconfont icon-tianjia"></i>
     </div>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var wordsLimit = limit.countLimit || 100
+      console.log(limit);
+    </script>
     <script>
         $(function () {
             var isPageHide = false;
@@ -198,6 +203,44 @@
                 $(".showKeyWord").show();
             }
         }
+        function sumArr(arr){
+          var sum = 0
+          arr.forEach(function(val){
+            sum += val
+          })
+          return sum
+        }
+        // 计算关键词、附加词、排除词总和
+        function getTotal () {
+          var data = []
+          /**
+           * 之前逻辑:
+           * 1.全量保存后取的是localStorage里的值(不包含当前输入的关键词、附加次、排除词);
+           * 2.sessionStorage存的值包含当前输入的词(首次添加的时候仅包含当前输入的关键词、编辑及其它时候包含已存的和当前输入的)
+           * 不改原有逻辑的情况下实时计算关键词、附加词、排除词总和可对比sessionStorage和localStorage的长度,有sessionStorage且长度大于已存的localStorage的长度,
+           * 则取sessionStorage
+          */
+          var sessionStorageKey = sessionStorage.keyWord ? JSON.parse(sessionStorage.keyWord) : null
+          if (sessionStorageKey && sessionStorageKey.length > keyWordArr.length) {
+            data = sessionStorageKey
+          } else {
+            data = keyWordArr
+          }
+          var keyLen = data.length
+          var arr = []
+          data.forEach(function(item) {
+            if (item.appended) {
+              arr.push(item.appended.length)
+            }
+            if (item.exclude) {
+              arr.push(item.exclude.length)
+            }
+          })
+          arr.push(keyLen)
+          var total = sumArr(arr)
+          console.log(total);
+          return total
+        }
         $(function(){
 
             $('.knowBtn').on('click',function(){
@@ -224,7 +267,12 @@
                 } else {
                     $(".enter.addkeyWord").hide();
                     $(".showKeyWord").show();
-                    $(".addKeyWord").show();
+                    // $(".addKeyWord").show();
+                }
+                if (getTotal() >= wordsLimit) {
+                  $(".addKeyWord").hide();
+                } else {
+                  $(".addKeyWord").show();
                 }
             }
             hasWords();
@@ -333,6 +381,7 @@
                 var buttonDOM = $('.enter.addkeyWord .btn button')[0];
                 buttonDOM.style.opacity = .5;
                 buttonDOM.setAttribute("disabled", true)
+                hasWords()
             });
 
             // 编辑
@@ -343,6 +392,7 @@
                 $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
                 $(oSpan).val('').focus().val(val);
                 $(".addKeyWord").hide();
+                hasWords()
             });
 
             // 编辑 删除
@@ -428,7 +478,8 @@
                     $(this).parent().hide().siblings().show()
                 }
                 //
-                $(".addKeyWord").show();
+                // $(".addKeyWord").show();
+                hasWords()
             });
 
             //去空格方法

+ 43 - 5
src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html

@@ -28,17 +28,30 @@
 	.keyWord .enter .btn .save-btn {
 		float: right;
 	}
-	.addKeyWord i {
+	.addKeyBtn i {
 		font-size: 1rem;
 		color: #2cb7ca;
 	}
-	.addKeyWord {
+	.addKeyBtn {
 		left: 44%;
 		position: fixed;
 		text-align: center;
 		bottom: 10%;
 	}
-
+  .buyer-more-tips{
+    display: none;
+    width: 100%;
+    padding: .14rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color:  #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
+  .buyer-more-tips > a{
+    color:#FF3A20;
+    text-decoration: underline;
+  }
 </style>
 
 <body>
@@ -70,13 +83,21 @@
 					</ul>
 				</div>
 					</section>
+          <div class="buyer-more-tips">
+            最多可添加{{Export.exportLimit.buyerLimit}}个采购单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a>
+          </div>
 			</div>
 		</div>
 	</div>
-	<div class="addKeyWord">
+	<div class="addKeyBtn" id="add-buyer-word">
 		<i class="iconfont icon-tianjia"></i>
 	</div>
 <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+<script>
+  var limit = {{Export.exportLimit}}
+  var buyerLimit = limit.buyerLimit || 100
+  console.log(limit);
+</script>
 <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/js/additionWord.js?v={{Msg "seo" "version"}}"></script>
 <script>
 	$(window).bind("pageshow", function(event){
@@ -88,7 +109,7 @@
 	if(localStorage.buyer !== "" && localStorage.buyer !== undefined){
 		var buyer = localStorage.buyer.split(",");
 		buyerArr = buyer;
-		console.log(buyerArr);
+		// console.log(buyerArr);
 		var html = "";
 		for(var i in buyer){
 			html +=
@@ -109,7 +130,24 @@
                     </li>`
 		}
 		$('.showKeyWord > ul').prepend(html);
+    console.log(buyerArr, buyerLimit);
+    if (buyerArr.length >= buyerLimit) {
+      $('#add-buyer-word').hide()
+      $('.buyer-more-tips').show()
+    } else {
+      $('#add-buyer-word').show()
+      $('.buyer-more-tips').hide()
+    }
 	}
+  function goPerfect() {
+    var source = ''
+    if(utils.$env.platform === 'h5') {
+      source = 'h5_Dataself_buyermore_customization'
+    } else {
+      source = 'app_Dataself_buyermore_customization'
+    }
+    location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+  }
 </script>
 <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 

+ 53 - 3
src/jfw/modules/app/src/web/templates/dataExport/dataExport_exclude.html

@@ -103,6 +103,11 @@
         <i class="iconfont icon-tianjia"></i>
     </div>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var wordsLimit = limit.countLimit || 100
+      console.log(limit);
+    </script>
     <script>
         $(function () {
             var isPageHide = false;
@@ -198,7 +203,44 @@
                 $(".showKeyWord").show();
             }
         }
-
+        function sumArr(arr){
+          var sum = 0
+          arr.forEach(function(val){
+            sum += val
+          })
+          return sum
+        }
+        // 计算关键词、附加词、排除词总和
+        function getTotal () {
+          var data = []
+          /**
+           * 之前逻辑:
+           * 1.全量保存后取的是localStorage里的值(不包含当前输入的关键词、附加次、排除词);
+           * 2.sessionStorage存的值包含当前输入的词(首次添加的时候仅包含当前输入的关键词、编辑及其它时候包含已存的和当前输入的)
+           * 不改原有逻辑的情况下实时计算关键词、附加词、排除词总和可对比sessionStorage和localStorage的长度,有sessionStorage且长度大于已存的localStorage的长度,
+           * 则取sessionStorage
+          */
+          var sessionStorageKey = sessionStorage.keyWord ? JSON.parse(sessionStorage.keyWord) : null
+          if (sessionStorageKey && sessionStorageKey.length > keyWordArr.length) {
+            data = sessionStorageKey
+          } else {
+            data = keyWordArr
+          }
+          var keyLen = data.length
+          var arr = []
+          data.forEach(function(item) {
+            if (item.appended) {
+              arr.push(item.appended.length)
+            }
+            if (item.exclude) {
+              arr.push(item.exclude.length)
+            }
+          })
+          arr.push(keyLen)
+          var total = sumArr(arr)
+          console.log(total);
+          return total
+        }
         $(function(){
 
             $('.knowBtn').on('click',function(){
@@ -225,7 +267,12 @@
                 } else {
                     $(".enter.addkeyWord").hide();
                     $(".showKeyWord").show();
-                    $(".addKeyWord").show();
+                    // $(".addKeyWord").show();
+                }
+                if (getTotal() >= wordsLimit) {
+                  $(".addKeyWord").hide();
+                } else {
+                  $(".addKeyWord").show();
                 }
             }
             hasWords();
@@ -342,6 +389,7 @@
                 var buttonDOM = $('.enter.addkeyWord .btn button')[0];
                 buttonDOM.style.opacity = .5;
                 buttonDOM.setAttribute("disabled", true)
+                hasWords();
             });
 
             // 编辑
@@ -352,6 +400,7 @@
                 $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
                 $(oSpan).val('').focus().val(val);
                 $(".addKeyWord").hide();
+                hasWords();
             });
 
             // 编辑 删除
@@ -436,7 +485,8 @@
                     $(this).parent().siblings().find('.key').text(exclude);
                     $(this).parent().hide().siblings().show()
                 }
-                $(".addKeyWord").show();
+                // $(".addKeyWord").show();
+                hasWords();
             });
 
             //去空格方法

+ 404 - 313
src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWord.html

@@ -2,76 +2,106 @@
 <html lang="en">
 
 <head>
-    {{include "/common/meta.html"}}
-    <title>关键词</title>
-    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
-    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
-    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
-    <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
-	{{include "/common/js.html"}}
+  {{include "/common/meta.html"}}
+  <title>关键词</title>
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
+  <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+  {{include "/common/js.html"}}
 </head>
 <style>
-	.page{
-		display: flex;
-		flex-direction: column;
-		height: 100%;
-		justify-content: space-between;
-	}
-    body{
-        background: rgba(245,244,249,1)!important;
-        line-height: unset;
-    }
-    .keyWord .enter .btn .save {
-        float: right;
-    }
-    .addAdjunctWord{
-        margin-top: 0!important;
-        border-top: 1px solid #e0e0e0;
-    }
-    .addExclusion{
-        margin-top: 0!important;
-        border-top: 1px solid #e0e0e0;
-    }
-    .addKeyWord i {
-		font-size: 1rem;
-		color: #2cb7ca;
-	}
-	.addKeyWord {
-		left: 44%;
-		position: fixed;
-		text-align: center;
-		bottom: 10%;
-	}
+  .page {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    justify-content: space-between;
+  }
+
+  body {
+    background: rgba(245, 244, 249, 1) !important;
+    line-height: unset;
+  }
+
+  .keyWord {
+    height: 100%;
+  }
+
+  .keyWord .enter .btn .save {
+    float: right;
+  }
+
+  .addAdjunctWord {
+    margin-top: 0 !important;
+    border-top: 1px solid #e0e0e0;
+  }
+
+  .addExclusion {
+    margin-top: 0 !important;
+    border-top: 1px solid #e0e0e0;
+  }
+
+  .addKeyWord i {
+    font-size: 1rem;
+    color: #2cb7ca;
+  }
+
+  .addKeyWord {
+    left: 44%;
+    position: fixed;
+    text-align: center;
+    bottom: 10%;
+  }
+
+  .keyword-more-tips {
+    display: none;
+    width: 100%;
+    padding: .24rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color: #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
 
+  .keyword-more-tips>a {
+    color: #FF3A20;
+    text-decoration: underline;
+  }
 </style>
+
 <body>
-	<div class="page">
-	    <div class="app-layout-header jy-app-header">
-	        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
-	        关键词
-	    <span></span></div>
-		<div class="app-layout-content-b">
-	    	<div class="keyWord">
-	        <section class="content">
-	        <p class="title">示例:软件系统(关键词);  开发(附加词);  运维(排除词)</p>
-	        <!-- 添加关键词 -->
-	        <div class="enter addkeyWord">
-	            <input type="text" class="enterOne" placeholder="请输入关键词" />
-	            <div class="btnChoose" style="display:none;">
-	                <button class="addAdjunctWord appended" disabled>添加 附加词</button>
-	                <button class="addExclusion exclude" disabled>添加 排除词</button>
-	            </div>
-	            <div class="btn">
-	                <button class="save" disabled>确认</button>
-	                <button class="close">取消</button>
-	            </div>
-	        </div>
+  <div class="page">
+    <div class="app-layout-header jy-app-header">
+      <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+      关键词
+      <span></span></div>
+    <div class="app-layout-content-b">
+      <div class="keyWord">
+        <section class="content">
+          <p class="title">示例:软件系统(关键词); 开发(附加词); 运维(排除词)</p>
+          <!-- 添加关键词 -->
+          <div class="enter addkeyWord">
+            <input type="text" class="enterOne" placeholder="请输入关键词" />
+            <div class="btnChoose" style="display:none;">
+              <button class="addAdjunctWord appended" disabled>添加 附加词</button>
+              <button class="addExclusion exclude" disabled>添加 排除词</button>
+            </div>
+            <div class="btn">
+              <button class="save" disabled>确认</button>
+              <button class="close">取消</button>
+            </div>
+          </div>
 
-	        <!-- 添加排除词 -->
-	        <!-- <div class="enter exclusion" style="display:none;">
+          <!-- 添加排除词 -->
+          <!-- <div class="enter exclusion" style="display:none;">
 	            <input type="text" placeholder="请输入排除词" class="enterOne">
 	            <div class="btn">
 	                <button disabled>确认</button>
@@ -79,86 +109,125 @@
 	        </div> -->
 
 
-	        <!-- 添加关键词显示列表 -->
-	        <div class="showKeyWord">
-	            <ul>
+          <!-- 添加关键词显示列表 -->
+          <div class="showKeyWord">
+            <ul>
 
-	            </ul>
+            </ul>
 
-	        </div>
+          </div>
 
-	        <div class="problem">
-	            疑问解答 <i class="iconfont icon-wenhao"></i>
-	        </div>
-	        </section>
-	    </div>
+          <div class="problem">
+            疑问解答 <i class="iconfont icon-wenhao"></i>
+          </div>
+        </section>
+        <div class="keyword-more-tips">关键词已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div>
+      </div>
 
-	        <!-- 疑难问题弹窗 -->
-	        <div class="problemPop">
-	            <div class="problemPopContent">
-	                <h3>疑问解答</h3>
-	                <ul>
-	                    <li>
-	                        <p>例:某公司主营业务为软件系统开发</p>
-	                    </li>
-	                    <li>
-	                        <h4>关键词:</h4>
-	                        <p>目标信息中的关键性词语,如“软件系统”</p>
-	                    </li>
-	                    <li>
-	                        <h4>附加词:</h4>
-	                        <p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-	                    </li>
-	                    <li>
-	                        <h4>排除词:</h4>
-	                        <p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-	                    </li>
-	                </ul>
-	                <button class="knowBtn">我知道了</button>
-	            </div>
+      <!-- 疑难问题弹窗 -->
+      <div class="problemPop">
+        <div class="problemPopContent">
+          <h3>疑问解答</h3>
+          <ul>
+            <li>
+              <p>例:某公司主营业务为软件系统开发</p>
+            </li>
+            <li>
+              <h4>关键词:</h4>
+              <p>目标信息中的关键性词语,如“软件系统”</p>
+            </li>
+            <li>
+              <h4>附加词:</h4>
+              <p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
+            </li>
+            <li>
+              <h4>排除词:</h4>
+              <p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
+            </li>
+          </ul>
+          <button class="knowBtn">我知道了</button>
+        </div>
 
-	        </div>
-	    </div>
-	</div>
-	<div class="addKeyWord">
-        <i class="iconfont icon-tianjia"></i>
+      </div>
     </div>
-    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js"></script>
-    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
-    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/js/keyWord.js?v={{Msg "seo" "version"}}2"></script>
-    <script>
-        $(window).bind("pageshow", function(event){
-            if(event.originalEvent.persisted){
-                window.location.reload();
-            }
-        });
+  </div>
+  <div class="addKeyWord">
+    <i class="iconfont icon-tianjia"></i>
+  </div>
+  <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js"></script>
+  <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+  <script>
+    var limit = {{Export.exportLimit}};
+    var wordsLimit = limit.countLimit || 100
+    console.log(limit);
+  </script>
+  <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/js/keyWord.js?v={{Msg "seo" "version"}}2"></script>
+  <script>
+    $(window).bind("pageshow", function (event) {
+      if (event.originalEvent.persisted) {
+        window.location.reload();
+      }
+    });
 
 
-//		(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('focus', (e) => {
-//		    // 这里加了个类型判断,因为a等元素也会触发blur事件
-//		    alert("666")
-//		    $(".app-layout-header").css("position","static");
-//		}, true)
+    //		(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('focus', (e) => {
+    //		    // 这里加了个类型判断,因为a等元素也会触发blur事件
+    //		    alert("666")
+    //		    $(".app-layout-header").css("position","static");
+    //		}, true)
 
+    function goPerfect() {
+      var source = ''
+      if (utils.$env.platform === 'h5') {
+        source = 'h5_Dataself_keywordmore_customization'
+      } else {
+        source = 'app_Dataself_keywordmore_customization'
+      }
+      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+    }
 
+    function sumArr(arr){
+      var sum = 0
+      arr.forEach(function(val){
+        sum += val
+      })
+      return sum
+    }
 
+    // 计算关键词、附加词、排除词总和
+    function getTotal () {
+      var keyLen = keyWordArr.length
+      var arr = []
+      keyWordArr.forEach(function(item) {
+        if (item.appended) {
+          arr.push(item.appended.length)
+        }
+        if (item.exclude) {
+          arr.push(item.exclude.length)
+        }
+      })
+      arr.push(keyLen)
+      var total = sumArr(arr)
+      console.log(total);
+      return total
+    }
 
-        var keyWordArr = [];
-        if(localStorage.keyWord !== "" && localStorage.keyWord !== undefined){
-            var keyWord = localStorage.keyWord;
-            keyWordArr = JSON.parse(keyWord);
-            var keyWordHtml = "";
-            for(var i in keyWordArr){
-                var append= keyWordArr[i].appended;
-                if (append===null||append===undefined){
-                  append=new Array();
-                }
-                var  exclude = keyWordArr[i].exclude;
-                if (exclude===null||exclude===undefined){
-                  exclude=new Array();
-                }
-                if(append !== undefined && exclude === undefined){
-                    keyWordHtml += `
+    var keyWordArr = [];
+    if (localStorage.keyWord !== "" && localStorage.keyWord !== undefined) {
+      var keyWord = localStorage.keyWord;
+      keyWordArr = JSON.parse(keyWord);
+      var keyWordHtml = "";
+      for (var i in keyWordArr) {
+        var append = keyWordArr[i].appended;
+        if (append === null || append === undefined) {
+          append = new Array();
+        }
+        var exclude = keyWordArr[i].exclude;
+        if (exclude === null || exclude === undefined) {
+          exclude = new Array();
+        }
+        if (append !== undefined && exclude === undefined) {
+          keyWordHtml += `
                         <li>
                             <div class="one">
                                 <div>
@@ -181,8 +250,8 @@
                                 <button class="ascertainKey">确定</button>
                             </div>
                         </li>`;
-                }else if(append === undefined && exclude !== undefined){
-                    keyWordHtml += `
+        } else if (append === undefined && exclude !== undefined) {
+          keyWordHtml += `
                         <li>
                             <div class="one">
                                 <div>
@@ -205,8 +274,8 @@
                                 <button class="ascertainKey">确定</button>
                             </div>
                         </li>`;
-                }else if(append !== undefined && exclude !== undefined){
-                    keyWordHtml += `
+        } else if (append !== undefined && exclude !== undefined) {
+          keyWordHtml += `
                         <li>
                             <div class="one">
                                 <div>
@@ -233,8 +302,8 @@
                                 <button class="ascertainKey">确定</button>
                             </div>
                         </li>`;
-                }else if(append === undefined && exclude === undefined){
-                    keyWordHtml += `
+        } else if (append === undefined && exclude === undefined) {
+          keyWordHtml += `
                         <li>
                             <div class="one">
                                 <div>
@@ -253,195 +322,217 @@
                                 <button class="ascertainKey">确定</button>
                             </div>
                         </li>`;
-                }
-                keyWordHtml = keyWordHtml.replace(/,/g, " ");
-            }
-            $('.showKeyWord > ul').prepend(keyWordHtml);
-            //
-
         }
-        //
-        if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-            turn = $('.addkeyWord input.enterOne').val();
-            var keys = JSON.parse(sessionStorage.keyWord);
-            if (turn == '' && keys.length === 1) {
-                turn = keys[0].keyWord
-                $('.addkeyWord input.enterOne').val(turn)
+        keyWordHtml = keyWordHtml.replace(/,/g, " ");
+      }
+      $('.showKeyWord > ul').prepend(keyWordHtml);
+      //
+      console.log(keyWordArr);
+      
+      if (getTotal() >= wordsLimit) {
+        $('.addKeyWord').hide()
+        $('.keywords-more-tips').show()
+        $('.addAdjunctWord.add-append-btn').attr('disabled', true)
+        $('.addExclusion.add-exclude-btn').attr('disabled', true)
+      } else {
+        $('.addKeyWord').show()
+        $('.keywords-more-tips').hide()
+        $('.addAdjunctWord').removeAttr('disabled')
+        $('.addExclusion.add-exclude-btn').removeAttr('disabled')
+      }
+    }
+    //
+    if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+      turn = $('.addkeyWord input.enterOne').val();
+      var keys = JSON.parse(sessionStorage.keyWord);
+      if (turn == '' && keys.length === 1) {
+        turn = keys[0].keyWord
+        $('.addkeyWord input.enterOne').val(turn)
+      }
+      for (var a in keys) {
+        if (keys[a].keyWord === turn) {
+          $(".btnChoose").show();
+          //数量
+          var str = "";
+          var strs = "";
+          if (keys[a].appended != null && keys[a].appended !== undefined) {
+            var appended = keys[a].appended.length;
+            if (appended < 1) {
+              str = "添加 附加词";
+              $(".addAdjunctWord").addClass('add-append-btn')
+            } else {
+              str = "编辑 附加词 (" + appended + ")";
+              $(".addAdjunctWord").removeClass('add-append-btn')
             }
-            for(var a in keys){
-                if (keys[a].keyWord === turn){
-                    $(".btnChoose").show();
-                    //数量
-                    var str = "";
-                    var strs = "";
-                    if(keys[a].appended!=null&&keys[a].appended !== undefined){
-                        var appended = keys[a].appended.length;
-                        if(appended < 1){
-                            str =  "添加 附加词";
-                        }else{
-                            str = "编辑 附加词 ("+appended+")";
-                        }
-                    }else{
-                        str =  "添加 附加词";
-                    }
-                    $(".addAdjunctWord").text(str);
-                    if(keys[a].exclude!=null&&keys[a].exclude !== undefined){
-                        var exclude =keys[a].exclude.length;
-                        if(exclude < 1){
-                            strs = "添加 排除词";
-                        }else{
-                            strs = "编辑 排除词 ("+exclude+")";
-                        }
-                    }else{
-                        strs = "添加 排除词";
-                    }
-                    $(".addExclusion").text(strs);
-                }
+          } else {
+            str = "添加 附加词";
+            $(".addAdjunctWord").addClass('add-append-btn')
+          }
+          $(".addAdjunctWord").text(str);
+          if (keys[a].exclude != null && keys[a].exclude !== undefined) {
+            var exclude = keys[a].exclude.length;
+            if (exclude < 1) {
+              strs = "添加 排除词";
+              $(".addExclusion").addClass('add-exclude-btn')
+            } else {
+              strs = "编辑 排除词 (" + exclude + ")";
+              $(".addExclusion").removeClass('add-exclude-btn')
             }
+          } else {
+            strs = "添加 排除词";
+            $(".addExclusion").addClass('add-exclude-btn')
+          }
+          $(".addExclusion").text(strs);
         }
-        //
-        if($(".enterOne").val()!==""){
-            $('.enter.addkeyWord .btnChoose .appended').prop("disabled", false);
-            $('.enter.addkeyWord .btnChoose .exclude').prop("disabled", false);
-            $('.enter.addkeyWord .btn > button').prop("disabled", false);
-            $('.enter.addkeyWord .btn > button').css("opacity", 1);
-        }
-        $(".appended").on('click', function () {
-            var keyWord = $(this).parent().prev().val();
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
-
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
-            buttonDOM.prop("disabled", true);
-            //
-            if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-                var keys = JSON.parse(sessionStorage.keyWord);
-                for(var i in keys){
-                    if(keys[i].keyWord===turn){
-	                	if(keyWord!==turn){
-	                		keys[i].keyWord = keyWord;
-	                	}
-	                	sessionStorage.keyWord = JSON.stringify(keys);
-	                    window.location.href = "/jyapp/front/dataExport/appended?keyWord="+keyWord;
-	                    return
-	                }
-                }
-            }
-            //
-            var obj = [{"keyWord":keyWord}];
-            sessionStorage.keyWord = JSON.stringify(obj);
-            window.location.href = "/jyapp/front/dataExport/appended?keyWord="+keyWord;
-        });
-        $(".exclude").on('click', function () {
-            var keyWord = $(this).parent().prev().val();
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
+      }
+    }
+    //
+    if ($(".enterOne").val() !== "") {
+      $('.enter.addkeyWord .btnChoose .appended').prop("disabled", false);
+      $('.enter.addkeyWord .btnChoose .exclude').prop("disabled", false);
+      $('.enter.addkeyWord .btn > button').prop("disabled", false);
+      $('.enter.addkeyWord .btn > button').css("opacity", 1);
+    }
+    $(".appended").on('click', function () {
+      var keyWord = $(this).parent().prev().val();
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
 
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            var buttonDOM = $('.enter.addkeyWord .btnChoose .exclude');
-            buttonDOM.prop("disabled", true);
-            //
-            if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-                var keys = JSON.parse(sessionStorage.keyWord);
-                for(var i in keys){
-                    if(keys[i].keyWord===turn){
-	                	if(keyWord!==turn){
-	                		keys[i].keyWord = keyWord;
-	                	}
-	                	sessionStorage.keyWord = JSON.stringify(keys);
-	                    window.location.href = "/jyapp/front/dataExport/exclude?keyWord="+keyWord;
-	                    return
-	                }
-                }
-            }
-            //
-            var obj = [{"keyWord":keyWord}];
-            sessionStorage.keyWord = JSON.stringify(obj);
-            window.location.href = "/jyapp/front/dataExport/exclude?keyWord="+keyWord;
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        //
-        $(".showKeyWord").on('click', '.addAdjunctWord',function(e){
-            var keyWord = $(this).parent().prev().find('.key').text();
-			if($(this).prev().val().replace(/\s+/g,"").length < 1){
-            	weui.toast('关键词不能为空', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
+        return
+      }
+      var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
+      buttonDOM.prop("disabled", true);
+      //
+      if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+        var keys = JSON.parse(sessionStorage.keyWord);
+        for (var i in keys) {
+          if (keys[i].keyWord === turn) {
+            if (keyWord !== turn) {
+              keys[i].keyWord = keyWord;
             }
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
+            sessionStorage.keyWord = JSON.stringify(keys);
+            window.location.href = "/jyapp/front/dataExport/appended?keyWord=" + keyWord;
+            return
+          }
+        }
+      }
+      //
+      var obj = [{
+        "keyWord": keyWord
+      }];
+      sessionStorage.keyWord = JSON.stringify(obj);
+      window.location.href = "/jyapp/front/dataExport/appended?keyWord=" + keyWord;
+    });
+    $(".exclude").on('click', function () {
+      var keyWord = $(this).parent().prev().val();
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
 
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            sessionStorage.removeItem("keyWord");
-            window.location.href = "/jyapp/front/dataExport/appended?keyWord="+keyWord;
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        $(".showKeyWord").on('click', '.addExclusion',function(e){
-            var keyWord = $(this).parent().prev().find('.key').text();
-            if($(this).parent().find("textarea").val().replace(/\s+/g,"").length < 1){
-            	weui.toast('关键词不能为空', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
-
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
+        return
+      }
+      var buttonDOM = $('.enter.addkeyWord .btnChoose .exclude');
+      buttonDOM.prop("disabled", true);
+      //
+      if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+        var keys = JSON.parse(sessionStorage.keyWord);
+        for (var i in keys) {
+          if (keys[i].keyWord === turn) {
+            if (keyWord !== turn) {
+              keys[i].keyWord = keyWord;
             }
-            sessionStorage.removeItem("keyWord");
-            window.location.href = "/jyapp/front/dataExport/exclude?keyWord="+keyWord;
+            sessionStorage.keyWord = JSON.stringify(keys);
+            window.location.href = "/jyapp/front/dataExport/exclude?keyWord=" + keyWord;
+            return
+          }
+        }
+      }
+      //
+      var obj = [{
+        "keyWord": keyWord
+      }];
+      sessionStorage.keyWord = JSON.stringify(obj);
+      window.location.href = "/jyapp/front/dataExport/exclude?keyWord=" + keyWord;
+    });
+    //
+    $(".showKeyWord").on('click', '.addAdjunctWord', function (e) {
+      var keyWord = $(this).parent().prev().find('.key').text();
+      if ($(this).prev().val().replace(/\s+/g, "").length < 1) {
+        weui.toast('关键词不能为空', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
+        return
+      }
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
 
-        $('.addkeyWord .btn .close').on('click', function () {
-            sessionStorage.removeItem("keyWord");
-            window.history.back();
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        //
-        $(".showKeyWord ul li .one").each(function () {
-            var dom = $(this).children().find("p.addition").html();
-            if(dom === ""){
-                $(this).children().find("p.addition").parent().remove();
-            }
-            var doms = $(this).children().find("p.exclusion").html();
-            if(doms === ""){
-                $(this).children().find("p.exclusion").parent().remove();
-            }
+        return
+      }
+      sessionStorage.removeItem("keyWord");
+      window.location.href = "/jyapp/front/dataExport/appended?keyWord=" + keyWord;
+    });
+    $(".showKeyWord").on('click', '.addExclusion', function (e) {
+      var keyWord = $(this).parent().prev().find('.key').text();
+      if ($(this).parent().find("textarea").val().replace(/\s+/g, "").length < 1) {
+        weui.toast('关键词不能为空', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-    </script>
-<!--百度统计end-->
-{{include "/common/baiducc.html"}}
+        return
+      }
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
+
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
+        });
+        return
+      }
+      sessionStorage.removeItem("keyWord");
+      window.location.href = "/jyapp/front/dataExport/exclude?keyWord=" + keyWord;
+    });
+
+    $('.addkeyWord .btn .close').on('click', function () {
+      sessionStorage.removeItem("keyWord");
+      window.history.back();
+    });
+    //
+    $(".showKeyWord ul li .one").each(function () {
+      var dom = $(this).children().find("p.addition").html();
+      if (dom === "") {
+        $(this).children().find("p.addition").parent().remove();
+      }
+      var doms = $(this).children().find("p.exclusion").html();
+      if (doms === "") {
+        $(this).children().find("p.exclusion").parent().remove();
+      }
+    });
+  </script>
+  <!--百度统计end-->
+  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

+ 110 - 7
src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWordInput.html

@@ -23,9 +23,31 @@
     body{
         background: rgba(245,244,249,1)!important;
     }
+    .keyWord{
+      height: 100%;
+    }
     .keyWord .enter .btn .save {
         float: right;
     }
+    .keyword-more-tips {
+      display: none;
+      width: 100%;
+      padding: .24rem .32rem;
+      background: rgba(249, 242, 234, 1);
+      color: #FF9F40;
+      font-size: .26rem;
+      line-height: .4rem;
+      text-align: center;
+    }
+
+    .keyword-more-tips>a {
+      color: #FF3A20;
+      text-decoration: underline;
+    }
+    button:disabled,
+    button[disabled]{
+      opacity: 0.6!important;
+    }
 </style>
 <body>
 	<div class="page">
@@ -41,8 +63,8 @@
     <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="请输入关键词" />
         <div class="btnChoose" style="display:none;">
-            <button class="addAdjunctWord appended" disabled>添加 附加词</button>
-            <button class="addExclusion exclude" disabled>添加 排除词</button>
+            <button class="addAdjunctWord appended" disabled data-attr="add">添加 附加词</button>
+            <button class="addExclusion exclude" disabled data-attr="add">添加 排除词</button>
         </div>
         <div class="btn">
             <button class="save" disabled>确认</button>
@@ -54,7 +76,7 @@
         疑问解答 <i class="iconfont icon-wenhao"></i>
     </div>
    </section>
-
+   <!-- <div class="keyword-more-tips">关键词已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div> -->
 </div>
 <!-- 疑难问题弹窗 -->
     <div class="problemPop">
@@ -84,6 +106,11 @@
 		</div>
 	</div>
 <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+<script>
+  var limit = {{Export.exportLimit}};
+  var wordsLimit = limit.countLimit || 100
+  console.log(limit);
+</script>
 <script>
     $(function () {
         var isPageHide = false;
@@ -103,10 +130,78 @@
         keyWordArr = JSON.parse(keyWord);
     }
     //
-    //
+    function goPerfect() {
+      var source = ''
+      if (utils.$env.platform === 'h5') {
+        source = 'h5_Dataself_keywordmore_customization'
+      } else {
+        source = 'app_Dataself_keywordmore_customization'
+      }
+      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+    }
+    function sumArr(arr){
+      var sum = 0
+      arr.forEach(function(val){
+        sum += val
+      })
+      return sum
+    }
+
+    // 计算关键词、附加词、排除词总和
+    function getTotal () {
+      var keyWordArr = JSON.parse(localStorage.getItem("keyWord")) || []
+      var keyLen = keyWordArr.length
+      var arr = []
+      keyWordArr.forEach(function(item) {
+        if (item.appended) {
+          arr.push(item.appended.length)
+        }
+        if (item.exclude) {
+          arr.push(item.exclude.length)
+        }
+      })
+      arr.push(keyLen)
+      /**
+       * 此处取计算当前页关键词、附加词、排除词(当前页未保存前不存入localStorage)
+       * 关键词:输入框有值即+1
+       * 附加词、关键词取文案中的数字
+       * 原来的逻辑当前页的关键词、附加词、排除词是取sessionStorage取值,但没有及时清除(编辑、添加来回跳转的时候在其它页面会继续取sessionStorage),刷新页面仍会有值导致计算不准确
+       * */
+      if ($('.enterOne').val().trim()) {
+        arr.push(1)
+      }
+      var appendText= $('.addAdjunctWord.appended').text();
+      var excludeText = $('.addExclusion.exclude').text();
+      var appendCount = appendText.match(/\d/g) ? appendText.match(/\d/g)[0] : 0;
+      var excludeCount = excludeText.match(/\d/g) ? excludeText.match(/\d/g)[0] : 0;
+      arr.push(Number(appendCount))
+      arr.push(Number(excludeCount))
+      var total = sumArr(arr)
+      console.log(total);
+      return total
+    }
+    function hasWords () {
+        if (getTotal() >= wordsLimit) {
+          if (getTotal() === wordsLimit) {
+            $('[data-attr="add"]').attr('disabled', true)
+          } else {
+            // $('.keyword-more-tips').show()
+            $('.save').attr('disabled', true)
+            $('[data-attr="add"]').attr('disabled', true)
+          }
+        } else {
+          // $('.keyword-more-tips').hide()
+          $('.save').removeAttr('disabled')
+          if ($('.enterOne').val().trim()) {
+            $('.appended').removeAttr('disabled')
+            $('.exclude').removeAttr('disabled')
+          }
+        }
+    }
     $(function() {
+        hasWords()
         $(".enterOne").focus(function () {
-            $(".btnChoose").show();
+          $(".btnChoose").show();
         });
         $('.knowBtn').on('click', function () {
             $(".problemPop").hide()
@@ -131,6 +226,7 @@
                 $(this).next().find(".appended").prop("disabled", true);
                 $(this).next().find(".exclude").prop("disabled", true);
             }
+            hasWords()
         });
 
         // 添加 按钮的点击事件
@@ -225,24 +321,31 @@
                     var appended = keys[a].appended.length;
                     if(appended < 1){
                         str =  "添加 附加词";
+                        $(".addAdjunctWord").attr('data-attr', 'add');
                     }else{
                         str = "编辑 附加词 ("+appended+")";
+                        $(".addAdjunctWord").removeAttr('data-attr');
+
                     }
                 }else{
                     str =  "添加 附加词";
+                    $(".addAdjunctWord").attr('data-attr', 'add');
                 }
-                $(".addAdjunctWord").text(str);
+                $(".addAdjunctWord").text(str)
                 if(keys[a].exclude !== undefined){
                     var exclude =keys[a].exclude.length;
                     if(exclude < 1){
                         strs = "添加 排除词";
+                        $(".addExclusion").attr('data-attr', 'add');
                     }else{
                         strs = "编辑 排除词 ("+exclude+")";
+                        $(".addExclusion").removeAttr('data-attr');
                     }
                 }else{
                     strs = "添加 排除词";
+                    $(".addExclusion").attr('data-attr', 'add');
                 }
-                $(".addExclusion").text(strs);
+                $(".addExclusion").text(strs)
             }
         }
     }

+ 304 - 239
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html

@@ -2,94 +2,132 @@
 <html lang="en">
 
 <head>
-	{{include "/common/meta.html"}}
-	<title>中标单位</title>
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
-	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
-	<link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}'/>
-	<script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
-	<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
-	{{include "/common/js.html"}}
-	</head>
-	<style>
-		.page{
-			display: flex;
-			flex-direction: column;
-			height: 100%;
-			justify-content: space-between;
-		}
-		body{
-			background: rgba(245,244,249,1)!important;
-		}
-		.keyWord .enter .btn .save-btn {
-			float: right;
-		}
-		.addKeyWord i {
-			font-size: 1rem;
-			color: #2cb7ca;
-		}
-		.addKeyWord {
-			left: 44%;
-			position: fixed;
-			text-align: center;
-			bottom: 10%;
-		}
-	</style>
-	<body>
-		<div class="page">
-			<div class="app-layout-header jy-app-header">
-				<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
-				中标单位
-			<span></span></div>
-			<div class="app-layout-content-b">
-				<div class="keyWord">
-						<div class="enter addkeyWord">
-						<input type="text" class="enterOne" placeholder="中标单位名称" />
-						<div class="btn fixed-bottom">
-						<button class="save-btn" disabled>确认</button>
-						<button class="close">取消</button>
-				</div>
-				</div>
+  {{include "/common/meta.html"}}
+  <title>中标单位</title>
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
+  <link rel="stylesheet"
+    href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}' />
+  <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+  <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+  {{include "/common/js.html"}}
+</head>
+<style>
+  .page {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    justify-content: space-between;
+  }
 
-				<!-- 添加附加词显示列表 -->
-				<div class="showKeyWord">
-						<ul>
+  body {
+    background: rgba(245, 244, 249, 1) !important;
+  }
 
-						</ul>
+  .keyWord .enter .btn .save-btn {
+    float: right;
+  }
 
-						</div>
-						<div class="association-list-box" style="display: none;">
-							<ul class="association-list">
-							</ul>
-						</div>
+  .content {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    overflow-y: scroll;
+  }
 
-						</div>
+  .addKeyBtn i {
+    font-size: 1rem;
+    color: #2cb7ca;
+  }
 
-			</div>
-		</div>
-		<div class="addKeyWord">
-			<i class="iconfont icon-tianjia"></i>
-		</div>
+  .addKeyBtn {
+    left: 44%;
+    position: fixed;
+    text-align: center;
+    bottom: 10%;
+  }
+
+  .ent-more-tips {
+    display: none;
+    width: 100%;
+    padding: .14rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color: #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
+
+  .ent-more-tips>a {
+    color: #FF3A20;
+    text-decoration: underline;
+  }
+</style>
+
+<body>
+  <div class="page">
+    <div class="app-layout-header jy-app-header">
+      <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+      中标单位
+      <span></span></div>
+    <div class="app-layout-content-b">
+      <div class="keyWord">
+        <section class="content">
+          <div class="enter addkeyWord">
+            <input type="text" class="enterOne" placeholder="中标单位名称" />
+            <div class="btn fixed-bottom">
+              <button class="save-btn" disabled>确认</button>
+              <button class="close">取消</button>
+            </div>
+          </div>
+
+          <!-- 添加附加词显示列表 -->
+          <div class="showKeyWord">
+            <ul>
+
+            </ul>
+
+          </div>
+          <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
+          </div>
+        </section>
+        <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div>
+      </div>
+    </div>
+    <div class="addKeyBtn" id="add-ent-word">
+      <i class="iconfont icon-tianjia"></i>
+    </div>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js"></script>
-	<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
-	<script>
-		$(window).bind("pageshow", function(event){
-			if(event.originalEvent.persisted){
-				window.location.reload();
-			}
-		});
-		var winnerArr = [];
-		if(localStorage.winner !== "" && localStorage.winner !== undefined){
-			var winner = localStorage.winner.split(",");
-			winnerArr = winner;
-			var html = "";
-			for(var i in winner){
-				html +=
-						`<li>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var winnerLimit = limit.winnerLimit || 100
+      console.log(limit);
+    </script>
+    <script>
+      $(window).bind("pageshow", function (event) {
+        if (event.originalEvent.persisted) {
+          window.location.reload();
+        }
+      });
+      var winnerArr = [];
+      if (localStorage.winner !== "" && localStorage.winner !== undefined) {
+        var winner = localStorage.winner.split(",");
+        winnerArr = winner;
+        var html = "";
+        for (var i in winner) {
+          html +=
+            `<li>
 							<div class="one">
 								<div>
 									<span>
@@ -104,85 +142,98 @@
 								<button class="ascertainKey">确定</button>
 							</div>
 						</li>`
-			}
-			$('.showKeyWord > ul').prepend(html);
-		}
-		$(function(){
+        }
+        $('.showKeyWord > ul').prepend(html);
+        console.log(winner);
+        if (winner.length >= winnerLimit) {
+          $('.addKeyBtn').hide()
+          $('.ent-more-tips').show()
+        }
+      }
+      $(function () {
 
-			$('.knowBtn').on('click',function(){
-				$(".problemPop").hide()
-			})
-			$(".problem").on('click',function(){
-				$(".problemPop").css("display",'flex');
-			})
+        $('.knowBtn').on('click', function () {
+          $(".problemPop").hide()
+        })
+        $(".problem").on('click', function () {
+          $(".problemPop").css("display", 'flex');
+        })
 
-			function hasWords () {
-				var showKeyWordLength = $(".showKeyWord ul").find('li').length;
-				if(showKeyWordLength === 0){
-					$(".enter.addkeyWord").show();
-					$(".addKeyWord").hide();
-					$(".showKeyWord").hide();
-				} else {
-					$(".enter.addkeyWord").hide();
-					$(".showKeyWord").show();
-					$(".addKeyWord").show();
-				}
-			}
-			hasWords();
+        function hasWords() {
+          var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+          if (showKeyWordLength === 0) {
+            $(".enter.addkeyWord").show();
+            $(".addKeyWord").hide();
+            $(".showKeyWord").hide();
+            $('.addKeyBtn').hide()
+          } else {
+            $(".enter.addkeyWord").hide();
+            $(".showKeyWord").show();
+            $(".addKeyWord").show();
+            if (showKeyWordLength >= winnerLimit) {
+              $('.addKeyBtn').hide()
+              $('.ent-more-tips').show()
+            } else {
+              $('.addKeyBtn').show()
+              $('.ent-more-tips').hide()
+            }
+          }
+        }
+        hasWords();
 
-			// 添加按钮
-			$(".addKeyWord i").on('click',function(){
-				window.location.href="/jyapp/front/dataExport/winnerInput";
-			});
+        // 添加按钮
+        $(".addKeyBtn i").on('click', function () {
+          window.location.href = "/jyapp/front/dataExport/winnerInput";
+        });
 
-			$('textarea').each(function(i,dom){
-				// console.log(i,dom)
-				dom.style.height = dom.scrollHeight +'px';
-			});
-			$("textarea").on("input", function() {
-				this.style.height = 'auto';
-				this.style.height = this.scrollHeight + "px";
-			});
+        $('textarea').each(function (i, dom) {
+          // console.log(i,dom)
+          dom.style.height = dom.scrollHeight + 'px';
+        });
+        $("textarea").on("input", function () {
+          this.style.height = 'auto';
+          this.style.height = this.scrollHeight + "px";
+        });
 
-			//防止键盘把当前输入框给挡住
-			$('input[type="text"],textarea').focus(function () {
-				var target = this;
-				setTimeout(function(){
-					target.scrollIntoViewIfNeeded();
-				},400);
-			});
+        //防止键盘把当前输入框给挡住
+        $('input[type="text"],textarea').focus(function () {
+          var target = this;
+          setTimeout(function () {
+            target.scrollIntoViewIfNeeded();
+          }, 400);
+        });
 
-			// 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
-			$('.addkeyWord input.enterOne').on('input', function() {
+        // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+        $('.addkeyWord input.enterOne').on('input', function () {
 
-				var buttonDOM = $(this).siblings().find('button')[0];
-				if ($(this).val().replace(/\s+/g,"").length >= 1) {
-					buttonDOM.style.opacity = 1;
-					buttonDOM.removeAttribute("disabled")
-				} else {
-					buttonDOM.style.opacity = .5;
-					buttonDOM.setAttribute("disabled", true)
-				}
-			});
+          var buttonDOM = $(this).siblings().find('button')[0];
+          if ($(this).val().replace(/\s+/g, "").length >= 1) {
+            buttonDOM.style.opacity = 1;
+            buttonDOM.removeAttribute("disabled")
+          } else {
+            buttonDOM.style.opacity = .5;
+            buttonDOM.setAttribute("disabled", true)
+          }
+        });
 
-			// 添加 按钮的点击事件
-			$('.addkeyWord .btn .save-btn').on('click', function(){
-				var keyWord = $('.addkeyWord input.enterOne').val();
-				keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
-				if (keyWord.length > 50) {
-					// var s = keyWord.slice(0,49);
-					// $('.addkeyWord input.enterOne').val(s);
+        // 添加 按钮的点击事件
+        $('.addkeyWord .btn .save-btn').on('click', function () {
+          var keyWord = $('.addkeyWord input.enterOne').val();
+          keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+          if (keyWord.length > 50) {
+            // var s = keyWord.slice(0,49);
+            // $('.addkeyWord input.enterOne').val(s);
 
-					weui.toast('中标单位不能超过50字', {
-						duration: 2000,
-						className: 'text-overflow100',
-						callback: function(){}
-					});
-					return
-				}
-				winnerArr.push(keyWord);
-				localStorage.setItem("winner", winnerArr);
-				var html = `<li>
+            weui.toast('中标单位不能超过50字', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {}
+            });
+            return
+          }
+          winnerArr.push(keyWord);
+          localStorage.setItem("winner", winnerArr);
+          var html = `<li>
 								<div class="one">
 									<div>
 										<span>
@@ -197,100 +248,114 @@
 									<button class="ascertainKey">确定</button>
 								</div>
 							</li>`;
-				$('.showKeyWord > ul').prepend(html);
-
-				// 隐藏
-				$(".enter.addkeyWord").hide();
-				$(".showKeyWord").show();
-				$(".addKeyWord").show();
-				$('.enter.addkeyWord > input').val('');
-				var buttonDOM = $('.enter.addkeyWord .btn button')[0];
-				buttonDOM.style.opacity = .5;
-				buttonDOM.setAttribute("disabled", true)
+          $('.showKeyWord > ul').prepend(html);
 
-			});
+          // 隐藏
+          $(".enter.addkeyWord").hide();
+          $(".showKeyWord").show();
+          $(".addKeyWord").show();
+          $('.enter.addkeyWord > input').val('');
+          var buttonDOM = $('.enter.addkeyWord .btn button')[0];
+          buttonDOM.style.opacity = .5;
+          buttonDOM.setAttribute("disabled", true)
+          hasWords();
+        });
 
-			// 编辑
-			$(".showKeyWord").on('click', '.editKeyWord',function(e){
-				let oSpan = $(this).parent().siblings().children('textarea');
-				let val = $(oSpan).val();
-				$(this).parent().hide();
-				$(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
-				$(oSpan).val('').focus().val(val);
-				$(".addKeyWord").hide();
-			});
+        // 编辑
+        $(".showKeyWord").on('click', '.editKeyWord', function (e) {
+          let oSpan = $(this).parent().siblings().children('textarea');
+          let val = $(oSpan).val();
+          $(this).parent().hide();
+          $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one')
+            .show()
+          $(oSpan).val('').focus().val(val);
+          $(".addKeyWord").hide();
+          hasWords();
+        });
 
-			// 编辑 删除
-			$('.showKeyWord').on('click', '.deleteKey', function(e) {
-				var winner = $(this).parent().prev().find('.key').text();
-				winnerArr.splice($.inArray(winner, winnerArr),1);
-				localStorage.winner = winnerArr.toString();
-				$(this).parents('li').remove();
-				$(".addKeyWord").show();
-				hasWords()
-				// console.log('删除附加词:',$(this).parent().find('span').text())
-			});
-			// 编辑 确定
-			$('.showKeyWord').on('click', '.ascertainKey', function(e) {
-				var keyWord = $(this).siblings('textarea').val();
-				var winner = $(this).parent().prev().find('.key').text();
-				keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
-				if (keyWord.replace(/\s+/g,"").length < 1) {
+        // 编辑 删除
+        $('.showKeyWord').on('click', '.deleteKey', function (e) {
+          var winner = $(this).parent().prev().find('.key').text();
+          winnerArr.splice($.inArray(winner, winnerArr), 1);
+          localStorage.winner = winnerArr.toString();
+          $(this).parents('li').remove();
+          $(".addKeyWord").show();
+          hasWords()
+          // console.log('删除附加词:',$(this).parent().find('span').text())
+        });
+        // 编辑 确定
+        $('.showKeyWord').on('click', '.ascertainKey', function (e) {
+          var keyWord = $(this).siblings('textarea').val();
+          var winner = $(this).parent().prev().find('.key').text();
+          keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+          if (keyWord.replace(/\s+/g, "").length < 1) {
 
-					weui.toast('中标单位不能为空', {
-						duration: 2000,
-						className: 'text-overflow100',
-						callback: function(){
+            weui.toast('中标单位不能为空', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {
 
-						}
-					});
-					return
-				}else if($(this).parent().find("textarea").val().length > 50){
-					// var s = $(this).parent().find("span").text().slice(0,49);
-					// $(this).parent().find("span").text(s);
-					weui.toast('中标单位不能超过50字', {
-						duration: 2000,
-						className: 'text-overflow100',
-						callback: function(){}
-					});
-					return
-				}else{
-					for(var i in winnerArr){
-						if(keyWord !== winner){
-							if(winnerArr[i] === keyWord){
-								weui.toast('中标单位重复了', {
-									duration: 2000,
-									className: 'text-overflow100',
-									callback: function(){}
-								});
-								return
-							}
-						}
-						if(winnerArr[i] === winner){
-							winnerArr[i] = keyWord;
-						}
-					}
-					localStorage.winner = winnerArr.toString();
-					$(this).parent().siblings().find('.key').text(keyWord);
-					$(this).parent().hide().siblings().show()
-				}
-				$(".addKeyWord").show();
-			});
+              }
+            });
+            return
+          } else if ($(this).parent().find("textarea").val().length > 50) {
+            // var s = $(this).parent().find("span").text().slice(0,49);
+            // $(this).parent().find("span").text(s);
+            weui.toast('中标单位不能超过50字', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {}
+            });
+            return
+          } else {
+            for (var i in winnerArr) {
+              if (keyWord !== winner) {
+                if (winnerArr[i] === keyWord) {
+                  weui.toast('中标单位重复了', {
+                    duration: 2000,
+                    className: 'text-overflow100',
+                    callback: function () {}
+                  });
+                  return
+                }
+              }
+              if (winnerArr[i] === winner) {
+                winnerArr[i] = keyWord;
+              }
+            }
+            localStorage.winner = winnerArr.toString();
+            $(this).parent().siblings().find('.key').text(keyWord);
+            $(this).parent().hide().siblings().show()
+          }
+          // $(".addKeyWord").show();
+          hasWords();
+        });
 
-			//去空格方法
-			String.prototype.trim = function(){
-				return this.replace(/(^\s*)|(\s*$)/g, ' ');
-			};
+        //去空格方法
+        String.prototype.trim = function () {
+          return this.replace(/(^\s*)|(\s*$)/g, ' ');
+        };
 
-			$(".close").on('click', function () {
-				history.back();
-			});
-		})
+        $(".close").on('click', function () {
+          history.back();
+        });
+      })
 
-	</script>
-	<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
-<!--百度统计end-->
-{{include "/common/baiducc.html"}}
-	</body>
+      function goPerfect() {
+        var source = ''
+        if (utils.$env.platform === 'h5') {
+          source = 'h5_Dataself_entmore_customization'
+        } else {
+          source = 'app_Dataself_entmore_customization'
+        }
+        location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+      }
+    </script>
+    <script
+      src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}">
+    </script>
+    <!--百度统计end-->
+    {{include "/common/baiducc.html"}}
+</body>
 
 </html>

+ 16 - 0
src/jfw/modules/app/src/web/templates/frontRouter/bigmember/free/perfect_info.html

@@ -200,6 +200,22 @@
             <van-button type="primary" @click="cancelKonw">我知道了</van-button>
           </div>
         </van-dialog>
+        <van-dialog v-model="jyOriginalbox_option.show" :title="jyOriginalbox_option.title"
+        class="Original-dialog" :show-confirm-button = "false">
+          <div class="text-content">
+            <div class="con-text" v-html="jyOriginalbox_option.text"></div>
+            <div class="con-desc" v-html="jyOriginalbox_option.desc"></div>
+          </div>
+          <div class="con-footer">
+            <div class="con-button-group">
+              <div class="con-button-back" @click="jyOriginalbox_back">返回</div>
+              <div class="con-button-confirm" @click="jyOriginalbox_ok">
+                <div class="btn-t">查看原文链接</div>
+                <div class="btn-d">(本次查看消耗1次机会)</div>
+              </div>
+            </div>
+          </div>
+        </van-dialog>
       </div>
     </div>
   </div>

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

@@ -315,6 +315,34 @@
           cursor: pointer;
           display:none
       }
+      .abs{
+        min-height: 0.3rem;
+      } 
+      .Original-dialog .van-dialog__header{
+        font-weight: 400;
+      }
+      .Original-dialog .van-dialog__message{
+        color: #686868;
+      }
+      .Original-dialog .van-dialog__content{
+        padding: 0.16rem 0.32rem;
+      }
+      .Original-dialog .con-text{
+        font-size: 0.3rem;
+        color: #5F5E64;
+        text-align: center;
+      }
+      .Original-dialog .con-desc{
+        font-size: 0.24rem;
+        color: #9B9CA3;
+        width: 5.4rem;
+        margin: auto;
+        line-height: 0.36rem;
+        margin-top: 0.32rem;
+      }
+      .Original-dialog .text-content{
+        padding-bottom: 0.48rem;
+      }
     </style>
 </head>
 <body>
@@ -327,6 +355,15 @@
 <div id="jyKeepEntComponent">
   <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
 </div>
+<div id="jyOriginalbox">
+  <van-dialog v-model="show" title="查看原文链接" confirm-button-color='#2ABDD1'
+  cancel-button-color='#171826' class="custom-dialog Original-dialog" confirm-button-text="确定"   @confirm="goLink" show-cancel-button>
+    <div class="text-content">
+      <p class="con-text">确定消耗<span class="blue-color">1次</span>查看原文链接的机会吗?</p>
+      <p class="con-desc">您当前是免费用户,有1次查看原文链接的机会,如需更多查看次数,您可点击<span class="blue-color" @click="membership">升级大会员></span></p>
+    </div>
+  </van-dialog>
+</div>
 <div class="share1">
 
     <!-- 复制提示 star -->
@@ -960,7 +997,7 @@
             </div>
             <!--E 登录引导置底 E-->
             <div class="abs">
-                <div onclick="advDownApp(this)" class="original_name"><a class="original hidden" rel="no-referrer">阅读原文</a></div>
+                <div onclick="advDownApp(this)" class="original_name"><a class="original hidden" rel="no-referrer">查看原文链接</a></div>
                 {{if .T.obj.hasSession}}
                     <a class="feedback" href="/jyapp/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
                 {{end}}
@@ -1333,11 +1370,11 @@
         }
         JyObj.share(shareType,shareTitle,content,link);
     }
-    ///////////////////////
+    
     function afterJyObjInit(){
         redSpotOnMenu();
     }
-    ///////////////////////
+   
     function fromwhere(text){
         var ad="app_articel_";
         if (getinfotype(subtype)=="拟建项目"){
@@ -1477,15 +1514,98 @@
             }
         }
     }
-
+    
+    var lock_ = true
     // h5环境下点击阅读原文跳转到引导下载app页面
     function advDownApp (e) {
       if (utils.$envs.inH5) {
         location.href = 'https://wx.jianyu360.cn/front/downloadapppage/normal?source=H5'
       } else {
-        adv_statistics(e)
+        if(!lock_){
+          return
+        }
+        lock_ = false
+        $.ajax({
+                type: "POST",
+                url: "/publicapply/userbase/getOriginalText",
+                contentType: 'application/json',
+                data:JSON.stringify({id:id}),
+                success: function(res){
+                  lock_ = true
+                  if(!res.data){
+                    return
+                  }
+                   if (res.data.url) {
+                    $(".original").attr("openurl",res.data.url)
+                    let dom_ = $(".original_name")[0]
+                    adv_statistics(dom_) // 跳转原文原有逻辑
+                   } else {
+                    if(res.data.status == '1'){
+                      // 需要留资 留资提示即刻获得一次查看原文机会
+                      let url_ = utils.$envs.inH5?'/jyapp/frontPage/bigmember/free/perfect_info?source=h5_article_original_one&signId=' + encodeURIComponent(id) + '&article='+ extractString_(location.href) :'/jyapp/frontPage/bigmember/free/perfect_info?source=app_article_original_one&signId=' + encodeURIComponent(id) + '&article='+ extractString_(location.href)
+                      location.href = url_
+                      
+                    } else if(res.data.status == '2'){
+                      // 不需要留资  弹框提示用户确定消耗一次查看原网站的机会   用户如果选择确认,再次调用该接口 `use` 传true
+                      jyOriginalbox.show = true
+
+                    } else if(res.data.status == '3'){
+                      // 需要留资  留资提示已经消耗过查看原网站链接的机会、升级为大会员
+                      let url_ = utils.$envs.inH5?'/jyapp/frontPage/bigmember/free/perfect_info?source=h5_article_original_more':'/jyapp/frontPage/bigmember/free/perfect_info?source=app_article_original_more'
+                      location.href = url_
+
+                    } else if(res.data.status == '4'){
+                      vant.Dialog.confirm({
+                      title:'暂无更多查看原文链接权限',
+                       message: '如需开通更多权限获得商机,请联系客服。',
+                       className: 'custom-dialog Original-dialog',
+                       showCancelButton: true,
+                       confirmButtonText: '联系客服',
+                       CancelButtonText: '返回',
+                       confirmButtonColor: '#2ABDD1',
+                       cancelButtonColor:'#171826',
+                       width: 303,
+                     }).then(() => {
+                      location.href = "/jyapp/free/customer"
+                     }).catch(() =>{
+                     })
+                    }
+                   }
+                },
+                error: function(){
+                    lock_ = true
+                    EasyAlert.show("网络连接错误!");
+                }
+             });
       }
     }
+    function ajaxSetOriginal () {
+      $.ajax({
+                type: "POST",
+                url: "/publicapply/userbase/getOriginalText",
+                contentType: 'application/json',
+                data:JSON.stringify({id:id,use:true}),
+                success: function(res){
+                  if(!res.data){
+                    return
+                  }
+                   if (res.data.url) {
+                    $(".original").attr("openurl",res.data.url)
+                    let e = $('.original_name')[0]
+                    adv_statistics(e) // 跳转原文原有逻辑
+                   } 
+                },
+                error: function(){
+                    EasyAlert.show("网络连接错误!");
+                }
+             });
+
+    }
+    function extractString_(str){
+          const regex = /\/article\/(.*?)\//;
+          const match = str.match(regex);
+          return match ? match[1] : null;
+    }
     // 大会员引流文案
     function getDrainInfo () {
         $.ajax({
@@ -1829,6 +1949,24 @@
         },
       }
     })
+    var jyOriginalbox =new Vue({
+      el:'#jyOriginalbox',
+      data: {
+        show:false
+
+      },
+      methods: {
+        goLink (){
+          // 查看原文
+          ajaxSetOriginal()
+        },
+        membership (){
+          // 去留资 从弹窗升级大会员入口进入留资
+          let url_ = utils.$envs.inH5?'/jyapp/frontPage/bigmember/free/perfect_info?source=h5_article_original_more_membership':'/jyapp/frontPage/bigmember/free/perfect_info?source=app_article_original_more_membership'
+          location.href = url_
+        }
+      }
+    })
 
     // 点击参标
     $('.refer_stand .r-s-right').on('click', function(e) {
@@ -3016,7 +3154,7 @@
           $("#h_content").css("font-size","16px");
         }
     	{{end}}
-    	{{if .T.obj.href}}
+    	{{if .T.obj.originalShow}}
         $(".abs .original").removeClass("hidden");
     	{{end}}
       //
@@ -3372,7 +3510,7 @@
           shareimgflag = false;
       })
       //window.location.href = '/jyapp/free/transfer?url='+encodeURIComponent($(this).attr("href"));
-      $(".original").attr("openurl",{{.T.obj.href}})
+      // $(".original").attr("openurl",{{.T.obj.href}})
       {{if .T.isVip}}
       $(".original_name").attr("adv_name","app_article_viporiginaltext");
       {{else}}

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

@@ -5,8 +5,8 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
+	app.yhyue.com/moapp/jypkg v1.1.2
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/donnie4w/go-logger v0.0.0-20230316073421-36a48f87a69a
 	github.com/gogf/gf/v2 v2.4.2
 	github.com/olivere/elastic/v7 v7.0.32
@@ -18,8 +18,8 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
-	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d // indirect
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect

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

@@ -9,18 +9,18 @@ app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/
 app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/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-20231024062045-5c364be1561d h1:h8SnO8ONZlmtx8ZSYtpw36TdBhYPy8WgLeWHyMGZj0Q=
-app.yhyue.com/moapp/jypkg v0.0.0-20231024062045-5c364be1561d/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
+app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
+app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 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=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7 h1:G6PHMWAHfYEuY6kbl7OM/KnCQf1Xa54mdhuP7JzK8/I=
-bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14 h1:L/0RrgU+l8nMS7YO2JizszaX3lAo0gqzg2Bqmu0So0s=
-bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14/go.mod h1:03M9BWIGHy7BbGxLvjt8V9zZzEZDWhN6BuHVfVcDFbQ=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e h1:bncHHkJLqiDW1ZN6MVe+3bj3i0LxWgFkfqge6Gk7lB4=
+bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e/go.mod h1:+6ZjaqpCr+ih1GYOh6ZhoDri9ZjiuxxSHvR7ovvhLx0=
 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=

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

@@ -222,8 +222,9 @@ func ObjData(sid, content string, isPayUser bool) (obj map[string]interface{}) {
 		infoformat := qutil.IntAllDef(obj["infoformat"], 1)
 		obj["infoformat"] = infoformat
 		//精准字段(竞争对手的地址) 或  拟建项目
-		if obj["competehref"] != nil || infoformat == 2 {
+		if qutil.ObjToString(obj["href"]) == "#" || infoformat == 2 || qutil.ObjToString(obj["site"]) == "剑鱼信息发布平台" {
 			delete(obj, "href")
+			delete(obj, "competehref")
 		}
 	}
 	return

+ 3 - 1
src/jfw/modules/publicapply/src/ad/service/actions.go

@@ -54,7 +54,9 @@ func (a *JyAdvertisement) GetJyAdList() {
 						adInfo = entity.Handle(son, a.Request.Host)
 					}
 				}
-				returnData[sCode] = adInfo
+				if len(adInfo) > 0 {
+					returnData[sCode] = adInfo
+				}
 			}
 		}
 		return returnData, nil

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

@@ -64,7 +64,7 @@ func (des *DataExportStruct) PayPageParams() {
 		if resEmail == "" || resPhone == "" {
 			lastEmail, lastPhone := "", ""
 			if lastPhone, lastEmail = dataexport.GetLastExportPhoneAndMail(db.Mysql, userId, util.ObjToString(des.GetSession("entUserId"))); lastPhone == "" || lastEmail == "" {
-				userData := config.Compatible.Select( userId, `{"s_myemail":1,"s_phone":1,"s_m_phone":1}`)
+				userData := config.Compatible.Select(userId, `{"s_myemail":1,"s_phone":1,"s_m_phone":1}`)
 				if userData != nil && len(*userData) > 0 {
 					if lastEmail == "" {
 						lastEmail, _ = (*userData)["s_myemail"].(string)

+ 4 - 0
src/jfw/modules/publicapply/src/filter/sessionfilter.go

@@ -23,6 +23,7 @@ var reg_nps = regexp.MustCompile("^/publicapply/nps/.*")
 var regWhiteList = regexp.MustCompile("^/publicapply/userbase/whitelist$")
 var regEntSearch = regexp.MustCompile("^/publicapply/enterpriseSearch/doQuery") //企业搜索接口
 var regOneClick = regexp.MustCompile("^/publicapply/(oneClick|channel)/.*")
+var regOriginalText = regexp.MustCompile("^/publicapply/userbase/getOriginalText$")
 
 func (l *sessionfilter) Do(w http.ResponseWriter, req *http.Request) bool {
 	session := l.App.SessionManager.Session(req, w)
@@ -42,6 +43,9 @@ func (l *sessionfilter) Do(w http.ResponseWriter, req *http.Request) bool {
 	if regWhiteList.MatchString(req.URL.Path) { // 判断用户是不是白名单接口不拦截
 		return true
 	}
+	if regOriginalText.MatchString(req.URL.Path) { // 查看原文不拦截  在接口里面判断登录
+		return true
+	}
 	userId, ok := getSession["userId"].(string)
 	if !ok || userId == "" {
 		R.ServeJson(w, req, &Result{Error_code_1004, Error_msg_1004, nil})

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

@@ -3,9 +3,9 @@ module jy/src/jfw/modules/publicapply/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6
+	app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.0.7-0.20231114011545-acf570b01ea7
+	app.yhyue.com/moapp/jypkg v1.1.2
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.4
@@ -22,7 +22,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
 	github.com/BurntSushi/toml v1.2.0 // indirect
 	github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect

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

@@ -5,18 +5,18 @@ 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-20231026082242-8eb41c7bdda6 h1:uyaBp5Iuc/Il4+O2n92CyU9LPvHetFzQVC8iS9iLFOc=
-app.yhyue.com/moapp/jybase v0.0.0-20231026082242-8eb41c7bdda6/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
+app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4 h1:qfqQL2GJV3N31DFMz6ZNHQk1NYJjk+Y7h1tZwmuzaaE=
+app.yhyue.com/moapp/jybase v0.0.0-20231116061739-cd852201a8f4/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.0.7-0.20231114011545-acf570b01ea7 h1:i7sFy+e/zjqhTQci+0x4E1qEXZOEYCIe6EDug+8LyFk=
-app.yhyue.com/moapp/jypkg v1.0.7-0.20231114011545-acf570b01ea7/go.mod h1:LuxdVd+j3uwm7N5j2hivmpPU0LJytEV7iwAIljdoc4Q=
+app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
+app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 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=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8/go.mod h1:rRiGzKG4F/fmkNxXQCxrkxNWc8yf1SmW8qWCKfGIQSM=
 bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15 h1:V8RSWazAsREs+8mpk7h2kXiavSExFFaDG1guhf3Qux8=

+ 327 - 10
src/jfw/modules/publicapply/src/userbase/entity/entity.go

@@ -1,13 +1,17 @@
 package entity
 
 import (
+	"app.yhyue.com/moapp/jybase/date"
 	"encoding/json"
 	"fmt"
+	"go.mongodb.org/mongo-driver/bson"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/db"
 	"jy/src/jfw/modules/publicapply/src/userbase/initjson"
+	"log"
 	"net/url"
 	"strings"
+	"sync"
 	"time"
 
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
@@ -19,8 +23,9 @@ import (
 )
 
 const (
-	RedisPoly         = "poly"     // 查白名单用户用的redis
-	WhitelistRedisKey = "white_%s" // 白名单用户用的redis key
+	RedisPoly                = "poly"     // 查白名单用户用的redis
+	WhitelistRedisKey        = "white_%s" // 白名单用户用的redis key
+	TabelOriginalPowerRecord = "original_power_record"
 )
 
 type UserInfo struct {
@@ -43,7 +48,7 @@ func NewUserInfo(userId, platform, names string, session *httpsession.Session) *
 	return &UserInfo{userId, platform, names, session}
 }
 
-//保存
+// 保存
 func (this *UserInfo) SaveNameByUserId() bool {
 	queryMap := map[string]interface{}{
 		"s_userId":   this.UserId,
@@ -68,7 +73,7 @@ func (this *UserInfo) SaveNameByUserId() bool {
 	return db.Mgo.Update(initjson.BaseFuncInfo.Cfcollotion, queryMap, updateMap, true, false)
 }
 
-//获取用户已选功能或基本功能
+// 获取用户已选功能或基本功能
 func (this *UserInfo) GetNameByUserId() (fns []*FuncNames) {
 	queryMap := map[string]interface{}{
 		"s_userId":   this.UserId,
@@ -117,7 +122,7 @@ func (this *UserInfo) GetNameByUserId() (fns []*FuncNames) {
 
 var ChargeMap = map[string]bool{}
 
-//获取所有用户可用功能
+// 获取所有用户可用功能
 func (this *UserInfo) AllNames() (fns []*FuncNames) {
 	for _, v := range initjson.BaseFuncInfo.CommonFunctions {
 		ChargeMap[v.Name] = v.Charge
@@ -132,7 +137,6 @@ func (this *UserInfo) AllNames() (fns []*FuncNames) {
 	return fns
 }
 
-//
 func thisByPlat(platform, name string, bcv *initjson.BaseFunc) (res string) {
 	switch platform {
 	case "APP":
@@ -160,7 +164,7 @@ func thisByPlat(platform, name string, bcv *initjson.BaseFunc) (res string) {
 	return
 }
 
-//查看是否有使用此功能的权限
+// 查看是否有使用此功能的权限
 func IsPower(name string, session *httpsession.Session) (b bool) {
 	BigPower := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
 	if BigPower.Status > 0 {
@@ -284,7 +288,7 @@ func IsOnTheWhitelist(session *httpsession.Session) (flag bool, err error) {
 	return
 }
 
-//用户一次性弹窗信息集合
+// 用户一次性弹窗信息集合
 type TipInfoStruct struct {
 	UserId  string
 	DoType  string
@@ -292,7 +296,6 @@ type TipInfoStruct struct {
 	Session *httpsession.Session
 }
 
-//
 func NewTipInfo(userId, doType, tipName string) *TipInfoStruct {
 	return &TipInfoStruct{
 		UserId:  userId,
@@ -301,7 +304,6 @@ func NewTipInfo(userId, doType, tipName string) *TipInfoStruct {
 	}
 }
 
-//
 func (this *TipInfoStruct) GetTipInfo() (flag int) {
 	queryMap := map[string]interface{}{
 		"s_userId": this.UserId,
@@ -335,3 +337,318 @@ func (this *TipInfoStruct) GetTipInfo() (flag int) {
 	}
 	return 0
 }
+
+var (
+	PLock *OriginalTextLock
+)
+
+type OriginalTextLock struct {
+	sync.Mutex
+	UserLock map[string]*sync.Mutex
+}
+
+func NewOriginalTextLock() *OriginalTextLock {
+	return &OriginalTextLock{
+		UserLock: make(map[string]*sync.Mutex),
+	}
+}
+func init() {
+	PLock = NewOriginalTextLock()
+}
+
+func GetOriginalTextLock(str string) *sync.Mutex {
+	PLock.Lock()
+	if PLock.UserLock[str] == nil {
+		PLock.UserLock[str] = &sync.Mutex{}
+	}
+	PLock.Unlock()
+	return PLock.UserLock[str]
+}
+
+type OriginalPower struct {
+	UserType     int   // 用户类型 用户类型;0: 免费,1: 付费
+	UserState    int   // 用户分类 0: 免费,1: 超级订阅 2: 大会员;3: 商机管理
+	PositionId   int64 // 职位id
+	BaseUserId   int64
+	AccountId    int64
+	EntId        int64
+	PositionType int64
+	BiddingId    string // 标讯id
+	MgoUserId    string // mongoid
+	Phone        string // 手机号
+	IsFree       bool
+	TotalCount   int64
+	UserId       string
+	Stype        initjson.StypeInfo
+	NoCheckStype []string
+}
+
+const (
+	UserTypeFree      = 0 // 免费
+	UserTypePay       = 1 // 付费
+	UserStateFree     = 0 // 免费
+	UserStateVip      = 1 // 用户分类:超级订阅
+	UserStateMember   = 2 // 用户分类:大会员
+	UserStateEntniche = 3 // 用户分类:商机管理
+)
+
+func NewOriginalPower(baseUserId, accountId, entId, positionType, positionId int64, biddingId, mgoUserId, phone string, userId string, stype initjson.StypeInfo) OriginalPower {
+	return OriginalPower{
+		PositionId:   positionId,
+		BiddingId:    biddingId,
+		MgoUserId:    mgoUserId,
+		Phone:        phone,
+		BaseUserId:   baseUserId,
+		AccountId:    accountId,
+		EntId:        entId,
+		PositionType: positionType,
+		UserId:       userId,
+		Stype:        stype,
+		NoCheckStype: initjson.NoCheckStype,
+	}
+
+}
+
+// FindOriginalPowerRecord 该条标讯是否查看过原文 查看过则返回原文地址
+func (o *OriginalPower) FindOriginalPowerRecord() (hasRecord bool, text string) {
+	// 免费用户 不限制时间
+	where := ""
+	if o.UserType == UserTypePay {
+		timeStart := GetMonthStart()
+		// 付费用户 查询当月
+		where = fmt.Sprintf(` and create_time >="%s" `, timeStart)
+	}
+	sourceStr := ""
+	if len(o.NoCheckStype) > 0 {
+		sourceStr = " and source not in (\"" + strings.Join(o.NoCheckStype, "\",\"") + "\") "
+	}
+	q := fmt.Sprintf(" SELECT original_url FROM %s where position_id=? and user_type=? and bidding_id=? %s %s;", TabelOriginalPowerRecord, sourceStr, where)
+	record := db.Mysql.SelectBySql(q, o.PositionId, o.UserType, o.BiddingId)
+	if record != nil && len(*record) > 0 {
+		hasRecord = true
+		text = util.ObjToString((*record)[0]["original_url"])
+	}
+	return
+}
+
+// CountRecord 查看过原文的数量
+func (o *OriginalPower) CountRecord() int {
+	// 免费用户 不限制时间
+	where := ""
+	if o.UserType == UserTypePay {
+		timeStart := GetMonthStart()
+		// 付费用户 查询当月
+		where = fmt.Sprintf(`and create_time >="%s"`, timeStart)
+	}
+	sourceStr := ""
+	if len(o.NoCheckStype) > 0 {
+		sourceStr = "and source not in (\"" + strings.Join(o.NoCheckStype, "\",\"") + "\")"
+	}
+	q := fmt.Sprintf(" SELECT count(distinct(bidding_id)) FROM %s where position_id=? and user_type=? %s  %s;", TabelOriginalPowerRecord, sourceStr, where)
+	return int(db.Mysql.CountBySql(q, o.PositionId, o.UserType))
+}
+
+// SavePowerRecord 保存查看原文记录
+func (o *OriginalPower) SavePowerRecord(originalUrl string) {
+	// 先判断是否校验权限 再判断是否是付费用户(因为可能登录的是付费用户,但是是从不校验权限的链接进来的)
+	where := ""
+	if o.Stype.Check && o.UserType == UserTypePay {
+		// 加上时间条件
+		timeStart := GetMonthStart()
+		// 付费用户 查询当月
+		where = fmt.Sprintf(`and create_time >="%s"`, timeStart)
+	}
+	q := fmt.Sprintf("SELECT id FROM %s where bidding_id=? and position_id=? and source=? and user_type=? %s order by create_time desc limit 1;", TabelOriginalPowerRecord, where)
+	rs := db.Mysql.SelectBySql(q, o.BiddingId, o.PositionId, o.Stype.Name, o.UserType)
+	if rs != nil && len(*rs) > 0 && util.IntAll((*rs)[0]["id"]) != 0 {
+		// 存在则直接次数加一,更新更新时间
+		id := util.IntAll((*rs)[0]["id"])
+		updateSql := fmt.Sprintf("update  %s set views_times = views_times+1,update_time=? where id =?", TabelOriginalPowerRecord)
+		_, err := db.Mysql.ExecBySql(updateSql, date.NowFormat(date.Date_Full_Layout), id)
+		if err != nil {
+			log.Println("更新浏览次数失败:", err, updateSql, date.NowFormat(date.Date_Full_Layout), id)
+		}
+	} else {
+		// 否则新增
+		insertData := map[string]interface{}{
+			"user_id":      o.MgoUserId,
+			"position_id":  o.PositionId,
+			"phone":        o.Phone,
+			"bidding_id":   o.BiddingId,
+			"original_url": originalUrl,
+			"user_type":    o.UserType,
+			"source":       o.Stype.Name,
+			"user_state":   o.UserState,
+			"create_time":  date.NowFormat(date.Date_Full_Layout),
+			"update_time":  date.NowFormat(date.Date_Full_Layout),
+		}
+		insertRs := db.Mysql.Insert(TabelOriginalPowerRecord, insertData)
+		if insertRs < 1 {
+			log.Println("新增失败", insertData)
+		}
+	}
+
+}
+
+// CNode  获取留资信息和判断是否满足
+func (o *OriginalPower) CNode() (leadOk bool) {
+	// 查留资source
+	if hasRetainedCapital(o.UserId, []string{"pc_article_original_one", "app_article_original_one", "wx_article_original_one", "h5_article_original_one"}) {
+		leadOk = true
+		return
+	}
+	rM := map[string]interface{}{}
+	rdata, ok := db.Mgo.Find("saleLeads", map[string]interface{}{
+		"userid": o.UserId,
+	}, `{"createtime":-1}`, nil, false, 0, 10)
+	if rdata != nil && len(*rdata) > 0 && ok {
+		for _, v := range *rdata {
+			for kk, vv := range v {
+				if vv == nil {
+					continue
+				}
+				if rM[kk] != nil {
+					continue
+				}
+				rM[kk] = vv
+			}
+		}
+		delete(rM, "_id")
+		delete(rM, "userid")
+		delete(rM, "createtime")
+		delete(rM, "client")
+	}
+	if userinfo := config.Compatible.Select(o.UserId, `{"s_phone":1,"s_m_phone":1,"s_myemail":1,"s_company":1,"o_jy":1,"o_vipjy":1}`); userinfo != nil && len(*userinfo) > 0 {
+		sPhone := util.ObjToString((*userinfo)["s_phone"])
+		phone := util.If(sPhone == "", util.ObjToString((*userinfo)["s_m_phone"]), sPhone)
+		if rM["phone"] == nil || rM["phone"] == "" {
+			rM["phone"] = phone
+		}
+		if rM["company"] == nil || rM["company"] == "" {
+			rM["company"] = util.ObjToString((*userinfo)["s_company"])
+		}
+	}
+	// 查之前的留资信息是否满足
+	if rM["name"] != nil && rM["name"] != "" && rM["phone"] != nil && rM["phone"] != "" && rM["company"] != nil && rM["company"] != "" && rM["position"] != nil && rM["position"] != "" && rM["companyType"] != "" {
+		if rM["position"] != "总裁" && rM["position"] != "总经理" && (rM["branch"] == nil || rM["branch"] == "") {
+			leadOk = false
+		} else {
+			leadOk = true
+		}
+	}
+	return
+}
+
+// GetOriginalTextUrl 获取原文地址
+func GetOriginalTextUrl(biddingId string) (href string) {
+	obj := map[string]interface{}{}
+	brobj, ok := db.Mgo.Find("bidding_rec", bson.M{"s_id": biddingId}, `{"l_recoverydate":-1}`, nil, false, 0, 1)
+	if ok && (*brobj) != nil && len(*brobj) == 1 && (*brobj)[0] != nil {
+		obj = (*brobj)[0]
+	} else {
+		aobj, ok := db.Mgo_Bidding.FindById(db.DbConf.Mongodb.Bidding.Collection, biddingId, nil)
+		if ok && (aobj == nil || *aobj == nil || len(*aobj) == 0) {
+			aobj, ok = db.Mgo_Bidding.FindById(db.DbConf.Mongodb.Bidding.Collection_change, biddingId, nil)
+		}
+		obj = *aobj
+	}
+	if obj != nil && len(obj) > 0 {
+		infoformat := util.IntAllDef(obj["infoformat"], 1)
+		obj["infoformat"] = infoformat
+		//精准字段(竞争对手的地址) 或  拟建项目不返回原文地址
+		// infoformat: 拟建数据标识
+		if util.ObjToString(obj["href"]) == "#" || infoformat == 2 || util.ObjToString(obj["site"]) == "剑鱼信息发布平台" {
+			delete(obj, "href")
+			delete(obj, "competehref")
+		} else {
+			href = util.ObjToString(obj["href"])
+			if href != "" {
+				href = strings.Replace(href, "\n", "", -1)
+				if href != "" && !strings.HasPrefix(href, "http") {
+					href = "http://" + href
+				}
+			}
+		}
+	}
+	return
+}
+
+func (o *OriginalPower) SetUserInfo() {
+	// 1. 判断付费用户 和免费用户
+	userInfo := config.Middleground.PowerCheckCenter.Check("10000", o.MgoUserId, o.BaseUserId, o.AccountId, o.EntId, o.PositionType, o.PositionId)
+	log.Println(userInfo)
+	o.IsFree = userInfo.Free.IsFree
+	if userInfo.Free.IsFree {
+		o.TotalCount = userInfo.Free.Original
+		o.UserType = UserTypeFree
+		o.UserState = UserStateFree
+	} else if userInfo.Member.Status > 0 {
+		o.TotalCount = userInfo.Member.Original
+		o.UserType = UserTypePay
+		o.UserState = UserStateMember
+	} else if userInfo.Entniche.Status > 0 && userInfo.Entniche.PowerSource < 1 {
+		o.TotalCount = userInfo.Entniche.Original
+		o.UserType = UserTypePay
+		o.UserState = UserStateEntniche
+	} else if userInfo.Vip.Status > 0 {
+		o.TotalCount = userInfo.Vip.Original
+		o.UserType = UserTypePay
+		o.UserState = UserStateVip
+	}
+
+}
+
+// 该节点是否留资
+func hasRetainedCapital(uid string, source []string) bool {
+	if count, err := db.Mgo.CountByErr("saleLeads", map[string]interface{}{"userid": uid, "source": map[string]interface{}{"$in": source}}); err != nil || count > 0 {
+		return true
+	}
+	return false
+}
+
+// SessUserInfo 从session获取用户基本信息
+type SessUserInfo struct {
+	BaseUserId   int64
+	AccountId    int64
+	EntId        int64
+	PositionType int64
+	PositionId   int64
+	Phone        string
+	MgoUserId    string
+	UserId       string
+}
+
+// GetUserBaseInfo 获取用户基本信息从session
+func GetUserBaseInfo(sess *httpsession.Session) SessUserInfo {
+	getSession := sess.GetMultiple()
+	return SessUserInfo{
+		MgoUserId:    util.ObjToString(getSession["mgoUserId"]),
+		BaseUserId:   util.Int64All(getSession["base_user_id"]),
+		AccountId:    util.Int64All(getSession["accountId"]),
+		EntId:        util.Int64All(getSession["entId"]),
+		PositionType: util.Int64All(getSession["positionType"]),
+		PositionId:   util.Int64All(getSession["positionId"]),
+		Phone:        util.ObjToString(getSession["phone"]),
+		UserId:       util.ObjToString(getSession["userId"]),
+	}
+}
+
+// GetStypeInfo 获取stype信息
+func GetStypeInfo(referer string) (stypeInfo *initjson.StypeInfo) {
+	for i := 0; i < len(initjson.OriginalC.Stype); i++ {
+		if strings.Contains(referer, initjson.OriginalC.Stype[i].Name) {
+			stypeInfo = &initjson.OriginalC.Stype[i]
+			break
+		}
+	}
+	return
+}
+
+// GetMonthStart 获取月初时间
+func GetMonthStart() string {
+	now := time.Now()
+	year, month, _ := now.Date()
+	monthStart := time.Date(year, month, 1, 0, 0, 0, 0, time.Local)
+	timeStart := date.FormatDate(&monthStart, date.Date_Full_Layout)
+	return timeStart
+}

+ 17 - 1
src/jfw/modules/publicapply/src/userbase/initjson/ub.go

@@ -35,12 +35,28 @@ type MenuInfo struct {
 	Url      string `json:"url"`
 	Isusable bool   `json:"isusable"` //是否可用
 }
+type OriginalConfig struct {
+	Stype []StypeInfo `json:"stype"`
+}
+type StypeInfo struct {
+	Name  string `json:"name"`  // stype
+	Login bool   `json:"login"` // 是否需要登录
+	Check bool   `json:"check"` // 是否需要验证权限
+}
 
 var MenuMap []*MenuLevel
-
+var OriginalC *OriginalConfig
+var NoCheckStype []string // 不用校验权限的stype
 func init() {
 	log.Println("初始化 常用功能配置")
 	util.ReadConfig("./userbase/commonfunctions.json", &BaseFuncInfo)
 	log.Println("初始化 大会员菜单配置")
 	util.ReadConfig("./userbase/bigmembermenu.json", &MenuMap)
+	log.Println("初始化查看原文链接配置")
+	util.ReadConfig("./userbase/original_power.json", &OriginalC)
+	for i := 0; i < len(OriginalC.Stype); i++ {
+		if !OriginalC.Stype[i].Check {
+			NoCheckStype = append(NoCheckStype, OriginalC.Stype[i].Name)
+		}
+	}
 }

+ 39 - 0
src/jfw/modules/publicapply/src/userbase/original_power.json

@@ -0,0 +1,39 @@
+{
+  "stype": [
+    {
+      "name": "bdprivate",
+      "login": false,
+      "check": false
+    },
+    {
+      "name": "entservice",
+      "login": true,
+      "check": false
+    },
+    {
+      "name": "mailprivate",
+      "login": false,
+      "check": false
+    },
+    {
+      "name": "indexcontent",
+      "login": false,
+      "check": false
+    },
+    {
+      "name": "bdcontent",
+      "login": true,
+      "check": true
+    },
+    {
+      "name": "content",
+      "login": true,
+      "check": true
+    },
+    {
+      "name": "advancedProject",
+      "login": true,
+      "check": true
+    }
+  ]
+}

+ 8 - 7
src/jfw/modules/publicapply/src/userbase/service/action.go

@@ -6,11 +6,12 @@ import (
 
 type ServiceStruct struct {
 	*xweb.Action
-	ubFunctions   xweb.Mapper `xweb:"/userbase/functions"`           //获取用户常用功能
-	saveFunctions xweb.Mapper `xweb:"/userbase/saveFunctions"`       //保存用户常用功能
-	allFunctions  xweb.Mapper `xweb:"/userbase/allFunctions"`        //获取所有用户可用功能
-	bigmemberMenu xweb.Mapper `xweb:"/userbase/bigmemberMenu"`       //大会员菜单
-	industryTag   xweb.Mapper `xweb:"/userbase/medical/industryTag"` // 用户(医疗)行业标签
-	tipInfo       xweb.Mapper `xweb:"/userbase/tipInfo"`             // 用户一次性标签使用
-	whitelist     xweb.Mapper `xweb:"/userbase/whitelist"`           // 用户是否在白名单
+	ubFunctions     xweb.Mapper `xweb:"/userbase/functions"`           //获取用户常用功能
+	saveFunctions   xweb.Mapper `xweb:"/userbase/saveFunctions"`       //保存用户常用功能
+	allFunctions    xweb.Mapper `xweb:"/userbase/allFunctions"`        //获取所有用户可用功能
+	bigmemberMenu   xweb.Mapper `xweb:"/userbase/bigmemberMenu"`       //大会员菜单
+	industryTag     xweb.Mapper `xweb:"/userbase/medical/industryTag"` // 用户(医疗)行业标签
+	tipInfo         xweb.Mapper `xweb:"/userbase/tipInfo"`             // 用户一次性标签使用
+	whitelist       xweb.Mapper `xweb:"/userbase/whitelist"`           // 用户是否在白名单
+	getOriginalText xweb.Mapper `xweb:"/userbase/getOriginalText"`     // 获取查看原文地址
 }

+ 182 - 4
src/jfw/modules/publicapply/src/userbase/service/service.go

@@ -1,6 +1,9 @@
 package service
 
 import (
+	"app.yhyue.com/moapp/jybase/encrypt"
+	"encoding/json"
+	"fmt"
 	"jy/src/jfw/modules/publicapply/src/config"
 	"jy/src/jfw/modules/publicapply/src/userbase/entity"
 	"log"
@@ -9,7 +12,7 @@ import (
 	qu "app.yhyue.com/moapp/jybase/common"
 )
 
-//大会员菜单
+// 大会员菜单
 func (this *ServiceStruct) BigmemberMenu() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -26,7 +29,6 @@ func (this *ServiceStruct) BigmemberMenu() {
 	this.ServeJson(r)
 }
 
-//
 func (this *ServiceStruct) AllFunctions() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -43,7 +45,7 @@ func (this *ServiceStruct) AllFunctions() {
 	this.ServeJson(r)
 }
 
-//保存用户常用功能
+// 保存用户常用功能
 func (this *ServiceStruct) SaveFunctions() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -62,7 +64,7 @@ func (this *ServiceStruct) SaveFunctions() {
 	this.ServeJson(r)
 }
 
-//获取用户常用功能
+// 获取用户常用功能
 func (this *ServiceStruct) UbFunctions() {
 	userId, _ := this.GetSession("userId").(string)
 	defer qu.Catch()
@@ -140,3 +142,179 @@ func (this *ServiceStruct) Whitelist() {
 	}()
 	this.ServeJson(r)
 }
+
+type GetOriginalTextParam struct {
+	Id  string `json:"id"`
+	Use bool   `json:"use,optional"`
+}
+
+const (
+	OriginalStatus1 = 1 // 需要留资  留资提示即刻获得一次查看原文机会
+	OriginalStatus2 = 2 // 不需要留资  弹框提示用户确定消耗一次查看原网站的机会   用户如果选择确认,再次调用该接口 `use` 传true
+	OriginalStatus3 = 3 // 需要留资  留资提示已经消耗过查看原网站链接的机会、升级为大会员
+	OriginalStatus4 = 4 // 付费用户次数达上限,提示暂无更多查看原文权限,联系客服
+	OriginalStatus5 = 5 // 5:没有查询到有效的原文地址
+)
+
+// GetOriginalText 获取查看原文地址
+func (this *ServiceStruct) GetOriginalText() {
+	defer qu.Catch()
+	// 接收参数
+	var req GetOriginalTextParam
+	if err := json.Unmarshal(this.Body(), &req); err != nil {
+		this.ServeJson(Result{Data: nil, Error_code: Error_code_1003, Error_msg: Error_msg_1003})
+		return
+	}
+	var url string
+	// 判断需不需要登录 和验证不验证权限  直接查询原文地址返回
+	stypeInfo := entity.GetStypeInfo(this.Request.Referer())
+	if stypeInfo == nil {
+		this.ServeJson(Result{Data: nil, Error_code: Error_code_1003, Error_msg: Error_msg_1003})
+		return
+	}
+	sessUser := entity.GetUserBaseInfo(this.Session())
+	if stypeInfo.Login && sessUser.MgoUserId == "" {
+		this.ServeJson(Result{Data: nil, Error_code: Error_code_1001, Error_msg: Error_msg_1001})
+		return
+	}
+	// id 解密
+	biddingId_ := encrypt.DecodeArticleId2ByCheck(req.Id)
+	var biddingId string
+	if len(biddingId_) == 0 || biddingId_[0] == "" {
+		this.ServeJson(Result{Data: nil, Error_code: Error_code_1003, Error_msg: Error_msg_1003})
+		return
+	}
+	biddingId = biddingId_[0]
+	var op entity.OriginalPower
+	if sessUser.MgoUserId != "" { // 已登录
+		op = entity.NewOriginalPower(sessUser.BaseUserId, sessUser.AccountId, sessUser.EntId, sessUser.PositionType, sessUser.PositionId, biddingId, sessUser.MgoUserId, sessUser.Phone, sessUser.UserId, *stypeInfo)
+		op.SetUserInfo()
+		pLock := entity.GetOriginalTextLock(fmt.Sprintf("%d", op.PositionId))
+		pLock.Lock()
+		defer pLock.Unlock()
+	}
+	//  如果未登录且不需要校验 直接查地址返回
+	// 不用校验直接查地址 如果登录了需要存记录
+	if !stypeInfo.Check {
+		url := entity.GetOriginalTextUrl(biddingId)
+		var status int64
+		if url == "" {
+			status = OriginalStatus5
+		} else {
+			if sessUser.MgoUserId != "" {
+				op.SavePowerRecord(url)
+			}
+		}
+		this.ServeJson(Result{
+			Data: map[string]interface{}{
+				"url":    url,
+				"status": status,
+			},
+		})
+		return
+	}
+	if sessUser.MgoUserId == "" {
+		this.ServeJson(Result{Data: nil, Error_code: Error_code_1001, Error_msg: Error_msg_1001})
+		return
+	}
+	// 2. 获取用户类型对应的条数
+	// a. 查看过返回地址
+	hasRecord, textData := op.FindOriginalPowerRecord()
+	if hasRecord && textData != "" {
+		// 存记录
+		op.SavePowerRecord(textData)
+		this.ServeJson(Result{Data: map[string]interface{}{
+			"url": textData,
+		}})
+		return
+	}
+	// 查询已经看过的次数  用于判断是否有剩余次数
+	count := op.CountRecord()
+	if count < 0 {
+		//  查询异常
+		this.ServeJson(Result{Data: nil, Error_code: -1, Error_msg: "查询异常"})
+		return
+	}
+	switch op.IsFree {
+	case false:
+		//付费
+		if op.TotalCount <= int64(count) {
+			//无剩余次数 status 4
+			this.ServeJson(Result{Data: map[string]interface{}{
+				"url":     "",
+				"status":  OriginalStatus4,
+				"surplus": 0,
+			}})
+			return
+		}
+		//有剩余次数 查原文链接
+		url = entity.GetOriginalTextUrl(biddingId)
+		if url == "" {
+			this.ServeJson(Result{
+				Data: map[string]interface{}{
+					"url":     "",
+					"status":  OriginalStatus5,
+					"surplus": op.TotalCount - int64(count),
+				},
+			})
+			return
+		}
+		//存记录
+		op.SavePowerRecord(url)
+		this.ServeJson(Result{Data: map[string]interface{}{
+			"url":     url,
+			"surplus": op.TotalCount - int64(count) - 1,
+		}})
+		return
+	default:
+		// 免费
+		if op.TotalCount <= int64(count) {
+			//- 机会已经消耗过  需要留资  升级大会员 status 3
+			this.ServeJson(Result{Data: map[string]interface{}{
+				"url":     "",
+				"surplus": 0,
+				"status":  OriginalStatus3,
+			}})
+			return
+		}
+		var leadOk bool
+		leadOk = op.CNode()
+		// 有剩余次数  校验留资
+		if !leadOk {
+			//   留资信息不满足 需要留资 status 1
+			this.ServeJson(Result{Data: map[string]interface{}{
+				"url":     "",
+				"surplus": 0,
+				"status":  OriginalStatus1,
+			}})
+			return
+		}
+		if !req.Use {
+			this.ServeJson(Result{Data: map[string]interface{}{
+				"url":     "",
+				"surplus": op.TotalCount - int64(count),
+				"status":  OriginalStatus2,
+			}})
+			return
+		}
+		// 消耗一次机会
+		url := entity.GetOriginalTextUrl(biddingId)
+		if url == "" {
+			this.ServeJson(Result{
+				Data: map[string]interface{}{
+					"url":     "",
+					"status":  OriginalStatus5,
+					"surplus": op.TotalCount - int64(count),
+				},
+			})
+			return
+		}
+		//存记录
+		op.SavePowerRecord(url)
+		this.ServeJson(Result{Data: map[string]interface{}{
+			"url":     url,
+			"surplus": op.TotalCount - int64(count) - 1,
+		}})
+		return
+	}
+}

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

@@ -5,7 +5,7 @@ go 1.20
 require (
 	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 v1.0.7-0.20231114075116-499de5b076d3
+	app.yhyue.com/moapp/jypkg v1.1.2
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
@@ -22,7 +22,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
 	github.com/BurntSushi/toml v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect

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

@@ -9,14 +9,14 @@ app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+s
 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 v1.0.7-0.20231114075116-499de5b076d3 h1:6Jv5DcoGYCsHVMwUjvlZubuTgY/vu4fWP5+rcXIKNj0=
-app.yhyue.com/moapp/jypkg v1.0.7-0.20231114075116-499de5b076d3/go.mod h1:LuxdVd+j3uwm7N5j2hivmpPU0LJytEV7iwAIljdoc4Q=
+app.yhyue.com/moapp/jypkg v1.1.2 h1:R4fayhufbUpQ0QDDkCtIPZHC7J+GbDjkGKtzF4fzi0s=
+app.yhyue.com/moapp/jypkg v1.1.2/go.mod h1:sMZxJOsD3STWGY04aDhUtRD+1u5nqhQpdDdpSW3JC1Y=
 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=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e/go.mod h1:7Xhygw0KBuL4h0G76FnFg4otQcA9bmOO0c8M0FCjAyQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a h1:JX2jEMrbdLzXfVC/nTUvdFOkqNj5DUxkJFjl3XE1gyg=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230225125145-431a4f70093a/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d h1:x17+SAYxlBChNWn2IS2eDWZlhZrxtgEWjlb1JF0946E=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231115092908-cb4608f3a96d/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d h1:mqOFpjEX8eNNskmu0cejgA8fqmbDjFG/ggeNrUO3shw=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d/go.mod h1:UKLwPLx9be595yaiIwqqdKSloKK/Kdf/wTLr4XUClV0=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 h1:14Yxzutsej7LQe3jnN61wuRX9qjAZ4FtdWMA27ewQ3w=

+ 28 - 19
src/jfw/modules/subscribepay/src/service/userAccountInfo.go

@@ -69,12 +69,13 @@ const (
 
 // 客服接口 获取基本信息
 func (this *UserAccount) GetSimpleData() {
-	headImage := this.GetSession("s_avatar")
+	sessVal := this.Session().GetMultiple()
+	headImage := sessVal["s_avatar"]
 	if headImage == "" {
-		headImage = this.GetSession("s_headimageurl")
+		headImage = sessVal["s_headimageurl"]
 	}
-	phone, _ := this.GetSession("phone").(string)
-	name, _ := qutil.If(this.GetSession("s_nickname") != nil, this.GetSession("s_nickname"), this.GetSession("app_name")).(string)
+	phone, _ := sessVal["phone"].(string)
+	name, _ := qutil.If(sessVal["s_nickname"] != nil, sessVal["s_nickname"], sessVal["app_name"]).(string)
 	if phone != "" {
 		var PhoneReg = regexp.MustCompile(`^(100\d{8}|1[3-9]\d{9})$`)
 		if PhoneReg.MatchString(phone) {
@@ -82,7 +83,7 @@ func (this *UserAccount) GetSimpleData() {
 		}
 	}
 	this.ServeJson(map[string]interface{}{
-		"userId":    encrypt.EncodeArticleId(qutil.ObjToString(this.GetSession("mgoUserId"))),
+		"userId":    encrypt.EncodeArticleId(qutil.ObjToString(sessVal["mgoUserId"])),
 		"nickName":  qutil.If(phone != "", phone, name).(string),
 		"phone":     phone,
 		"name":      name,
@@ -94,7 +95,8 @@ func (this *UserAccount) GetSimpleData() {
 // 手机号 邮箱 头像 昵称 超级订阅 大会员 用户加密id
 func (this *UserAccount) GetAccountInfo() {
 	rData, errMsg := func() (interface{}, error) {
-		userId, _ := this.GetSession("mgoUserId").(string)
+		sessVal := this.Session().GetMultiple()
+		userId, _ := sessVal["mgoUserId"].(string)
 		//由于超级订阅vip状态需要查库,无法从session中获取,所以直接所有字段从数据库中获取
 		userMsg := util.Compatible.Select(userId, `{"s_m_phone":1,"s_phone":1,"s_myemail":1,"s_nickname":1,"s_headimageurl":1,"s_password":1,"s_company":1,"s_unionid":1}`)
 		if userMsg == nil || len(*userMsg) == 0 {
@@ -121,10 +123,10 @@ func (this *UserAccount) GetAccountInfo() {
 		}
 		b := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
 		//s从数据导出填写的邮箱或者从数据定制服务这里获取的邮箱
-		_, otherMail := dataexport.GetLastExportPhoneAndMail(util.Mysql, userId, qutil.ObjToString(this.GetSession("entUserId")))
+		_, otherMail := dataexport.GetLastExportPhoneAndMail(util.Mysql, userId, qutil.ObjToString(sessVal["entUserId"]))
 		if otherMail == "" {
 			saleData, _ := util.MQFW.FindOne("saleLeads", map[string]interface{}{
-				"userid": this.GetSession("userId"),
+				"userid": sessVal["userId"],
 				"mail": map[string]interface{}{
 					"$exists": true,
 				},
@@ -199,7 +201,8 @@ func (this *UserAccount) Interested(doType string) {
 
 // 绑定邮箱&更改邮箱【绑定邮箱和更改邮箱流程一样】
 func (this *UserAccount) MailSet(doType string) {
-	userId, _ := this.GetSession("mgoUserId").(string)
+	sessVal := this.Session().GetMultiple()
+	userId, _ := sessVal["mgoUserId"].(string)
 	rData, errMsg := func() (interface{}, error) {
 		step, _ := this.GetInteger("step")
 		mail := this.GetString("mail")
@@ -232,8 +235,8 @@ func (this *UserAccount) MailSet(doType string) {
 				"code":       qutil.If(isNew, 1009, 1016),
 				"types":      "bindMail",
 				"num":        50,
-				"baseUserId": this.GetSession("base_user_id"),
-				"positionId": this.GetSession("positionId"),
+				"baseUserId": sessVal["base_user_id"],
+				"positionId": sessVal["positionId"],
 			})
 			this.Session().Del(mailAuthPassSessionKey)
 		}
@@ -256,8 +259,12 @@ func (this *UserAccount) CompanyAssociation() {
 		if companyCount <= count*2 && companyCount > 0 {
 			count = companyCount
 		}
+		length, _ := this.GetInteger("len") //P416 电销要求公司名称可以两字联想,剑鱼业务还是三字
+		if length < 2 {
+			length = 3
+		}
 		list := []string{}
-		if len([]rune(name)) > 2 {
+		if len([]rune(name)) >= length {
 			query := fmt.Sprintf(`{"query": {"match_phrase": {"name": "%s"}},"_source": ["name"],"size": %d}`, name, count)
 			r := elastic.Get("qyxy", "qyxy", query)
 			if r != nil {
@@ -324,7 +331,8 @@ func (this *UserAccount) PhoneCaptcha() {
 
 // 我的页面身份验证【绑定、更改手机号之前需要先进行身份验证 15分钟内无须重复验证】
 func (this *UserAccount) Authentication(doType string) {
-	userId, _ := this.GetSession("mgoUserId").(string)
+	sessVal := this.Session().GetMultiple()
+	userId, _ := sessVal["mgoUserId"].(string)
 	rData, errMsg := func() (interface{}, error) {
 		step, _ := this.GetInteger("step")
 		code := this.GetString("code")
@@ -352,7 +360,7 @@ func (this *UserAccount) Authentication(doType string) {
 					return nil, err
 				}
 			}
-			phone, _ := this.GetSession("s_phone").(string)
+			phone, _ := sessVal["s_phone"].(string)
 			if phone == "" {
 				phone = getPhoneByUserId(userId)
 			}
@@ -386,7 +394,8 @@ func (this *UserAccount) Authentication(doType string) {
 //       A账户已绑定微信,此微信必须与当前账户绑定的微信一致
 
 func (this *UserAccount) PhoneBind() {
-	userId, _ := this.GetSession("mgoUserId").(string)
+	sessVal := this.Session().GetMultiple()
+	userId, _ := sessVal["mgoUserId"].(string)
 	rData, errMsg := func() (interface{}, error) {
 		step, _ := this.GetInteger("step")
 		phone := this.GetString("phone")
@@ -445,15 +454,15 @@ func (this *UserAccount) PhoneBind() {
 						"code":       1007,
 						"types":      "bindPhone",
 						"num":        50,
-						"baseUserId": this.GetSession("base_user_id"),
-						"positionId": this.GetSession("positionId"),
+						"baseUserId": sessVal["base_user_id"],
+						"positionId": sessVal["positionId"],
 					})
 					jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, "task", userId, jy.Jyweb_node2, map[string]interface{}{
 						"code":       1008,
 						"types":      "followWx",
 						"num":        50,
-						"baseUserId": this.GetSession("base_user_id"),
-						"positionId": this.GetSession("positionId"),
+						"baseUserId": sessVal["base_user_id"],
+						"positionId": sessVal["positionId"],
 					})
 				}
 				data := map[string]interface{}{

+ 20 - 19
src/jfw/qrmanager/qrmanager.go

@@ -19,8 +19,9 @@ var se = encrypt.SE
 
 func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session, hrt *http.Request) {
 	oldData := redis.Get("sso", "p_userdata_"+se.DecodeString(oid))
-	var Rurl = util.ObjToString(hsn.Get("RURL"))
-	var Rref = util.ObjToString(hsn.Get("Rref"))
+	sessVal := hsn.GetMultiple()
+	var Rurl = util.ObjToString(sessVal["RURL"])
+	var Rref = util.ObjToString(sessVal["Rref"])
 	rheader := hrt.Header
 	rhdua := "" //UA
 	if len(rheader["User-Agent"]) > 0 {
@@ -37,7 +38,7 @@ func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session
 	userData["Ros"] = util.GetOS(rhdua)
 	userData["Rip"] = util.GetIp(hrt)
 	userData["Rbrowse"] = util.GetBrowse(rhdua)
-	if hsn.Get("RReferer") == nil || util.ObjToString(hsn.Get("RReferer")) == "" {
+	if sessVal["RReferer"] == nil || util.ObjToString(sessVal["RReferer"]) == "" {
 		if Rref == "" {
 			hsn.Set("RReferer", Rurl)
 		} else {
@@ -53,7 +54,7 @@ func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session
 			break
 		}
 	}
-	if hsn.Get("RModule") == nil || util.ObjToString(hsn.Get("RModule")) == "" {
+	if sessVal["RModule"] == nil || util.ObjToString(sessVal["RModule"]) == "" {
 		hsn.Set("RModule", "首页")
 	}
 	//活动页模块
@@ -67,7 +68,7 @@ func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session
 		sourcelist := Seoconfig["source"].(map[string]interface{})
 		for k, v := range sourcelist {
 			if k == activeCode {
-				if hsn.Get("RSource") == nil {
+				if sessVal["RSource"] == nil {
 					hsn.Set("RSource", v)
 					hsn.Set("RModule", activeCode+"活动页")
 					hsn.Set("RActiveCode", activeCode)
@@ -75,18 +76,18 @@ func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session
 				break
 			}
 		}
-		if hsn.Get("RSource") == nil {
+		if sessVal["RSource"] == nil {
 			hsn.Set("RSource", activeCode)
 			hsn.Set("RModule", activeCode+"活动页")
 			hsn.Set("RActiveCode", activeCode)
 		}
 	}
-	userData["RModule"] = hsn.Get("RModule")
-	userData["RActiveCode"] = hsn.Get("RActiveCode")
-	userData["RReferer"] = hsn.Get("RReferer")
-	if hsn.Get("RSource") == nil || util.ObjToString(hsn.Get("RSource")) == "" {
+	userData["RModule"] = sessVal["RModule"]
+	userData["RActiveCode"] = sessVal["RActiveCode"]
+	userData["RReferer"] = sessVal["RReferer"]
+	if sessVal["RSource"] == nil || util.ObjToString(sessVal["RSource"]) == "" {
 		var open = ""
-		if strings.Contains(util.ObjToString(hsn.Get("RReferer")), "open") { //api.jianyu360
+		if strings.Contains(util.ObjToString(sessVal["RReferer"]), "open") { //api.jianyu360
 			reg := regexp.MustCompile(".*/article/(.+)\\.html.*")
 			res := reg.ReplaceAllString(Rref, "$1")
 			rec := strings.Split(res, "ABC")
@@ -98,22 +99,22 @@ func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session
 		refererlist := Seoconfig["referer"].(map[string]interface{})
 		for k, v := range refererlist {
 			if strings.Contains(Rref, k) {
-				if hsn.Get("RSource") == nil {
+				if sessVal["RSource"] == nil {
 					hsn.Set("RSource", util.ObjToString(v)+open)
 				}
 				break
 			}
 		}
-		if hsn.Get("RSource") == nil || util.ObjToString(hsn.Get("RSource")) == "" {
+		if sessVal["RSource"] == nil || util.ObjToString(sessVal["RSource"]) == "" {
 			hsn.Set("RSource", "剑鱼标讯网站")
 		}
 	}
-	userData["RSource"] = hsn.Get("RSource")
-	userData["Rparamkey"] = hsn.Get("paramkey")
-	userData["Rparampublishtime"] = hsn.Get("parampublishtime")
-	userData["Rparamarea"] = hsn.Get("paramarea")
-	userData["Rparaminfotype"] = hsn.Get("paraminfotype")
-	userData["Rprojectname"] = hsn.Get("projectname")
+	userData["RSource"] = sessVal["RSource"]
+	userData["Rparamkey"] = sessVal["paramkey"]
+	userData["Rparampublishtime"] = sessVal["parampublishtime"]
+	userData["Rparamarea"] = sessVal["paramarea"]
+	userData["Rparaminfotype"] = sessVal["paraminfotype"]
+	userData["Rprojectname"] = sessVal["projectname"]
 	userData["action"] = action
 	ck_source, err := hrt.Cookie("source")
 	if err == nil {

+ 1 - 0
src/jfw/tag/a_init.go

@@ -15,4 +15,5 @@ func init() {
 	xweb.RootApp().AddTmplVar("ParseHtml", ParseHtml)
 	xweb.RootApp().AddTmplVar("ParseHtmlCss", ParseHtmlCss)
 	xweb.RootApp().AddTmplVar("ParseHtmlAttr", ParseHtmlAttr)
+	xweb.RootApp().AddTmplVar("Export", Export)
 }

+ 6 - 3
src/jfw/tag/msg.go

@@ -10,12 +10,16 @@ import (
 	util "app.yhyue.com/moapp/jybase/common"
 )
 
-//从json配置文件中读取值
+// 从json配置文件中读取值
+func Export() map[string]interface{} {
+	return config.ExportConfig
+}
+
+// 从json配置文件中读取值
 func Msg(mtype, key string) string {
 	return readproperty(mtype, key)
 }
 
-//
 func DateTip(date2 int64) (timedate string) {
 	timedate = "30秒前"
 	date1 := time.Now().Unix()
@@ -50,7 +54,6 @@ func DateTip(date2 int64) (timedate string) {
 	return
 }
 
-//
 func readproperty(mtype, key string) string {
 	switch mtype {
 	case "seo":

+ 13 - 2
src/jfw/timetask/timetask.go

@@ -1,9 +1,13 @@
 package timetask
 
 import (
-	"jy/src/jfw/nodemgr"
+	qutil "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jypkg/public"
+	"fmt"
+	"jy/src/jfw/config"
+	"jy/src/jfw/nodemgr"
 	"log"
+	"math"
 	"time"
 
 	"app.yhyue.com/moapp/jybase/redis"
@@ -35,7 +39,7 @@ func task() {
 	}
 }
 
-//每周六晚上十一点更新redis订阅词
+// 每周六晚上十一点更新redis订阅词
 func updateHotKeys() {
 	c := cron.New()
 	c.AddFunc("0 0 23 * * 6", func() {
@@ -46,6 +50,13 @@ func updateHotKeys() {
 			}
 		}
 	})
+	c.AddFunc("0 0 1 * * 1", func() { //每周1清理匿名用户日志表 保留最近30天
+		tm := time.Now().AddDate(0, 0, -qutil.IntAllDef(config.Sysconfig["anonymousTime"], 30)).Unix()
+		count := public.BaseMysql.CountBySql(fmt.Sprintf(`SELECT count(*) FROM anonymous_identity WHERE  creation_time < %d and refer = ''  and   fid is null`, tm))
+		for i := 0; i < int(math.Ceil(float64(count)/float64(2000))); i++ {
+			public.BaseMysql.SelectBySql(fmt.Sprintf(`DELETE FROM anonymous_identity WHERE creation_time < %d and refer = '' AND fid IS NULL LIMIT 2000;`, tm))
+		}
+	})
 	c.Start()
 	defer c.Stop()
 	chan bool(nil) <- true

+ 25 - 6
src/web/staticres/brand/css/brand.css

@@ -1005,29 +1005,48 @@
 }
 
 .contact_us .qr_box {
+    height: 368px;
     width: 100%;
     margin-top: 40px;
     display: flex;
 }
-
+.qr_box > img {
+    width: 100%;
+    height: 100%;
+}
 .qr_box .item {
     flex: 1;
 }
 
 .qr_box .item .tit {
-    width: 88px;
+    width: 100%;
     height: 40px;
     font-style: normal;
     font-weight: 400;
     font-size: 20px;
     line-height: 40px;
-    /* identical to box height, or 200% */
     text-align: center;
     letter-spacing: 0.1em;
-    /* Font/#686868 */
     color: #686868;
-    border-bottom: 4px solid #2CB7CA;
-    margin: auto;
+    border-bottom: 1px solid #ededed;
+    white-space: nowrap;
+    position: relative;
+}
+.qr_box .item img{
+    width: 160px;
+    height:160px;
+}
+.qr_box .item .tit::after{
+    content: '';
+    height: 4px;
+    width:88px;
+    background: #2CB7CA;
+    position: absolute;
+    bottom:-1px;
+    left:calc(50% - 44px);
+}
+.qr_box .item:nth-of-type(1) .tit::after{
+    transform: translateX(0);
 }
 
 .qr_box .name {

+ 26 - 2
src/web/staticres/common-module/pc-dialog/js/leave-info-dialog.js

@@ -475,6 +475,24 @@ var vm = new Vue({
           height: '277px',
           desc: '数据超市搜索无结果-申请数据定制',
           oneRow: true
+        },
+        'pc_Dataself_keywordmore_customization': {
+          headerUrl: '/common-module/pc-dialog/image/leave-title-custom.png',
+          height: '277px',
+          desc: '数据自助导出-关键词个数达上限-申请数据定制',
+          oneRow: true
+        },
+        'pc_Dataself_buyermore_customization': {
+          headerUrl: '/common-module/pc-dialog/image/leave-title-custom.png',
+          height: '277px',
+          desc: '数据自助导出-采购单位个数达上限-申请数据定制',
+          oneRow: true
+        },
+        'pc_Dataself_entrmore_customization': {
+          headerUrl: '/common-module/pc-dialog/image/leave-title-custom.png',
+          height: '277px',
+          desc: '数据自助导出-中标单位个数达上限-申请数据定制',
+          oneRow: true
         }
       }
     }
@@ -511,7 +529,10 @@ var vm = new Vue({
         case 'pc_supermarket_details_IndustryFields':
         case 'pc_data_custom_data':
         case 'pc_supermarket_Noresults_customization':
-        case 'pc_supermarket_details_customization': {
+        case 'pc_supermarket_details_customization': 
+        case 'pc_Dataself_keywordmore_customization': 
+        case 'pc_Dataself_buyermore_customization': 
+        case 'pc_Dataself_entrmore_customization': {
           return '已收到您提交的数据定制申请,我们的数据经理会尽快联系您~'
         }
         case 'pc_supermarket_details_AnalysisCase':
@@ -571,7 +592,10 @@ var vm = new Vue({
         }
         case 'pc_data_custom_data':
         case 'pc_supermarket_Noresults_customization':
-        case 'pc_supermarket_details_customization': {
+        case 'pc_supermarket_details_customization': 
+        case 'pc_Dataself_keywordmore_customization': 
+        case 'pc_Dataself_buyermore_customization': 
+        case 'pc_Dataself_entrmore_customization': {
           this.hideModule(['mail', 'companyType', 'job'])
           break
         }

+ 62 - 0
src/web/staticres/common-module/perfect-info/index.css

@@ -621,3 +621,65 @@
   color: #686868;
   background: transparent;
 }
+.Original-dialog {
+  border-radius: 0.16rem;
+  width: 6.06rem;
+}
+
+.Original-dialog .van-dialog__header{
+  font-size: 0.36rem;
+  color: #171826;
+}
+.Original-dialog .text-content{
+  padding: 0.2rem 0.6rem 0.48rem 0.6rem;
+}
+.Original-dialog .con-text{
+  font-size: 0.3rem;
+  color: #5F5E64;
+  line-height: 0.44rem;
+}
+.Original-dialog  .blue-color{
+  color: #2abed1 !important;
+}
+.Original-dialog  .con-footer{
+  border-top: 0.01rem solid #0000001A;
+  
+}
+.Original-dialog .con-button-group{
+  display: flex;
+}
+.Original-dialog .con-button-group{
+  display: flex;
+}
+.Original-dialog .con-button-back{
+  flex: 1;
+  height: 1.2rem;
+  box-sizing: border-box;
+font-size: 0.36rem;
+font-weight: 400;
+color: #171826;
+display: flex;
+justify-content: center;
+align-items: center;
+border-right: 0.01rem solid #0000001A;
+
+}
+.Original-dialog .con-button-confirm{
+  flex: 1;
+  height: 1.2rem;
+  box-sizing: border-box;
+  padding: 0.2rem 0;
+}
+.Original-dialog .con-button-confirm .btn-t{
+  color: #2ABED1;
+  font-size: 0.36rem;
+  text-align: center;
+  line-height: 0.52rem;
+}
+.Original-dialog .con-button-confirm .btn-d{
+  color: #5F5E64;
+  font-size: 0.22rem;
+  text-align: center;
+  line-height: 0.26rem;
+}
+

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

@@ -2,7 +2,13 @@ var freeBuyerText = '请留下联系方式,立即免费体验【采购单位
 var freeEntText = '请留下联系方式,立即免费体验【企业中标分析】1次,多维度可视化分析竞争对手!'
 var freeAttachText = '请留下联系方式,立即免费体验【附件下载】1次,招标文件/采购清单一键下载,商机更完整!'
 var analysisTipText = '请完善个人信息,辅助你做投标决策及报价参考!'
-
+var article_original_one_title = '请完善个人信息'
+var article_original_one_tip = '即刻获得1次免费查看原文链接的机会,如需查看更多请联系客服:<a onclick="appcallPhone()" class="tips_tel">400-108-6670</a>'
+var article_original_one_sourceDesc = '标讯详情页-免费用户获取1次查看原文链接机会'
+var article_original_more_title = '申请更多查看原文链接权限'
+var article_original_more_tip = '查看原文链接次数已用完,请填写以下信息升级大会员获得更多查看原文链接权限,同时可查看超前商机、联系人电话,85%用户已升级!'
+var article_original_more_membership_tip = '请填写以下信息升级大会员获得更多查看原文链接权限,同时可查看超前商机、联系人电话,85%用户已升级!'
+var article_original_more_sourceDesc = '标讯详情页-获取更多查看原文链接机会'
 var emailRegExp = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
 // 标题
 var titleMap = {
@@ -76,7 +82,28 @@ var titleMap = {
   // 标书制作
   bid_document_Introduction_page: '完善信息',
   // 电信行业解决方案
-  telecom_solution: '完善信息'
+  telecom_solution: '完善信息',
+  // 标讯详情查看原文
+  app_article_original_one:article_original_one_title,
+  h5_article_original_one:article_original_one_title,
+  wx_article_original_one:article_original_one_title,
+  app_article_original_more:article_original_more_title,
+  h5_article_original_more:article_original_more_title,
+  wx_article_original_more:article_original_more_title,
+  app_article_original_more_membership:article_original_more_title,
+  h5_article_original_more_membership:article_original_more_title,
+  wx_article_original_more_membership:article_original_more_title,
+  app_Dataself_keywordmore_customization: '量身定制专属的数据解决方案',
+  wx_Dataself_keywordmore_customization: '量身定制专属的数据解决方案',
+  h5_Dataself_keywordmore_customization: '量身定制专属的数据解决方案',
+  app_Dataself_buyermore_customization: '量身定制专属的数据解决方案',
+  wx_Dataself_buyermore_customization: '量身定制专属的数据解决方案',
+  h5_Dataself_buyermore_customization: '量身定制专属的数据解决方案',
+  app_Dataself_entmore_customization: '量身定制专属的数据解决方案',
+  wx_Dataself_entmore_customization: '量身定制专属的数据解决方案',
+  h5_Dataself_entmore_customization: '量身定制专属的数据解决方案'
+
+
 }
 
 // tip
@@ -208,6 +235,25 @@ var tipMap = {
   bid_document_Introduction_page: '请留下联系方式,我们会尽快联系您!',
   // 电信行业解决方案
   telecom_solution: '请留下您的信息,我们会尽快和您联系',
+  // 标讯详情查看原文
+  app_article_original_one:article_original_one_tip,
+  h5_article_original_one:article_original_one_tip,
+  wx_article_original_one:article_original_one_tip,
+  app_article_original_more:article_original_more_tip,
+  h5_article_original_more:article_original_more_tip,
+  wx_article_original_more:article_original_more_tip,
+  app_article_original_more_membership:article_original_more_membership_tip,
+  h5_article_original_more_membership:article_original_more_membership_tip,
+  wx_article_original_more_membership:article_original_more_membership_tip,
+  app_Dataself_keywordmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  wx_Dataself_keywordmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  h5_Dataself_keywordmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  app_Dataself_buyermore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  wx_Dataself_buyermore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  h5_Dataself_buyermore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  app_Dataself_entmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  wx_Dataself_entmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!',
+  h5_Dataself_entmore_customization: '请留下您的联系方式及定制数据字段需求,我们将安排专业的数据经理与您对接,为您打造专属的数据服务方案,可快速交付!'
 }
 
 // 留资来源(数据库新增字段,记录留资对应的来源,之前未记录的不考虑,新增的source要记录)
@@ -232,7 +278,26 @@ var sourceDescMap = {
   h5_DataSupermarket_Customization: '数据超市列表-申请数据定制',
   app_supermarket_details_customization: '数据超市详情-申请数据定制',
   wx_supermarket_details_customization: '数据超市详情-申请数据定制',
-  h5_supermarket_details_customization:'数据超市详情-申请数据定制'
+  h5_supermarket_details_customization:'数据超市详情-申请数据定制',
+  // 标讯详情查看原文
+  app_article_original_one:article_original_one_sourceDesc,
+  h5_article_original_one:article_original_one_sourceDesc,
+  wx_article_original_one:article_original_one_sourceDesc,
+  app_article_original_more:article_original_more_sourceDesc,
+  h5_article_original_more:article_original_more_sourceDesc,
+  wx_article_original_more:article_original_more_sourceDesc,
+  app_article_original_more_membership:article_original_more_sourceDesc,
+  h5_article_original_more_membership:article_original_more_sourceDesc,
+  wx_article_original_more_membership:article_original_more_sourceDesc,
+  app_Dataself_keywordmore_customization: '数据自助导出-关键词个数达上限-申请数据定制',
+  wx_Dataself_keywordmore_customization: '数据自助导出-关键词个数达上限-申请数据定制',
+  h5_Dataself_keywordmore_customization: '数据自助导出-关键词个数达上限-申请数据定制',
+  app_Dataself_buyermore_customization: '数据自助导出-采购单位个数达上限-申请数据定制',
+  wx_Dataself_buyermore_customization: '数据自助导出-采购单位个数达上限-申请数据定制',
+  h5_Dataself_buyermore_customization: '数据自助导出-采购单位个数达上限-申请数据定制',
+  app_Dataself_entmore_customization: '数据自助导出-中标单位个数达上限-申请数据定制',
+  wx_Dataself_entmore_customization: '数据自助导出-中标单位个数达上限-申请数据定制',
+  h5_Dataself_entmore_customization: '数据自助导出-中标单位个数达上限-申请数据定制'
 }
 
 var vNode = {
@@ -252,6 +317,8 @@ var vNode = {
     searchList: [],
     isAssociateShow: false,
     isAssociateUpTime: -1,
+    signId:'',
+    Original_url:'',
     infoMap: {
       name: '',
       phone: '',
@@ -329,7 +396,13 @@ var vNode = {
       '主管',
       '职员'
     ],
-    submitResponse: {}
+    submitResponse: {},
+    jyOriginalbox_option: {
+      show :false,
+      title: '提交成功',
+      text:'恭喜您获得<span class="blue-color">1次</span>免费查看原文链接的机会,如需查看更多请联系客服:<a onclick="appcallPhone()" class="blue-color">400-108-6670</a>',
+      desc:''
+    }
   },
   created() {
     // 大会员落地页免费体验
@@ -347,6 +420,9 @@ var vNode = {
     if (utils.getParam('interest')) {
       this.ajaxParams.interest = decodeURIComponent(utils.getParam('interest'))
     }
+    if (utils.getParam('signId')) {
+      this.signId = decodeURIComponent(utils.getParam('signId'))
+    }
     this.sourceLogAjax(this.ajaxParams.source)
     this.notit_group_init()
   },
@@ -383,12 +459,12 @@ var vNode = {
       // 提示语
       var infoText = ''
       for (var key in tipMap) {
-        if (source.indexOf(key) !== -1) {
+        if (source == key ) {
+          infoText = tipMap[key]  
+        }else if (source.indexOf(key) !== -1) {
           infoText = tipMap[key]
-          break
         }
       }
-
       // 标题
       var titleText = ''
       if (infoText) {
@@ -397,7 +473,7 @@ var vNode = {
             this.moduleShow[k] = false
           }
           this.moduleShow.position = true
-          if(source?.toLowerCase().indexOf('supermarket') > -1){
+          if(source?.toLowerCase().indexOf('supermarket') > -1 || source?.toLowerCase().indexOf('dataself') > -1){
             this.moduleShow.data_requirement = true
             this.moduleShow.email = true
           }
@@ -413,12 +489,14 @@ var vNode = {
         titleText = '完善信息'
       }
 
-
       for (var key in titleMap) {
-        if (source.indexOf(key) !== -1) {
+        if (source == key) {
           titleText = titleMap[key]
-          break
-        }
+       
+        }else if (source.indexOf(key) !== -1) {
+          titleText = titleMap[key]
+        
+        }  
       }
       document.title = titleText
 
@@ -483,7 +561,17 @@ var vNode = {
         case 'h5_supermarket_details_IndustryFields':
         case 'app_supermarket_details_AnalysisCase':
         case 'wx_supermarket_details_AnalysisCase':
-        case 'h5_supermarket_details_AnalysisCase':{
+        case 'h5_supermarket_details_AnalysisCase':
+        case 'app_Dataself_keywordmore_customization':
+        case 'wx_Dataself_keywordmore_customization':
+        case 'h5_Dataself_keywordmore_customization':
+        case 'app_Dataself_buyermore_customization':
+        case 'wx_Dataself_buyermore_customization':
+        case 'h5_Dataself_buyermore_customization':
+        case 'app_Dataself_entmore_customization':
+        case 'wx_Dataself_entmore_customization':
+        case 'h5_Dataself_entmore_customization':
+        {
             hideLabel(['email'])
           break
         }
@@ -493,6 +581,19 @@ var vNode = {
           hideLabel(['email','data_requirement'])
           break
         }
+        // 标讯详情阅读原文
+        case 'app_article_original_one':
+        case 'h5_article_original_one':
+        case 'wx_article_original_one':
+        case 'app_article_original_more':
+        case 'wx_article_original_more':
+        case 'h5_article_original_more':
+        case 'app_article_original_more_membership':
+        case 'h5_article_original_more_membership':
+        case 'wx_article_original_more_membership':{
+            hideLabel()
+            break
+          }
         default: {
           // 标书制作或者三方认证(case语句满足不了条件,放default中做更多判断)
           if (source === 'bid_document_Introduction_page' || source.indexOf('certificateServices') > -1) {
@@ -1052,8 +1153,14 @@ var vNode = {
 
       var _this = this
       var loading = _this.showLoading()
+      let ajaxParams_ = JSON.parse(JSON.stringify(this.ajaxParams))
+
+      if(ajaxParams_.source.indexOf('article_original_more_membership')>0){
+        let real = ajaxParams_.source.replace(/_membership/g, "")
+        ajaxParams_.source = real
+      }
 
-      this.ajaxFn('/salesLeads/collectInfo', this.ajaxParams, function (r) {
+      this.ajaxFn('/salesLeads/collectInfo', ajaxParams_, function (r) {
         if (r) {
           loading.clear()
 
@@ -1169,7 +1276,16 @@ var vNode = {
                 case 'wx_DataSupermarket_IndustryFields':
                 case 'app_supermarket_details_IndustryFields':
                 case 'wx_supermarket_details_IndustryFields':
-                case 'h5_supermarket_details_IndustryFields':{
+                case 'h5_supermarket_details_IndustryFields':
+                case 'app_Dataself_keywordmore_customization':
+                case 'wx_Dataself_keywordmore_customization':
+                case 'h5_Dataself_keywordmore_customization':
+                case 'app_Dataself_buyermore_customization':
+                case 'wx_Dataself_buyermore_customization':
+                case 'h5_Dataself_buyermore_customization':
+                case 'app_Dataself_entmore_customization':
+                case 'wx_Dataself_entmore_customization':
+                case 'h5_Dataself_entmore_customization':{
                   _this.showMessage('已收到您提交的数据定制申请,我们的数据经理会尽快联系您~', '我知道了', function () {
                     history.back()
                   },'提交成功')
@@ -1191,6 +1307,24 @@ var vNode = {
                 })
                 break
               }
+                // 标讯详情阅读原文
+               case 'app_article_original_one':
+               case 'h5_article_original_one':
+               case 'wx_article_original_one':{
+                _this.showjyOriginalbox()  
+                 break
+               }
+               case 'app_article_original_more':
+               case 'wx_article_original_more':
+               case 'h5_article_original_more':
+               case 'app_article_original_more_membership':
+               case 'h5_article_original_more_membership':
+               case 'wx_article_original_more_membership':{
+                _this.showMessage('已收到您提交的升级大会员申请,我们会尽快联系您并预约演示时间。', '我知道了', function () {
+                   history.back()
+                },'提交成功')
+                 break
+               }
               default: {
                 // 标书制作或者三方认证(case语句满足不了条件,放default中做更多判断)
                 if (source === 'bid_document_Introduction_page' || source.indexOf('certificateServices') > -1 || source === 'telecom_solution') {
@@ -1263,6 +1397,46 @@ var vNode = {
         }
       })
     },
+    showjyOriginalbox() {
+      let _this = this
+      $.ajax({
+        type: "POST",
+        url: "/publicapply/userbase/getOriginalText",
+        contentType: 'application/json',
+        data:JSON.stringify({id:_this.signId,use:true}),
+        success: function(res){
+          if(!res.data){
+            return
+          }
+           if (res.data.url) {
+            if(utils.$envs.inWX){
+              _this.Original_url ='/front/transfer?url='+encodeURIComponent(res.data.url)
+             } else{
+              _this.Original_url =res.data.url
+             }
+           } 
+        },
+        error: function(){
+            EasyAlert.show("网络连接错误!");
+        }
+     })
+    this.jyOriginalbox_option.show = true
+    },
+    jyOriginalbox_ok (){
+      if(this.Original_url){
+        if(utils.$envs.inApp){
+          JyObj.openExternalLink(this.Original_url, "查看原文");
+       }else{
+        window.location.href = this.Original_url
+
+       }
+      }
+      this.jyOriginalbox_option.show = false
+    },
+    jyOriginalbox_back (){
+      this.jyOriginalbox_option.show = false
+
+    },
     showLoading: function () {
       var loading = this.$toast.loading({
         duration: 0,
@@ -1301,7 +1475,16 @@ var vNode = {
       'h5_supermarket_details_IndustryFields',
       'app_supermarket_details_AnalysisCase',
       'wx_supermarket_details_AnalysisCase',
-      'h5_supermarket_details_AnalysisCase'
+      'h5_supermarket_details_AnalysisCase',
+      'app_Dataself_keywordmore_customization',
+      'wx_Dataself_keywordmore_customization',
+      'h5_Dataself_keywordmore_customization',
+      'app_Dataself_buyermore_customization',
+      'wx_Dataself_buyermore_customization',
+      'h5_Dataself_buyermore_customization',
+      'app_Dataself_entmore_customization',
+      'wx_Dataself_entmore_customization',
+      'h5_Dataself_entmore_customization'
       ]
       if(notit_group_list.includes(source)){
 
@@ -1314,11 +1497,19 @@ var vNode = {
   }
 }
 var vPerfect = new Vue(vNode)
-function appcallPhone() {
-  try{
-  JyObj.callPhone('400-108-6670')
-} catch (error) {
-  console.log(error)
-}
-
+function appcallPhone(val) {
+  let phone = val? val: '400-108-6670'
+  if(utils.$envs.inApp){
+    try{
+      JyObj.callPhone(phone)
+    } catch (error) {
+      console.log(error)
+    }
+  }else{
+    try{
+       location.href = 'tel:' + phone
+    }catch(err){
+      console.log(err)
+    } 
+  }
 }

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


+ 6 - 2
src/web/staticres/css/collect-user-info.css

@@ -89,7 +89,7 @@
   position: fixed;
   left: 50%;
   top: 40%;
-  width: 752px;
+  width: 760px;
   max-height: 680px;
   margin: 0 auto;
   padding: 32px;
@@ -102,10 +102,14 @@
 }
 #collectUserInfoDialog .dialog-header{
   color: #1D1D1D;
-  font-size: 16px;
+  font-size: 18px;
   line-height: 28px;
   text-align: center;
 }
+#collectUserInfoDialog .dialog-header.dialog-header-subtitle{
+  color: #686868;
+  font-size: 16px;
+}
 #collectUserInfoDialog .dialog-header.fs18{
   font-size: 18px;
 }

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

@@ -433,7 +433,7 @@
   border-radius: 8px;
   color: #fff;
   transform: translateX(-50%) translateY(-50%);
-  z-index: 99;
+  z-index: 3001;
 }
 /* 自定义标签弹框 */
 .tags-box{

+ 6 - 2
src/web/staticres/css/dev2/superSearch-inside.css

@@ -229,8 +229,8 @@
 .el-pagination.is-background .el-pager li:not(.disabled):hover{
   color: #2cb7ca;
 }
-.el-pagination.is-background .btn-next, 
-.el-pagination.is-background .btn-prev, 
+.el-pagination.is-background .btn-next,
+.el-pagination.is-background .btn-prev,
 .el-pagination.is-background .el-pager li{
   color: #1d1d1d;
 }
@@ -577,3 +577,7 @@ input, textarea {
   background: #ececec;
 }
 
+.self-list-loading .el-loading-spinner{
+    top: 65%;
+}
+

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

@@ -158,7 +158,7 @@
 
 .sub-contrast .contrast-main {
   width: 100%;
-  height: 1020px;
+  min-height: 1020px;
   margin-top: 32px;
 }
 

+ 34 - 11
src/web/staticres/dataExport/js/conditions_order.js

@@ -270,20 +270,20 @@ function fixLeft(){
     if(one.children('div').length === 0) {
         two.css('margin-left','0')
     }else {
-        two.css('margin-left','8px')
+        // two.css('margin-left','8px')
     }
     if(two.children('div').length === 0) {
-        two.css('margin-left','8px')
+        // two.css('margin-left','8px')
         if(one.children('div').length === 0){
             three.css('margin-left','0')
         }else {
-            three.css('margin-left','8px')
+            // three.css('margin-left','8px')
         }
     }else {
-        three.css('margin-left','8px')
+        // three.css('margin-left','8px')
     }
     if(three.children('div').length === 0) {
-        three.css('margin-left','8px')
+        // three.css('margin-left','8px')
     }
 }
 
@@ -297,7 +297,7 @@ $("#inputDel_0 .column").on('DOMNodeRemoved','div',function(){
 function addDelInput(t,type) {
   var d = document.createElement('div')
   var text = $(t).prev().val()
-  if(!text){
+  if(!text.trim()){
       return;
   }
   $(d).html(text)
@@ -309,6 +309,19 @@ function addDelInput(t,type) {
   var arr = box
   switch (type) {
     case 0: {
+      // 计算当前输入的关键词、附加词、排除词总数
+      var inputVal = []
+      var inputs = $('.add-input-w').find('.sm')
+      inputs.each(function(){
+        if ($(this).val()) {
+          inputVal.push($(this).val())
+        }
+      })
+      // console.log(inputVal);
+      if (getTotal() + inputVal.length  >=  wordsLimit) {
+        $('.keywords-more-tips').show()
+        return
+      }
       template = createKeyBox(text)
       var LArr =  [$("#inputDel_0 .column:eq(0)>div").length,$("#inputDel_0 .column:eq(1)>div").length,$("#inputDel_0 .column:eq(2)>div").length]
       var tempI = LArr.indexOf(Math.min(LArr[0],LArr[1],LArr[2]))
@@ -352,7 +365,7 @@ function addDelInputB(t,type) {
     $('.winner-search-list').hide()
     var d = document.createElement('div');
     var text = $(t).val();
-    if(!text){
+    if(!text.trim()){
         return;
     }
     $(d).html(text);
@@ -382,12 +395,25 @@ function addOtherInput(t,f) {
 	if($("#keyInput").val()==""){
 		return false;
 	}
+  var inputVal = []
+  var inputs = $('.add-input-w').find('.sm')
+  inputs.each(function(){
+    if ($(this).val()) {
+      inputVal.push($(this).val())
+    }
+  })
+  console.log(inputVal, 'inputVal');
+  // inputVal为当前输入的排除词、附加词
+  // 已存关键词、附加词、排除词数量和 + 1(当前输入的关键词)+ inputVal.length
+  if (getTotal() + 1 + inputVal.length  >=  wordsLimit) {
+    $('.keywords-more-tips').show()
+    return
+  }
   var temp = f ? '请输入附加词' : '请输入排除词'
   var input = document.createElement('input')
   input.className = 'sm'
   input.placeholder = temp
   input.maxLength = 20;
-//  console.log('--$(input)--', $(input))
   if(f){
     var l = appendArr.length
     $(input).on('input',function () {
@@ -489,6 +515,3 @@ function editKeywordBox() {
 function resetAreaLT() {
     $("#area-del").parent().prev().css("padding-top","8px");
 }
-
-
-

+ 1 - 1
src/web/staticres/frontRouter/pc/coupon/css/coupon-list.css

@@ -311,5 +311,5 @@
   border-radius: 8px;
   color: #fff;
   transform: translateX(-50%) translateY(-50%);
-  z-index: 99;
+  z-index: 3001;
 }

+ 7 - 1
src/web/staticres/js/biddingSearch.js

@@ -309,11 +309,16 @@ $(function() {
 			}else if($(this).attr("id")=="right-export"){
 				//数据导出
         if(!searchInnerVue.listState.allCount) return
+        var loading = searchInnerVue.$loading({
+          background: 'rgba(255, 255, 255, .1)',
+          customClass: 'self-list-loading'
+        })
         $.ajax({
           type: "POST",
           url: "/front/dataExport/getDontPromptAgain",
           contentType: "application/x-www-form-urlencoded",
           success: function (res) {
+            loading.close()
             if(res.error_code === 0) {
               // 数据导出-判断是否展示弹框
               let countBool = false
@@ -342,6 +347,7 @@ $(function() {
             }
           },
           error: function(err) {
+            loading.close()
 				    toPaydataExport();
           }
         });
@@ -349,7 +355,7 @@ $(function() {
 		})
 	}
 
-  $('.have-thousand-close').click(function (e) { 
+  $('.have-thousand-close').click(function (e) {
     e.preventDefault();
     $('.have-thousand-dialog').hide()
   });

+ 17 - 2
src/web/staticres/js/guide-intro-dialog.js

@@ -5,9 +5,24 @@ function GuideIntroDialog () {
     this.$dialog = $('#guide-intro-dialog-mask')
 
     this.showDialog = function (f) {
+        let _this = this
         if (f) {
-            this.$dialog.find('.content-iframe').attr('src', this.iframeUrl)
-            this.$dialog.modal('show')
+            let codes = ["pc-guide"]
+            let params = {
+                codes: codes
+            }
+            $.ajax({
+                type: 'post',
+                url: '/publicapply/free/getJyAdList',
+                contentType: 'application/json',
+                data: JSON.stringify(params),
+                success: function (r) {
+                    if (r.error_code === 0 && r.data && r.data["pc-guide"] && r.data["pc-guide"].length > 0) {
+                        _this.$dialog.find('.content-iframe').attr('src', _this.iframeUrl)
+                        _this.$dialog.modal('show')
+                    }
+                }
+            }) 
         } else {
             this.$dialog.modal('hide')
             this.onDialogClose()

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
src/web/staticres/js/pc-collect-user-info.js


+ 54 - 0
src/web/staticres/pccss/pc-detail.css

@@ -1020,3 +1020,57 @@ a{
 .page-detail .nijian-guide.hidden +.caigouyixiang-guide.hidden + .cutline {
   display: none;
 }
+
+.confirmed-dialog.el-dialog {
+  border-radius: 8px;
+}
+.confirmed-dialog.el-dialog .el-dialog__header {
+  padding: 32px 32px 0;
+}
+.confirmed-dialog.el-dialog .el-dialog__body {
+  padding: 20px 32px 32px;
+  text-align: center;
+  line-height: 22px;
+}
+.confirmed-dialog.el-dialog .el-dialog__footer {
+  padding: 0 32px 32px;
+}
+.confirmed-dialog.el-dialog .el-dialog__title {
+  color: #1D1D1D;
+  font-size: 18px;
+  line-height: 28px;
+}
+.confirmed-dialog.el-dialog .dialog-footer {
+  display: flex;
+  justify-content: space-between;
+}
+.dialog-button {
+  width: 132px;
+  height: 36px;
+  font-size: 16px;
+  line-height: 24px;
+  border-radius: 6px;
+}
+.dialog-button.confirm {
+  color: #fff;
+  background-color: #2ABED1;
+  border: 1px solid #2ABED1;
+}
+.dialog-button.plain {
+  color: #686868;
+  background-color: transparent;
+  border: 1px solid #E0E0E0;
+}
+
+.confirmed-dialog.el-dialog .dialog-footer .left-tip {
+  margin-top: 4px;
+  color: #FF9F40;
+  font-size: 12px;
+}
+.confirmed-dialog.el-dialog .dialog-footer-tip-container {
+  margin-top: 12px;
+  color: #686868;
+  font-size: 14px;
+  line-height: 22px;
+  text-align: left;
+}

+ 160 - 27
src/web/staticres/public-pc/js/article-content.js

@@ -406,6 +406,155 @@ var bidNode = {
 var bidVue = new Vue(bidNode)
 /*--E-*/
 
+var originalActions = {
+  openOriginLink: function (url) {
+    var originalUrl = this.calcOriginUrl(url)
+    window.open(originalUrl)
+  },
+  calcOriginUrl: function (url) {
+    //获取原文百度统计跳转
+    var originalhref;
+    // var originalUrl = goTemplateData.params.obj.url;
+    if (url) {
+      originalUrl = url.replace("http://https://","https://");
+      if (window.location.href.indexOf("mailprivate")>0||isWechat()){
+        originalhref='/front/transfer?url='+encodeURIComponent(originalUrl);
+      }else{
+        var url =document.location.protocol+"//"+ window.location.host+"/front/transfer?url="+encodeURIComponent(originalUrl)
+        originalhref=url
+      }
+      $(".com-original").attr("dataHref",originalhref);
+    }
+    return originalhref
+  },
+  getOriginalText: function (p) {
+    // p.use
+    // p.success
+    // p.error
+    // p.complete
+    var params = {
+      id: id,
+    }
+    if (p.use) {
+      params.use = p.use
+    }
+    $.ajax({
+      type: 'POST',
+      contentType: "application/json",
+      data: JSON.stringify(params),
+      url: '/publicapply/userbase/getOriginalText',
+      success: function(res) {
+        p && p.success && p.success(res)
+      },
+      error: function() {
+        p && p.error && p.error()
+      },
+      complete: function() {
+        p && p.complete && p.complete()
+      }
+    })
+  },
+  doConfirmLinkAction: function () {
+    this.getOriginalText({
+      use: true,
+      success: function (r) {
+        if (r && r.data && r.data.url) {
+          originalActions.openOriginLink(r.data.url)
+        } else {
+          toastFn('获取原文链接失败')
+        }
+      }
+    })
+  },
+  leaveInfoOne: function () {
+    vm.dialogTitleTop = '请完善个人信息'
+    vm.dialogTitle = '即刻获得<span class="highlight-text">1次</span>免费查看原文链接的机会,如需查看更多请联系客服:<span class="highlight-text">400-108-6670</span>'
+    vm.isNeedSubmit('pc_article_original_one')
+  },
+  // 免费用户查看原文链接权限次数余额为0
+  leaveInfoMore: function () {
+    vm.dialogTitleTop = '申请更多查看原文链接权限'
+    vm.dialogTitle = '<p style="text-align:left">查看原文链接次数已用完,请填写以下信息升级大会员获得更多查看原文链接权限,同时可查看超前商机、联系人电话,85%用户已升级!</p>'
+    vm.isNeedSubmit('pc_article_original_more')
+  },
+  // 免费用户查看原文链接权限次数余额>0
+  leaveInfoMore2: function () {
+    vm.dialogTitleTop = '申请更多查看原文链接权限'
+    vm.dialogTitle = '请填写以下信息升级大会员获得更多查看原文链接权限,同时可查看超前商机、联系人电话,85%用户已升级!'
+    vm.isNeedSubmit('pc_article_original_more')
+  },
+  doGetLinkAction: function () {
+    var _this = this
+    this.getOriginalText({
+      success: function (r) {
+        if (r && r.data) {
+          var status = r.data.status
+          // entService企业级用户
+          if (r.data.url || entService) {
+            originalActions.openOriginLink(r.data.url)
+          } else if (status === 1) {
+            // 免费用户,未留资,需要留资  留资提示即刻获得一次查看原文机会
+            _this.leaveInfoOne()
+          } else if (status === 2) {
+            // 免费用户,不需要留资(余额>0)  弹框提示用户确定消耗一次查看原网站的机会   用户如果选择确认,再次调用该接口 `use` 传true
+            dialogsVm.dialog.originalDeductConfirm = true
+          } else if (status === 3) {
+            // 需要留资  留资提示已经消耗过查看原网站链接的机会、升级为大会员
+            _this.leaveInfoMore()
+          } else if (status === 4) {
+            // 付费用户次数达上限,提示暂无更多查看原文权限,联系客服
+            dialogsVm.dialog.originalMax = true
+          } else {
+            toastFn('获取原文链接失败: 未定义状态')
+          }
+        } else {
+          toastFn('获取原文链接失败')
+        }
+      }
+    })
+  },
+}
+
+var dialogsVm = new Vue({
+  el: '#dialog-container',
+  delimiters: ['{', '}'],
+  data: function () {
+    return {
+      dialog: {
+        // 查看原文付费用户上限
+        originalMax: false,
+        // 留资成功,获得一次机会
+        originalSubmitSuccess: false,
+        // 原文链接扣除二次确认
+        originalDeductConfirm: false,
+      }
+    }
+  },
+  methods: {
+    concatKf: function () {
+      this.dialog.originalMax = false
+      if (goTemplateData.inIframe) {
+        window.$BRACE.$emit('open-customer')
+      } else {
+        // 打开客服弹窗
+        checkCustomerService()
+      }
+    },
+    closeDialog: function () {
+      this.dialog.originalSubmitSuccess = false
+      this.dialog.originalDeductConfirm = false
+    },
+    goToOriginalLink: function () {
+      this.closeDialog()
+      originalActions.doConfirmLinkAction()
+    },
+    deductTipAction: function () {
+      this.closeDialog()
+      originalActions.leaveInfoMore2()
+    },
+  }
+})
+
 
 var isMember = goTemplateData.params.isMember // 大会员
 var isVip = goTemplateData.params.isVip // 超级订阅
@@ -1278,7 +1427,7 @@ $(function(){
       $('.center-ad-container').show();
     }
   }
-  if (goTemplateData.params.obj.href) {
+  if (goTemplateData.params.obj.originalShow) {
     $(".com-original").removeClass("hidden");
   }
   //
@@ -1289,39 +1438,23 @@ $(function(){
       $("#backTop").hide();
     }
   });
-  //获取原文百度统计跳转
-  var originalhref;
-  var originalUrl = goTemplateData.params.obj.url;
-  if (originalUrl!=""&&originalUrl!=undefined){
-    originalUrl = originalUrl.replace("http://https://","https://");
-    if (window.location.href.indexOf("mailprivate")>0||isWechat()){
-      originalhref='/front/transfer?url='+encodeURIComponent(originalUrl);
-    }else{
-      var url =document.location.protocol+"//"+ window.location.host+"/front/transfer?url="+encodeURIComponent(originalUrl)
-      originalhref=url
-    }
-  }else{
-    $(".com-original").hide();
-  }
-  // $(".com-original").attr("dataHref",originalhref);
   // 点击阅读原文 用户留资
   $(".com-original").on('click',function() {
-    if (entService) {
-      return window.open(originalhref)
-    }
     if (!loginflag) {
       openLoginDig()
       return
     }
+
     console.log('三级页-阅读原文:article_original')
-    vm.dialogTitle = '为给您匹配精准的推荐信息,请完善个人信息,免费查看原文'
-    vm.isNeedSubmit('article_original', function(res) {
-      if(this.source == 'article_original') {
-        // 如果是阅读原文点击的 留完用户资料执行原点击操作
-        $(".com-original").trigger('click')
-      }
-      window.open(originalhref)
-    })
+    originalActions.doGetLinkAction()
+    // vm.dialogTitle = '为给您匹配精准的推荐信息,请完善个人信息,免费查看原文'
+    // vm.isNeedSubmit('pc_article_original_one', function(res) {
+    //   if(this.source == 'article_original') {
+    //     // 如果是阅读原文点击的 留完用户资料执行原点击操作
+    //     $(".com-original").trigger('click')
+    //   }
+    //   window.open(originalhref)
+    // })
   })
 
   //var sds = goTemplateData.params.keywords;

+ 1 - 1
src/web/staticres/public-pc/js/baiducc.js

@@ -44,7 +44,7 @@ function adv_statistics(e) {
   grafana_statistics(advName);
   // console.log(advName)
   var dataHref = $(e).find("a").attr("dataHref") || $(e).find("a").attr("datahref")
-  var isOriginal = $(e).find("a").text().indexOf('阅读原文') !== -1
+  var isOriginal = $(e).find("a").text().indexOf('阅读原文') !== -1 || $(e).find("a").text().indexOf('查看原文') !== -1
   if (typeof dataHref != 'undefined' && dataHref) {
     var isWeiXinBrowser = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
     if (isWeiXinBrowser && isOriginal) {

+ 1 - 1
src/web/staticres/site/common/css/slide-leave-info.css

@@ -100,5 +100,5 @@
   border-radius: 8px;
   color: #fff;
   transform: translateX(-50%) translateY(-50%);
-  z-index: 99;
+  z-index: 3001;
 }

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

@@ -859,7 +859,7 @@ $(function(){
       $('.center-ad-container').show();
     }
   }
-  if (goTemplateData.params.obj.href) {
+  if (goTemplateData.params.obj.originalShow) {
     $(".com-original").removeClass("hidden");
   }
   //

+ 13 - 3
src/web/staticres/wx_dataExport/js/additionWord.js

@@ -13,16 +13,24 @@ $(function(){
             $(".enter.addkeyWord").show();
             $(".addKeyWord").hide();
             $(".showKeyWord").hide();
+            $('#add-buyer-word').hide()
         } else {
             $(".enter.addkeyWord").hide();
             $(".showKeyWord").show();
             $(".addKeyWord").show();
+            if (showKeyWordLength >= buyerLimit) {
+              $('#add-buyer-word').hide()
+              $('.buyer-more-tips').show()
+            } else {
+              $('#add-buyer-word').show()
+              $('.buyer-more-tips').hide()
+            }
         }
     }
     hasWords();
     
     // 添加按钮
-    $(".addKeyWord i").on('click',function(){
+    $(".addKeyBtn i").on('click',function(){
         window.location.href="/front/wx_dataExport/buyerInput";
     });
 
@@ -103,7 +111,7 @@ $(function(){
         var buttonDOM = $('.enter.addkeyWord .btn button')[0]
         buttonDOM.style.opacity = .5
         buttonDOM.setAttribute("disabled", true)
-
+        hasWords()
     })
 
     // 编辑
@@ -114,6 +122,7 @@ $(function(){
         $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
         $(oSpan).val('').focus().val(val);
         $(".addKeyWord").hide();
+        hasWords()
     })
 
     // 编辑 删除
@@ -170,7 +179,8 @@ $(function(){
             $(this).parent().siblings().find('.key').text(keyWord)
             $(this).parent().hide().siblings().show()
         }
-        $(".addKeyWord").show();
+        // $(".addKeyWord").show();
+        hasWords()
     })
 
     //去空格方法

+ 22 - 3
src/web/staticres/wx_dataExport/js/keyWord.js

@@ -26,9 +26,20 @@ $(function(){
         } else {
             $(".enter.addkeyWord").hide();
             $(".showKeyWord").show();
-            $(".addKeyWord").show();
+            // $(".addKeyWord").show();
             sessionStorage.IOSsession = "ios";
         }
+        if (getTotal() >= wordsLimit) {
+          $('.addKeyWord').hide()
+          $('.keyword-more-tips').show()
+          $('.addAdjunctWord.add-append-btn').attr('disabled', true)
+          $('.addExclusion.add-exclude-btn').attr('disabled', true)
+        } else {
+          $('.addKeyWord').show()
+          $('.keyword-more-tips').hide()
+          $('.addAdjunctWord.add-append-btn').removeAttr('disabled')
+          $('.addExclusion.add-exclude-btn').removeAttr('disabled')
+        }
     }
     hasWords();
 
@@ -243,7 +254,7 @@ $(function(){
         buttonDOM.style.opacity = .5;
         buttonDOM.setAttribute("disabled", true);
         sessionStorage.IOSsession = "ios";
-
+        hasWords();
     });
 
     // 编辑
@@ -261,22 +272,28 @@ $(function(){
                     var appended = keyWordArr[i].appended.length;
                     if(appended < 1){
                         str =  "添加 附加词";
+                        $(".addAdjunctWord").addClass('add-append-btn')
                     }else{
                         str = "编辑 附加词 ("+appended+")";
+                        $(".addAdjunctWord").removeAttr('disabled').removeClass('add-append-btn')
                     }
                 }else{
                     str =  "添加 附加词";
+                    $(".addAdjunctWord").addClass('add-append-btn')
                 }
                 $(this).parent().next().find(".addAdjunctWord").text(str);
                 if(keyWordArr[i].exclude !== null&&keyWordArr[i].exclude !== undefined){
                     var exclude = keyWordArr[i].exclude.length;
                     if(exclude < 1){
                         strs = "添加 排除词";
+                        $(".addExclusion").addClass('add-exclude-btn')
                     }else{
                         strs = "编辑 排除词 ("+exclude+")";
+                        $(".addExclusion").removeAttr('disabled').removeClass('add-exclude-btn')
                     }
                 }else{
                     strs = "添加 排除词";
+                    $(".addExclusion").addClass('add-exclude-btn')
                 }
                 $(this).parent().next().find(".addExclusion").text(strs);
             }
@@ -284,6 +301,7 @@ $(function(){
         $(this).parent().hide();
         $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
         $(oSpan).val('').focus().val(val);
+        hasWords()
         $(".addKeyWord").hide();
     });
     var u = navigator.userAgent;
@@ -379,7 +397,8 @@ $(function(){
             $this.parent().siblings().find('.key').text(keyWord)
             $this.parent().hide().siblings().show()
         }
-        $(".addKeyWord").show();
+        // $(".addKeyWord").show();
+        hasWords()
     })
 
     //去空格方法

+ 14 - 21
src/web/templates/frontRouter/pc/brand/free/index.html

@@ -383,29 +383,22 @@
       <!-- <iframe src="/swordfish/frontPage/brand/free/maps" frameborder="0" style="width:100%;height:100%"  scrolling='no'></iframe> -->
       <img src="{{Msg "seo" "cdn"}}/brand/img/maps.png?v={{Msg "seo" "version"}}" alt="">
     </div>
+    {{$contactList:=(Ad "brand_contact_list" -1 .Host)}}
+    {{if $contactList}}
     <div class="qr_box">
-      <div class="item">
-        <p class="tit">客户服务</p>
-        <p class="name">服务热线</p>
-        <img src="{{Msg "seo" "cdn"}}/brand/img/kefuQR.png?v={{Msg "seo" "version"}}" alt="" class="qr">
-        <p class="phone">400-108-6670</p>
-        <p class="desc">工作日:9:00-17:40</p>
-      </div>
-      <div class="item">
-        <p class="tit">市场合作</p>
-        <p class="name">高经理</p>
-        <img src="{{Msg "seo" "cdn"}}/brand/img/gaoQR.png?v={{Msg "seo" "version"}}" alt="" class="qr">
-        <p class="phone">扫一扫,即刻咨询</p>
-        <p class="desc">jianyu360@topnet.net.cn</p>
-      </div>
-      <div class="item">
-        <p class="tit">品牌合作</p>
-        <p class="name">刘经理</p>
-        <img src="{{Msg "seo" "cdn"}}/brand/img/liuQR.png?v={{Msg "seo" "version"}}" alt="" class="qr">
-        <p class="phone">扫一扫,即刻咨询</p>
-        <p class="desc">jy@topnet.net.cn</p>
-      </div>
+      {{range $contact:=$contactList}}
+        <div class="item">
+          <p class="tit">{{$contact.S_remark}}</p>
+          <p class="name">{{$contact.O_extend.Title}}</p>
+          <img src="{{$contact.S_pic}}" alt="" class="qr">
+          <p class="phone">{{$contact.O_extend.Theme}}</p>
+          <p class="desc">{{$contact.S_link}}</p>
+        </div>
+      {{end}}
     </div>
+    {{end}}
+
+
   </div>
 </div>
 <script src='{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}' type="text/javascript"></script>

+ 22 - 0
src/web/templates/frontRouter/pc/serviceSystem/free/index.html

@@ -1580,6 +1580,28 @@
                                 </div>
                             </div>
                          </div>
+                         <div class="table_content">
+                            <div class="table_content_l">
+                               <span>查看公告原文链接</span>
+                            </div>
+                            <div class="table_content_r">
+                                <div class="table_content_r_item ">
+                                    <div class="table_content_longcell">
+                                        <p class="tit">
+                                            查看公告原文链接
+                                        </p>
+                                        <p class="text">
+                                            用户点击原文链接可查看公告原地址,鉴别信息真伪。
+                                        </p>
+                                    </div>
+                                    <div class="table_content_sortcell"><i class="free"></i></div>
+                                    <div class="table_content_sortcell"><i class="right"></i></div>
+                                    <div class="table_content_sortcell"><i class="right"></i></div>
+                                    <div class="table_content_sortcell"><i class="right"></i></div>
+                                    <div class="table_content_sortcell"><i class="right"></i></div>
+                                </div>
+                            </div>
+                         </div>
                          <div class="table_content">
                             <div class="table_content_l">
                                <span>招标附件下载</span>

+ 16 - 0
src/web/templates/frontRouter/wx/bigmember/free/perfect_info.html

@@ -191,6 +191,22 @@
                 <van-button type="primary" @click="cancelKonw">我知道了</van-button>
               </div>
             </van-dialog>
+            <van-dialog v-model="jyOriginalbox_option.show" :title="jyOriginalbox_option.title"
+            class="Original-dialog" :show-confirm-button = "false">
+              <div class="text-content">
+                <div class="con-text" v-html="jyOriginalbox_option.text"></div>
+                <div class="con-desc" v-html="jyOriginalbox_option.desc"></div>
+              </div>
+              <div class="con-footer">
+                <div class="con-button-group">
+                  <div class="con-button-back" @click="jyOriginalbox_back">返回</div>
+                  <div class="con-button-confirm" @click="jyOriginalbox_ok">
+                    <div class="btn-t">查看原文链接</div>
+                    <div class="btn-d">(本次查看消耗1次机会)</div>
+                  </div>
+                </div>
+              </div>
+            </van-dialog>
         </div>
     </div>
 </div>

+ 54 - 1
src/web/templates/pc/biddetail_rec.html

@@ -301,6 +301,59 @@
     }
   }
 </script>
+<div class="dialog-container" id="dialog-container" v-cloak>
+  <el-dialog
+    title="暂无更多查看原文链接权限"
+    custom-class="confirmed-dialog"
+    :visible.sync="dialog.originalMax"
+    :show-close="false"
+    top="25vh"
+    width="380"
+    center>
+    <p>如需开通更多权限获得商机,请联系客服。</p>
+    <div slot="footer" class="dialog-footer">
+      <button class="dialog-button confirm" @click="concatKf">联系客服</button>
+      <button class="dialog-button plain" @click="dialog.originalMax = false">取消</button>
+    </div>
+  </el-dialog>
+  <el-dialog
+    title="提交成功"
+    custom-class="confirmed-dialog"
+    :visible.sync="dialog.originalSubmitSuccess"
+    :show-close="false"
+    top="25vh"
+    width="380"
+    center>
+    <p style="text-align: left;">恭喜您获得<span class="highlight-text">1次</span>免费查看原文链接的机会,如需查看更多请联系客服:<span class="highlight-text">400-108-6670</span>。</p>
+    <div slot="footer" class="dialog-footer">
+      <div class="left-groups">
+        <button class="dialog-button confirm" @click="goToOriginalLink">查看原文链接</button>
+        <p class="left-tip">(本次查看消耗1次机会)</p>
+      </div>
+      <button class="dialog-button plain" @click="dialog.originalSubmitSuccess = false">返回</button>
+    </div>
+  </el-dialog>
+  <el-dialog
+    title="查看原文链接"
+    custom-class="confirmed-dialog"
+    :visible.sync="dialog.originalDeductConfirm"
+    :show-close="false"
+    top="25vh"
+    width="380"
+    center>
+    <p>确定消耗<span class="highlight-text">1次</span>查看原文链接的机会吗?</p>
+    <div slot="footer" class="footer-container">
+      <div class="dialog-footer">
+        <button class="dialog-button confirm" @click="goToOriginalLink">确定</button>
+        <button class="dialog-button plain" @click="dialog.originalDeductConfirm = false">返回</button>
+      </div>
+      <div class="dialog-footer-tip-container">
+        您当前是免费用户,有1次查看原文链接的机会,如需更多查看次数,您可点击
+        <span class="highlight-text pointer" @click="deductTipAction">升级大会员></span>
+      </div>
+    </div>
+  </el-dialog>
+</div>
 <div class="page-detail j-content">
     <!-- 用户留资 -->
     <div id="vue-collect-user-info"></div>
@@ -1341,7 +1394,7 @@
                 <div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_getoriginaltext">
                     {{end}}
                     <a target="_blank" class="com-original hidden" rel="no-referrer">
-                        <img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
+                        <img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文链接
                     </a>
                     <!--#onekey{padding:8px 40px;}-->
                     <!--<div class="onekey" data-toggle="modal" data-target="#myModal">一键报告排版问题</div>-->

+ 121 - 8
src/web/templates/pc/dataExport_sieve.html

@@ -22,11 +22,13 @@
     <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
     <link href="//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/theme-chalk/index.css" rel="stylesheet" />
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/dataExport/css/previewData.css?v={{Msg "seo" "version"}}">
+    <link href='{{Msg "seo" "cdn"}}/common-module/pc-dialog/css/leave-info-dialog.css?v={{Msg "seo" "version"}}' rel="stylesheet">
     <script src="https://cdn-common.jianyu360.com/cdn/lib/html2canvas/1.4.0/dist/html2canvas.js"></script>
     <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}"></script>
     <!-- <script src="{{Msg "seo" "cdn"}}/swiper/swiper.min.js?v={{Msg "seo" "version"}}"></script> -->
     <script src="https://cdn.bootcdn.net/ajax/libs/fontfaceobserver/2.1.0/fontfaceobserver.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/vue-dragscroll/3.0.1/dist/vue-dragscroll.min.js"></script>
+    
     <title>数据导出_拟建项目导出_招标采购数据导出_中标数据导出-剑鱼标讯</title>
     <meta content="自助导出" theme="light" name="enable-header"/>
     <meta name="Keywords" content="拟建项目导出,招标采购数据导出,中标数据导出,剑鱼标讯"/>
@@ -349,12 +351,12 @@
         }
 
         #inputDel_0 .column {
-            margin-left: 0;
+            margin-left: 0!important;
         }
 
-        #inputDel_0 .column + .column {
+        /* #inputDel_0 .column + .column {
             margin-left: 8px;
-        }
+        } */
 
         .add-w.ss::before {
             left: 142px;
@@ -426,7 +428,8 @@
 
         .tro {
             position: relative;
-            width: calc(100% - 130px);
+            /* width: calc(100% - 130px); */
+            width: 100%;
             height: 110px;
             background: rgba(254, 254, 254, 1);
             border: 1px dashed rgba(224, 224, 224, 1);
@@ -618,6 +621,22 @@
           font-size: 14px;
           color: #686868;
         }
+        .data-more-tips{
+          display: none;
+          width: 100%;
+          padding: 9px 16px;
+          margin-top: 12px;
+          background: rgba(249, 242, 234, 1);
+          color: #F56500;
+          border-radius: 4px;
+          font-size: 14px;
+          line-height: 22px;
+          text-align: justify;
+        }
+        .data-more-tips > a{
+          color:#FF3A20;
+          text-decoration: underline;
+        }
     </style>
 </head>
 <body>
@@ -893,6 +912,7 @@
                             style="background-color: #BFBFBF;color: white;margin-right: 0px !important;">删除
                     </button>
                 </div>
+                <div class="data-more-tips keywords-more-tips">关键词已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_keywordmore_customization')">申请数据定制导出></a></div>
                 <div class="tro">
                     <img src="/dataExport/image/help.png">
                     <p>例:某公司主营业务为软件系统开发</p>
@@ -998,6 +1018,7 @@
                         <div class="add-w ss" onclick="addInput(this,1)" data-text="添加"></div>
                     </div>
                 </div>
+                <div class="data-more-tips buyer-more-tips">最多可添加{{Export.exportLimit.buyerLimit}}个采购单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_buyermore_customization')">申请数据定制导出></a></div>
             </div>
         </div>
         <div class="heng"></div>
@@ -1019,6 +1040,7 @@
                         <div class="add-w ss" onclick="addInput(this,2)" data-text="添加"></div>
                     </div>
                 </div>
+                <div class="data-more-tips winner-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_entrmore_customization')">申请数据定制导出></a></div>
             </div>
         </div>
         <div class="heng"></div>
@@ -1416,12 +1438,19 @@
     <div class="data-now-export dataBtnCom">立即导出</div>
   </div>
 </div>
+<div id="vue-collect-user-info"></div>
 {{include "/common/pcbottom.html"}}
 {{include "/common/baiducc.html"}}
 <script src=//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/index.js></script>
 <script src="{{Msg "seo" "cdn"}}/big-member/js/utils.js?v={{Msg "seo" "version"}}"></script>
 <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/industryMap.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/pc-dialog/js/leave-info-dialog.js?v={{Msg "seo" "version"}}'></script>
 <script>
+  var limit = {{Export.exportLimit}};
+  var buyerLimit = limit.buyerLimit || 100
+  var winnerLimit = limit.winnerLimit || 100
+  var wordsLimit =  limit.countLimit
+  console.log(limit);
   var dataNode = new Vue({
     delimiters: ['${', '}'],
     el: '#conditions-box',
@@ -2067,7 +2096,6 @@
       getStyle () {
         // 嵌套到工作桌面的时候 底部悬浮元素样式单独修改
         // parent.location.pathname.indexOf('/page_workDesktop') > -1
-        console.log(goTemplateData.inIframe, '111');
         if (goTemplateData.inIframe) {
           $('.conditions-box .progress_ div.pro').css({
             'min-width': '250px'
@@ -2427,7 +2455,7 @@
             // console.log(window["inputDel_0"]);
             // console.log($(".edit-user-input").css("display"));
             window["inputDel_0"] = [];
-            var ad = $(this).val();
+            var ad = $(this).val().trim();
             if (ad !== "") {
                 $(".edit-user-input > button.sussecc").attr("disabled", false);
             }
@@ -2619,7 +2647,7 @@
                 }
             }.bind(this)
           })
-        }, 1000)
+        }, 500)
     }
 
     //重置开始时间 结束时间
@@ -3091,7 +3119,7 @@
     });
 
     $("#keyInput").on('input', function () {
-        if($(this).val()) {
+        if($(this).val().trim()) {
           $(this).next().show()
         } else {
           $(this).next().hide()
@@ -3280,6 +3308,8 @@
         window['inputDel_2'] = [];
         $("#addWinner").hide();
         $("#winnerInput").show();
+        // 隐藏超出限制
+        $('.data-more-tips').hide()
     });
 
     function GetQueryString(name) {
@@ -3771,5 +3801,88 @@
       return v.join(",");
     }
   }
+  function needSubmitHandle(source) {
+    // 调用组件是否留资方法
+    vm.isNeedSubmit(source, function () {
+      // vm.showSuccess = true
+    })
+  }
+  function sumArr(arr){
+    var sum = 0
+    arr.forEach(function(val){
+      sum += val
+    })
+    return sum
+  }
+  function getTotal () {
+    // 关键词
+    var keywords = getKeywords()
+    var arr = []
+    keywords.forEach(function(item) {
+      if (item.appended) {
+        arr.push(item.appended.length)
+      }
+      if (item.exclude) {
+        arr.push(item.exclude.length)
+      }
+    })
+    arr.push(keywords.length)
+    var count = sumArr(arr)
+    return count
+  }
+  // 监听dom变化 用于显示隐藏逻辑
+  var observer = new MutationObserver(function(mutations) {
+    mutations.forEach(function(mutation) {
+      // console.log('页面dom发生改变');
+      
+      // 关键词
+      if (getTotal() >= wordsLimit) {
+        $('#addKeyword').hide()
+        $('.add-input-w').hide()
+        $('.keywords-more-tips').show()
+      } else {
+        if (getTotal() === 0) {
+          $('#addKeyword').hide()
+        }
+        if ($('#keyInput').is(":hidden")) {
+          $('#addKeyword').show()
+        } else {
+          $('#addKeyword').hide()
+        }
+        $('.keywords-more-tips').hide()
+      }
+      // 采购单位
+      var buyer = getBuyers()
+      if (buyer.length >= buyerLimit) {
+        $('#addBuyer').hide()
+        $('.buyer-more-tips').show()
+      } else {
+        if (buyer.length === 0) {
+          $('#addBuyer').hide()
+        } else {
+          $('#addBuyer').show()
+        }
+        $('.buyer-more-tips').hide()
+      }
+      // 中标单位
+      var winner = getWinners()
+      if (winner.length >= winnerLimit) {
+        $('#addWinner').hide()
+        $('.winner-more-tips').show()
+      } else {
+        if (winner.length === 0) {
+          $('#addWinner').hide()
+        } else {
+          $('#addWinner').show()
+        }
+        $('.winner-more-tips').hide()
+      }
+    })
+  });
+
+  // 配置MutationObserver要观察的目标
+  var target = document.querySelector('.inner');
+  // 开始观察DOM的变化
+  observer.observe(target, { childList: true, subtree: true });
 </script>
 </html>

+ 11 - 1
src/web/templates/pc/subscribe_new.html

@@ -289,7 +289,15 @@
                             <div>附件下载</div>
                             <img src="{{Msg "seo" "cdn"}}/images/subscribe/new-logo.png?v={{Msg "seo" "version"}}" alt="" style="margin-left: 8px;width: 40px;">
                         </div>
-                        <div>招标文件/采购清单一键下载</div></li>
+                        <div>招标文件/采购清单一键下载</div>
+                    </li>
+                    <li class="double">
+                        <div style="display: flex; align-items: center;">
+                            <div>查看公告原文链接</div>
+                            <img src="{{Msg "seo" "cdn"}}/images/subscribe/new-logo.png?v={{Msg "seo" "version"}}" alt="" style="margin-left: 8px;width: 40px;">
+                        </div>
+                        <div>支持用户点击原文链接查看公告原地址,鉴别信息真伪</div>
+                    </li>
                     <li class="gray" style="display: flex; align-items: center;" >
                         <div>项目报告下载</div>
                         <img src="{{Msg "seo" "cdn"}}/images/subscribe/new-logo.png?v={{Msg "seo" "version"}}" alt="" style="margin-left: 8px;width: 40px;">
@@ -314,6 +322,7 @@
                     <li class="double"><i class="wrong"></i></li>
                     <li class="gray double"><i class="wrong"></i></li>
                     <li class="double"><i class="wrong"></i></li>
+                    <li class="double"><i class="wrong"></i></li>
                     <li class="gray"><i class="wrong"></i></li>
                     <li>10组</li>
                     <li>公告公示</li>
@@ -338,6 +347,7 @@
                     <li class="double">50个画像/省/月</li>
                     <li class="gold double">5个画像/省/月</li>
                     <li class=" double">10个/月</li>
+                    <li class="double"><i class="right"></i></li>
                     <li class="gold"><i class="right"></i></li>
                     <li>300组</li>
                     <li>招标公告+国家企业公示</li>

+ 11 - 42
src/web/templates/pc/supsearch.html

@@ -2796,36 +2796,23 @@ function checkTagDisabled () {
       }
     })
   }
-
   function noIn(p){
     var thisId = $(p).attr("dataId");
     //var dataindustry = {{.T.industry}};
     var dataindustry = $(p).parents(".bid-list-title").next(".bid-list-tags").find(".tags-industry").text();
     dataId = thisId;
+    var aHref = ".html";
+    if (searchvalue != ""){
+      aHref+= '?kds=' + encodeURIComponent(searchvalue)
+    }
+    if (dataindustry != "" && dataindustry != undefined){
+      aHref += aHref.indexOf('?') > -1 ? '&' : '?'
+      aHref += 'industry='+dataindustry;
+    }
+    if (getParam('resource') === 'BI') {
+      aHref += aHref.indexOf('?') > -1 ? '&resource=BI' : '?resource=BI'
+    }
     if(loginflag){
-      var aHref = "";
-      if (searchvalue != ""){
-        if (dataindustry!=""&&dataindustry!=undefined){
-          aHref += '.html?kds='+encodeURIComponent(searchvalue)+'&industry='+dataindustry;
-        } else{
-          aHref += '.html?kds='+encodeURIComponent(searchvalue);
-        }
-      } else{
-        if (dataindustry!=""&&dataindustry!=undefined){
-          aHref += '.html?industry='+dataindustry;
-        } else{
-          aHref += '.html';
-        }
-      }
-      if (getParam('resource') === 'BI') {
-        if (aHref.indexOf('.html?') !== -1) {
-          aHref += '&resource=BI'
-        } else {
-          aHref += '.html?resource=BI'
-        }
-      } else {
-        aHref = '.html'
-      }
       try {
         visitedPath.pathVisiting(
           new VisitedPathItem(
@@ -2836,24 +2823,8 @@ function checkTagDisabled () {
       } catch (error) {}
 
       checkVisited()
-
       window.open("/article/content/"+thisId+aHref);
     }else{//没有登录跳转新的详情
-      var aHref = "";
-      if (searchvalue != ""){
-        if (dataindustry!=""&&dataindustry!=undefined){
-          aHref += '.html?kds='+encodeURIComponent(searchvalue)+'&industry='+dataindustry;
-        } else{
-          aHref += '.html?kds='+encodeURIComponent(searchvalue);
-        }
-      } else{
-        if (dataindustry!=""&&dataindustry!=undefined){
-          aHref += '.html?industry='+dataindustry;
-        } else{
-          aHref += '.html';
-        }
-      }
-
       try {
         visitedPath.pathVisiting(
           new VisitedPathItem(
@@ -2869,8 +2840,6 @@ function checkTagDisabled () {
       } else {
         window.open("/nologin/content/"+thisId+aHref);
       }
-
-      // $('#bidLogin').modal("show");
     }
   }
   //

+ 54 - 3
src/web/templates/weixin/dataExport/dataExport_appended.html

@@ -92,6 +92,11 @@
     </div>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
     <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var wordsLimit = limit.countLimit || 100
+      console.log(limit);
+    </script>
     <script>
         initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
         window.addEventListener('pageshow', function(e) {
@@ -187,6 +192,44 @@
                 $(".showKeyWord").show();
             }
         }
+        function sumArr(arr){
+          var sum = 0
+          arr.forEach(function(val){
+            sum += val
+          })
+          return sum
+        }
+        // 计算关键词、附加词、排除词总和
+        function getTotal () {
+          var data = []
+          /**
+           * 之前逻辑:
+           * 1.全量保存后取的是localStorage里的值(不包含当前输入的关键词、附加次、排除词);
+           * 2.sessionStorage存的值包含当前输入的词(首次添加的时候仅包含当前输入的关键词、编辑及其它时候包含已存的和当前输入的)
+           * 不改原有逻辑的情况下实时计算关键词、附加词、排除词总和可对比sessionStorage和localStorage的长度,有sessionStorage且长度大于已存的localStorage的长度,
+           * 则取sessionStorage
+          */
+          var sessionStorageKey = sessionStorage.keyWord ? JSON.parse(sessionStorage.keyWord) : null
+          if (sessionStorageKey && sessionStorageKey.length > keyWordArr.length) {
+            data = sessionStorageKey
+          } else {
+            data = keyWordArr
+          }
+          var keyLen = data.length
+          var arr = []
+          data.forEach(function(item) {
+            if (item.appended) {
+              arr.push(item.appended.length)
+            }
+            if (item.exclude) {
+              arr.push(item.exclude.length)
+            }
+          })
+          arr.push(keyLen)
+          var total = sumArr(arr)
+          console.log(total);
+          return total
+        }
         $(function(){
 
             $('.knowBtn').on('click',function(){
@@ -208,12 +251,17 @@
                 var showKeyWordLength = $(".showKeyWord ul").find('li').length;
                 if(showKeyWordLength === 0){
                     $(".enter.addkeyWord").show();
-                    $(".addKeyWord").hide();
+                    // $(".addKeyWord").hide();
                     $(".showKeyWord").hide();
                 } else {
                     $(".enter.addkeyWord").hide();
                     $(".showKeyWord").show();
-                    $(".addKeyWord").show();
+                    // $(".addKeyWord").show();
+                }
+                if (getTotal() >= wordsLimit) {
+                  $(".addKeyWord").hide();
+                } else {
+                  $(".addKeyWord").show();
                 }
             }
             hasWords();
@@ -335,6 +383,7 @@
                 var buttonDOM = $('.enter.addkeyWord .btn button')[0];
                 buttonDOM.style.opacity = .5;
                 buttonDOM.setAttribute("disabled", true)
+                hasWords()
             });
 
             // 编辑
@@ -345,6 +394,7 @@
                 $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
                 $(oSpan).val('').focus().val(val);
                 $(".addKeyWord").hide();
+                hasWords()
             });
 
             // 编辑 删除
@@ -431,7 +481,8 @@
                     $(this).parent().hide().siblings().show()
                 }
                 //
-                $(".addKeyWord").show();
+                // $(".addKeyWord").show();
+                hasWords()
             });
 
             //去空格方法

+ 61 - 24
src/web/templates/weixin/dataExport/dataExport_buyerEdit.html

@@ -16,11 +16,11 @@
 	<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
 </head>
 <style>
-	.addKeyWord i {
+	.addKeyBtn i {
 		font-size: 1rem;
 		color: #2cb7ca;
 	}
-	.addKeyWord {
+	.addKeyBtn {
 		/*width: 100%;*/
 		position: fixed;
 		text-align: center;
@@ -33,38 +33,68 @@
 	body{
 		background: rgba(245,244,249,1);
 	}
-
+  .content{
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    overflow-y: scroll;
+  }
+  .buyer-more-tips{
+    display: none;
+    width: 100%;
+    padding: .14rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color:  #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
+  .buyer-more-tips > a{
+    color:#FF3A20;
+    text-decoration: underline;
+  }
 </style>
 
 <body>
 
 <div class="keyWord">
-	<div class="enter addkeyWord">
-		<input type="text" class="enterOne" placeholder="采购单位名称" />
-		<div class="btn fixed-bottom">
-			<button disabled class="save-btn">确认</button>
-			<button class="close">取消</button>
-		</div>
-	</div>
-
-	<!-- 添加附加词显示列表 -->
-	<div class="showKeyWord">
-		<ul>
-
-
-		</ul>
-
-	</div>
-	<div class="association-list-box" style="display: none;">
-		<ul class="association-list">
-		</ul>
-	</div>
+	<div class="content">
+    <div class="enter addkeyWord">
+      <input type="text" class="enterOne" placeholder="采购单位名称" />
+      <div class="btn fixed-bottom">
+        <button disabled class="save-btn">确认</button>
+        <button class="close">取消</button>
+      </div>
+    </div>
+  
+    <!-- 添加附加词显示列表 -->
+    <div class="showKeyWord">
+      <ul>
+  
+  
+      </ul>
+  
+    </div>
+    <div class="association-list-box" style="display: none;">
+      <ul class="association-list">
+      </ul>
+    </div>
+  </div>
+  <div class="buyer-more-tips">
+    最多可添加{{Export.exportLimit.buyerLimit}}个采购单位,目前已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_buyermore_customization">申请数据定制导出></a>
+  </div>
 </div>
-<div class="addKeyWord">
+<div class="addKeyBtn" id="add-buyer-word">
 	<i class="iconfont icon-tianjia"></i>
 </div>
+
 <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
 <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js"></script>
+<script>
+  var limit = {{Export.exportLimit}}
+  var buyerLimit = limit.buyerLimit || 100
+  console.log(limit);
+</script>
 <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/additionWord.js?v={{Msg "seo" "version"}}38"></script>
 <script>
 	initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
@@ -102,6 +132,13 @@
                     </li>`
 		}
 		$('.showKeyWord > ul').prepend(html);
+    if (buyerArr.length >= buyerLimit) {
+      $('#add-buyer-word').hide()
+      $('.buyer-more-tips').show()
+    } else  {
+      $('#add-buyer-word').show()
+      $('.buyer-more-tips').hide()
+    }
 	}
 
 </script>

+ 46 - 3
src/web/templates/weixin/dataExport/dataExport_exclude.html

@@ -92,6 +92,11 @@
     </div>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
     <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var wordsLimit = limit.countLimit || 100
+      console.log(limit);
+    </script>
     <script>
         initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
         window.addEventListener('pageshow', function(e) {
@@ -185,7 +190,37 @@
                 $('.showKeyWord > ul').prepend(html);
             }
         }
-
+        function sumArr(arr){
+          var sum = 0
+          arr.forEach(function(val){
+            sum += val
+          })
+          return sum
+        }
+        // 计算关键词、附加词、排除词总和
+        function getTotal () {
+          var data = []
+          var sessionStorageKey = sessionStorage.keyWord ? JSON.parse(sessionStorage.keyWord) : null
+          if (sessionStorageKey && sessionStorageKey.length > keyWordArr.length) {
+            data = sessionStorageKey
+          } else {
+            data = keyWordArr
+          }
+          var keyLen = data.length
+          var arr = []
+          data.forEach(function(item) {
+            if (item.appended) {
+              arr.push(item.appended.length)
+            }
+            if (item.exclude) {
+              arr.push(item.exclude.length)
+            }
+          })
+          arr.push(keyLen)
+          var total = sumArr(arr)
+          console.log(total);
+          return total
+        }
         $(function(){
 
             $('.knowBtn').on('click',function(){
@@ -212,7 +247,12 @@
                 } else {
                     $(".enter.addkeyWord").hide();
                     $(".showKeyWord").show();
-                    $(".addKeyWord").show();
+                    // $(".addKeyWord").show();
+                }
+                if (getTotal() >= wordsLimit) {
+                  $(".addKeyWord").hide();
+                } else {
+                  $(".addKeyWord").show();
                 }
             }
             hasWords();
@@ -335,6 +375,7 @@
                 var buttonDOM = $('.enter.addkeyWord .btn button')[0];
                 buttonDOM.style.opacity = .5;
                 buttonDOM.setAttribute("disabled", true)
+                hasWords();
             });
 
             // 编辑
@@ -345,6 +386,7 @@
                 $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
                 $(oSpan).val('').focus().val(val);
                 $(".addKeyWord").hide();
+                hasWords();
             });
 
             // 编辑 删除
@@ -429,7 +471,8 @@
                     $(this).parent().siblings().find('.key').text(exclude);
                     $(this).parent().hide().siblings().show()
                 }
-                $(".addKeyWord").show();
+                // $(".addKeyWord").show();
+                hasWords();
             });
 
             //去空格方法

+ 400 - 325
src/web/templates/weixin/dataExport/dataExport_keyWord.html

@@ -2,163 +2,220 @@
 <html lang="en">
 
 <head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>关键词</title>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}125">
-    <script src="/js/jquery.js"></script>
-    {{include "/common/weixin.html"}}
-    <script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
+  <title>关键词</title>
+  <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+  <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}125">
+  <script src="/js/jquery.js"></script>
+  {{include "/common/weixin.html"}}
+  <script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
 </head>
 <style>
-    .keyWord .enter .btn .save {
-        float: right;
-    }
-    body{
-        background: rgba(245,244,249,1)!important;
-        line-height: unset;
-    }
-    .addAdjunctWord{
-        margin-top: 0!important;
-        border-top: 1px solid #e0e0e0;
-    }
-    .addExclusion{
-        margin-top: 0!important;
-        border-top: 1px solid #e0e0e0;
-    }
-    .addKeyWord i {
-		font-size: 1rem;
-		color: #2cb7ca;
-	}
-	.addKeyWord {
-		/*width: 100%;*/
-		position: fixed;
-		text-align: center;
-		bottom: 10%;
-		left: 45%;
-	}
+  .keyWord{
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    height: 100%;
+  }
+  .keyWord .enter .btn .save {
+    float: right;
+  }
+
+  body {
+    background: rgba(245, 244, 249, 1) !important;
+    line-height: unset;
+  }
+
+  .addAdjunctWord {
+    margin-top: 0 !important;
+    border-top: 1px solid #e0e0e0;
+  }
 
+  .addExclusion {
+    margin-top: 0 !important;
+    border-top: 1px solid #e0e0e0;
+  }
+
+  .addKeyWord i {
+    font-size: 1rem;
+    color: #2cb7ca;
+  }
+
+  .addKeyWord {
+    /*width: 100%;*/
+    position: fixed;
+    text-align: center;
+    bottom: 10%;
+    left: 45%;
+  }
+  .keyword-more-tips {
+    display: none;
+    width: 100%;
+    padding: .24rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color: #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
+
+  .keyword-more-tips>a {
+    color: #FF3A20;
+    text-decoration: underline;
+  }
 </style>
+
 <body>
 
-    <div class="keyWord">
-        <p class="title">示例:软件系统(关键词);  开发(附加词);  运维(排除词)</p>
-        <!-- 添加关键词 -->
-        <div class="enter addkeyWord">
-            <input type="text" class="enterOne" placeholder="请输入关键词" />
-            <div class="btnChoose" style="display:none;">
-                <button class="addAdjunctWord appended" disabled>添加 附加词</button>
-                <button class="addExclusion exclude" disabled>添加 排除词</button>
-            </div>
-            <div class="btn">
-                <button class="save" disabled>确认</button>
-                <button class="close">取消</button>
-            </div>
+  <div class="keyWord">
+    <section class="content">
+      <p class="title">示例:软件系统(关键词); 开发(附加词); 运维(排除词)</p>
+      <!-- 添加关键词 -->
+      <div class="enter addkeyWord">
+        <input type="text" class="enterOne" placeholder="请输入关键词" />
+        <div class="btnChoose" style="display:none;">
+          <button class="addAdjunctWord appended" disabled>添加 附加词</button>
+          <button class="addExclusion exclude" disabled>添加 排除词</button>
+        </div>
+        <div class="btn">
+          <button class="save" disabled>确认</button>
+          <button class="close">取消</button>
         </div>
+      </div>
 
-        <!-- 添加排除词 -->
-        <!-- <div class="enter exclusion" style="display:none;">
-            <input type="text" placeholder="请输入排除词" class="enterOne">
-            <div class="btn">
-                <button disabled>确认</button>
-            </div>
-        </div> -->
+      <!-- 添加排除词 -->
+      <!-- <div class="enter exclusion" style="display:none;">
+              <input type="text" placeholder="请输入排除词" class="enterOne">
+              <div class="btn">
+                  <button disabled>确认</button>
+              </div>
+          </div> -->
 
 
-        <!-- 添加关键词显示列表 -->
-        <div class="showKeyWord">
-            <ul>
+      <!-- 添加关键词显示列表 -->
+      <div class="showKeyWord">
+        <ul>
 
-            </ul>
+        </ul>
 
-        </div>
+      </div>
 
-        <div class="problem">
-            疑问解答 <i class="iconfont icon-wenhao"></i>
+      <div class="problem">
+        疑问解答 <i class="iconfont icon-wenhao"></i>
+      </div>
+      <!-- 疑难问题弹窗 -->
+      <div class="problemPop">
+        <div class="problemPopContent">
+          <h3>疑问解答</h3>
+          <ul>
+            <li>
+              <p>例:某公司主营业务为软件系统开发</p>
+            </li>
+            <li>
+              <h4>关键词:</h4>
+              <p>目标信息中的关键性词语,如“软件系统”</p>
+            </li>
+            <li>
+              <h4>附加词:</h4>
+              <p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
+            </li>
+            <li>
+              <h4>排除词:</h4>
+              <p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
+            </li>
+          </ul>
+          <button class="knowBtn">我知道了</button>
         </div>
 
+      </div>
+    </section>
+    <div class="keyword-more-tips">关键词已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_keywordmore_customization">申请数据定制导出></a></div>
+  </div>
+  <div class="addKeyWord">
+    <i class="iconfont icon-tianjia"></i>
+  </div>
+  <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
+  <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+  <script>
+    var limit = {{Export.exportLimit}};
+    var wordsLimit = limit.countLimit || 100
+    console.log(limit);
+  </script>
+  <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/keyWord.js?v={{Msg "seo" "version"}}108"></script>
+  <script>
+    initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
+    $(function () {
+      var isPageHide = false;
+      window.addEventListener('pageshow', function () {
+        if (isPageHide) {
+          IOSsession();
+          var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
+          buttonDOM.prop("disabled", false);
+          var buttonDOMM = $('.enter.addkeyWord .btnChoose .exclude');
+          buttonDOMM.prop("disabled", false);
+          if (sessionStorage.IOSsession !== "" && sessionStorage.IOSsession !== undefined) {
+            //监听到了history.back
+            location.reload();
+          }
+        }
+      });
+      window.addEventListener('pagehide', function () {
+        isPageHide = true;
+      });
+    });
+    (/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
+      // 这里加了个类型判断,因为a等元素也会触发blur事件
+      ['input', 'textarea'].includes(e.target.localName) && document.body.scrollIntoView(false)
+    }, true)
 
-        <!-- 疑难问题弹窗 -->
-    <div class="problemPop">
-    <div class="problemPopContent">
-    <h3>疑问解答</h3>
-    <ul>
-    <li>
-    <p>例:某公司主营业务为软件系统开发</p>
-</li>
-<li>
-<h4>关键词:</h4>
-<p>目标信息中的关键性词语,如“软件系统”</p>
-</li>
-<li>
-<h4>附加词:</h4>
-<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-</li>
-<li>
-<h4>排除词:</h4>
-<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-</li>
-</ul>
-<button class="knowBtn">我知道了</button>
-    </div>
-
-    </div>
+    function sumArr(arr){
+      var sum = 0
+      arr.forEach(function(val){
+        sum += val
+      })
+      return sum
+    }
 
-    </div>
-    <div class="addKeyWord">
-    	<i class="iconfont icon-tianjia"></i>
-    </div>
-    <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/keyWord.js?v={{Msg "seo" "version"}}108"></script>
-    <script>
-        initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
-        $(function () {
-			var isPageHide = false;
-			window.addEventListener('pageshow', function () {
-			    if (isPageHide) {
-	            	IOSsession();
-	                var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
-	        		buttonDOM.prop("disabled", false);
-	        		var buttonDOMM = $('.enter.addkeyWord .btnChoose .exclude');
-	        		buttonDOMM.prop("disabled", false);
-	                if (sessionStorage.IOSsession!==""&&sessionStorage.IOSsession!==undefined){
-	                    //监听到了history.back
-	                    location.reload();
-	                }
-			    }
-			});
-			window.addEventListener('pagehide', function () {
-			    isPageHide = true;
-			});
-		});
-		(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
-		    // 这里加了个类型判断,因为a等元素也会触发blur事件
-		    ['input', 'textarea'].includes(e.target.localName) && document.body.scrollIntoView(false)
-		}, true)
+    // 计算关键词、附加词、排除词总和
+    function getTotal () {
+      var keyLen = keyWordArr.length
+      var arr = []
+      keyWordArr.forEach(function(item) {
+        if (item.appended) {
+          arr.push(item.appended.length)
+        }
+        if (item.exclude) {
+          arr.push(item.exclude.length)
+        }
+      })
+      arr.push(keyLen)
+      var total = sumArr(arr)
+      console.log(total);
+      return total
+    }
 
-        var keyWordArr = [];
-        var turn = '';
-        if(localStorage.keyWord !== "" && localStorage.keyWord !== undefined){
-            var keyWord = localStorage.keyWord;
-            keyWordArr = JSON.parse(keyWord);
-            var keyWordHtml = "";
-            for(var i in keyWordArr){
-                var append = keyWordArr[i].appended;
-                if (append===null||append===undefined){
-                  append=new Array();
-                }
-                var exclude = keyWordArr[i].exclude;
-                if (exclude===null||exclude===undefined){
-                  exclude=new Array();
-                }
-                if(append !== undefined && exclude === undefined){
-                    keyWordHtml += `
+    var keyWordArr = [];
+    var turn = '';
+    if (localStorage.keyWord !== "" && localStorage.keyWord !== undefined) {
+      var keyWord = localStorage.keyWord;
+      keyWordArr = JSON.parse(keyWord);
+      var keyWordHtml = "";
+      for (var i in keyWordArr) {
+        var append = keyWordArr[i].appended;
+        if (append === null || append === undefined) {
+          append = new Array();
+        }
+        var exclude = keyWordArr[i].exclude;
+        if (exclude === null || exclude === undefined) {
+          exclude = new Array();
+        }
+        if (append !== undefined && exclude === undefined) {
+          keyWordHtml += `
                     <li>
                         <div class="one">
                             <div>
@@ -181,8 +238,8 @@
                             <button class="ascertainKey">确定</button>
                         </div>
                     </li>`;
-                }else if(append === undefined && exclude !== undefined){
-                    keyWordHtml += `
+        } else if (append === undefined && exclude !== undefined) {
+          keyWordHtml += `
                     <li>
                         <div class="one">
                             <div>
@@ -205,8 +262,8 @@
                             <button class="ascertainKey">确定</button>
                         </div>
                     </li>`;
-                }else if(append !== undefined && exclude !== undefined){
-                    keyWordHtml += `
+        } else if (append !== undefined && exclude !== undefined) {
+          keyWordHtml += `
                     <li>
                         <div class="one">
                             <div>
@@ -233,8 +290,8 @@
                             <button class="ascertainKey">确定</button>
                         </div>
                     </li>`;
-                }else if(append === undefined && exclude === undefined){
-                    keyWordHtml += `
+        } else if (append === undefined && exclude === undefined) {
+          keyWordHtml += `
                     <li>
                         <div class="one">
                             <div>
@@ -253,201 +310,219 @@
                             <button class="ascertainKey">确定</button>
                         </div>
                     </li>`;
-                }
-                keyWordHtml = keyWordHtml.replace(/,/g, " ");
-            }
-            $('.showKeyWord > ul').prepend(keyWordHtml);
-            //
-
         }
-        //
-        function IOSsession() {
-            if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-//             	window["turn"] = $('.addkeyWord input.enterOne').val();
-                var keys = JSON.parse(sessionStorage.keyWord);
-//              if(window["turn"]===""&&window["turn"]===undefined){
-//              	for(var a in keys){
-//              		alert(keys[a].keyWord)
-//              		$('.addkeyWord input.enterOne').val(keys[a].keyWord);
-//              	}
-//              }
-                for(var a in keys){
-//              	alert("565")
-                	$('.addkeyWord input.enterOne').val(keys[a].keyWord);
-                	turn = keys[a].keyWord
-//                  if (keys[a].keyWord === turn){
-                    $(".btnChoose").show();
-                    //数量
-                    var str = "";
-                    var strs = "";
-                    if(keys[a].appended !== undefined){
-                        var appended = keys[a].appended.length;
-                        if(appended < 1){
-                            str =  "添加 附加词";
-                        }else{
-                            str = "编辑 附加词 ("+appended+")";
-                        }
-                    }else{
-                        str = "添加 附加词";
-                    }
-                    $(".addAdjunctWord").text(str);
-                    if(keys[a].exclude !== undefined){
-                        var exclude =keys[a].exclude.length;
-                        if(exclude < 1){
-                            strs = "添加 排除词";
-                        }else{
-                            strs = "编辑 排除词 ("+exclude+")";
-                        }
-                    }else{
-                        strs = "添加 排除词";
-                    }
-                    $(".addExclusion").text(strs);
-//                  }
-                }
+        keyWordHtml = keyWordHtml.replace(/,/g, " ");
+      }
+      $('.showKeyWord > ul').prepend(keyWordHtml);
+      //
+      if (getTotal() >= wordsLimit) {
+        $('.addKeyWord').hide()
+        $('.keywords-more-tips').show()
+        $('.addAdjunctWord.add-append-btn').attr('disabled', true)
+        $('.addExclusion.add-exclude-btn').attr('disabled', true)
+      } else {
+        $('.addKeyWord').show()
+        $('.keywords-more-tips').hide()
+        $('.addAdjunctWord').removeAttr('disabled')
+        $('.addExclusion.add-exclude-btn').removeAttr('disabled')
+      }
+    }
+    //
+    function IOSsession() {
+      if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+        //             	window["turn"] = $('.addkeyWord input.enterOne').val();
+        var keys = JSON.parse(sessionStorage.keyWord);
+        //              if(window["turn"]===""&&window["turn"]===undefined){
+        //              	for(var a in keys){
+        //              		alert(keys[a].keyWord)
+        //              		$('.addkeyWord input.enterOne').val(keys[a].keyWord);
+        //              	}
+        //              }
+        for (var a in keys) {
+          //              	alert("565")
+          $('.addkeyWord input.enterOne').val(keys[a].keyWord);
+          turn = keys[a].keyWord
+          //                  if (keys[a].keyWord === turn){
+          $(".btnChoose").show();
+          //数量
+          var str = "";
+          var strs = "";
+          if (keys[a].appended !== undefined) {
+            var appended = keys[a].appended.length;
+            if (appended < 1) {
+              str = "添加 附加词";
+              $(".addAdjunctWord").addClass('add-append-btn')
+            } else {
+              str = "编辑 附加词 (" + appended + ")";
+              $(".addAdjunctWord").removeClass('add-append-btn')
+            }
+          } else {
+            str = "添加 附加词";
+            $(".addAdjunctWord").addClass('add-append-btn')
+          }
+          $(".addAdjunctWord").text(str);
+          if (keys[a].exclude !== undefined) {
+            var exclude = keys[a].exclude.length;
+            if (exclude < 1) {
+              strs = "添加 排除词";
+              $(".addExclusion").addClass('add-exclude-btn')
+            } else {
+              strs = "编辑 排除词 (" + exclude + ")";
+              $(".addExclusion").removeClass('add-exclude-btn')
             }
+          } else {
+            strs = "添加 排除词";
+            $(".addExclusion").addClass('add-exclude-btn')
+          }
+          $(".addExclusion").text(strs);
         }
-        IOSsession();
+      }
+    }
+    IOSsession();
 
-        //
-        if($(".enterOne").val()!==""){
-            $('.enter.addkeyWord .btnChoose .appended').prop("disabled", false);
-            $('.enter.addkeyWord .btnChoose .exclude').prop("disabled", false);
-            $('.enter.addkeyWord .btn > button').prop("disabled", false);
-            $('.enter.addkeyWord .btn > button').css("opacity", 1);
-        }
-        $(".appended").on('click', function () {
-            var keyWord = $(this).parent().prev().val();
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
+    //
+    if ($(".enterOne").val() !== "") {
+      $('.enter.addkeyWord .btnChoose .appended').prop("disabled", false);
+      $('.enter.addkeyWord .btnChoose .exclude').prop("disabled", false);
+      $('.enter.addkeyWord .btn > button').prop("disabled", false);
+      $('.enter.addkeyWord .btn > button').css("opacity", 1);
+    }
+    $(".appended").on('click', function () {
+      var keyWord = $(this).parent().prev().val();
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
 
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
-            buttonDOM.prop("disabled", true);
-            //
-            if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-                var keys = JSON.parse(sessionStorage.keyWord);
-                for(var i in keys){
-                    if(keys[i].keyWord===turn){
-                    	if(keyWord!==turn){
-                    		keys[i].keyWord = keyWord;
-                    	}
-                    	sessionStorage.keyWord = JSON.stringify(keys);
-                        window.location.href = "/front/wx_dataExport/appended?keyWord="+keyWord;
-                        return
-                    }
-                }
-            }
-            //
-            var obj = [{"keyWord":keyWord}];
-            sessionStorage.keyWord = JSON.stringify(obj);
-            window.location.href = "/front/wx_dataExport/appended?keyWord="+keyWord;
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        $(".exclude").on('click', function () {
-            var keyWord = $(this).parent().prev().val();
-            if (keyWord.length > 20) {
-                // var s = keyWord.slice(0,19);
-                // $('.addkeyWord input.enterOne').val(s)
-
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
+        return
+      }
+      var buttonDOM = $('.enter.addkeyWord .btnChoose .appended');
+      buttonDOM.prop("disabled", true);
+      //
+      if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+        var keys = JSON.parse(sessionStorage.keyWord);
+        for (var i in keys) {
+          if (keys[i].keyWord === turn) {
+            if (keyWord !== turn) {
+              keys[i].keyWord = keyWord;
             }
-            var buttonDOM = $('.enter.addkeyWord .btnChoose .exclude');
-            buttonDOM.prop("disabled", true);
-            //
-            if(sessionStorage.keyWord!==""&&sessionStorage.keyWord!==undefined){
-                var keys = JSON.parse(sessionStorage.keyWord);
-                for(var i in keys){
-                    if(keys[i].keyWord===turn){
-                    	if(keyWord!==turn){
-                    		keys[i].keyWord = keyWord;
-                    	}
-                    	sessionStorage.keyWord = JSON.stringify(keys);
-                        window.location.href = "/front/wx_dataExport/exclude?keyWord="+keyWord;
-                        return
-                    }
-                }
-            }
-            //
-            var obj = [{"keyWord":keyWord}];
-            sessionStorage.keyWord = JSON.stringify(obj);
-            window.location.href = "/front/wx_dataExport/exclude?keyWord="+keyWord;
-        });
-        //
-        $(".showKeyWord").on('click', '.addAdjunctWord',function(e){
-            var keyWord = $(this).parent().prev().find('.key').text();
-            if($(this).prev().val().replace(/\s+/g,"").length < 1){
-            	weui.toast('关键词不能为空', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            if (keyWord.length > 20) {
+            sessionStorage.keyWord = JSON.stringify(keys);
+            window.location.href = "/front/wx_dataExport/appended?keyWord=" + keyWord;
+            return
+          }
+        }
+      }
+      //
+      var obj = [{
+        "keyWord": keyWord
+      }];
+      sessionStorage.keyWord = JSON.stringify(obj);
+      window.location.href = "/front/wx_dataExport/appended?keyWord=" + keyWord;
+    });
+    $(".exclude").on('click', function () {
+      var keyWord = $(this).parent().prev().val();
+      if (keyWord.length > 20) {
+        // var s = keyWord.slice(0,19);
+        // $('.addkeyWord input.enterOne').val(s)
 
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            sessionStorage.removeItem("keyWord");
-            window.location.href = "/front/wx_dataExport/appended?keyWord="+keyWord;
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        $(".showKeyWord").on('click', '.addExclusion',function(e){
-            var keyWord = $(this).parent().prev().find('.key').text();
-            if($(this).parent().find("textarea").val().replace(/\s+/g,"").length < 1){
-            	weui.toast('关键词不能为空', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
-            }
-            if (keyWord.length > 20) {
-
-                weui.toast('关键词不能超过20字', {
-                    duration: 2000,
-                    className: 'text-overflow100',
-                    callback: function(){}
-                });
-                return
+        return
+      }
+      var buttonDOM = $('.enter.addkeyWord .btnChoose .exclude');
+      buttonDOM.prop("disabled", true);
+      //
+      if (sessionStorage.keyWord !== "" && sessionStorage.keyWord !== undefined) {
+        var keys = JSON.parse(sessionStorage.keyWord);
+        for (var i in keys) {
+          if (keys[i].keyWord === turn) {
+            if (keyWord !== turn) {
+              keys[i].keyWord = keyWord;
             }
-            sessionStorage.removeItem("keyWord");
-            window.location.href = "/front/wx_dataExport/exclude?keyWord="+keyWord;
+            sessionStorage.keyWord = JSON.stringify(keys);
+            window.location.href = "/front/wx_dataExport/exclude?keyWord=" + keyWord;
+            return
+          }
+        }
+      }
+      //
+      var obj = [{
+        "keyWord": keyWord
+      }];
+      sessionStorage.keyWord = JSON.stringify(obj);
+      window.location.href = "/front/wx_dataExport/exclude?keyWord=" + keyWord;
+    });
+    //
+    $(".showKeyWord").on('click', '.addAdjunctWord', function (e) {
+      var keyWord = $(this).parent().prev().find('.key').text();
+      if ($(this).prev().val().replace(/\s+/g, "").length < 1) {
+        weui.toast('关键词不能为空', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
+        return
+      }
+      if (keyWord.length > 20) {
 
-        $('.addkeyWord .btn .close').on('click', function () {
-            sessionStorage.removeItem("keyWord");
-            window.history.back();
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        //
-        $(".showKeyWord ul li .one").each(function () {
-            var dom = $(this).children().find("p.addition").html();
-            if(dom === ""){
-                $(this).children().find("p.addition").parent().remove();
-            }
-            var doms = $(this).children().find("p.exclusion").html();
-            if(doms === ""){
-                $(this).children().find("p.exclusion").parent().remove();
-            }
+        return
+      }
+      sessionStorage.removeItem("keyWord");
+      window.location.href = "/front/wx_dataExport/appended?keyWord=" + keyWord;
+    });
+    $(".showKeyWord").on('click', '.addExclusion', function (e) {
+      var keyWord = $(this).parent().prev().find('.key').text();
+      if ($(this).parent().find("textarea").val().replace(/\s+/g, "").length < 1) {
+        weui.toast('关键词不能为空', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
+        });
+        return
+      }
+      if (keyWord.length > 20) {
+
+        weui.toast('关键词不能超过20字', {
+          duration: 2000,
+          className: 'text-overflow100',
+          callback: function () {}
         });
-        //
+        return
+      }
+      sessionStorage.removeItem("keyWord");
+      window.location.href = "/front/wx_dataExport/exclude?keyWord=" + keyWord;
+    });
 
-    </script>
-	{{include "/common/baiducc.html"}}
+    $('.addkeyWord .btn .close').on('click', function () {
+      sessionStorage.removeItem("keyWord");
+      window.history.back();
+    });
+    //
+    $(".showKeyWord ul li .one").each(function () {
+      var dom = $(this).children().find("p.addition").html();
+      if (dom === "") {
+        $(this).children().find("p.addition").parent().remove();
+      }
+      var doms = $(this).children().find("p.exclusion").html();
+      if (doms === "") {
+        $(this).children().find("p.exclusion").parent().remove();
+      }
+    });
+    //
+  </script>
+  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

+ 101 - 3
src/web/templates/weixin/dataExport/dataExport_keyWordInput.html

@@ -16,23 +16,49 @@
     <script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
 </head>
 <style>
+    .keyWord{
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      height: 100%;
+    } 
     .keyWord .enter .btn .save {
         float: right;
     }
     body{
         background: rgba(245,244,249,1);
     }
+    .keyword-more-tips {
+      display: none;
+      width: 100%;
+      padding: .24rem .32rem;
+      background: rgba(249, 242, 234, 1);
+      color: #FF9F40;
+      font-size: .26rem;
+      line-height: .4rem;
+      text-align: center;
+    }
+
+    .keyword-more-tips>a {
+      color: #FF3A20;
+      text-decoration: underline;
+    }
+    button:disabled,
+    button[disabled]{
+      opacity: 0.6!important;
+    }
 </style>
 <body>
 
 <div class="keyWord">
+  <section class="content">
     <p class="title">示例:软件系统(关键词);  开发(附加词);  运维(排除词)</p>
     <!-- 添加关键词 -->
     <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="请输入关键词" />
         <div class="btnChoose" style="display:none;">
-            <button class="addAdjunctWord appended" disabled>添加 附加词</button>
-            <button class="addExclusion exclude" disabled>添加 排除词</button>
+            <button class="addAdjunctWord appended" disabled data-attr="add">添加 附加词</button>
+            <button class="addExclusion exclude" disabled data-attr="add">添加 排除词</button>
         </div>
         <div class="btn">
             <button class="save" disabled>确认</button>
@@ -43,7 +69,8 @@
     <div class="problem">
         疑问解答 <i class="iconfont icon-wenhao"></i>
     </div>
-
+  </section>
+    <!-- <div class="keyword-more-tips">关键词已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_keywordmore_customization">申请数据定制导出></a></div> -->
     <!-- 疑难问题弹窗 -->
     <div class="problemPop">
     <div class="problemPopContent">
@@ -73,9 +100,73 @@
 </div>
 <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
 <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+<script>
+  var limit = {{Export.exportLimit}};
+  var wordsLimit = limit.countLimit || 100
+  console.log(limit);
+</script>
 <script>
     initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
+    function sumArr(arr){
+      var sum = 0
+      arr.forEach(function(val){
+        sum += val
+      })
+      return sum
+    }
+    // 计算关键词、附加词、排除词总和
+    function getTotal () {
+      var keyWordArr = JSON.parse(localStorage.getItem("keyWord")) || []
+      var keyLen = keyWordArr.length
+      var arr = []
+      keyWordArr.forEach(function(item) {
+        if (item.appended) {
+          arr.push(item.appended.length)
+        }
+        if (item.exclude) {
+          arr.push(item.exclude.length)
+        }
+      })
+      arr.push(keyLen)
+      /**
+       * 此处取计算当前页关键词、附加词、排除词(当前页未保存前不存入localStorage)
+       * 关键词:输入框有值即+1
+       * 附加词、关键词取文案中的数字
+       * 原来的逻辑当前页的关键词、附加词、排除词是取sessionStorage取值,但没有及时清除(编辑、添加来回跳转的时候在其它页面会继续取sessionStorage),刷新页面仍会有值导致计算不准确
+       * */
+      if ($('.enterOne').val().trim()) {
+        arr.push(1)
+      }
+      var appendText= $('.addAdjunctWord.appended').text();
+      var excludeText = $('.addExclusion.exclude').text();
+      var appendCount = appendText.match(/\d/g) ? appendText.match(/\d/g)[0] : 0;
+      var excludeCount = excludeText.match(/\d/g) ? excludeText.match(/\d/g)[0] : 0;
+      arr.push(Number(appendCount))
+      arr.push(Number(excludeCount))
+      var total = sumArr(arr)
+      console.log(total);
+      return total
+    }
+    function hasWords () {
+        if (getTotal() >= wordsLimit) {
+          if (getTotal() === wordsLimit) {
+            $('[data-attr="add"]').attr('disabled', true)
+          } else {
+            // $('.keyword-more-tips').show()
+            $('.save').attr('disabled', true)
+            $('[data-attr="add"]').attr('disabled', true)
+          }
+        } else {
+          // $('.keyword-more-tips').hide()
+          $('.save').removeAttr('disabled')
+          if ($('.enterOne').val().trim()) {
+            $('.appended').removeAttr('disabled')
+            $('.exclude').removeAttr('disabled')
+          }
+        }
+    }
     $(function(){
+        hasWords()
         var isinitpage = false;
         $(window).bind("pageshow", function(event){
             if(event.originalEvent.persisted){
@@ -126,6 +217,7 @@
                 $(this).next().find(".appended").prop("disabled", true);
                 $(this).next().find(".exclude").prop("disabled", true);
             }
+            hasWords()
         });
 
         // 添加 按钮的点击事件
@@ -216,22 +308,28 @@
                     var appended = keys[a].appended.length;
                     if(appended < 1){
                         str =  "添加 附加词";
+                        $(".addAdjunctWord").attr('data-attr', 'add');
                     }else{
                         str = "编辑 附加词 ("+appended+")";
+                        $(".addAdjunctWord").removeAttr('data-attr');
                     }
                 }else{
                     str = "添加 附加词";
+                    $(".addAdjunctWord").attr('data-attr', 'add');
                 }
                 $(".addAdjunctWord").text(str);
                 if(keys[a].exclude !== undefined){
                     var exclude =keys[a].exclude.length;
                     if(exclude < 1){
                         strs = "添加 排除词";
+                        $(".addExclusion").attr('data-attr', 'add');
                     }else{
                         strs = "编辑 排除词 ("+exclude+")";
+                        $(".addExclusion").removeAttr('data-attr');
                     }
                 }else{
                     strs = "添加 排除词";
+                    $(".addExclusion").attr('data-attr', 'add');
                 }
                 $(".addExclusion").text(strs);
 //              }

+ 67 - 22
src/web/templates/weixin/dataExport/dataExport_winnerEdit.html

@@ -18,11 +18,11 @@
 	<script src="{{Msg "seo" "cdn"}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
 	</head>
 	<style>
-		.addKeyWord i {
+		.addKeyBtn i {
 			font-size: 1rem;
 			color: #2cb7ca;
 		}
-		.addKeyWord {
+		.addKeyBtn {
 			/*width: 100%;*/
 			position: fixed;
 			text-align: center;
@@ -35,34 +35,63 @@
 		body{
 			background: rgba(245,244,249,1);
 		}
+    .content{
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      overflow-y: scroll;
+    }
+    .ent-more-tips {
+      display: none;
+      width: 100%;
+      padding: .14rem .32rem;
+      background: rgba(249, 242, 234, 1);
+      color: #FF9F40;
+      font-size: .26rem;
+      line-height: .4rem;
+      text-align: center;
+    }
+
+    .ent-more-tips>a {
+      color: #FF3A20;
+      text-decoration: underline;
+    }
 
 	</style>
 	<body>
 	<div class="keyWord">
-		<div class="enter addkeyWord">
-			<input type="text" class="enterOne" placeholder="中标单位名称" />
-			<div class="btn fixed-bottom">
-				<button class="save-btn" disabled>确认</button>
-				<button class="close">取消</button>
-			</div>
-		</div>
-		<!-- 添加附加词显示列表 -->
-		<div class="showKeyWord">
-			<ul>
+    <section class="content">
+      <div class="enter addkeyWord">
+        <input type="text" class="enterOne" placeholder="中标单位名称" />
+        <div class="btn fixed-bottom">
+          <button class="save-btn" disabled>确认</button>
+          <button class="close">取消</button>
+        </div>
+      </div>
+      <!-- 添加附加词显示列表 -->
+      <div class="showKeyWord">
+        <ul>
 
-			</ul>
+        </ul>
 
-		</div>
-		<div class="association-list-box" style="display: none;">
-			<ul class="association-list">
-			</ul>
-		</div>
+      </div>
+      <div class="association-list-box" style="display: none;">
+        <ul class="association-list">
+        </ul>
+      </div>
+    </section>
+    <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_entmore_customization" onclick="goPerfect()">申请数据定制导出></a></div>
 	</div>
-	<div class="addKeyWord">
+	<div class="addKeyBtn">
 		<i class="iconfont icon-tianjia"></i>
 	</div>
 	<script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
 	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+  <script>
+    var limit = {{Export.exportLimit}};
+    var winnerLimit = limit.winnerLimit || 100
+    console.log(limit);
+  </script>
 	<script>
 		initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
 		window.addEventListener('pageshow', function(e) {
@@ -100,6 +129,13 @@
                     </li>`
 			}
 			$('.showKeyWord > ul').prepend(html);
+      if (winner.length >= winnerLimit) {
+        $('.addKeyBtn').hide()
+        $('.ent-more-tips').show()
+      } else {
+        $('.addKeyBtn').show()
+        $('.ent-more-tips').hide()
+      }
 		}
 		$(function(){
 
@@ -116,16 +152,24 @@
 					$(".enter.addkeyWord").show();
 					$(".addKeyWord").hide();
 					$(".showKeyWord").hide();
+          $('.addKeyBtn').hide()
 				} else {
 					$(".enter.addkeyWord").hide();
 					$(".showKeyWord").show();
 					$(".addKeyWord").show();
+          if (showKeyWordLength >= winnerLimit) {
+            $('.addKeyBtn').hide()
+            $('.ent-more-tips').show()
+          } else {
+            $('.addKeyBtn').show()
+            $('.ent-more-tips').hide()
+          }
 				}
 			}
 			hasWords();
 
 			// 添加按钮
-			$(".addKeyWord i").on('click',function(){
+			$(".addKeyBtn i").on('click',function(){
 				window.location.href="/front/wx_dataExport/winnerInput";
 			});
 
@@ -206,7 +250,7 @@
 				var buttonDOM = $('.enter.addkeyWord .btn button')[0];
 				buttonDOM.style.opacity = .5;
 				buttonDOM.setAttribute("disabled", true)
-
+        hasWords();
 			});
 
 			// 编辑
@@ -273,7 +317,8 @@
 					$(this).parent().siblings().find('.key').text(keyWord);
 					$(this).parent().hide().siblings().show()
 				}
-				$(".addKeyWord").show();
+				// $(".addKeyWord").show();
+        hasWords()
 			});
 
 			//去空格方法

+ 148 - 5
src/web/templates/weixin/wxinfocontent_rec.html

@@ -272,7 +272,7 @@ pre {
 }
 .adv{
 	background-color: #f3f3f3;
-	border-top: 1px solid #cecece;
+	/* border-top: 1px solid #cecece; */
 }
 .adv-division{
 	padding: 40px 20px 30px;
@@ -959,6 +959,31 @@ body .loading_ p span {
     cursor: pointer;
     display:none
 }
+.Original-dialog .van-dialog__header{
+        font-weight: 400;
+      }
+      .Original-dialog .van-dialog__message{
+        color: #686868;
+      }
+      .Original-dialog .van-dialog__content{
+        padding: 0.16rem 0.32rem;
+      }
+      .Original-dialog .con-text{
+        font-size: 0.3rem;
+        color: #5F5E64;
+        text-align: center;
+      }
+      .Original-dialog .con-desc{
+        font-size: 0.24rem;
+        color: #9B9CA3;
+        line-height: 0.36rem;
+        /* width: 5.4rem; */
+        margin: auto;
+        margin-top: 0.32rem;
+      }
+      .Original-dialog .text-content{
+        padding-bottom: 0.48rem;
+      }
 </style>
 </head>
 <body>
@@ -968,6 +993,15 @@ body .loading_ p span {
 <div id="jyKeepEntComponent">
   <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
 </div>
+<div id="jyOriginalbox">
+  <van-dialog v-model="show" title="查看原文链接" confirm-button-color='#2ABDD1'
+  cancel-button-color='#171826' class="custom-dialog Original-dialog" confirm-button-text="确定"  @confirm="goLink" show-cancel-button>
+    <div class="text-content">
+      <p class="con-text">确定消耗<span class="blue-color">1次</span>查看原文链接的机会吗?</p>
+      <p class="con-desc">您当前是免费用户,有1次查看原文链接的机会,如需更多查看次数,您可点击<span class="blue-color" @click="membership">升级大会员></span></p>
+    </div>
+  </van-dialog>
+</div>
 <!-- 开启推送 -->
 <div class="open" onClick="window.location.href='/front/applysub/index'">
 	<a>一直收不到消息推送?激活一下就好!</a>
@@ -1399,7 +1433,7 @@ body .loading_ p span {
 			<span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
 		</div>
 		<div class="abs">
-			<div class="original_name"  onclick="adv_statistics(this)" data-cl-event="c_wx_original_buttonclick"><a class="original hidden" rel="no-referrer">阅读原文</a></div>
+			<div class="original_name"  onclick="advDownApp(this)" data-cl-event="c_wx_original_buttonclick"><a class="original hidden" rel="no-referrer">查看原文链接</a></div>
 			{{if .T.obj.hasSession}}
 			<a class="feedback" href="/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
 			{{end}}
@@ -2100,6 +2134,96 @@ function setEntServiceInfo (res) {
     }
   }
 }
+    var lock_ = true
+    // 点击阅读原文跳转
+    function advDownApp (e) {
+        if(!lock_){
+          return
+        }
+        lock_ = false
+        $.ajax({
+                type: "POST",
+                url: "/publicapply/userbase/getOriginalText",
+                contentType: 'application/json',
+                data:JSON.stringify({id:id}),
+                success: function(res){
+                  lock_ = true
+                  if(!res.data){
+                    return
+                  }
+                   if (res.data.url) {
+                    let url ='/front/transfer?url='+encodeURIComponent(res.data.url);
+                    $(".original").attr("dataHref",url)
+                    let dom_ = $(".original_name")[0]
+                    adv_statistics(dom_) // 跳转原文原有逻辑
+                   } else {
+                    if(res.data.status == '1'){
+                      // 需要留资 留资提示即刻获得一次查看原文机会
+                      let url_ = '/weixin/frontPage/bigmember/free/perfect_info?source=wx_article_original_one&signId='+encodeURIComponent(id) + '&article='+ extractString_(location.href)
+                      location.href = url_
+                      
+                    } else if(res.data.status == '2'){
+                      // 不需要留资  弹框提示用户确定消耗一次查看原网站的机会   用户如果选择确认,再次调用该接口 `use` 传true
+                      jyOriginalbox.show = true
+
+                    } else if(res.data.status == '3'){
+                      // 需要留资  留资提示已经消耗过查看原网站链接的机会、升级为大会员
+                      let url_ = '/weixin/frontPage/bigmember/free/perfect_info?source=wx_article_original_more'
+                      location.href = url_
+
+                    } else if(res.data.status == '4'){
+                      vant.Dialog.confirm({
+                      title:'暂无更多查看原文链接权限',
+                       message: '如需开通更多权限获得商机,请联系客服。',
+                       className: 'custom-dialog Original-dialog',
+                       showCancelButton: true,
+                       confirmButtonText: '联系客服',
+                       CancelButtonText: '返回',
+                       confirmButtonColor: '#2ABDD1',
+                       cancelButtonColor:'#171826',
+                       width: 303,
+                     }).then(() => {
+                      location.href = "/big/wx/page/customer"
+                     }).catch(() =>{
+                     })
+                    }
+                   }
+                },
+                error: function(){
+                    lock_ = true
+                    EasyAlert.show("网络连接错误!");
+                }
+             });
+      
+    }
+    function ajaxSetOriginal () {
+      $.ajax({
+                type: "POST",
+                url: "/publicapply/userbase/getOriginalText",
+                contentType: 'application/json',
+                data:JSON.stringify({id:id,use:true}),
+                success: function(res){
+                  if(!res.data){
+                    return
+                  }
+                   if (res.data.url) {
+                    let url ='/front/transfer?url='+encodeURIComponent(res.data.url);
+                    $(".original").attr("dataHref",url)
+                    let e = $('.original_name')[0]
+                    adv_statistics(e) // 跳转原文原有逻辑
+                   } 
+                },
+                error: function(){
+                    EasyAlert.show("网络连接错误!");
+                }
+             });
+
+    }
+    function extractString_(str){
+          const regex = /\/article\/(.*?)\//;
+          const match = str.match(regex);
+          return match ? match[1] : null;
+    }
 // 大会员引流文案
 function getDrainInfo () {
 		$.ajax({
@@ -2198,6 +2322,25 @@ function openFileDown (url) {
         },
       }
     })
+    var jyOriginalbox =new Vue({
+      el:'#jyOriginalbox',
+      data: {
+        show:false
+
+      },
+      methods: {
+        goLink (){
+          // 查看原文
+          ajaxSetOriginal()
+        },
+        membership (){
+          // 去留资 从弹窗升级大会员入口进入留资
+          let url_ = '/weixin/frontPage/bigmember/free/perfect_info?source=wx_article_original_more_membership'
+          location.href = url_
+        }
+
+      }
+    })
     // 点击参标
     $('.refer_stand .r-s-right').on('click', function(e) {
       const rsRight = $(e.target).hasClass('r-s-right')
@@ -3211,7 +3354,7 @@ $(function(){
     	$("#h_content").css("font-size","16px");
   	{{end}}
 	{{end}}
-	{{if .T.obj.href}}
+	{{if .T.obj.originalShow}}
 	  $(".abs .original").removeClass("hidden");
 	{{end}}
 	//
@@ -3544,7 +3687,7 @@ $(function(){
 		$(".ups").addClass("hidden");
 		shareimgflag = false;
 	})
-    var original='/front/transfer?url='+encodeURIComponent({{.T.obj.href}});
+    // var original='/front/transfer?url='+encodeURIComponent({{.T.obj.href}});
     var original_name;
     {{if .T.isVip}}
       original_name="wx_article_viporiginaltext";
@@ -3552,7 +3695,7 @@ $(function(){
       original_name="wx_article_getoriginaltext";
     {{end}}
     $(".original_name").attr("adv_name",original_name);
-    $(".original").attr("dataHref",original);
+    // $(".original").attr("dataHref",original);
 
     // 下载帮助
     $('.icon-help').click(function(){

Vissa filer visades inte eftersom för många filer har ändrats