lianbingjie 2 жил өмнө
parent
commit
9886d21c75
100 өөрчлөгдсөн 2951 нэмэгдсэн , 3198 устгасан
  1. 2 1
      src/config.json
  2. 2 1
      src/jfw/front/front.go
  3. 20 39
      src/jfw/front/pcIndex.go
  4. 104 138
      src/jfw/front/shorturl.go
  5. 48 168
      src/jfw/front/swordfish.go
  6. 12 4
      src/jfw/front/vipsubscribe.go
  7. 179 0
      src/jfw/jyutil/jyCms.go
  8. 22 0
      src/jfw/jyutil/jyutil.go
  9. 1 1
      src/jfw/modules/app/src/app/front/login.go
  10. 1 1
      src/jfw/modules/app/src/app/front/me.go
  11. 10 5
      src/jfw/modules/app/src/app/front/shorturl.go
  12. 21 18
      src/jfw/modules/app/src/app/front/swordfish.go
  13. 2 2
      src/jfw/modules/app/src/app/front/vipsubscribe.go
  14. 4 3
      src/jfw/modules/app/src/app/jyutil/clientupdate.go
  15. 2 1
      src/jfw/modules/app/src/config.json
  16. 1 56
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/contrast_trial.js
  17. 19 1
      src/jfw/modules/app/src/web/staticres/jyapp/js/common.js
  18. 3 1
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/keyWord.js
  19. 2 13
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_order_detail.js
  20. 4 4
      src/jfw/modules/app/src/web/templates/big-member/commonjs.html
  21. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bigvip_viewpage.html
  22. 0 56
      src/jfw/modules/app/src/web/templates/big-member/page_contrast.html
  23. 3 62
      src/jfw/modules/app/src/web/templates/big-member/page_landingPage.html
  24. 0 59
      src/jfw/modules/app/src/web/templates/big-member/page_landingPage_old_1.html
  25. 1 12
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_aiForecastPack.html
  26. 1 11
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_member.html
  27. 1 12
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_subAccount.html
  28. 1 0
      src/jfw/modules/app/src/web/templates/common/js.html
  29. 3 2
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html
  30. 5 3
      src/jfw/modules/app/src/web/templates/frontRouter/bigmember/free/perfect_info.html
  31. 0 59
      src/jfw/modules/app/src/web/templates/frontRouter/enptc/free/app_enptc.html
  32. 0 59
      src/jfw/modules/app/src/web/templates/frontRouter/enptc/sess/app_enptc.html
  33. 4 4
      src/jfw/modules/app/src/web/templates/invoice/cantInvoice.html
  34. 6 5
      src/jfw/modules/app/src/web/templates/invoice/check_invoice.html
  35. 6 5
      src/jfw/modules/app/src/web/templates/invoice/invoicing.html
  36. 10 101
      src/jfw/modules/app/src/web/templates/me/customer.html
  37. 1 1
      src/jfw/modules/app/src/web/templates/me/login.html
  38. 0 58
      src/jfw/modules/app/src/web/templates/me/mine.html
  39. 0 62
      src/jfw/modules/app/src/web/templates/me/notice.html
  40. 139 48
      src/jfw/modules/app/src/web/templates/staticpage/privacy_rules.html
  41. 139 48
      src/jfw/modules/app/src/web/templates/staticpage/privacy_rules_client.html
  42. 24 1889
      src/jfw/modules/app/src/web/templates/weixin/historypush.html
  43. 85 38
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  44. 1 1
      src/jfw/modules/bigmember/src/entity/portrait_screen.go
  45. 1 1
      src/jfw/modules/bigmember/src/main.go
  46. 6 2
      src/jfw/modules/bigmember/src/service/push/push.go
  47. 1 1
      src/jfw/modules/followent/src/web/templates/weixin/list.html
  48. 2 1
      src/jfw/modules/subscribepay/src/config.json
  49. 1 0
      src/jfw/modules/subscribepay/src/config/config.go
  50. 1 0
      src/jfw/modules/subscribepay/src/entity/dataReportStruct.go
  51. 1 0
      src/jfw/modules/subscribepay/src/entity/jyCourseOnlineStruct.go
  52. 4 3
      src/jfw/modules/subscribepay/src/entity/member.go
  53. 40 1
      src/jfw/modules/subscribepay/src/entity/shareFission.go
  54. 1 0
      src/jfw/modules/subscribepay/src/service/aiForecastPack.go
  55. 1 0
      src/jfw/modules/subscribepay/src/service/areaPack.go
  56. 1 0
      src/jfw/modules/subscribepay/src/service/bigmember.go
  57. 10 0
      src/jfw/modules/subscribepay/src/service/commonAction.go
  58. 1 0
      src/jfw/modules/subscribepay/src/service/courseAction.go
  59. 1 0
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  60. 1 0
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  61. 1 0
      src/jfw/modules/subscribepay/src/service/entniche.go
  62. 2 1
      src/jfw/modules/subscribepay/src/service/index_p1.go
  63. 10 0
      src/jfw/modules/subscribepay/src/service/integral.go
  64. 77 50
      src/jfw/modules/subscribepay/src/service/orderListDetails.go
  65. 1 0
      src/jfw/modules/subscribepay/src/service/resourcePack.go
  66. 5 3
      src/jfw/modules/subscribepay/src/service/salesCreateOrder.go
  67. 1 0
      src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go
  68. 2 0
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  69. 1 0
      src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go
  70. 1 1
      src/jfw/modules/subscribepay/src/util/msgremind.go
  71. 8 8
      src/jfw/public/public.go
  72. 1 0
      src/jfw/tag/ad.go
  73. 2 0
      src/main.go
  74. 69 1
      src/web/staticres/big-member/css/set_area_industry_cate.css
  75. 1 56
      src/web/staticres/big-member/js/contrast_trial.js
  76. 45 1
      src/web/staticres/big-member/js/set_cate.js
  77. 61 15
      src/web/staticres/big-member/js/set_infotype.js
  78. 1188 0
      src/web/staticres/brand/css/brand.css
  79. 55 0
      src/web/staticres/brand/css/liMarquee.css
  80. 456 0
      src/web/staticres/brand/css/viewer.css
  81. 1 0
      src/web/staticres/brand/css/zoomify.min.css
  82. BIN
      src/web/staticres/brand/img/1@3x.png
  83. BIN
      src/web/staticres/brand/img/2@3x.png
  84. BIN
      src/web/staticres/brand/img/3@3x.png
  85. BIN
      src/web/staticres/brand/img/4@3x.png
  86. BIN
      src/web/staticres/brand/img/5@3x.png
  87. BIN
      src/web/staticres/brand/img/6@3x.png
  88. BIN
      src/web/staticres/brand/img/7@3x.png
  89. BIN
      src/web/staticres/brand/img/8@3x.png
  90. BIN
      src/web/staticres/brand/img/AAA.png
  91. BIN
      src/web/staticres/brand/img/AAA1.png
  92. BIN
      src/web/staticres/brand/img/AAA10.png
  93. BIN
      src/web/staticres/brand/img/AAA2.png
  94. BIN
      src/web/staticres/brand/img/AAA3.png
  95. BIN
      src/web/staticres/brand/img/AAA4.png
  96. BIN
      src/web/staticres/brand/img/AAA5.png
  97. BIN
      src/web/staticres/brand/img/AAA6.png
  98. BIN
      src/web/staticres/brand/img/AAA7.png
  99. BIN
      src/web/staticres/brand/img/AAA8.png
  100. BIN
      src/web/staticres/brand/img/AAA9.png

+ 2 - 1
src/config.json

@@ -292,11 +292,12 @@
     "sessionEnctryFlushCorn": "0 0 0 1 * ?",
     "PCS_time":24,
     "detail_element":["table","div"],
-	"termValidity":3600,
+	  "termValidity":3600,
     "uploadPath": "./web/staticres/upload/res/",
     "redisSessionLockSize":20,
     "accountMergeOnline":"2015-03-30 00:00:00",
     "bidSearchOldUserLimit": 1626105600,
+    "contextOldVipLimit": 1664553600,
     "firstBindPop":3,
     "maxBindPop":111111111111115,
     "nsq":"192.168.3.240:4260",

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

@@ -73,6 +73,7 @@ type Front struct {
 	jyblog             xweb.Mapper `xweb:"/jyblog/index([^.]*).html"`     //剑鱼标讯博客
 	jybdetail          xweb.Mapper `xweb:"/jyblog/([^.]*).html"`          //剑鱼标讯博客三级页
 	blogpraise         xweb.Mapper `xweb:"/jyblog/blogpraise"`            //剑鱼标讯博客三级页点赞
+	jyCms              xweb.Mapper `xweb:"/jyCms/(.*)/index([^.]*).html"` //剑鱼栏目列表页
 	encrypt            xweb.Mapper `xweb:"/share/encrypt"`                //分享三级页加密
 	newhistorypush     xweb.Mapper `xweb:"/swordfish/newhistorypush"`     //新的历时推送记录
 	historypush        xweb.Mapper `xweb:"/swordfish/historypush"`        //历时推送记录
@@ -847,7 +848,7 @@ func (m *Front) Sess(ostr string) error {
 			actionurl := ""
 			if str[3] == "" {
 				if len(strs) > 1 {
-					actionurl, _ = url.QueryUnescape(strs[1])
+					actionurl = sewx.DecodeString(strs[1])
 				}
 			} else {
 				actionurl = util.ObjToString(urlMap[str[3]])

+ 20 - 39
src/jfw/front/pcIndex.go

@@ -24,7 +24,9 @@ import (
 
 type PcIndex struct {
 	*xweb.Action
-	newSordfish  xweb.Mapper `xweb:"/"`                        //剑鱼标讯pc首页
+	newSordfish  xweb.Mapper `xweb:"/(old|)"`                  //剑鱼标讯pc首页
+	brandIndex   xweb.Mapper `xweb:"/brand/index"`             //品牌网站首页
+	productIndex xweb.Mapper `xweb:"/product/index"`           //品牌网站首页
 	newSordfishC xweb.Mapper `xweb:"/pcindex.html"`            //剑鱼标讯pc首页-统计
 	searchResult xweb.Mapper `xweb:"/list/(\\w+)/(\\w+).html"` //剑鱼标讯分类 地区结果列表
 }
@@ -33,8 +35,15 @@ func init() {
 	xweb.AddAction(&PcIndex{})
 }
 
+func (this PcIndex) BrandIndex() error {
+	return this.Render("/frontRouter/pc/brand/free/index.html")
+}
+func (this PcIndex) ProductIndex() error {
+	return this.Render("/frontRouter/pc/serviceSystem/free/index.html")
+}
+
 //剑鱼标讯pc首页
-func (m *PcIndex) NewSordfish() error {
+func (m *PcIndex) NewSordfish(flag string) error {
 	ispc, _ := m.GetInteger("ispc")
 	pageSize, _ := m.GetInteger("pageSize")
 	var shareid = m.GetString("id")
@@ -59,13 +68,10 @@ func (m *PcIndex) NewSordfish() error {
 		m.T["avatar"] = util.ObjToString(m.GetSession("s_avatar"))
 		return m.Render("/pc/mobileindex.html", &m.T)
 	} else {
-		if ret := redis.Get("other", pcindexKey); ret != nil {
-			return m.SetBody([]byte(ret.(string)))
-		} else {
-			m.T["live_Preheat_Start"] = config.ActiveConfig.Live_Preheat_Start
-			m.T["live_Active_End"] = config.ActiveConfig.Live_Active_End
-			//最新资讯
-			m.T["blog"] = GetNewBlog()
+		//信息条数(上线以来..)
+		m.T["infoNum"] = GetInfoNum()
+		//最新资讯
+		if flag == "old" {
 			//最新公告信息
 			for _, v := range []int{1, 2, 3, 4} { //1拟建 2招标预告 3招标公告 4招标结果
 				m.T[fmt.Sprintf("newArticle_%d", v)] = GetNewArticle(v, pageSize)
@@ -74,15 +80,13 @@ func (m *PcIndex) NewSordfish() error {
 			for _, v := range []int{1, 2, 3} {
 				m.T[fmt.Sprintf("labUrl_%d", v)] = GetLabUrl(v) //1地域 2信息类型 3热门招标
 			}
-			//信息条数(上线以来..)
-			m.T["infoNum"] = GetInfoNum()
-			content, _ := m.Render4Cache("/pc/index.html", &m.T)
-			timeout := util.IntAllDef(config.Sysconfig["pcindexCacheTime"], 7200)
-			redis.Put("other", pcindexKey, string(content), timeout)
-			return m.SetBody(content)
+			return m.Render("/pc/index_old.html", &m.T)
+		} else if flag == "tmp" {
+			return m.Render("/pc/index_tmp.html", &m.T)
+		} else {
+			return m.Render("/pc/index.html", &m.T)
 		}
 	}
-	return m.Render("/pc/index.html", &m.T)
 }
 
 //剑鱼标讯pc首页-统计
@@ -105,29 +109,6 @@ func (m *PcIndex) NewSordfishC() error {
 	}
 }
 
-//首页资讯
-func GetNewBlog() (r []map[string]interface{}) {
-	rediskey := "pcindex_blog"
-	if data, ok := redis.Get("other", rediskey).([]interface{}); ok && data != nil && len(data) > 0 {
-		r = util.ObjArrToMapArr(data)
-	} else {
-		rs, _ := SearhWebContentblog(map[string]string{
-			"contentType": "jybk",
-		})
-		if rs != nil && len(*rs) > 4 {
-			*rs = (*rs)[0:5]
-			for _, v := range *rs {
-				delete(v, "praise")
-				delete(v, "s_contenttype")
-				delete(v, "s_source")
-			}
-		}
-		r = *rs
-		redis.Put("other", rediskey, r, 24*60*60)
-	}
-	return r
-}
-
 //最新公告信息
 func GetNewArticle(typ int, pageSize int) (list []map[string]interface{}) {
 	if typ == 0 {

+ 104 - 138
src/jfw/front/shorturl.go

@@ -174,7 +174,7 @@ func (s *Short) Article(stype, id string) error {
 						return s.Redirect("/")
 					}
 				}
-				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, true, false)
+				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, false)
 
 				if obj["projectname"] != nil {
 					s.SetSession("projectname", obj["projectname"])
@@ -209,19 +209,24 @@ func (s *Short) Article(stype, id string) error {
 		ok  bool
 	)
 	if userId == "" && ssOpenid != nil {
-		res, ok = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid, "s_unionid": bson.M{"$ne": ssOpenid}}, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1}`)
+		res, ok = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid, "s_unionid": bson.M{"$ne": ssOpenid}}, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1,"l_vip_starttime":1}`)
 		userId = BsonIdToSId((*res)["_id"])
 	} else if userId != "" {
 		//判断用户是否是vip
-		res, ok = public.MQFW.FindById("user", userId, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1}`)
+		res, ok = public.MQFW.FindById("user", userId, `{"i_vip_status":1,"i_member_status":1,"s_m_phone":1,"s_phone":1,"l_vip_starttime":1}`)
 	}
 
 	isEntnicheNew := false
+	isOldVip := false // 新购超级订阅不能查看拟建项目详情页
 	isVip, isMember, isEntniche, privatedata := false, false, false, false
 	if ok && res != nil && len(*res) > 0 {
 		isVip = util.IntAll((*res)["i_vip_status"]) == 1 || util.IntAll((*res)["i_vip_status"]) == 2
 		isMember = util.IntAll((*res)["i_member_status"]) > 0
 
+		if isVip && util.Int64All((*res)["l_vip_starttime"]) < util.Int64All(config.Sysconfig["contextOldVipLimit"]) {
+			isOldVip = true
+		}
+
 		if phone, _ := util.If(util.ObjToString((*res)["s_phone"]) != "", util.ObjToString((*res)["s_phone"]), util.ObjToString((*res)["s_m_phone"])).(string); phone != "" {
 			//商机管理用户
 			isEntniche = public.Mysql.CountBySql(`SELECT count(1) from entniche_user a INNER JOIN entniche_info b on (a.phone=? and a.power=1 and a.ent_id=b.id and b.status>0)`, phone) > 0
@@ -279,16 +284,18 @@ func (s *Short) Article(stype, id string) error {
 		s.T["nickname"] = mynickname
 		s.T["avatar"] = myavatar
 		s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url())
-		obj := wxvisitD(sid, userId, myopenid, stype, isVip || isMember || isEntniche)
+		obj := wxvisitD(sid, userId, myopenid, stype, (isVip && isOldVip) || isMember || isEntniche)
 		canRead := false
-		if isVip || isMember || isEntniche {
+		if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
+			((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
+			stype == "mailprivate" || stype == "indexcontent" { //邮箱推送
 			canRead = true
 		} else {
 			canRead = SeeDetailLimit(obj, userId, sid)
 		}
 		if len(obj) > 0 {
 			if canRead {
-				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, isVip || isMember || isEntniche, true)
+				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, true)
 				//免费用户正文手机号替换
 				if obj["site"] == "剑鱼信息发布平台" && !isMember {
 					//采购电话中标单位电话置空
@@ -366,140 +373,112 @@ func (s *Short) Article(stype, id string) error {
 
 		//免费用户浏览三级页判断留资与浏览次数
 		indust := s.GetString("industry")
-		var node bool
-		if isVip || isMember || isEntniche || stype == "mailprivate" || stype == "indexcontent" { //付费用户  及 邮箱推送地址
-			node = true
-		} else {
-			_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
-			node = SeeDetailLimit(objc, userId, sid)
-		}
-		s.T["canRead"] = node
-		var nodeStr string
-		if node {
-			nodeStr = "true"
-		} else {
-			nodeStr = "false"
-		}
 		if userId != "" && stype == "indexcontent" { //已登录用户直接跳转至正常三级页
 			return s.Redirect(fmt.Sprintf("/article/content/%s.html", util.CommonEncodeArticle("content", sid)))
 		}
-		catchKey := fmt.Sprintf("jypcdetail_%s_%s_%s_%v_%v_%v_%s", userId, stype, sid, isVip, isEntniche, isMember, nodeStr)
-		//缓存读取
-		if res := redis.Get("newother", catchKey); res == nil || res == "" {
-			industry := s.GetString("industry")
-			var shareid = s.GetString("id")
-			if len(shareid) == 0 {
-				shareid = "10"
+		industry := s.GetString("industry")
+		var shareid = s.GetString("id")
+		if len(shareid) == 0 {
+			shareid = "10"
+		}
+		s.T["logid"] = config.Seoconfig["jysskzy"].(string)
+		s.T["shareid"] = se.EncodeString(shareid)
+		s.T["keywords"] = s.GetString("kds")
+		s.DisableHttpCache()
+		po, bo, wo, obj := pcVRT(sid, industry, stype, isVip || isMember || isEntniche)
+		if obj != nil && len(obj) > 0 {
+			var node bool
+			if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
+				((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
+				stype == "mailprivate" || stype == "indexcontent" { //邮箱推送
+				node = true
+			} else {
+				_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
+				node = SeeDetailLimit(objc, userId, sid)
 			}
-			s.T["logid"] = config.Seoconfig["jysskzy"].(string)
-			s.T["shareid"] = se.EncodeString(shareid)
-			s.T["keywords"] = s.GetString("kds")
-			s.DisableHttpCache()
-			po, bo, wo, obj := pcVRT(sid, industry, stype, isVip || isMember || isEntniche)
-			if obj != nil && len(obj) > 0 {
-				if node {
-					if len(po) > 0 {
-						s.T["projectOther"] = po
-					}
-					if len(bo) > 0 {
-						s.T["buyerOther"] = bo
+			s.T["canRead"] = node
+			if node {
+				if len(po) > 0 {
+					s.T["projectOther"] = po
+				}
+				if len(bo) > 0 {
+					s.T["buyerOther"] = bo
+				}
+				if len(wo) > 0 {
+					s.T["winnerOther"] = wo
+				}
+				//判断时间 //如果是seo页面超过时间访问的进入首页
+				comeinTime := time.Unix(util.Int64All(obj["comeintime"]), 0)
+				if stype == "indexcontent" {
+					if count := public.MQFW.Count("seobidding", map[string]interface{}{"bid": sid}); count <= 0 && comeinTime.Before(time.Now().Add(time.Duration(-util.IntAll(config.Sysconfig["seoBeforeTimeHour"]))*time.Hour)) {
+						return s.Redirect("/")
 					}
-					if len(wo) > 0 {
-						s.T["winnerOther"] = wo
+				}
+				FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, false)
+				//免费用户正文手机号替换
+				if obj["site"] == "剑鱼信息发布平台" && !isMember {
+					//采购电话中标单位电话置空
+					if util.InterfaceToStr(obj["buyertel"]) != "" {
+						obj["buyertel"] = "freeView"
 					}
-					/*if false && isbid(obj["subtype"]) {
-					  	//bidding表有数据就有,没有不再查此中标企业得其他信息--需求来自数据和质量
-					  	obj["winner_enttel"] = "" //getwinnertel(obj["winner"])
-					  }
-
-					  if !(isVip || isMember || isEntniche) { //非会员不展示电话字段
-					  	if obj["winnertel"] != nil {
-					  		obj["winnertel"] = "无权限"
-					  	}
-					  	if obj["winner_enttel"] != "" {
-					  		obj["winner_enttel"] = "无权限"
-					  	}
-					  }*/
-					//判断时间 //如果是seo页面超过时间访问的进入首页
-					comeinTime := time.Unix(util.Int64All(obj["comeintime"]), 0)
-					if stype == "indexcontent" {
-						if count := public.MQFW.Count("seobidding", map[string]interface{}{"bid": sid}); count <= 0 && comeinTime.Before(time.Now().Add(time.Duration(-util.IntAll(config.Sysconfig["seoBeforeTimeHour"]))*time.Hour)) {
-							return s.Redirect("/")
-						}
+					if util.InterfaceToStr(obj["winnertel"]) != "" {
+						obj["winnertel"] = "freeView"
 					}
-					FieldProcessing(obj, ssOpenid, industry, id, from_userid, userId, stype, isVip || isMember || isEntniche, false)
-					//免费用户正文手机号替换
-					if obj["site"] == "剑鱼信息发布平台" && !isMember {
-						//采购电话中标单位电话置空
-						if util.InterfaceToStr(obj["buyertel"]) != "" {
-							obj["buyertel"] = "freeView"
-						}
-						if util.InterfaceToStr(obj["winnertel"]) != "" {
-							obj["winnertel"] = "freeView"
-						}
-						//正文电话 手机号 邮箱处理
-						if detail, _ := obj["detail"].(string); detail != "" {
-							//手机号
-							re1 := regexp.MustCompile("1[345789]{1}\\d{9}")
-							detail1 := re1.ReplaceAllString(detail, `<span class="freeView">点击查看</span>`)
-							code := util.InterfaceToStr(obj["projectcode"])
-							if code != "" {
-								detail1 = strings.ReplaceAll(detail1, code, "*********")
-							}
-							//座机
-							re2 := regexp.MustCompile("((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?")
-							detail2 := re2.ReplaceAllString(detail1, `<span class="freeView">点击查看</span>`)
-							re4 := regexp.MustCompile("((400)-)(\\d{3,4}-)(\\d{3,})")
-							detail4 := re4.ReplaceAllString(detail2, `<span class="freeView">点击查看</span>`)
-							//邮箱
-							re3 := regexp.MustCompile("([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)")
-							detail3 := re3.ReplaceAllString(detail4, `<span class="freeView">点击查看</span>`)
-							obj["detail"] = strings.ReplaceAll(strings.ReplaceAll(detail3, `<span class="freeView">点击查看</span><span class="freeView">点击查看</span>`, `<span class="freeView">点击查看</span>`), "*********", code)
+					//正文电话 手机号 邮箱处理
+					if detail, _ := obj["detail"].(string); detail != "" {
+						//手机号
+						re1 := regexp.MustCompile("1[345789]{1}\\d{9}")
+						detail1 := re1.ReplaceAllString(detail, `<span class="freeView">点击查看</span>`)
+						code := util.InterfaceToStr(obj["projectcode"])
+						if code != "" {
+							detail1 = strings.ReplaceAll(detail1, code, "*********")
 						}
+						//座机
+						re2 := regexp.MustCompile("((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?")
+						detail2 := re2.ReplaceAllString(detail1, `<span class="freeView">点击查看</span>`)
+						re4 := regexp.MustCompile("((400)-)(\\d{3,4}-)(\\d{3,})")
+						detail4 := re4.ReplaceAllString(detail2, `<span class="freeView">点击查看</span>`)
+						//邮箱
+						re3 := regexp.MustCompile("([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)")
+						detail3 := re3.ReplaceAllString(detail4, `<span class="freeView">点击查看</span>`)
+						obj["detail"] = strings.ReplaceAll(strings.ReplaceAll(detail3, `<span class="freeView">点击查看</span><span class="freeView">点击查看</span>`, `<span class="freeView">点击查看</span>`), "*********", code)
 					}
-					if obj["projectname"] != nil {
-						s.SetSession("projectname", obj["projectname"])
-					}
+				}
+				if obj["projectname"] != nil {
+					s.SetSession("projectname", obj["projectname"])
+				}
 
-					if obj["entidlist"] != nil { //大会员中标企业跳转至画像
-						s_winner := util.ObjToString(obj["s_winner"])
-						idObjs, _ := obj["entidlist"].([]interface{})
-						winnerIdArr := []string{}
-						for _, v := range strings.Split(s_winner, ",") {
-							if v == "-" || !isInStringArr(util.ObjArrToStringArr(idObjs), v) {
-								continue
-							}
-							winnerIdArr = append(winnerIdArr, util.EncodeArticleId2ByCheck(v))
-							obj["entIds"] = winnerIdArr
+				if obj["entidlist"] != nil { //大会员中标企业跳转至画像
+					s_winner := util.ObjToString(obj["s_winner"])
+					idObjs, _ := obj["entidlist"].([]interface{})
+					winnerIdArr := []string{}
+					for _, v := range strings.Split(s_winner, ",") {
+						if v == "-" || !isInStringArr(util.ObjArrToStringArr(idObjs), v) {
+							continue
 						}
-					}
-				} else {
-					obj = map[string]interface{}{
-						"title":   obj["title"],
-						"_id":     obj["_id"],
-						"subtype": obj["subtype"],
+						winnerIdArr = append(winnerIdArr, util.EncodeArticleId2ByCheck(v))
+						obj["entIds"] = winnerIdArr
 					}
 				}
-
-				obj["urlpath"] = s.Uri()
-				obj["industry"] = industry
-				if ssOpenid != nil {
-					obj["ucbsId"] = util.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
+			} else {
+				obj = map[string]interface{}{
+					"title":   obj["title"],
+					"_id":     obj["_id"],
+					"subtype": obj["subtype"],
 				}
+			}
 
-				s.T["obj"] = obj
-				s.T["url"] = s.Uri()
-
-				content, _ := s.Render4Cache("/pc/biddetail_rec.html", &s.T)
-				timeout := 60 * 20
-				if stype == "indexcontent" {
-					timeout = util.IntAllDef(config.Sysconfig["indexcontentTimeOut"], 86400)
-				}
-				redis.Put("newother", catchKey, string(content), timeout)
-				return s.SetBody(content)
+			obj["urlpath"] = s.Uri()
+			obj["industry"] = industry
+			if ssOpenid != nil {
+				obj["ucbsId"] = util.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
 			}
-		} else {
-			return s.SetBody([]byte(res.(string)))
+
+			s.T["obj"] = obj
+			s.T["url"] = s.Uri()
+
+			return s.Render("/pc/biddetail_rec.html", &s.T)
+
 		}
 	}
 	return nil
@@ -630,7 +609,7 @@ func UserPermission(userId string, ssOpenid interface{}) (bool, bool, bool) {
 }
 
 // pc 移动共用字段处理
-func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry, id, from_userid, userId, stype string, isPayUser, b bool) {
+func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry, id, from_userid, userId, stype string, b bool) {
 	obj["industry"] = industry
 	if ssOpenid != nil {
 		obj["ucbsId"] = util.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
@@ -640,19 +619,6 @@ func FieldProcessing(obj map[string]interface{}, ssOpenid interface{}, industry,
 		obj["buyerperson"] = ""
 		obj["buyertel"] = ""
 	}
-	/*if false && isbid(obj["subtype"]) {
-	  	//bidding表有数据就有,没有不再查此中标企业得其他信息--需求来自数据和质量
-	  	obj["winner_enttel"] = "" //getwinnertel(obj["winner"])
-	  }
-
-	  if !isPayUser { //非会员不展示电话字段
-	  	if obj["winnertel"] != nil {
-	  		obj["winnertel"] = "无权限"
-	  	}
-	  	if obj["winner_enttel"] != "" {
-	  		obj["winner_enttel"] = "无权限"
-	  	}
-	  }*/
 	if !b {
 		href, _ := obj["href"].(string)
 		href = strings.Replace(href, "\n", "", -1)

+ 48 - 168
src/jfw/front/swordfish.go

@@ -19,7 +19,6 @@ import (
 	"qfw/util/elastic"
 	"qfw/util/redis"
 	"reflect"
-	"regexp"
 	"strconv"
 	"strings"
 	"time"
@@ -40,7 +39,7 @@ var (
 	bidSearch_domain_field_1 = bidSearch_field_1 + `,"purchasing","s_winner","buyer"` + bidSearch_field_file //领域数据字段基本字段
 )
 
-//剑鱼标讯推送三级页点赞暂弃 改成剑鱼标讯实验室点赞功能
+// 剑鱼标讯推送三级页点赞暂弃 改成剑鱼标讯实验室点赞功能
 func (m *Front) Praise() error {
 	defer util.Catch()
 	var flag = "F"
@@ -68,13 +67,13 @@ func (m *Front) Praise() error {
 	return nil
 }
 
-//跳转到pc查询剑鱼标讯信息列表
+// 跳转到pc查询剑鱼标讯信息列表
 func (m *Front) Searchinfolist(p string) error {
 	defer util.Catch()
 	return m.Redirect("/jylab/supsearch/index.html")
 }
 
-//ajax分页请求
+// ajax分页请求
 func (m *Front) PcAjaxReq() {
 	bidField := m.GetString("bid_field") // 领域类型 0101- 医疗
 	tabularflag := m.GetString("tabularflag")
@@ -317,7 +316,7 @@ func getLastNewsQuery(area, publishtime, subtype, industry, city string) string
 	return query
 }
 
-//进入订阅页面
+// 进入订阅页面
 func (m *Front) Getpage() error {
 	defer util.Catch()
 	s_type := ""
@@ -338,7 +337,7 @@ func (m *Front) Getpage() error {
 	return nil
 }
 
-//搜索结果,ajax分页请求
+// 搜索结果,ajax分页请求
 func (m *Front) WxsearchlistPaging() {
 	defer util.Catch()
 	userId, _ := m.GetSession("userId").(string)
@@ -452,7 +451,7 @@ func (m *Front) WxsearchlistPaging() {
 	})
 }
 
-//微信端删除历史搜索
+// 微信端删除历史搜索
 func (m *Front) DelWxHistorySearch() {
 	defer util.Catch()
 	//定义一个无用参数作为返回值
@@ -467,7 +466,7 @@ func (m *Front) DelWxHistorySearch() {
 	})
 }
 
-//查看原文跳转
+// 查看原文跳转
 func (m *Front) VisitRedirect() {
 	defer util.Catch()
 	sid := m.GetString("id")
@@ -543,7 +542,7 @@ func wxvisitD(sid, userId, openId, content string, isPayUser bool) (objdata map[
 	return nil
 }
 
-//wx pc obj字段统一处理
+// wx pc obj字段统一处理
 func ObjData(isPayUser bool, sid, content string, lent int) (t bool, obj map[string]interface{}) {
 	brobj, ok := mongodb.Find("bidding_rec", bson.M{"s_id": sid}, `{"l_recoverydate":-1}`, public.MgoBiddingFields, false, 0, 1)
 	if ok && (*brobj) != nil && len(*brobj) == 1 && (*brobj)[0] != nil {
@@ -564,7 +563,9 @@ func ObjData(isPayUser bool, sid, content string, lent int) (t bool, obj map[str
 				goto env
 			}
 			for k, _ := range obj {
-				if k != "title" && k != "area" && k != "subtype" && k != "toptype" && k != "publishtime" && k != "budget" && k != "bidamount" && k != "site" && k != "spidercode" && k != "recommended_service" {
+				if k != "title" && k != "area" && k != "subtype" && k != "toptype" && k != "publishtime" && k != "budget" && k != "bidamount" && k != "site" && k != "spidercode" && k != "recommended_service" &&
+					//"owner":1,"total_investment":1,"projectaddr":1,"projectperiod":1,"approvedept":1,"approvecontent":1,"approvecode":1,"approvenumber":1,"approvetime":1,"approvestatus":1,"project_scale":1
+					k != "owner" && k != "total_investment" && k != "projectaddr" && k != "projectperiod" && k != "approvedept" && k != "approvecontent" && k != "approvecode" && k != "approvenumber" && k != "approvetime" && k != "approvestatus" && k != "project_scale" && k != "projectname" {
 					delete(obj, k)
 				}
 			}
@@ -602,8 +603,8 @@ func ObjData(isPayUser bool, sid, content string, lent int) (t bool, obj map[str
 	return
 }
 
-//pc三级页跳转
-//20170821增加查询字段s_subscopeclass
+// pc三级页跳转
+// 20170821增加查询字段s_subscopeclass
 func pcVRT(sid, industry, content string, isPayUser bool) (po, bo, wo []map[string]interface{}, objdata map[string]interface{}) {
 	defer util.Catch()
 	var projectOther, buyerOther, winnerOther []map[string]interface{}
@@ -680,7 +681,7 @@ func pcVRT(sid, industry, content string, isPayUser bool) (po, bo, wo []map[stri
 	return projectOther, buyerOther, winnerOther, objdata
 }
 
-//获取权重最低的字段
+// 获取权重最低的字段
 func getLowestField(subtype string) string {
 	fields := util.ObjToMap(config.Sysconfig["recoveryField"])
 	result := ""
@@ -697,7 +698,7 @@ func getLowestField(subtype string) string {
 	return result
 }
 
-//根据权重随机获取数组的索引
+// 根据权重随机获取数组的索引
 func getWeightRandom(array []map[string]interface{}) int {
 	var weightSum, stepWeightSum float64
 	for _, v := range array {
@@ -725,8 +726,8 @@ func MFollow(userId, sid string) (bool, string) {
 	return followFlag, followId
 }
 
-//查看原文跳转
-//增加查询备份库数据、增加关键词、描述逻辑处理
+// 查看原文跳转
+// 增加查询备份库数据、增加关键词、描述逻辑处理
 func (m *Front) PcVisitRedirect(sid string) {
 	defer util.Catch()
 	kds := m.GetString("kds")
@@ -778,7 +779,7 @@ func (m *Front) PcVisitRedirect(sid string) {
 	}
 }
 
-//数据转换
+// 数据转换
 func bidDataConvert(id string, datas *[]map[string]interface{}) (array []map[string]interface{}) {
 	if datas == nil || len(*datas) == 0 {
 		return array
@@ -829,7 +830,7 @@ func bidDataConvert(id string, datas *[]map[string]interface{}) (array []map[str
 	return array
 }
 
-//剑鱼标讯保存
+// 剑鱼标讯保存
 func (m *Front) AjaxReq() error {
 	defer util.Catch()
 	reqType := m.GetString("reqType")
@@ -951,7 +952,7 @@ const (
 	FINDF = `"title"`
 )
 
-//预览结果
+// 预览结果
 func (m *Front) WxpushView() error {
 	defer util.Catch()
 	userid := util.ObjToString(m.GetSession("userId"))
@@ -1048,7 +1049,6 @@ func (m *Front) Share(openids string) error {
 	return nil
 }*/
 
-//
 func (m *Front) About() error {
 	defer util.Catch()
 	code := m.GetString("code") //渠道
@@ -1173,7 +1173,6 @@ func (m *Front) About() error {
 	}
 }
 
-//
 func (m *Front) Shareabout(openids string) error {
 	defer util.Catch()
 	var openid = ""
@@ -1203,7 +1202,6 @@ func (m *Front) Shareabout(openids string) error {
 	return m.Render("/weixin/about.html")
 }
 
-//
 func (m *Front) Aboutsearch() error {
 	myopenid, _ := m.Session().Get("s_m_openid").(string)
 	m.T["openid"] = se.EncodeString(myopenid)
@@ -1216,7 +1214,7 @@ func (m *Front) Aboutsearch() error {
 	return nil
 }
 
-//剑鱼标讯微信查询保存网站
+// 剑鱼标讯微信查询保存网站
 func (m *Front) AboutSR() error {
 	defer util.Catch()
 	var flag = "N"
@@ -1275,7 +1273,7 @@ func (m *Front) AboutSR() error {
 	return nil
 }
 
-//手动删除30天无更新数据
+// 手动删除30天无更新数据
 func (m *Front) DelOL() error {
 	defer util.Catch()
 	var ids []primitive.ObjectID
@@ -1312,7 +1310,7 @@ func (m *Front) DelOL() error {
 	return nil
 }
 
-//获取我的反馈列表
+// 获取我的反馈列表
 func (f *Front) MyFeedbacks() error {
 	userId, _ := f.GetSession("userId").(string)
 	if userId == "" {
@@ -1348,7 +1346,7 @@ func (f *Front) GetRecomKWs() {
 	f.ServeJson(public.RecomKws.GetRecomKws(f.GetString("value"), count, float32(config.Sysconfig["recommendThreshold"].(float64))))
 }
 
-//记录用户行为--推荐关键词
+// 记录用户行为--推荐关键词
 func (f *Front) BehaviorRecord() {
 	flag := saveBehaviorRecord(f.Session(),
 		bson.M{
@@ -1359,7 +1357,7 @@ func (f *Front) BehaviorRecord() {
 	f.ServeJson(bson.M{"flag": flag})
 }
 
-//记录用户行为
+// 记录用户行为
 func saveBehaviorRecord(sess *httpsession.Session, data bson.M) bool {
 	userid, _ := sess.Get("userId").(string)
 	//if openId == "" {
@@ -1373,7 +1371,7 @@ func saveBehaviorRecord(sess *httpsession.Session, data bson.M) bool {
 	return len(mongodb.Save("behavior", data)) > 0
 }
 
-//取得剑鱼标讯博客的信息列表
+// 取得剑鱼标讯博客的信息列表
 func (f *Front) Jyblog(param /*参数*/ string) error {
 	querymap := map[string]string{}
 	if len(param) == 0 {
@@ -1396,144 +1394,32 @@ func (f *Front) Jyblog(param /*参数*/ string) error {
 	f.T["logid"] = config.Seoconfig["jybky"].(string)
 	f.DisableHttpCache()
 	shareid = se.EncodeString(shareid)
-	data, pagination := SearhWebContentblog(querymap)
+	data, pagination := jyutil.JyCmsSearch(querymap)
 	f.Render("/pc/jyblog.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination, "shareid": shareid})
 	return nil
 }
 
-//实际的查询剑鱼标讯博客
-func SearhWebContentblog(querymap map[string]string) (*[]map[string]interface{}, *[]interface{}) {
-	perPage, _ := strconv.Atoi(querymap["perPage"])
-	currentPage, _ := strconv.Atoi(querymap["currentPage"])
-	//修复
-	if perPage == 0 {
-		perPage = 5
-	}
-	if currentPage < 1 {
-		currentPage = 1
-	}
-	contentType := querymap["contentType"]
-	queryStr := querymap["query"]
-
-	queryMap := map[string]interface{}{
-		"s_contenttype": contentType,
-	}
-
-	if queryStr != "" {
-		queryMap["$or"] = []interface{}{
-			map[string]interface{}{
-				"s_title": map[string]interface{}{"$regex": queryStr},
-			},
-			map[string]interface{}{
-				"s_content": map[string]interface{}{"$regex": queryStr},
-			},
-		}
-	}
-
-	total := public.MQFW.Count("content", queryMap)
-
-	//查询列表数据
-	client := elastic.GetEsConn()
-	defer elastic.DestoryEsConn(client)
-	if client == nil {
-		return nil, nil
-	}
-	searchResult, _ := public.MQFW.Find("content", queryMap, `{"releasetime":-1}`, `{"s_title":1,"s_contenttype":1,"s_content":1,"releasetime":1,"s_description":1,"praise":1,"s_source":1,"s_pic":1,"s_pic1":1,"l_createdate":1,"_id":1,"s_author":1}`, false, (currentPage-1)*perPage, perPage)
-
-	var res []map[string]interface{}
-	if searchResult != nil && len(*searchResult) > 0 {
-		for _, m := range *searchResult {
-			s_content, _ := m["s_content"].(string)
-			if len(s_content) > 500 {
-				m["s_content"] = ""
-			} else {
-				con, _ := regexp.Compile("^[^<]*?>")
-				content := con.ReplaceAllString(s_content, "")
-				con1, _ := regexp.Compile("<[^>]*$")
-				m["s_content"] = template.HTML(con1.ReplaceAllString(content, ""))
-			}
-
-			s_title, _ := m["s_title"].(string)
-			m["s_title"] = template.HTML(s_title)
-
-			tmpdate, _ := m["l_createdate"]
-			m["l_createdate"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate), 0))
-			tmpdate1, _ := m["releasetime"]
-			m["releasetime"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate1), 0))
-			reltime := time.Unix(util.Int64All(tmpdate1), 0)
-			m["time"] = reltime.Format(util.Date_Short_Layout) //首页展示
-			s_pic, _ := m["s_pic"].(string)
-			if s_pic != "" {
-				s_pic = config.Seoconfig["jyadd"].(string) + s_pic
-			}
-			m["s_pic"] = s_pic
-			s_pic1, _ := m["s_pic1"].(string)
-			if s_pic1 != "" {
-				s_pic1 = config.Seoconfig["jyadd"].(string) + s_pic1
-			}
-			m["s_pic1"] = s_pic1
-			m["_id"] = se.EncodeString(BsonIdToSId(m["_id"]))
-			res = append(res, m)
+func (f *Front) JyCms(cType, param string) error {
+	querymap := map[string]string{}
+	if len(param) == 0 {
+		querymap = map[string]string{
+			"perPage":     f.GetString("perPage"),
+			"currentPage": f.GetString("currentPage"),
+			"contentType": cType,
+			"query":       f.GetString("query"),
 		}
-	}
-	//生成分页
-	pagination := MakePagination(perPage, currentPage, int(total), querymap, "/jyblog/index_%s.html")
-	return &res, &pagination
-}
-
-//计算分页,分页显示规则
-func MakePagination(perPage, currentPage, total int, param map[string]string, urltpl string) []interface{} {
-	var totalPages int //总页数
-	if total == 0 {
-		totalPages = 1
 	} else {
-		totalPages = (total - 1 + perPage) / perPage //总页数
+		//反转生成map
+		paramstr := param[1:]
+		bs, _ := base64.StdEncoding.DecodeString(paramstr)
+		json.Unmarshal(bs, &querymap)
 	}
-
-	ret := make([]interface{}, 3)
-	index := 0
-	prePage, nextPage := currentPage-1, currentPage+1
-	if prePage < 1 {
-		prePage = 1
-	}
-	if nextPage > totalPages {
-		nextPage = totalPages
-	}
-	param["currentPage"] = strconv.Itoa(prePage)
-	bs, _ := json.Marshal(param)
-	paramstr := base64.StdEncoding.EncodeToString(bs)
-	url := fmt.Sprintf(urltpl, paramstr)
-	iscurrent := currentPage == 1
-	ret[index] = map[string]interface{}{"page": "< 上一页", "url": url, "iscurrent": iscurrent}
-	index = index + 1
-	param["currentPage"] = strconv.Itoa(currentPage)
-	bs, _ = json.Marshal(param)
-	paramstr = base64.StdEncoding.EncodeToString(bs)
-	url = fmt.Sprintf(urltpl, paramstr)
-	iscurrent = currentPage == currentPage
-	ret[index] = map[string]interface{}{"page": currentPage, "url": url, "iscurrent": iscurrent}
-	index = index + 1
-	param["currentPage"] = strconv.Itoa(nextPage)
-	bs, _ = json.Marshal(param)
-	paramstr = base64.StdEncoding.EncodeToString(bs)
-	url = fmt.Sprintf(urltpl, paramstr)
-	iscurrent = currentPage == totalPages
-	ret[index] = map[string]interface{}{"page": "下一页 >", "url": url, "iscurrent": iscurrent}
-
-	//
-	u := map[string]interface{}{
-		"currentPage": 1,
-		"query":       "招标",
-		"contentType": param["contentType"],
-	}
-	bs, _ = json.Marshal(u)
-	paramstr = base64.StdEncoding.EncodeToString(bs)
-	fmt.Println("ooooo", paramstr)
-
-	return ret
+	f.DisableHttpCache()
+	data, pagination := jyutil.JyCmsSearch(querymap)
+	return f.Render("/pc/jyblog.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination})
 }
 
-//博客三级页
+// 博客三级页
 func (f *Front) Jybdetail(_id string) error {
 	var shareid = f.GetString("id")
 	if len(shareid) == 0 {
@@ -1578,7 +1464,6 @@ func (f *Front) Jybdetail(_id string) error {
 	return f.Render("/pc/jyblogdetail.html", &f.T)
 }
 
-//
 func (f *Front) Blogpraise() error {
 	defer util.Catch()
 	id := se.DecodeString(f.GetString("id"))
@@ -1608,7 +1493,6 @@ func (f *Front) Blogpraise() error {
 	return nil
 }
 
-//
 func getRewardText() (string, string) {
 	rewardText, _ := config.Sysconfig["rewardText"].([]interface{})
 	advertText, _ := config.Sysconfig["advertText"].([]interface{})
@@ -1621,7 +1505,6 @@ func getRewardText() (string, string) {
 	}
 }
 
-//
 func searchresulthtml(list *[]map[string]interface{}) string {
 	var listhtml = ""
 	var j = 1
@@ -1689,7 +1572,6 @@ func searchresulthtml(list *[]map[string]interface{}) string {
 	return listhtml
 }
 
-//
 func (f *Front) GetClassifyList() error {
 	defer util.Catch()
 	//判断用户是否开启超级搜索?
@@ -1702,7 +1584,6 @@ func (f *Front) GetClassifyList() error {
 	return nil
 }
 
-//
 func classify(stp, area, industry string) (string, string, string) {
 	var areas, _ = config.Seoconfig["area"].(map[string]interface{})
 	var stypes, _ = config.Seoconfig["stype"].(map[string]interface{})
@@ -1860,7 +1741,7 @@ func (f *Front) HasPushHistory() {
 	})
 }
 
-//历史推送
+// 历史推送
 func (f *Front) Newhistorypush() error {
 	myopenid := util.ObjToString(f.GetSession("s_m_openid"))
 	userId := util.ObjToString(f.GetSession("userId"))
@@ -1899,7 +1780,7 @@ func (f *Front) Newhistorypush() error {
 	return f.Render("/weixin/historypush.html", &f.T)
 }
 
-//历史推送
+// 历史推送
 func (f *Front) Historypush() error {
 	return f.Newhistorypush()
 }
@@ -1935,7 +1816,7 @@ func (f *Front) HistorypushPaging() error {
 	return nil
 }
 
-//电脑端招标订阅
+// 电脑端招标订阅
 func (m *Front) Subscribe() error {
 	isBuyed := false
 	if userId, _ := m.GetSession("userId").(string); userId != "" {
@@ -1947,7 +1828,7 @@ func (m *Front) Subscribe() error {
 	return m.Render("/pc/subscribe_new.html", &m.T)
 }
 
-//获取高级查询所需的参数
+// 获取高级查询所需的参数
 func getShouldQueryMap(findfield, searchvalue, industry string) []map[string]string {
 	mps := []map[string]string{}
 	for _, v := range strings.Split(industry, ",") {
@@ -2037,7 +1918,6 @@ func getSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinne
 	return
 }
 
-//
 func wxPushViewDatas(index, itype string, keys []elastic.KeyConfig, allquery, findfields, SortQuery, fields string, start, limit int) *[]map[string]interface{} {
 	query_all := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match":1}}}`
 	match_detail := `{"match":{"detail":{"query":"%s","operator": "and"}}}`
@@ -2104,7 +1984,7 @@ func wxPushViewDatas(index, itype string, keys []elastic.KeyConfig, allquery, fi
 	}
 }
 
-//金额转化   金额:0-万元以下单位为元  ,万元以上至亿元以下单位为万元 ,亿元以上单位为亿元。保留 小数点后 2 位,不进行四舍五入。
+// 金额转化   金额:0-万元以下单位为元  ,万元以上至亿元以下单位为万元 ,亿元以上单位为亿元。保留 小数点后 2 位,不进行四舍五入。
 func ConversionMoeny(i_money interface{}) string {
 	m := ""
 	if reflect.TypeOf(i_money).Name() == "float64" {

+ 12 - 4
src/jfw/front/vipsubscribe.go

@@ -134,10 +134,18 @@ func (s *Subscribepay) ToSetInfoTypePage() {
 //订阅设置
 func (s *Subscribepay) ToSetPage() error {
 	userid := util.ObjToString(s.GetSession("userId"))
+	vSwitch := s.GetString("vSwitch")
+	if vSwitch != "" {
+		if vSwitch == jy.SwitchService.Vip {
+			s.SetSession(jy.SwitchService.SessionKey, jy.SwitchService.Vip)
+		} else if vSwitch == jy.SwitchService.Member {
+			s.SetSession(jy.SwitchService.SessionKey, jy.SwitchService.Member)
+		}
+	}
 	vipMsg := jy.GetBigVipUserBaseMsg(userid, public.Mysql, public.MQFW)
 	if vipMsg.VipStatus <= 0 && vipMsg.Status <= 0 && isInTSguide(userid) { //仅免费用户跳转向导页面
 		return s.Redirect("/front/tenderSubscribe/guide?url=" + url.QueryEscape(s.Request.RequestURI))
-	} else if vipMsg.VipStatus <= 0 && !vipMsg.IsUpgrade {
+	} else if (vSwitch == "" || vSwitch == "v") && vipMsg.VipStatus <= 0 && !vipMsg.IsUpgrade {
 		if s.GetString("advertcode") != "" {
 			return s.Redirect("/wxkeyset/keyset/index?advertcode=" + s.GetString("advertcode"))
 		}
@@ -228,12 +236,12 @@ func (s *Subscribepay) Introduce() error {
 		if s.GetString("disWord") != "" {
 			//分销识别 直接VIP续费
 			if util.IntAll((*m)["i_vip_status"]) == 1 { //试用用户
-				return s.Redirect("/jy_mobile/common/order/create/svip?type=buy&disWord=" + s.GetString("disWord") + "&advertcode=" + s.GetString("advertcode"))
+				return s.Redirect("/jy_mobile/common/order/create/svip?type=buy&vSwitch=v&disWord=" + s.GetString("disWord") + "&advertcode=" + s.GetString("advertcode"))
 			} else {
-				return s.Redirect("/jy_mobile/common/order/create/svip?type=renew&disWord=" + s.GetString("disWord") + "&advertcode=" + s.GetString("advertcode"))
+				return s.Redirect("/jy_mobile/common/order/create/svip?type=renew&vSwitch=v&disWord=" + s.GetString("disWord") + "&advertcode=" + s.GetString("advertcode"))
 			}
 		}
-		return s.Redirect("/front/vipsubscribe/toSubVipSetPage?advertcode=" + s.GetString("advertcode"))
+		return s.Redirect("/front/vipsubscribe/toSubVipSetPage?advertcode=" + s.GetString("advertcode") + "&vSwitch=v")
 	}
 	s.T["notShowTrial"] = util.IntAll((*obj)["i_trial"]) == -1 || (*m)["i_vip_status"] != nil
 	s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url())

+ 179 - 0
src/jfw/jyutil/jyCms.go

@@ -0,0 +1,179 @@
+package jyutil
+
+import (
+	"encoding/base64"
+	"encoding/json"
+	"fmt"
+	"html/template"
+	"jfw/config"
+	"jfw/public"
+	. "mongodb"
+	"qfw/util"
+	"qfw/util/elastic"
+	"qfw/util/redis"
+	"regexp"
+	"strconv"
+	"time"
+)
+
+const (
+	jyMsgFirstCache     = "jyMsg_%s_%d"
+	jyMsgFirstCacheTime = 5 * 60
+)
+
+//GetFirstJyCms 获取首评信息
+func GetFirstJyCms(contentType string, size int) (r []map[string]interface{}) {
+	// 默认剑鱼博客栏目
+	contentType = util.If(contentType == "", "jybk", contentType).(string)
+	redisKey := fmt.Sprintf(jyMsgFirstCache, contentType, size)
+	if data, ok := redis.Get("other", redisKey).([]interface{}); ok && data != nil && len(data) > 0 {
+		r = util.ObjArrToMapArr(data)
+	} else {
+		rs, _ := JyCmsSearch(map[string]string{
+			"contentType": contentType,
+			"perPage":     fmt.Sprintf("%d", size),
+		})
+		if rs != nil {
+			for _, v := range *rs {
+				delete(v, "praise")
+				delete(v, "s_contenttype")
+				delete(v, "s_source")
+			}
+			r = *rs
+		}
+		redis.Put("other", redisKey, r, jyMsgFirstCacheTime)
+	}
+	return r
+}
+
+// JyCmsSearch 剑鱼文章检索
+func JyCmsSearch(query map[string]string) (*[]map[string]interface{}, *[]interface{}) {
+	perPage, _ := strconv.Atoi(query["perPage"])
+	currentPage, _ := strconv.Atoi(query["currentPage"])
+	//修复
+	if perPage == 0 {
+		perPage = 5
+	}
+	if currentPage < 1 {
+		currentPage = 1
+	}
+	contentType := query["contentType"]
+	queryStr := query["query"]
+
+	queryMap := map[string]interface{}{
+		"s_contenttype": contentType,
+	}
+
+	if queryStr != "" {
+		queryMap["$or"] = []interface{}{
+			map[string]interface{}{
+				"s_title": map[string]interface{}{"$regex": queryStr},
+			},
+			map[string]interface{}{
+				"s_content": map[string]interface{}{"$regex": queryStr},
+			},
+		}
+	}
+
+	total := public.MQFW.Count("content", queryMap)
+
+	//查询列表数据
+	client := elastic.GetEsConn()
+	defer elastic.DestoryEsConn(client)
+	if client == nil {
+		return nil, nil
+	}
+	searchResult, _ := public.MQFW.Find("content", queryMap, `{"releasetime":-1}`, `{"s_title":1,"s_contenttype":1,"s_content":1,"releasetime":1,"s_description":1,"praise":1,"s_source":1,"s_pic":1,"s_pic1":1,"l_createdate":1,"_id":1,"s_author":1}`, false, (currentPage-1)*perPage, perPage)
+
+	var res []map[string]interface{}
+	if searchResult != nil && len(*searchResult) > 0 {
+		for _, m := range *searchResult {
+			s_content, _ := m["s_content"].(string)
+			if len(s_content) > 500 {
+				m["s_content"] = ""
+			} else {
+				con, _ := regexp.Compile("^[^<]*?>")
+				content := con.ReplaceAllString(s_content, "")
+				con1, _ := regexp.Compile("<[^>]*$")
+				m["s_content"] = template.HTML(con1.ReplaceAllString(content, ""))
+			}
+
+			s_title, _ := m["s_title"].(string)
+			m["s_title"] = template.HTML(s_title)
+
+			tmpdate, _ := m["l_createdate"]
+			m["l_createdate"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate), 0))
+			tmpdate1, _ := m["releasetime"]
+			m["releasetime"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate1), 0))
+			reltime := time.Unix(util.Int64All(tmpdate1), 0)
+			m["time"] = reltime.Format(util.Date_Short_Layout) //首页展示
+			s_pic, _ := m["s_pic"].(string)
+			if s_pic != "" {
+				s_pic = config.Seoconfig["jyadd"].(string) + s_pic
+			}
+			m["s_pic"] = s_pic
+			s_pic1, _ := m["s_pic1"].(string)
+			if s_pic1 != "" {
+				s_pic1 = config.Seoconfig["jyadd"].(string) + s_pic1
+			}
+			m["s_pic1"] = s_pic1
+			m["_id"] = se.EncodeString(BsonIdToSId(m["_id"]))
+			res = append(res, m)
+		}
+	}
+	//生成分页
+	pagination := MakePagination(perPage, currentPage, int(total), query, "/jyblog/index_%s.html")
+	return &res, &pagination
+}
+
+//计算分页,分页显示规则
+func MakePagination(perPage, currentPage, total int, param map[string]string, urltpl string) []interface{} {
+	var totalPages int //总页数
+	if total == 0 {
+		totalPages = 1
+	} else {
+		totalPages = (total - 1 + perPage) / perPage //总页数
+	}
+
+	ret := make([]interface{}, 3)
+	index := 0
+	prePage, nextPage := currentPage-1, currentPage+1
+	if prePage < 1 {
+		prePage = 1
+	}
+	if nextPage > totalPages {
+		nextPage = totalPages
+	}
+	param["currentPage"] = strconv.Itoa(prePage)
+	bs, _ := json.Marshal(param)
+	paramstr := base64.StdEncoding.EncodeToString(bs)
+	url := fmt.Sprintf(urltpl, paramstr)
+	iscurrent := currentPage == 1
+	ret[index] = map[string]interface{}{"page": "< 上一页", "url": url, "iscurrent": iscurrent}
+	index = index + 1
+	param["currentPage"] = strconv.Itoa(currentPage)
+	bs, _ = json.Marshal(param)
+	paramstr = base64.StdEncoding.EncodeToString(bs)
+	url = fmt.Sprintf(urltpl, paramstr)
+	iscurrent = currentPage == currentPage
+	ret[index] = map[string]interface{}{"page": currentPage, "url": url, "iscurrent": iscurrent}
+	index = index + 1
+	param["currentPage"] = strconv.Itoa(nextPage)
+	bs, _ = json.Marshal(param)
+	paramstr = base64.StdEncoding.EncodeToString(bs)
+	url = fmt.Sprintf(urltpl, paramstr)
+	iscurrent = currentPage == totalPages
+	ret[index] = map[string]interface{}{"page": "下一页 >", "url": url, "iscurrent": iscurrent}
+
+	//
+	u := map[string]interface{}{
+		"currentPage": 1,
+		"query":       "招标",
+		"contentType": param["contentType"],
+	}
+	bs, _ = json.Marshal(u)
+	paramstr = base64.StdEncoding.EncodeToString(bs)
+	fmt.Println("ooooo", paramstr)
+
+	return ret
+}

+ 22 - 0
src/jfw/jyutil/jyutil.go

@@ -111,6 +111,28 @@ func GetSessionVal(q map[string]interface{}) (*map[string]interface{}, map[strin
 	if phone == "" {
 		phone = util.ObjToString((*person)["s_m_phone"])
 	}
+	if phone != "" {
+		//企业信息存session
+		sql := `SELECT a.id,a.name,a.startdate,a.enddate,a.quota,c.id as dept_id,b.id as user_id from entniche_info a 
+			INNER JOIN entniche_user b on (b.phone=? and a.id=b.ent_id) 
+			INNER JOIN entniche_department c on (c.pid=0 and a.id=c.ent_id) 
+			LEFT JOIN entniche_user_role d on (d.role_id=? and b.id=d.user_id)  
+			order by a.status DESC,b.power desc,a.auth_status DESC,d.role_id desc,a.createtime desc`
+		list := public.Mysql.SelectBySql(sql, phone, 1)
+		if list != nil {
+			for _, v := range *list {
+				if util.IntAll(v["id"]) == 0 {
+					break
+				}
+				sessionVal["entId"] = util.IntAll(v["id"])
+				sessionVal["entName"] = util.ObjToString(v["name"])
+				sessionVal["entUserId"] = util.IntAll(v["user_id"])
+				sessionVal["frameworkEntId"] = util.IntAll(v["id"])
+				sessionVal["frameworkEntName"] = util.ObjToString(v["name"])
+				break
+			}
+		}
+	}
 	sessionVal["phone"] = phone
 	sessionVal["i_unlimited"] = util.IntAll((*person)["i_unlimited"])
 	base_uid := util.IntAllDef((*person)["base_user_id"], 0)

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

@@ -815,7 +815,7 @@ func (l *Login) AfterPageLoadToCheck() {
 	isIos, _ := l.GetBool("isIos")
 	if ios_openUpdate && isIos {
 		ios_grayupdate, _ := update["ios_grayupdate"].(bool)
-		if jyutil.ClientUpdate.IsNeedUpdate(userId, version, "ios", -1, ios_grayupdate) {
+		if jyutil.ClientUpdate.IsNeedUpdate(userId, version, qutil.ObjToString(update["ios_version"]), "ios", -1, ios_grayupdate) {
 			if ios_mustupdate, _ := update["ios_mustupdate"].(bool); ios_mustupdate {
 				isNeedUpdate = 2
 			} else {

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

@@ -234,7 +234,7 @@ func (l *Me) CheckUpdate() error {
 		}
 	}
 	version := l.GetString("version")
-	updateFlag := ClientUpdate.IsNeedUpdate(userId, version, newChannel, newSystem, grayUpdate)
+	updateFlag := ClientUpdate.IsNeedUpdate(userId, version, qutil.ObjToString(update["version"]), newChannel, newSystem, grayUpdate)
 	if updateFlag {
 		if mustupdate, _ := update["mustupdate"].(bool); mustupdate {
 			isNeedUpdate = 2

+ 10 - 5
src/jfw/modules/app/src/app/front/shorturl.go

@@ -48,7 +48,7 @@ func (s *Short) Article(stype, id string) error {
 		return s.Redirect("/jyapp/free/mob/err")
 	}
 
-	isVip, isEntniche, i_member_status, email := UserPermission(userId)
+	isVip, isOldVip, isEntniche, i_member_status, email := UserPermission(userId)
 	s.T["isVip"] = isVip
 	s.T["member_status"] = i_member_status
 	s.T["email"] = email
@@ -68,8 +68,10 @@ func (s *Short) Article(stype, id string) error {
 	s.T["keywords"] = kds
 	var obj map[string]interface{}
 	var canRead bool
-	obj = wxvisitD(sid, userId, isVip || isEntniche || i_member_status > 0)
-	if isVip || i_member_status > 0 || isEntniche {
+	obj = wxvisitD(sid, userId, (isVip && isOldVip) || isEntniche || i_member_status > 0)
+
+	if ((isVip && isOldVip) || i_member_status > 0 || isEntniche) || //老版本vip、大会员、商机管理
+		((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) { //新超级订阅非采购意向”和“拟建项目”
 		canRead = true
 	} else {
 		watchKey := fmt.Sprintf("article_count_%d_%s_%d_%s", time.Now().Year(), time.Now().Month(), time.Now().Day(), userId)
@@ -339,13 +341,16 @@ func getwinnertel(company interface{}) string {
 	return ""
 }
 
-func UserPermission(userId string) (isVip, isEntniche bool, i_member_status int, email string) {
+func UserPermission(userId string) (isVip, isOldVip, isEntniche bool, i_member_status int, email string) {
 	var phone string
-	data, ok := mongodb.FindById("user", userId, `{"i_vip_status":1,"i_member_status":1,"s_myemail":1,"s_phone":1,"s_m_phone":1}`)
+	data, ok := mongodb.FindById("user", userId, `{"i_vip_status":1,"i_member_status":1,"s_myemail":1,"s_phone":1,"s_m_phone":1,"l_vip_starttime":1}`)
 	if ok && data != nil && len(*data) > 0 {
 		i_vip_status := util.IntAll((*data)["i_vip_status"])
 		if i_vip_status > 0 {
 			isVip = true
+			if util.Int64All((*data)["l_vip_starttime"]) < util.Int64All(config.Sysconfig["contextOldVipLimit"]) {
+				isOldVip = true
+			}
 		}
 		i_member_status = util.IntAllDef((*data)["i_member_status"], 0)
 		email = util.ObjToStringDef((*data)["s_myemail"], "")

+ 21 - 18
src/jfw/modules/app/src/app/front/swordfish.go

@@ -29,7 +29,7 @@ const (
 	bidSearch_field   = bidSearch_field_1 + `,"bidopentime","winner","buyer","projectname","projectcode","projectinfo"`
 )
 
-//剑鱼标讯推送三级页点赞暂弃 改成剑鱼标讯实验室点赞功能
+// 剑鱼标讯推送三级页点赞暂弃 改成剑鱼标讯实验室点赞功能
 func (m *Front) Praise() error {
 	defer util.Catch()
 	var flag = "F"
@@ -57,7 +57,7 @@ func (m *Front) Praise() error {
 	return nil
 }
 
-//剑鱼标讯保存
+// 剑鱼标讯保存
 func (m *Front) AjaxReq() error {
 	defer util.Catch()
 	reqType := m.GetString("reqType")
@@ -176,7 +176,7 @@ func (m *Front) AjaxReq() error {
 	return nil
 }
 
-//获取我的反馈列表
+// 获取我的反馈列表
 func (f *Front) MyFeedbacks() error {
 	userId, _ := f.GetSession("userId").(string)
 	if userId == "" {
@@ -312,7 +312,7 @@ func (m *Front) WxsearchlistPaging() {
 
 }
 
-//预览结果
+// 预览结果
 func (m *Front) WxpushView() error {
 	defer util.Catch()
 	userid := util.ObjToString(m.GetSession("userId"))
@@ -430,7 +430,7 @@ func (m *Front) WxpushViewPaging() {
 	})
 }*/
 
-//历史推送
+// 历史推送
 func (f *Front) Historypush() error {
 	if f.GetString("f") == "push" {
 		if f.GetString("t") == "member" {
@@ -487,7 +487,8 @@ func wxvisitD(sid, userId string, isPayUser bool) (objdata map[string]interface{
 		if ok && obj != nil && len(obj) >= 3 {
 			if !isPayUser && (util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向") {
 				for k, _ := range obj {
-					if k != "title" && k != "area" && k != "subtype" && k != "toptype" && k != "publishtime" && k != "budget" && k != "bidamount" && k != "site" && k != "spidercode" && k != "recommended_service" {
+					if k != "title" && k != "area" && k != "subtype" && k != "toptype" && k != "publishtime" && k != "budget" && k != "bidamount" && k != "site" && k != "spidercode" && k != "recommended_service" &&
+						k != "owner" && k != "total_investment" && k != "projectaddr" && k != "projectperiod" && k != "approvedept" && k != "approvecontent" && k != "approvecode" && k != "approvenumber" && k != "approvetime" && k != "approvestatus" && k != "project_scale" && k != "projectname" {
 						delete(obj, k)
 					}
 				}
@@ -532,7 +533,7 @@ func (f *Front) GetRecomKWs() {
 	f.ServeJson(public.RecomKws.GetRecomKws(f.GetString("value"), count, float32(config.Sysconfig["recommendThreshold"].(float64))))
 }
 
-//记录用户行为--推荐关键词
+// 记录用户行为--推荐关键词
 func (f *Front) BehaviorRecord() {
 	flag := saveBehaviorRecord(f.Session(),
 		bson.M{
@@ -543,7 +544,7 @@ func (f *Front) BehaviorRecord() {
 	f.ServeJson(bson.M{"flag": flag})
 }
 
-//记录用户行为
+// 记录用户行为
 func saveBehaviorRecord(sess *httpsession.Session, data bson.M) bool {
 	userId, _ := sess.Get("userId").(string)
 	nickName, _ := sess.Get("s_nickname").(string)
@@ -553,18 +554,20 @@ func saveBehaviorRecord(sess *httpsession.Session, data bson.M) bool {
 	return len(mongodb.Save("behavior", data)) > 0
 }
 
-/*func (m *Front) WxpushAjaxReq() error {
-	defer util.Catch()
+/*
+	func (m *Front) WxpushAjaxReq() error {
+		defer util.Catch()
 
-	vsid, _ := m.GetInteger("vsid")
-	if vsid <= 0 {
+		vsid, _ := m.GetInteger("vsid")
+		if vsid <= 0 {
+			return nil
+		}
+		if userId := util.ObjToString(m.GetSession("userId")); userId != "" {
+			jy.SubscribePush.Visit(public.PushMysql, userId, vsid)
+		}
 		return nil
 	}
-	if userId := util.ObjToString(m.GetSession("userId")); userId != "" {
-		jy.SubscribePush.Visit(public.PushMysql, userId, vsid)
-	}
-	return nil
-}*/
+*/
 func (m *Front) DelWxHistorySearch() {
 	defer util.Catch()
 	//定义一个无用参数作为返回值
@@ -603,7 +606,7 @@ func (m *Front) GetIndexData() {
 	m.ServeJson(one)
 }
 
-//手动删除30天无更新数据
+// 手动删除30天无更新数据
 func (m *Front) DelOL() error {
 	defer util.Catch()
 	var ids []primitive.ObjectID

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

@@ -1,7 +1,7 @@
 package front
 
 import (
-	. "app/jyutil"
+	jyutil "app/jyutil"
 	"encoding/hex"
 	"jfw/public"
 	"net/url"
@@ -145,7 +145,7 @@ func (s *Subscribepay) ToChangeTime() {
 //vip订阅介绍页
 func (s *Subscribepay) Introduce() error {
 	s.T["disWord"] = s.GetString("disWord")
-	s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
+	s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = jyutil.IosExamInfo(s.Action, false, false)
 	userId := util.ObjToString(s.GetSession("userId"))
 	if userId == "" {
 		return s.Render("/vipsubscribe/vip_introduce.html")

+ 4 - 3
src/jfw/modules/app/src/app/jyutil/clientupdate.go

@@ -3,6 +3,7 @@ package jyutil
 import (
 	"fmt"
 	. "jfw/config"
+	"log"
 	"qfw/util"
 	"qfw/util/redis"
 	"strconv"
@@ -17,11 +18,10 @@ type clientUpdate struct {
 	RedisCode string
 }
 
-func (c *clientUpdate) IsNeedUpdate(userId, version, channel string, androidVersion int, grayUpdate bool) bool {
-	update, _ := Sysconfig["update"].(map[string]interface{})
+func (c *clientUpdate) IsNeedUpdate(userId, version, newVersion, channel string, androidVersion int, grayUpdate bool) bool {
 	updateFlag := true
 	if version != "" {
-		updateFlag = c.compareVersion(util.ObjToString(update["version"]), version)
+		updateFlag = c.compareVersion(newVersion, version)
 	}
 	if updateFlag {
 		if grayUpdate {
@@ -95,6 +95,7 @@ func (c *clientUpdate) ApkUrl(code, download string) string {
 
 //比较版本号
 func (c *clientUpdate) compareVersion(newVersion, oldVersion string) bool {
+	log.Println("--------", newVersion, oldVersion)
 	newArray := strings.Split(newVersion, ".")
 	oldArray := strings.Split(oldVersion, ".")
 	length := len(newArray)

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

@@ -154,7 +154,8 @@
     "nsq":"192.168.3.240:4260",
     "nsq_topic": "jy_event",
     "accountMergeOnline":"3333-03-30 00:00:00",
-	"bidSearchOldUserLimit": 1626105600,
+    "bidSearchOldUserLimit": 1626105600,
+    "contextOldVipLimit": 1664553600,
     "firstBindPop":3,
     "maxBindPop":8,
     "bindPopRedis":"merge",

+ 1 - 56
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/contrast_trial.js

@@ -224,10 +224,8 @@ var vm = new Vue({
             $(".call-counsel").on('click', function () {
                 location.href = "/jyapp/free/customer"
             })
-            
-            // 初始化智齿客服
+
             this.checkConfirmDisabled()
-            this.getOfflineMessageCount()
         },
         checkConfirmDisabled: function () {
             $.ajax({
@@ -340,59 +338,6 @@ var vm = new Vue({
         },
         confirmAction: function () {
             location.href = 'ontrial_commit'
-        },
-        getOfflineMessageCount: function () {
-            try {
-                var nowPlatform = this.isApp ? 'app' : 'wxh5';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-    
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-    
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-    
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".icon-badge-number").attr('data-badge-number', omc).show()
-                        } else {
-                            $(".icon-badge-number").removeAttr('data-badge-number')
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
         }
     },
 })

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

@@ -584,7 +584,25 @@ $(function () {
       //查看定位开关状态 是否开启
       checkLocationPermission: function () {
         return JyObj.IosCall("checkLocationPermission")
-      }
+      },   
+     	//ios附件下载
+    	//filename 文件名称不带后缀 【文件名称中不能带“/”否则会解析为多个目录】
+    	//filetype 文件类型:doc word excel 等等  
+    	//fileurl 文件链接
+		//filesize 文件大小 字符串
+		//doc 、docx、excel 、xls 、 xlsxppt 、 pptx、 pdf、 txt、png 、PNG、jpg 、JPG 暂定这些为常见类型~支持在线预览+下载+转存
+		//其他类型仅支持下载+转存
+      downLoadFile: function (filename,filetype,fileurl,filesize) {
+    	if ( filename != "" ) {
+			filename = filename.replace(/\//g,"")
+		}
+        JyObjMessage["filename"] = filename;
+        JyObjMessage["filetype"] = filetype;
+        JyObjMessage["fileurl"] = fileurl;
+        JyObjMessage["filesize"] = filesize;
+        window.webkit.messageHandlers.downLoadFile.postMessage(JyObjMessage);
+        JyObj.clearMessage();
+      },
     }
     fixIOSInputBugs()
   }

+ 3 - 1
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/keyWord.js

@@ -154,7 +154,9 @@ var vm = new Vue({
           vt: dataS
         },
         success: function (res) {
-          this.vSwitch = res.data.vt || 'f'
+          if (res && res.data) {
+            this.vSwitch = res.data.vt || 'f'
+          }
         }.bind(this)
       })
     },

+ 2 - 13
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_order_detail.js

@@ -384,19 +384,8 @@ $(function () {
                 }
                 $(".payPrice").text("¥ " + formatMoney(parseFloat(r.data.order.pay_money || r.data.order.order_money) / 100) + "元");
 
-
-
-                if (r.data.order.return_status === 0||r.data.order.return_status === 2){
-                    $("#card-header-bg").addClass("bg nopay-bg")
-                    if (r.data.order.return_status === 0){
-                        $("#pageTitle").text("待付款");
-                    }else if (r.data.order.return_status === 2){
-                        $("#pageTitle").text("待付完");
-                    }
-                }else{
-                    $("#card-header-bg").addClass("bg finish-bg")
-                    $("#pageTitle").text("已完成");
-                }
+                $("#card-header-bg").addClass("bg finish-bg")
+                $("#pageTitle").text("已完成");
                 $("#pageTitle").addClass("status")
 
                 //支付时间

+ 4 - 4
src/jfw/modules/app/src/web/templates/big-member/commonjs.html

@@ -1,9 +1,9 @@
 <!--S-必定会使用的资源-->
-<link rel="preload" as="script" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/rem.js'></link>
-<link rel="preload" as="script" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/utils.js?v={{Msg "seo" "version"}}'></link>
+<link rel="preload" as="script" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/local/rem.js'></link>
+<link rel="preload" as="script" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}'></link>
 
-<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/rem.js'></script>
-<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/local/rem.js'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}'></script>
 <script>
     utils.iosBackRefresh()
     // 头部事件js

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

@@ -1,7 +1,7 @@
 <html>
 <head>
 	{{include "/common/meta.html"}}
-	<title>超级订阅结果预览</title>
+	<title>大会员结果预览</title>
 	{{include "/common/nnc.html"}}
 	<link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/dropload.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 	<link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/wxlist.css?v={{Msg "seo" "version"}}" rel="stylesheet">

+ 0 - 56
src/jfw/modules/app/src/web/templates/big-member/page_contrast.html

@@ -169,62 +169,6 @@
 <!--<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/check-bind-phone.js?v={{Msg "seo" "version"}}'></script>-->
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
-<script>
-    function getOfflineMessageCount () {
-        try {
-            var nowPlatform = 'app';
-            (function (w, d, e, x) {
-                w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                x = d.createElement('script');
-                x.async = true;
-                x.id = 'zhichiScript';
-                x.className="zhiCustomBtn";
-
-                x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                window.xxx = x
-                d.body.appendChild(x);
-            })(window, document, 'zc');
-            $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                var ajaxUserInfo = {
-                    headImage: '',
-                    nickName: '默认昵称',
-                    userId: '',
-                }
-
-                if (r) {
-                    Object.keys(ajaxUserInfo).forEach(function (v) {
-                        if (r[v] && r[v] !== '') {
-                            ajaxUserInfo[v] = r[v]
-                        }
-                    })
-                }
-
-                zc('config', {
-                    custom:true,
-                    top_bar_flag: 0,
-                    auto_expand: false,
-                    show_face: 1,
-                    async: 0,
-                    photo_flag: false,
-                    partnerid: ajaxUserInfo.userId,
-                    face: ajaxUserInfo.headImage
-                })
-                zc("offline_message_count",function(res){
-                    console.log(res, 'offline_message_count')
-                    if (res && res.size && res.size > 0) {
-                        var omc = res.size > 99 ? '99+' : res.size
-                        $(".icon-badge-number").attr('data-badge-number', omc).show()
-                    } else {
-                        $(".icon-badge-number").removeAttr('data-badge-number')
-                    }
-                })
-            })
-        } catch (e) {
-            console.log('error: ',e)
-        }
-    }
-    getOfflineMessageCount()
-</script>
 
 <!--E-当前页面的资源-->
 

+ 3 - 62
src/jfw/modules/app/src/web/templates/big-member/page_landingPage.html

@@ -49,9 +49,9 @@
           font-size: 0;
       }
       .xiugai{
-          font-size: 0.36rem;    
-          font-weight: bold; 
-          line-height: 0.8rem; 
+          font-size: 0.36rem;
+          font-weight: bold;
+          line-height: 0.8rem;
       }
     </style>
     <script>
@@ -391,65 +391,6 @@
     }
     new Vue(vNode)
     </script>
-    <script>
-        function getOfflineMessageCount () {
-            try {
-                var nowPlatform = 'app';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-                    // wxh5、app、pc
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    console.log(r, 'r')
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    console.log('获取未读消息')
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".noread_red").text(omc).show()
-                        } else {
-                            $(".noread_red").hide()
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
-        }
-        getOfflineMessageCount()
-    </script>
-
 </body>
 
 </html>

+ 0 - 59
src/jfw/modules/app/src/web/templates/big-member/page_landingPage_old_1.html

@@ -616,65 +616,6 @@
     }
     new Vue(vNode)
     </script>
-    <script>
-        function getOfflineMessageCount () {
-            try {
-                var nowPlatform = 'app';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-                    // wxh5、app、pc
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    console.log(r, 'r')
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    console.log('获取未读消息')
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".noread_red").text(omc).show()
-                        } else {
-                            $(".noread_red").hide()
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
-        }
-        getOfflineMessageCount()
-    </script>
-
 </body>
 
 </html>

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

@@ -216,18 +216,7 @@
                 $("#card-header-bg").addClass("bg finish-bg")
                 $("#pageTitle").addClass("status")
                 $("#pageTitle").text("已完成");
-
-                var customIsAll = 0
-                if (filterObj.isAll){
-                  customIsAll=filterObj.isAll
-                }
-                if (customIsAll == 2){
-                  $("#pageTitle").text("待付款");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }else if (customIsAll == 3){
-                  $("#pageTitle").text("待付完");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }
+                
                 //有效周期
                 $(".line_cycle").css("display", "");
                 if (source === ""){

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

@@ -289,17 +289,7 @@
                 $("#card-header-bg").addClass("bg finish-bg")
                 $("#pageTitle").addClass("status")
                 $("#pageTitle").text("已完成");
-                var customIsAll = 0
-                if (filterObj.isAll){
-                  customIsAll=filterObj.isAll
-                }
-                if (customIsAll == 2){
-                  $("#pageTitle").text("待付款");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }else if (customIsAll == 3){
-                  $("#pageTitle").text("待付完");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }
+               
                 //有效周期
                 $(".line_cycle").css("display", "");
                 if (source === "") {

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

@@ -205,18 +205,7 @@
                 $("#card-header-bg").addClass("bg finish-bg")
                 $("#pageTitle").addClass("status")
                 $("#pageTitle").text("已完成");
-
-                var customIsAll = 0
-                if (filterObj.isAll){
-                  customIsAll=filterObj.isAll
-                }
-                if (customIsAll == 2){
-                  $("#pageTitle").text("待付款");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }else if (customIsAll == 3){
-                  $("#pageTitle").text("待付完");
-                  $("#card-header-bg").addClass("bg nopay-bg")
-                }
+                
                 //有效周期
                 $(".line_cycle").css("display", "");
                 if (source === "") {

+ 1 - 0
src/jfw/modules/app/src/web/templates/common/js.html

@@ -12,6 +12,7 @@
       s_avatar: {{session "s_avatar"}},
       s_headimageurl: {{session "s_headimageurl"}}
     },
+    platform: 'app',
     version: {{Msg "seo" "version"}},
     cdn: {{Msg "seo" "cdn"}}
   }

+ 3 - 2
src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html

@@ -390,7 +390,7 @@
                           snArray.push("附件");
                       } else if (selectTypeArr[i].indexOf("purchasing")!=-1) {
                           snArray.push("项目名称/标的物");
-                      } 
+                      }
                     }
                      selectTypeHtml += snArray.join("、")+"匹配";
                 }
@@ -759,9 +759,10 @@
     // 到计时
     function startTimeOver(order_create_time, countdown) {
         console.log("id_", id_)
-        var downtime = countdown.split("h")[0]
+        var downtime = countdown? countdown.split("h")[0] : 72
         downtime = downtime * 60 * 60 * 1000
         order_create_time = order_create_time.replace(/-/g, '/')
+        clearInterval(t)
         var t = setInterval(() => {
             var nowtime = new Date()  //获取当前时间
             endtime = new Date(order_create_time);  //定义结束时间

+ 5 - 3
src/jfw/modules/app/src/web/templates/frontRouter/bigmember/free/perfect_info.html

@@ -1014,8 +1014,8 @@
             member_: '请留下联系方式,我们会尽快联系您体验大会员全部功能!',
             function_: '请留下联系方式,我们会尽快联系您体验大会员全部功能!',
             jylab_see500_plus: '请留下联系方式,我们会尽快联系您!开通大会员可查看更多招标项目,实时监控更多潜在商机!',
-            article_purchase_intention: '请留下联系方式,我们会尽快联系您!开通大会员可抢先对接采购单位,帮助企业拓客!', // 采购意向
-            article_proposed_project: '请留下联系方式,我们会尽快联系您!开通大会员可抢先获知拟建商机动态,提高中标机率!', // 拟建项目
+            article_purchase_intention: '留下您的联系方式,我们会尽快和您联系。提前介入项目,助您轻松中标。', // 采购意向
+            article_proposed_project: '留下您的联系方式,我们会尽快和您联系。提前介入项目,助您轻松中标。', // 拟建项目
             'ent-manage-app': '请留下联系方式,我们会尽快联系您体验商机管理全部功能!',
             "jypush_see10_plus_app":"请完善个人信息,为您匹配更多精准项目信息",
             "jyarticle_see3_plus_app":"请完善个人信息,获取更多免费查看公告权限",
@@ -1064,7 +1064,9 @@
             "jyarticle_see3_plus_app":"完善信息",
             "article_collection":"完善信息",
             "article_original":"完善信息",
-            "peugeot_supplier_regist":"供应商报名"
+            "peugeot_supplier_regist":"供应商报名",
+            article_purchase_intention: '欢迎体验剑鱼超前项目预测',
+            article_proposed_project: '欢迎体验剑鱼超前项目预测',
           }
           for (var key in titleMap) {
             if (source.indexOf(key) !== -1) {

+ 0 - 59
src/jfw/modules/app/src/web/templates/frontRouter/enptc/free/app_enptc.html

@@ -234,65 +234,6 @@
     }
     new Vue(vNode)
     </script>
-    <script>
-        function getOfflineMessageCount () {
-            try {
-                var nowPlatform = 'app';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-                    // wxh5、app、pc
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    console.log(r, 'r')
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    console.log('获取未读消息')
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".noread_red").text(omc).show()
-                        } else {
-                            $(".noread_red").hide()
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
-        }
-        getOfflineMessageCount()
-    </script>
-
 </body>
 
 </html>

+ 0 - 59
src/jfw/modules/app/src/web/templates/frontRouter/enptc/sess/app_enptc.html

@@ -224,65 +224,6 @@
     }
     new Vue(vNode)
     </script>
-    <script>
-        function getOfflineMessageCount () {
-            try {
-                var nowPlatform = 'app';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-                    // wxh5、app、pc
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    console.log(r, 'r')
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    console.log('获取未读消息')
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".noread_red").text(omc).show()
-                        } else {
-                            $(".noread_red").hide()
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
-        }
-        getOfflineMessageCount()
-    </script>
-
 </body>
 
 </html>

+ 4 - 4
src/jfw/modules/app/src/web/templates/invoice/cantInvoice.html

@@ -48,10 +48,10 @@
         <div class="weui-dialog">
             <div class="weui-dialog__bd" style="text-align:justify;font-size: .32rem;line-height: .48rem;">
                 开票规则:<br>
-                1.自订单完成后90天内,可在线上提交发票申请,开具为电子发票。<br>
-                2.超过订单完成90天后,发票需联系客服人员线下开具,开具为纸质发票。<br>
-                3.电子发票开具成功后,自订单完成后90天内可更换一次发票内容(纸质发票需联系客服)<br>
-                4.电子发票申请后在48小时内开具,纸质发票具体时间需联系客服。 <br>
+                1.平台提供电子普通发票,您可点击“我的订单-开发票”,开票内容统一为“信息技术服务”。<br>
+                2.您申请的发票将在3个工作日内由平台开具并发送至您的邮箱,请注意查收。<br>
+                3.购买线上产品服务,请在订单完成90天内,申请开票,逾期请联系客服,开具纸质发票。<br>
+                4.如需开具增值税专用发票,请联系客服,开票金额<200元发票邮寄费用自行承担。 <br>
                 客服电话:400-108-6670
             </div>
             <div class="weui-dialog__ft">

+ 6 - 5
src/jfw/modules/app/src/web/templates/invoice/check_invoice.html

@@ -68,7 +68,8 @@
             </div>
         </div>
         <!-- 底部按钮 -->
-        <div class="j-footer">
+        <div class="j-footer" style="box-shadow: unset;">
+            <p style="text-align: justify;font-size: .26rem;color: #9B9CA3;padding: 0.24rem">您申请的发票将在3个工作日内由平台开具并发送至您的邮箱,请注意查收。</p>
             <p class="backInvoice backP" style="display: none;padding-bottom: 8px;color: red;" align=center>系统问题,开票失败</p>
         <div class="j-button-group backInvoice sys-error" style="display: none;" >
             <button class="j-button-confirm" >重新开票</button>
@@ -91,10 +92,10 @@
         <div class="weui-dialog">
             <div class="weui-dialog__bd" style="text-align:justify;font-size: .32rem;line-height: .48rem;">
                 开票规则:<br>
-                1.自订单完成后90天内,可在线上提交发票申请,开具为电子发票。<br>
-                2.超过订单完成90天后,发票需联系客服人员线下开具,开具为纸质发票。<br>
-                3.电子发票开具成功后,自订单完成后90天内可更换一次发票内容(纸质发票需联系客服)<br>
-                4.电子发票申请后在48小时内开具,纸质发票具体时间需联系客服。 <br>
+                1.平台提供电子普通发票,您可点击“我的订单-开发票”,开票内容统一为“信息技术服务”。<br>
+                2.您申请的发票将在3个工作日内由平台开具并发送至您的邮箱,请注意查收。<br>
+                3.购买线上产品服务,请在订单完成90天内,申请开票,逾期请联系客服,开具纸质发票。<br>
+                4.如需开具增值税专用发票,请联系客服,开票金额<200元发票邮寄费用自行承担。 <br>
                 客服电话:400-108-6670
             </div>
             <div class="weui-dialog__ft">

+ 6 - 5
src/jfw/modules/app/src/web/templates/invoice/invoicing.html

@@ -101,7 +101,8 @@
             </div>
         </div>
         <!-- 底部按钮 -->
-        <div class="j-footer">
+        <div class="j-footer" style="box-shadow: unset;">
+            <p style="text-align: justify;font-size: .26rem;color: #9B9CA3;padding: 0.24rem">您申请的发票将在3个工作日内由平台开具并发送至您的邮箱,请注意查收。</p>
             <div class="j-button-group">
                 <button class="j-button-confirm" disabled>提交</button>
             </div>
@@ -114,10 +115,10 @@
             <!-- <div class="weui-dialog__hd"></div> -->
             <div class="weui-dialog__bd" style="text-align:justify;font-size: .32rem;line-height: .48rem;">
                 开票规则:<br>
-                1.自订单完成后90天内,可在线上提交发票申请,开具为电子发票。<br>
-                2.超过订单完成90天后,发票需联系客服人员线下开具,开具为纸质发票。<br>
-                3.电子发票开具成功后,自订单完成后90天内可更换一次发票内容(纸质发票需联系客服)<br>
-                4.电子发票申请后在48小时内开具,纸质发票具体时间需联系客服。 <br>
+                1.平台提供电子普通发票,您可点击“我的订单-开发票”,开票内容统一为“信息技术服务”。<br>
+                2.您申请的发票将在3个工作日内由平台开具并发送至您的邮箱,请注意查收。<br>
+                3.购买线上产品服务,请在订单完成90天内,申请开票,逾期请联系客服,开具纸质发票。<br>
+                4.如需开具增值税专用发票,请联系客服,开票金额<200元发票邮寄费用自行承担。 <br>
                 客服电话:400-108-6670
             </div>
             <div class="weui-dialog__ft">

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

@@ -37,119 +37,28 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
 {{include "/big-member/commonjs.html"}}
 <script>
-  // 客服地址分流
-    let typeModel = JSON.stringify({
-      type: 'APP',
-      isFind: true
-    })
     sessionStorage.removeItem('conversation-login-clear')
+    /**
+     * 前往剑鱼客服
+     */
     function getCustomerUrl () {
       $.post({
         url: '/jyapi/social/obtainShunt',
         contentType: 'application/json',
-        data: typeModel,
+        data: JSON.stringify({
+          type: 'APP',
+          isFind: true
+        }),
         success: function(res) {
-          if (res && res.error_code === 0) {
-            // 分流
-            if (res.data.isShunt) {
-              if (res.data.url !== '') {
-                if (!res.data.isOld) {
-                  location.href = res.data.url
-                }
-              } else {
-                typeModel = JSON.stringify({
-                  type: 'APP',
-                  isFind: false
-                })
-                getCustomerUrl()
-              }
-            } else {
-              if(res.data.url) {
-                if (!res.data.isOld) {
-                  location.href = res.data.url
-                }
-              }
-            }
+          if (res && res.data && res.data.url) {
+            location.href = res.data.url
+            return
           }
         }
       })
     }
     getCustomerUrl()
 </script>
-<script>
-    $.get('/jyapp/front/app/sobot?t='+new Date().getTime())
-    /* 智齿客服 */
-    var ua = navigator.userAgent
-    var isMobile = !!ua.match(/AppleWebKit.*Mobile.*/)
-    var isWx = ua.toLowerCase().indexOf('micromessenger') !== -1
-    var nowPlatform = 'pc'
-    nowPlatform = isMobile ? 'h5' : nowPlatform
-    nowPlatform = isWx ? 'wxh5' : nowPlatform
-    try {
-        JyObj.getVersion()
-        nowPlatform = 'app'
-    } catch (e) {
-        // console.log('no app')
-    }
-
-    if (isMobile) {
-        $("#zc__sdk__sys__btn").hide();
-        window.onmessage = function(e){
-            if(e&&e.data){
-                const {name,data} = JSON.parse(e.data);
-                if(name==='zc_post_message'){
-                    const {action,} = data;
-                    switch(data.action){
-                        case 'chat_collapse_window':
-                            window.history.back()
-                            break;
-                    }
-                }
-            }
-        };
-    }
-
-    try {
-        (function (w, d, e, x) {
-            w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-            x = d.createElement('script');
-            x.async = true;
-            x.id = 'zhichiScript';
-            // wxh5、app、pc
-            x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-            d.body.appendChild(x);
-        })(window, document, 'zc');
-    } catch (e) {
-        console.log('error: ',e)
-    }
-
-    $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-        console.log(r, 'r')
-        var ajaxUserInfo = {
-            headImage: '',
-            nickName: '默认昵称',
-            userId: '',
-        }
-
-        if (r) {
-            Object.keys(ajaxUserInfo).forEach(function (v) {
-                if (r[v] && r[v] !== '') {
-                    ajaxUserInfo[v] = r[v]
-                }
-            })
-        }
-
-        zc('config', {
-            top_bar_flag: 0,
-            auto_expand: true,
-            show_face: 1,
-            async: 1,
-            photo_flag: false,
-            partnerid: ajaxUserInfo.userId,
-            face: ajaxUserInfo.headImage
-        })
-    })
-</script>
 </body>
 
 </html>

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

@@ -107,7 +107,7 @@
 		</div>
 		<div class="pass code">
 			<lable>验证码</lable>
-			<input type="tel" id="identCode"/>
+			<input type="tel" id="identCode" maxlength="6"/>
 			<img class="closeQc" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/cancel.png?v={{Msg "seo" "version"}}"/>
 			<span id="sendIdentCode">获取验证码</span>
 		</div>

+ 0 - 58
src/jfw/modules/app/src/web/templates/me/mine.html

@@ -409,64 +409,6 @@
             })
         }
     </script>
-    <script>
-        function getOfflineMessageCount () {
-            try {
-                var nowPlatform = 'app';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-                    // wxh5、app、pc
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    console.log(r, 'r')
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    console.log('获取未读消息')
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".badge-number").text(omc).show()
-                        } else {
-                            $(".badge-number").hide()
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
-        }
-        getOfflineMessageCount()
-    </script>
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/me/js/mine.js?v={{Msg "seo" "version"}}'></script>
     {{include "/common/baiducc.html"}}
 

+ 0 - 62
src/jfw/modules/app/src/web/templates/me/notice.html

@@ -226,68 +226,6 @@
             FastClick.attach(document.body);
         }, false);
     }
-    function getOfflineMessageCount () {
-        try {
-            var nowPlatform = 'app';
-            (function (w, d, e, x) {
-                w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                x = d.createElement('script');
-                x.async = true;
-                x.id = 'zhichiScript';
-                x.className="zhiCustomBtn";
-                // wxh5、app、pc
-                x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                d.body.appendChild(x);
-            })(window, document, 'zc');
-            $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                console.log(r, 'r')
-                var ajaxUserInfo = {
-                    headImage: '',
-                    nickName: '默认昵称',
-                    userId: '',
-                }
-
-                if (r) {
-                    Object.keys(ajaxUserInfo).forEach(function (v) {
-                        if (r[v] && r[v] !== '') {
-                            ajaxUserInfo[v] = r[v]
-                        }
-                    })
-                }
-
-                zc('config', {
-                    custom:true,
-                    top_bar_flag: 0,
-                    auto_expand: false,
-                    show_face: 1,
-                    photo_flag: false,
-                    partnerid: ajaxUserInfo.userId,
-                    face: ajaxUserInfo.headImage
-                })
-                console.log('获取未读消息')
-                zc('receive_message',function(res){
-                    console.log(res, 'res receive_message')
-                })
-                zc('zhichiReceive',function(res){
-                    console.log(res, 'res zhichiReceive')
-                })
-                zc("offline_message_count",function(res){
-                    console.log(res, 'offline_message_count')
-                    if (res && res.size && res.size > 0) {
-                        var omc = res.size > 99 ? '99+' : res.size
-                        $("#msg-count").attr('data-badge-number', omc).show()
-                        $(".app-layout-content-b.no-message").removeClass('no-message')
-                    } else {
-                        $("#msg-count").removeAttr('data-badge-number')
-                        $(".app-layout-content-b").addClass('no-message')
-                    }
-                })
-            })
-        } catch (e) {
-            console.log('error: ',e)
-        }
-    }
-    getOfflineMessageCount()
 </script>
 <script type="text/javascript">
     localStorage.removeItem("redSpotLastAjaxTime");

+ 139 - 48
src/jfw/modules/app/src/web/templates/staticpage/privacy_rules.html

@@ -73,11 +73,11 @@
                     <h3 class="title">剑鱼标讯隐私政策</h3>
                     <p style="font-size: 18px;text-align: center;">引言</p>
                     <p style="margin: 14px 0;">
-                        更新日期:2022年6月2
+                        更新日期:2022年9月23
                         <br>
-                        生效日期:2022年6月2
+                        生效日期:2022年9月27
                     </p>
-                    <p style="text-indent: 20px;"><span  id="companyName">北京剑鱼信息技术有限公司</span>(“我们”)非常重视用户的隐私和个人信息保护。您在使用我们的产品与/或服务(“剑鱼标讯”)时,我们可能会收集和使用您的相关信息。我们希望通过《剑鱼标讯隐私政策》(“本隐私政策”)向您说明我们在您使用我们的产品与/或服务时如何收集、使用、保存、共享和转让这些信息,以及我们为您提供的访问、更新、删除和保护这些信息的方式。
+                    <p style="text-indent: 20px;"><span  id="companyName">北京剑鱼信息技术有限公司</span>(以下简称“我们”)非常重视用户的隐私和个人信息保护。您在使用我们的产品与/或服务(“剑鱼标讯”)时,我们可能会收集和使用您的相关信息。我们希望通过《剑鱼标讯隐私政策》(以下简称“本隐私政策”)向您说明我们在您使用我们的产品与/或服务时如何收集、使用、保存、共享和转让这些信息,以及我们为您提供的访问、更新、删除和保护这些信息的方式。
                     </p>
                     <p style="text-indent: 20px;">一、我们如何收集和使用您的个人信息</p>
                     <p style="text-indent: 20px;">二、我们如何使用 Cookies 和同类技术</p>
@@ -93,40 +93,63 @@
                     <p style="text-indent: 20px;">如对本隐私政策或相关事宜有任何问题,您可随时通过拨打客服电话400-108-6670或发送邮件至jy@topnet.net.cn等多种方式与我们联系 。</p>
                     <br>
                     <p style="font-size: 18px;">一、我们如何收集和使用您的个人信息</p>
-                     <p style="text-indent: 20px;text-align: left;word-break:break-all;">个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。本隐私政策中涉及的个人信息包括:基本信息(包括个人姓名、住址、个人电话号码、电子邮箱);个人身份信息(包括身份证等);网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案);面部识别特征;个人财产信息(交易和消费记录、以及余额、优惠券等虚拟财产信息);通讯录;个人上网记录(包括网站浏览记录、软件使用记录、点击记录);个人常用设备信息(包括硬件型号、设备MAC地址、操作系统类型、软件列表唯一设备识别码(如IMEI/android ID/IDFA/OPENUDID/GUID、SIM卡IMSI信息等在内的描述个人常用设备基本情况的信息));个人位置信息(包括行程信息、精准定位信息、住宿信息、经纬度等);</p>
-                     <p style="text-indent: 20px;">个人敏感信息是指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息,本隐私政策中涉及的个人敏感信息包括:您的财产信息(包括交易记录及余额、优惠券等虚拟财产信息);面部识别特征;个人身份信息(包括身份证);网络身份识别信息(包括账号、邮箱地址及与前述有关的密码口令的组合);其他信息(包括通讯录、行程信息、网页浏览记录、住宿信息、精准定位信息)。</p>
-                     <p style="text-indent: 20px;">在您使用剑鱼标讯服务时,我们需要或可能需要收集与使用的您的个人信息分为如下两类:</p>
-                     <p style="text-indent: 20px;">a) 为了向您提供剑鱼标讯服务基本功能,所需要您授权我们收集与使用的必要的个人信息。如您未提供此类必要信息,您将无法正常使用(或继续正常使用)剑鱼标讯服务;</p>
-                     <p style="text-indent: 20px;">b) 为了优化您的使用体验,我们将向您提供剑鱼标讯服务的附加功能,您可以自主选择是否授权我们收集使用的个人信息。如您未提供此类信息,您将无法使用(或继续正常使用)剑鱼标讯服务的对应附加功能,但您仍可以继续使用剑鱼标讯服务的基本功能。</p>
+                     <p style="text-indent: 20px;text-align: left;word-break:break-all;">为了您可以正常使用我们的产品和服务,我们会在下列情形下收集您的相关个人信息:</p>
+                     <p style="text-indent: 18px;text-align: left;word-break:break-all;">1、您向我们提供的信息</p>
+                     <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                       您在注册剑鱼标讯账号或使用我们的产品和服务时,向我们提供的相关个人信息(姓名、身份证信息、电话号码、电子邮件)、网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案)、个人财产信息(交易和消费记录、以及余额、优惠券等虚拟财产信息)。
+                     </p>
+                     <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                       您通过我们的服务向其他方提供的共享信息,以及您使用我们的产品和服务时所提供、形成或储存的信息。
+                     </p>
+                     <p style="text-indent: 18px;text-align: left;word-break:break-all;">2、我们收集到的您的信息</p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      设备信息。为了提供更好的产品和服务并改善用户体验,我们会收集您的设备属性信息(包括硬件型号、设备MAC地址、操作系统类型、软件列表唯一设备识别码(如IMEI/Android ID/IDFA/OPENUDID/GUID、SIM卡IMSI信息等在内的描述个人常用设备基本情况的信息)),设备所在位置相关信息(如IP 地址、GPS位置、蓝牙或WIFI信号获得的位置信息等精准定位信息、经纬度信息)、设备连接信息(浏览器的类型、电信运营商、使用的语言)。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      日志信息。当您使用剑鱼标讯服务时,我们会自动收集您对我们服务的使用情况,作为服务日志保存,包括浏览、搜索查询、招标订阅、关注企业、关注项目、发票信息、企业服务订单记录、以及IP地址、浏览器类型、访问日期和时间。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      位置信息。当您开启设备定位功能并使用我们基于位置提供的相关服务时,我们可能会收集和处理有关您实际所在位置的信息。我们会使用各种技术进行定位,这些技术包括 IP地址、GPS以及能够提供相关信息的其他传感器(比如可能会为我们提供附近设备、WIFI接入点和基站的信息)。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      本地存储。我们可能会使用浏览器网络存储等机制(包括HTML5)和APP应用数据缓存,收集您设备上的信息并进行本地存储。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      Cookie和同类技术。我们可能会利用 Cookie 和同类技术(例如 Beacon、Proxy 等技术)了解您的偏好和使用习惯,进行咨询或数据分析,以改善产品服务及用户体验。我们承诺,我们不会将 Cookie用于本《隐私政策》所述目的之外的任何其他用途。您可以选择通过修改浏览器设置的方式拒绝Cookie,但这一操作在某些情况下可能会影响您安全访问和使用依赖于Cookie的剑鱼标讯提供的服务或功能。
+                    </p>
+                     <p style="text-indent: 30px;">您在使用剑鱼标讯服务时,我们需要或可能需要收集与使用的您的个人信息分为如下两类:</p>
+                     <p style="text-indent: 30px;">a) 为了向您提供剑鱼标讯服务基本功能,所需要您授权我们收集与使用的必要的个人信息。如您未提供此类必要信息,您将无法正常使用(或继续正常使用)剑鱼标讯服务;</p>
+                     <p style="text-indent: 30px;">b) 为了优化您的使用体验,我们将向您提供剑鱼标讯服务的附加功能,您可以自主选择是否授权我们收集使用的个人信息。如您未提供此类信息,您将无法使用(或继续正常使用)剑鱼标讯服务的对应附加功能,但您仍可以继续使用剑鱼标讯服务的基本功能。</p>
                     <br>
                     <p style="font-size: 16px;">您了解并同意,以下信息不适用本《隐私权政策》:</p>
                     <p style="text-indent: 20px;">a) 您在使用剑鱼标讯服务时,对外公布或提供的信息;</p>
                     <p style="text-indent: 20px;">b) 任何国家官方网站、门户网站及行业性门户网站上的公开信息。</p>
                     <p style="font-size: 16px;">(一)为了实现剑鱼标讯服务的下述基本功能,我们将收集和使用您的如下个人信息:</p>
                     <p style="font-size: 14px;">1、帮助您成为我们的注册用户</p>
-                    <p style="text-indent: 20px;">我们通过剑鱼标讯平台账号(以下简称“账号”)为您提供服务,为成为注册用户,您需要提供手机号码、微信号,拟使用的用户名和密码,用于创建账号。</p>
+                    <p style="text-indent: 20px;">我们通过剑鱼标讯平台账号(以下简称“账号”)为您提供服务,为成为注册用户,您需要提供手机号码、微信授权,拟使用的用户名和密码,用于创建账号。</p>
                     <p style="font-size: 14px;">2、服务信息展示</p>
-                    <p style="text-indent: 20px;">在您使用剑鱼标讯服务过程中,为识别账号异常状态、了解产品适配性、向您提供更契合您需求的页面展示和搜索结果,我们可能会自动收集您的使用情况并存储为网络日志信息,包括:</p>
-                    <p>设备信息:我们会根据您在使用剑鱼标讯服务中的具体操作,接收并记录您所使用的设备相关信息(包括设备型号、MAC地址、操作系统版本、设备设置、唯一设备标识符)、设备所在位置相关信息(包括您授权的GPS位置)、您在设备上的操作日志信息。</p>
-                    <p>服务日志信息:当您使用剑鱼标讯服务时,我们会自动收集您对我们服务的详细使用情况,作为服务日志保存,包括浏览、搜索查询、招标订阅、关注企业、关注项目、发票信息、企业服务订单记录、以及IP地址、浏览器类型、访问日期和时间。</p>
+                    <p style="text-indent: 20px;">在您使用剑鱼标讯服务过程中,为识别账号异常状态、了解产品适配性、向您提供更契合您需求的页面展示和搜索结果,我们可能会收集您的使用情况并存储为网络日志信息。</p>
                     <p style="text-indent: 20px; ">为了优化产品的使用体验,我们需要收集应用在后台状态下的用户MAC地址信息,用于获取用户的手机网络信息,检查手机网络是否通畅,以解答用户在使用产品过程中遇到的各种操作问题。</p>
                     <p style="text-indent: 20px;">请注意,单独的设备信息、服务日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将这类信息进行匿名处理。</p>
-                    <p style="text-indent: 20px;">为给您提供定制化的服务,我们将通过使用您的订阅、关注设置,向您推送您所需要信息。如您不接受定向推送功能,您可以直接在“我的-设置”功能页面中关闭“推送消息设置”按钮。</p>
+                    <p style="text-indent: 20px;">为给您提供更好的服务,我们将通过使用您的订阅、关注设置,向您推送所需要的信息。如您不接受消息推送功能,您可以直接在“APP-我的-设置-推送设置”中关闭。</p>
                     <p style="font-size: 14px;">3、帮您提交及管理订单</p>
-                    <p style="text-indent: 20px;">当您在我们的产品及/或服务中订购增值服务时(如企业实名认证服务、超级订阅服务、数据导出服务、商机洞察服务、商机管理服务),我们会通过系统为您生成购买该增值服务的订单,同时该订单中会载明您所订购的服务信息、具体订单号、订单创建时间、您支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息、提供客服与售后服务及其他我们明确告知的目的。</p>
+                    <p style="text-indent: 20px;">当您在我们的产品及/或服务中订购增值服务时(如企业认证服务、超级订阅服务、数据导出服务、大会员服务、商机管理服务),我们会通过系统为您生成购买该增值服务的订单,同时该订单中会载明您所订购的服务信息、具体订单号、订单创建时间、您支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息、提供客服与售后服务及其他我们明确告知的目的。</p>
                     <p style="text-indent: 20px;">如您申请发票,还需提供以下信息:发票抬头、纳税人识别号、注册地址、注册电话、开户银行、银行账号、个人姓名、手机号、所属地区、详细地址、邮箱,以及您根据您的开票需求提供的更多信息,如购买方信息。</p>
                     <p style="font-size: 14px;">4、帮助您完成支付</p>
                     <p style="text-indent: 20px;">为完成增值服务订单支付,您需要提供第三方支付平台(支付宝、微信支付)账户并选择付款方式,我们会将您的用户名、对应的第三方支付平台账户名、订单支付相关信息、订单安全相关设备信息及其他反洗钱法律要求的必要信息通过在应用程序中嵌入的SDK等方式与第三方支付平台共享,前述第三方支付平台将获得您连接网络的权限、手机信息权限,并获取网络状态和wifi状态。</p>
-                    <p style="font-size: 14px;">5、响应您的客服需求</p>
+                    <p style="font-size: 14px;">5、帮助您完成企业实名认证</p>
+                    <p style="text-indent: 20px;">是指符合一定条件的用户可以对企业剑鱼标讯账号申请企业实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供该企业名称、营业执照图片、社会统一信用代码,法定代表人姓名、身份证正反面图片、身份证号、对公账号、对公账号开户行等信息,以便我们对认证企业进行审核。</p>
+                    <p style="font-size: 14px;">6、响应您的客服需求</p>
                     <p style="text-indent: 20px;">当您与我们联系或提出售中售后、争议纠纷处理申请时,为了保障您的账号及系统安全,我们需要核验您的用户身份。为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会保存您与我们的通信/通话记录及相关内容(包括账号信息、订单信息、您为了证明相关事实所提供的其他信息,或您留下的联系方式信息),如果您针对具体订单进行咨询、投诉的,我们会留存您的账号信息和订单信息。</p>
                     <br>
                     <p style="font-size: 16px;">(二)为了实现剑鱼标讯服务的某些附加功能,我们需要获取您的如下信息及对应设备权限。您拒绝提供个人信息的,不影响您使用剑鱼标讯基础服务。</p>
-                    <p style="font-size: 14px;">1、图片获取、存储与上传功能</p>
-                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为实现“电子合同”、“实名认证”、“企业认证”功能,我们需要获取您设备的“相机-拍摄”权限;为实现上传图片、上传头像的功能,我们需要获取您设备的“存储-读取外置存储器”权限;为实现保存图片的功能,我们需要获取您设备的“写入外置存储器”权限。</p>
-                    <p style="font-size: 14px;">2、个人实名认证服务</p>
-                    <p style="text-indent: 20px;">用户可以对个人剑鱼标讯账号申请个人实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供姓名、身份证正反面图片,身份证号等信息,以便我们对认证个人进行审核。</p>
-                    <p style="font-size: 14px;">3、企业实名认证服务</p>
-                    <p style="text-indent: 20px;">是指符合一定条件的用户可以对企业剑鱼标讯账号申请企业实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供该企业名称、营业执照图片、社会统一信用代码,法定代表人姓名、身份证正反面图片、身份证号、对公账号、对公账号开户行等信息,以便我们对认证企业进行审核。</p>
+                    <p style="font-size: 14px;">1、图片获取、存储与上传权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为实现“企业认证”功能,我们需要获取您设备的“相机-拍摄”权限;为实现上传图片的功能,我们需要获取您设备的“存储-读取外置存储器”权限;为实现保存图片的功能,我们需要获取您设备的“写入外置存储器”权限。</p>
+                    <p style="font-size: 14px;">2、存储权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,我们为您提供标讯信息附件下载服务,我们需要您授权我们获取您的本地文件读写/存储权限,以便您能正常通过手机下载标讯信息相关的附件并完成查看(仅限Android系统)。</p>
+                    <p style="font-size: 14px;">3、位置权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为了给您带来个性化的标讯项目信息推荐和展示,需要向我们提供您的地理位置信息,因此我们需要获取您设备的“位置(访问精准定位、访问粗略位置)”权限。同时请您知悉,该功能所依赖的具体地理位置及分析均通过我们嵌入的百度定位SDK的坐标体系实现,上述SDK将获取您的网络状态及网络定位作为辅助定位依据,访问您的位置信息。有关百度定位SDK的详细说明请您阅读本隐私政策的第四条第4项【第三方SDK服务清单】。
+                      我们向您承诺,我们不会将我们获取的关于您在各时段的位置信息进行结合以判断您的行踪轨迹。</p>
                     <br>
                     <p style="font-size: 16px;">(三)您充分知晓,以下情形中,我们收集、使用个人信息无需征得您的授权同意:</p>
                     <p>1、与国家安全、国防安全有关的;</p>
@@ -164,6 +187,98 @@
                     <p>(8)基于符合法律法规的社会公共利益而使用。</p>
                     <p>2、我们可能会将您的个人信息与我们的关联方共享。但我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束。我们的关联方如要改变个人信息的处理目的,将再次征求您的授权同意。</p>
                     <p>3、我们可能会向合作伙伴等第三方共享您的订单信息、账户信息、设备信息以及位置信息,以保障为您提供的服务顺利完成。但我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。 </p>
+                    <p>4、第三方SDK服务清单</p>
+                    <p style="text-indent: 20px;">
+                      在某些特定业务场景下,为了提高业务处理能力或其他功能方面的考虑,我们可能会使用有能力的第三方服务商提供的软件服务工具包(简称SDK)来为您提供服务。第三方SDK可能会收集您的个人信息,比如个人常用设备信息(包括硬件序列号、硬件型号、设备MAC地址、操作系统类型、操作系统版本、软件列表、设备唯一设备识别码、网络状态、运营商等。
+                    </p>
+                    <p style="text-indent: 20px;">
+                      我们将严格监控第三方SDK按照我们在《隐私政策》中与您的约定去收集和使用您的个人信息,并采取适当的安全技术和管理措施保障您的个人信息安全。我们也会对接入的第三方软件工具开发包(SDK)进行严格的安全监测,以保护您的个人信息安全。
+                    </p>
+                    <p style="text-indent: 20px;">
+                      因此,我们强烈建议您仔细阅读该第三方SDK的隐私政策,就像阅读我们的隐私政策一样。我们对接入的相关第三方SDK在以下目录中列明,您可以通过相关链接查看第三方的数据使用和保护规则。这些第三方SDK包括:
+                    </p>
+                    <p style="text-indent: 20px;">
+                      1、百度定位
+                    </p>
+                    <p style="padding-left: 30px;word-break: break-all;">
+                      SDK官网:http://lbsyun.baidu.com/index.php?title=android-locsdk
+                      <br>所属主体:北京百度网讯科技有限公司
+                      <br>使用目的:根据位置信息,为用户提供所需的标讯信息。
+                      <br>收集的信息类型:设备信息(IMEI/Mac/android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/)、经纬度信息、位置信息。
+                      <br>收集方式:SDK本机采集。
+                      <br>隐私政策链接:https://map.baidu.com/zt/client/privacy/index.html
+                    </p>
+                  <p style="text-indent: 20px;">
+                    2、友盟+
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://devs.umeng.com/
+                    <br>所属主体:友盟同欣(北京)科技有限公司
+                    <br>使用目的:分享功能,微信分享、QQ分享、移动统计,app统计分析、应用性能监控,应用崩溃等信息捕获。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/地理位置信息)。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:https://www.umeng.com/page/policy
+                  </p>
+                  <p style="text-indent: 20px;">
+                    3、小米推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://dev.mi.com/console/appservice/push.html
+                    <br>所属主体:小米移动软件有限公司
+                    <br>使用目的:为小米手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:https://dev.mi.com/console/doc/detail?pId=1822
+                  </p>
+                  <p style="text-indent: 20px;">
+                    4、华为推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://developer.huawei.com/consumer/cn/hms/huawei-pushkit
+                    <br>所属主体:华为技术有限公司
+                    <br>使用目的:为华为手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:
+                    https://developer.huawei.com/consumer/cn/doc/start/agreement-0000001052728169
+                  </p>
+                  <p style="text-indent: 20px;">
+                    5、OPPO推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:
+                    https://open.oppomobile.com/new/introduction?page_name=oppopush
+                    <br>所属主体:广东欢太科技有限公司
+                    <br>使用目的:为OPPO手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:
+                    https://open.oppomobile.com/new/developmentDoc/info?id=10288
+                  </p>
+                  <p style="text-indent: 20px;">
+                    6、支付宝支付
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://www.alipay.com/
+                    <br>所属主体:支付宝(中国)网络技术有限公司
+                    <br>使用目的:帮助用户在应用内使用支付宝支付。
+                    <br>收集的信息类型:设备信息(IMEI、IDFA、Android ID、MAC地址、OAID等相关信息)、应用信息(应用崩溃信息、通知开关状态、软件列表等相关信息)、设备参数及系统信息(设备类型、设备型号、操作系统及硬件相关信息)。
+                    <br>收集方式:SDK本机采集,不涉及数据共享。
+                    <br>隐私政策链接:
+                    https://render.alipay.com/p/yuyan/180020010001196791/preview.html?agreementId=AG00000132
+                  </p>
+                  <p style="text-indent: 20px;">
+                    7、微信支付
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://pay.weixin.qq.com/index.php/core/home/login
+                    <br>所属主体:财付通支付科技有限公司
+                    <br>使用目的:帮助用户在应用内使用微信支付。
+                    <br>收集的信息类型:设备信息(IMEI、IDFA、Android ID、MAC地址、OAID等相关信息)、应用信息(应用崩溃信息、通知开关状态、软件列表等相关信息)、设备参数及系统信息(设备类型、设备型号、操作系统及硬件相关信息)。
+                    <br>收集方式:SDK本机采集,不涉及数据共享。
+                    <br>隐私政策链接:
+                    https://posts.tenpay.com/posts/18ed0968618e3db204d4931651708953.html
+                  </p>
                     <br>
                     <p style="font-size: 16px;">(二)转让</p>
                     <p style="text-indent: 20px;">我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</p>
@@ -182,7 +297,7 @@
                     <p>1. 我们具有明确的职权划分以及成型的访问控制机制,将有权接触到个人信息的工作人员限制在最小必要的范围之内;</p>
                     <p>2. 我们同时采用了加密技术,提高个人信息的安全性,对于个人敏感信息,我们将一律通过https加密协议传输,您的密码、口令在存储时将被额外加密;</p>
                     <p style="text-indent: 20px;">互联网环境并非百分之百安全,我们将尽力确保或担保您发送给我们的任何信息的安全性。如果我们的物理、技术或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改或毁坏,从而导致您的合法权益受损,我们将承担相应的法律责任。</p>
-                    <p style="text-indent: 20px;">在不幸发生个人安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话或推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。</p>
+                    <p style="text-indent: 20px;">在不幸发生个人安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话或消息通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。</p>
                     <p style="text-indent: 20px;">同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。</p>
                     <br>
                     <p style="font-size: 18px;">五、您如何管理您的个人信息</p>
@@ -207,8 +322,8 @@
                     <p style="text-indent: 20px;">请您理解,每个业务功能需要一些基本的个人信息才能得以完成,当您撤回同意或授权后,我们无法继续为您提供撤回同意或授权所对应的服务,也不再处理您相应的个人信息。但您撤回同意或授权的决定,不会影响此前基于您的授权而开展的个人信息处理。</p>
                     <p style="font-size: 16px;">4、注销账户</p>
                     <p style="text-indent: 20px;">您可以通过删除信息、关闭设备功能、在剑鱼标讯网站或软件中进行隐私设置等方式改变您授权我们继续收集个人信息的范围或撤回您的授权。您也可以通过注销账户的方式,撤回我们继续收集您个人信息的全部授权。</p>
-                    <p style="font-size: 16px;">5、如果您不想接受我们给您发送的推送信息,您随时可通过以下方式取消:</p>
-                    <p style="text-indent: 20px;">您可以通过移动端APP“设置-推送消息设置”设置是否接受我们通过“通知”推给您的信息。</p>
+                    <p style="font-size: 16px;">5、如果您不想接受我们给您发送的标讯消息通知,您随时可通过以下方式取消:</p>
+                    <p style="text-indent: 20px;">您可以通过移动端APP“设置-推送设置”设置是否接受我们通过“通知”推给您的信息。</p>
                     <p style="font-size: 16px;">6、响应您的请求</p>
                     <p style="text-indent: 20px;">如果您无法通过上述方式访问、更正或删除您的个人信息,或您需要访问、更正或删除您在使用我们产品与/或服务时所产生的其他个人信息,或您认为剑鱼标讯存在任何违反法律法规或与您关于个人信息的收集或使用的约定,您均可以发送电子邮件至jy@topnet.net.cn或通过本隐私政策中的其他方式与我们联系。为了保障安全,我们可能需要您提供书面请求,或提供您的身份证明文件,我们将在收到您反馈并验证您的身份后的15天内答复您的请求。对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。</p>
                     <p>在以下情形中,按照法律法规要求,我们将无法响应您的请求:</p>
@@ -235,30 +350,6 @@
                     <p>我们设立了个人信息保护专职部门,剑鱼标讯客服会将您的需求向其转达。</p>
                     <p>剑鱼标讯客服邮箱:jy@topnet.net.cn</p>
                     <br>
-                    <p style="font-size: 18px;">附录:关于第三方软件开发工具包(SDK)的使用说明</p>
-                    <p>我们仅会出于合法、正当、必要、特定、明确的目的获取您的信息,并将审慎评估对于第三方软件开发工具包(SDK)的使用,同时对于这些第三方软件开发工具包(SDK)的安全保障能力进行综合评估,尽最大可能保护数据安全,因第三方会动态修改权限获取,我们会尽可能同步并告知您。</p>
-                    <p>(1)百度地图</p>
-                    <p style="text-indent: 20px;">SDK用途:获取用户的位置信息(城市),根据地域提供更精准的服务。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息,位置权限</p>
-                    <p>(2)小米</p>
-                    <p style="text-indent: 20px;">SDK用途:用于向小米手机用户推送产品资讯和活动信息。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <p>(3)华为</p>
-                    <p style="text-indent: 20px;">SDK用途:用于向华为手机用户推送产品资讯和活动信息。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <p>(4)友盟</p>
-                    <p style="text-indent: 20px;">SDK用途:用于平台信息统计,推送应用优惠活动信息。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <p>(5)腾讯开放平台</p>
-                    <p style="text-indent: 20px;">SDK用途:用于人脸识别,用户进行实名认证。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <p>(6)OPPO</p>
-                    <p style="text-indent: 20px;">SDK用途:用于向OPPO手机用户推送产品资讯和活动信息。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <p>(7)支付宝</p>
-                    <p style="text-indent: 20px;">SDK用途:用于调用支付宝实名认证信息。</p>
-                    <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                    <br>
                     <p style="font-size: 18px;">附件:《剑鱼标讯账户注销须知》</p>
                     <p>亲爱的剑鱼标讯用户:</p>
                     <p style="text-indent: 20px;">您在申请注销流程中点击同意前,应当认真阅读《剑鱼标讯账户注销须知》(以下称“《注销须知》”)。</p>

+ 139 - 48
src/jfw/modules/app/src/web/templates/staticpage/privacy_rules_client.html

@@ -66,11 +66,11 @@
                 <h3 class="title">剑鱼标讯隐私政策</h3>
                 <p style="font-size: 18px;text-align: center;">引言</p>
                 <p style="margin: 14px 0;">
-                    更新日期:2022年6月2
+                        更新日期:2022年9月23
                     <br>
-                    生效日期:2022年6月2
+                        生效日期:2022年9月27
                 </p>
-                <p style="text-indent: 20px;"><span  id="companyName">北京剑鱼信息技术有限公司</span>(“我们”)非常重视用户的隐私和个人信息保护。您在使用我们的产品与/或服务(“剑鱼标讯”)时,我们可能会收集和使用您的相关信息。我们希望通过《剑鱼标讯隐私政策》(“本隐私政策”)向您说明我们在您使用我们的产品与/或服务时如何收集、使用、保存、共享和转让这些信息,以及我们为您提供的访问、更新、删除和保护这些信息的方式。
+                    <p style="text-indent: 20px;"><span  id="companyName">北京剑鱼信息技术有限公司</span>(以下简称“我们”)非常重视用户的隐私和个人信息保护。您在使用我们的产品与/或服务(“剑鱼标讯”)时,我们可能会收集和使用您的相关信息。我们希望通过《剑鱼标讯隐私政策》(以下简称“本隐私政策”)向您说明我们在您使用我们的产品与/或服务时如何收集、使用、保存、共享和转让这些信息,以及我们为您提供的访问、更新、删除和保护这些信息的方式。
                 </p>
                 <p style="text-indent: 20px;">一、我们如何收集和使用您的个人信息</p>
                 <p style="text-indent: 20px;">二、我们如何使用 Cookies 和同类技术</p>
@@ -86,40 +86,63 @@
                 <p style="text-indent: 20px;">如对本隐私政策或相关事宜有任何问题,您可随时通过拨打客服电话400-108-6670或发送邮件至jy@topnet.net.cn等多种方式与我们联系 。</p>
                 <br>
                 <p style="font-size: 18px;">一、我们如何收集和使用您的个人信息</p>
-                <p style="text-indent: 20px;text-align: left;word-break:break-all;">个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。本隐私政策中涉及的个人信息包括:基本信息(包括个人姓名、住址、个人电话号码、电子邮箱);个人身份信息(包括身份证等);网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案);面部识别特征;个人财产信息(交易和消费记录、以及余额、优惠券等虚拟财产信息);通讯录;个人上网记录(包括网站浏览记录、软件使用记录、点击记录);个人常用设备信息(包括硬件型号、设备MAC地址、操作系统类型、软件列表唯一设备识别码(如IMEI/android ID/IDFA/OPENUDID/GUID、SIM卡IMSI信息等在内的描述个人常用设备基本情况的信息));个人位置信息(包括行程信息、精准定位信息、住宿信息、经纬度等);</p>
-                <p style="text-indent: 20px;">个人敏感信息是指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息,本隐私政策中涉及的个人敏感信息包括:您的财产信息(包括交易记录及余额、优惠券等虚拟财产信息);面部识别特征;个人身份信息(包括身份证);网络身份识别信息(包括账号、邮箱地址及与前述有关的密码口令的组合);其他信息(包括通讯录、行程信息、网页浏览记录、住宿信息、精准定位信息)。</p>
-                <p style="text-indent: 20px;">在您使用剑鱼标讯服务时,我们需要或可能需要收集与使用的您的个人信息分为如下两类:</p>
-                <p style="text-indent: 20px;">a) 为了向您提供剑鱼标讯服务基本功能,所需要您授权我们收集与使用的必要的个人信息。如您未提供此类必要信息,您将无法正常使用(或继续正常使用)剑鱼标讯服务;</p>
-                <p style="text-indent: 20px;">b) 为了优化您的使用体验,我们将向您提供剑鱼标讯服务的附加功能,您可以自主选择是否授权我们收集使用的个人信息。如您未提供此类信息,您将无法使用(或继续正常使用)剑鱼标讯服务的对应附加功能,但您仍可以继续使用剑鱼标讯服务的基本功能。</p>
+                     <p style="text-indent: 20px;text-align: left;word-break:break-all;">为了您可以正常使用我们的产品和服务,我们会在下列情形下收集您的相关个人信息:</p>
+                     <p style="text-indent: 18px;text-align: left;word-break:break-all;">1、您向我们提供的信息</p>
+                     <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                       您在注册剑鱼标讯账号或使用我们的产品和服务时,向我们提供的相关个人信息(姓名、身份证信息、电话号码、电子邮件)、网络身份标识信息(包括系统账号、IP地址、邮箱地址及与前述有关的密码、口令、口令保护答案)、个人财产信息(交易和消费记录、以及余额、优惠券等虚拟财产信息)。
+                     </p>
+                     <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                       您通过我们的服务向其他方提供的共享信息,以及您使用我们的产品和服务时所提供、形成或储存的信息。
+                     </p>
+                     <p style="text-indent: 18px;text-align: left;word-break:break-all;">2、我们收集到的您的信息</p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      设备信息。为了提供更好的产品和服务并改善用户体验,我们会收集您的设备属性信息(包括硬件型号、设备MAC地址、操作系统类型、软件列表唯一设备识别码(如IMEI/Android ID/IDFA/OPENUDID/GUID、SIM卡IMSI信息等在内的描述个人常用设备基本情况的信息)),设备所在位置相关信息(如IP 地址、GPS位置、蓝牙或WIFI信号获得的位置信息等精准定位信息、经纬度信息)、设备连接信息(浏览器的类型、电信运营商、使用的语言)。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      日志信息。当您使用剑鱼标讯服务时,我们会自动收集您对我们服务的使用情况,作为服务日志保存,包括浏览、搜索查询、招标订阅、关注企业、关注项目、发票信息、企业服务订单记录、以及IP地址、浏览器类型、访问日期和时间。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      位置信息。当您开启设备定位功能并使用我们基于位置提供的相关服务时,我们可能会收集和处理有关您实际所在位置的信息。我们会使用各种技术进行定位,这些技术包括 IP地址、GPS以及能够提供相关信息的其他传感器(比如可能会为我们提供附近设备、WIFI接入点和基站的信息)。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      本地存储。我们可能会使用浏览器网络存储等机制(包括HTML5)和APP应用数据缓存,收集您设备上的信息并进行本地存储。
+                    </p>
+                    <p style="text-indent: 30px;text-align: left;word-break:break-all;">
+                      Cookie和同类技术。我们可能会利用 Cookie 和同类技术(例如 Beacon、Proxy 等技术)了解您的偏好和使用习惯,进行咨询或数据分析,以改善产品服务及用户体验。我们承诺,我们不会将 Cookie用于本《隐私政策》所述目的之外的任何其他用途。您可以选择通过修改浏览器设置的方式拒绝Cookie,但这一操作在某些情况下可能会影响您安全访问和使用依赖于Cookie的剑鱼标讯提供的服务或功能。
+                    </p>
+                     <p style="text-indent: 30px;">您在使用剑鱼标讯服务时,我们需要或可能需要收集与使用的您的个人信息分为如下两类:</p>
+                     <p style="text-indent: 30px;">a) 为了向您提供剑鱼标讯服务基本功能,所需要您授权我们收集与使用的必要的个人信息。如您未提供此类必要信息,您将无法正常使用(或继续正常使用)剑鱼标讯服务;</p>
+                     <p style="text-indent: 30px;">b) 为了优化您的使用体验,我们将向您提供剑鱼标讯服务的附加功能,您可以自主选择是否授权我们收集使用的个人信息。如您未提供此类信息,您将无法使用(或继续正常使用)剑鱼标讯服务的对应附加功能,但您仍可以继续使用剑鱼标讯服务的基本功能。</p>
                 <br>
                 <p style="font-size: 16px;">您了解并同意,以下信息不适用本《隐私权政策》:</p>
                 <p style="text-indent: 20px;">a) 您在使用剑鱼标讯服务时,对外公布或提供的信息;</p>
                 <p style="text-indent: 20px;">b) 任何国家官方网站、门户网站及行业性门户网站上的公开信息。</p>
                 <p style="font-size: 16px;">(一)为了实现剑鱼标讯服务的下述基本功能,我们将收集和使用您的如下个人信息:</p>
                 <p style="font-size: 14px;">1、帮助您成为我们的注册用户</p>
-                <p style="text-indent: 20px;">我们通过剑鱼标讯平台账号(以下简称“账号”)为您提供服务,为成为注册用户,您需要提供手机号码、微信号,拟使用的用户名和密码,用于创建账号。</p>
+                    <p style="text-indent: 20px;">我们通过剑鱼标讯平台账号(以下简称“账号”)为您提供服务,为成为注册用户,您需要提供手机号码、微信授权,拟使用的用户名和密码,用于创建账号。</p>
                 <p style="font-size: 14px;">2、服务信息展示</p>
-                <p style="text-indent: 20px;">在您使用剑鱼标讯服务过程中,为识别账号异常状态、了解产品适配性、向您提供更契合您需求的页面展示和搜索结果,我们可能会自动收集您的使用情况并存储为网络日志信息,包括:</p>
-                <p>设备信息:我们会根据您在使用剑鱼标讯服务中的具体操作,接收并记录您所使用的设备相关信息(包括设备型号、MAC地址、操作系统版本、设备设置、唯一设备标识符)、设备所在位置相关信息(包括您授权的GPS位置)、您在设备上的操作日志信息。</p>
-                <p>服务日志信息:当您使用剑鱼标讯服务时,我们会自动收集您对我们服务的详细使用情况,作为服务日志保存,包括浏览、搜索查询、招标订阅、关注企业、关注项目、发票信息、企业服务订单记录、以及IP地址、浏览器类型、访问日期和时间。</p>
+                    <p style="text-indent: 20px;">在您使用剑鱼标讯服务过程中,为识别账号异常状态、了解产品适配性、向您提供更契合您需求的页面展示和搜索结果,我们可能会收集您的使用情况并存储为网络日志信息。</p>
                 <p style="text-indent: 20px; ">为了优化产品的使用体验,我们需要收集应用在后台状态下的用户MAC地址信息,用于获取用户的手机网络信息,检查手机网络是否通畅,以解答用户在使用产品过程中遇到的各种操作问题。</p>
                 <p style="text-indent: 20px;">请注意,单独的设备信息、服务日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将这类信息进行匿名处理。</p>
-                <p style="text-indent: 20px;">为给您提供定制化的服务,我们将通过使用您的订阅、关注设置,向您推送您所需要信息。如您不接受定向推送功能,您可以直接在“我的-设置”功能页面中关闭“推送消息设置”按钮。</p>
+                <p style="text-indent: 20px;">为给您提供更好的服务,我们将通过使用您的订阅、关注设置,向您推送所需要的信息。如您不接受消息推送功能,您可以直接在“APP-我的-设置-推送设置”中关闭。</p>
                 <p style="font-size: 14px;">3、帮您提交及管理订单</p>
-                <p style="text-indent: 20px;">当您在我们的产品及/或服务中订购增值服务时(如企业实名认证服务、超级订阅服务、数据导出服务、商机洞察服务、商机管理服务),我们会通过系统为您生成购买该增值服务的订单,同时该订单中会载明您所订购的服务信息、具体订单号、订单创建时间、您支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息、提供客服与售后服务及其他我们明确告知的目的。</p>
+                    <p style="text-indent: 20px;">当您在我们的产品及/或服务中订购增值服务时(如企业认证服务、超级订阅服务、数据导出服务、大会员服务、商机管理服务),我们会通过系统为您生成购买该增值服务的订单,同时该订单中会载明您所订购的服务信息、具体订单号、订单创建时间、您支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息、提供客服与售后服务及其他我们明确告知的目的。</p>
                 <p style="text-indent: 20px;">如您申请发票,还需提供以下信息:发票抬头、纳税人识别号、注册地址、注册电话、开户银行、银行账号、个人姓名、手机号、所属地区、详细地址、邮箱,以及您根据您的开票需求提供的更多信息,如购买方信息。</p>
                 <p style="font-size: 14px;">4、帮助您完成支付</p>
                 <p style="text-indent: 20px;">为完成增值服务订单支付,您需要提供第三方支付平台(支付宝、微信支付)账户并选择付款方式,我们会将您的用户名、对应的第三方支付平台账户名、订单支付相关信息、订单安全相关设备信息及其他反洗钱法律要求的必要信息通过在应用程序中嵌入的SDK等方式与第三方支付平台共享,前述第三方支付平台将获得您连接网络的权限、手机信息权限,并获取网络状态和wifi状态。</p>
-                <p style="font-size: 14px;">5、响应您的客服需求</p>
+                    <p style="font-size: 14px;">5、帮助您完成企业实名认证</p>
+                    <p style="text-indent: 20px;">是指符合一定条件的用户可以对企业剑鱼标讯账号申请企业实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供该企业名称、营业执照图片、社会统一信用代码,法定代表人姓名、身份证正反面图片、身份证号、对公账号、对公账号开户行等信息,以便我们对认证企业进行审核。</p>
+                    <p style="font-size: 14px;">6、响应您的客服需求</p>
                 <p style="text-indent: 20px;">当您与我们联系或提出售中售后、争议纠纷处理申请时,为了保障您的账号及系统安全,我们需要核验您的用户身份。为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会保存您与我们的通信/通话记录及相关内容(包括账号信息、订单信息、您为了证明相关事实所提供的其他信息,或您留下的联系方式信息),如果您针对具体订单进行咨询、投诉的,我们会留存您的账号信息和订单信息。</p>
                 <br>
                 <p style="font-size: 16px;">(二)为了实现剑鱼标讯服务的某些附加功能,我们需要获取您的如下信息及对应设备权限。您拒绝提供个人信息的,不影响您使用剑鱼标讯基础服务。</p>
-                <p style="font-size: 14px;">1、图片获取、存储与上传功能</p>
-                <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为实现“电子合同”、“实名认证”、“企业认证”功能,我们需要获取您设备的“相机-拍摄”权限;为实现上传图片、上传头像的功能,我们需要获取您设备的“存储-读取外置存储器”权限;为实现保存图片的功能,我们需要获取您设备的“写入外置存储器”权限。</p>
-                <p style="font-size: 14px;">2、个人实名认证服务</p>
-                <p style="text-indent: 20px;">用户可以对个人剑鱼标讯账号申请个人实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供姓名、身份证正反面图片,身份证号等信息,以便我们对认证个人进行审核。</p>
-                <p style="font-size: 14px;">3、企业实名认证服务</p>
-                <p style="text-indent: 20px;">是指符合一定条件的用户可以对企业剑鱼标讯账号申请企业实名认证,剑鱼标讯根据用户的申请及其提交的资料和信息等,进行审核,并根据审核情况确定认证结果的服务。在提交认证申请时,需要您提供该企业名称、营业执照图片、社会统一信用代码,法定代表人姓名、身份证正反面图片、身份证号、对公账号、对公账号开户行等信息,以便我们对认证企业进行审核。</p>
+                    <p style="font-size: 14px;">1、图片获取、存储与上传权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为实现“企业认证”功能,我们需要获取您设备的“相机-拍摄”权限;为实现上传图片的功能,我们需要获取您设备的“存储-读取外置存储器”权限;为实现保存图片的功能,我们需要获取您设备的“写入外置存储器”权限。</p>
+                    <p style="font-size: 14px;">2、存储权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,我们为您提供标讯信息附件下载服务,我们需要您授权我们获取您的本地文件读写/存储权限,以便您能正常通过手机下载标讯信息相关的附件并完成查看(仅限Android系统)。</p>
+                    <p style="font-size: 14px;">3、位置权限</p>
+                    <p style="text-indent: 20px;">当您使用剑鱼标讯App时,为了给您带来个性化的标讯项目信息推荐和展示,需要向我们提供您的地理位置信息,因此我们需要获取您设备的“位置(访问精准定位、访问粗略位置)”权限。同时请您知悉,该功能所依赖的具体地理位置及分析均通过我们嵌入的百度定位SDK的坐标体系实现,上述SDK将获取您的网络状态及网络定位作为辅助定位依据,访问您的位置信息。有关百度定位SDK的详细说明请您阅读本隐私政策的第四条第4项【第三方SDK服务清单】。
+                      我们向您承诺,我们不会将我们获取的关于您在各时段的位置信息进行结合以判断您的行踪轨迹。</p>
                 <br>
                 <p style="font-size: 16px;">(三)您充分知晓,以下情形中,我们收集、使用个人信息无需征得您的授权同意:</p>
                 <p>1、与国家安全、国防安全有关的;</p>
@@ -157,6 +180,98 @@
                 <p>(8)基于符合法律法规的社会公共利益而使用。</p>
                 <p>2、我们可能会将您的个人信息与我们的关联方共享。但我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束。我们的关联方如要改变个人信息的处理目的,将再次征求您的授权同意。</p>
                 <p>3、我们可能会向合作伙伴等第三方共享您的订单信息、账户信息、设备信息以及位置信息,以保障为您提供的服务顺利完成。但我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。 </p>
+                    <p>4、第三方SDK服务清单</p>
+                    <p style="text-indent: 20px;">
+                      在某些特定业务场景下,为了提高业务处理能力或其他功能方面的考虑,我们可能会使用有能力的第三方服务商提供的软件服务工具包(简称SDK)来为您提供服务。第三方SDK可能会收集您的个人信息,比如个人常用设备信息(包括硬件序列号、硬件型号、设备MAC地址、操作系统类型、操作系统版本、软件列表、设备唯一设备识别码、网络状态、运营商等。
+                    </p>
+                    <p style="text-indent: 20px;">
+                      我们将严格监控第三方SDK按照我们在《隐私政策》中与您的约定去收集和使用您的个人信息,并采取适当的安全技术和管理措施保障您的个人信息安全。我们也会对接入的第三方软件工具开发包(SDK)进行严格的安全监测,以保护您的个人信息安全。
+                    </p>
+                    <p style="text-indent: 20px;">
+                      因此,我们强烈建议您仔细阅读该第三方SDK的隐私政策,就像阅读我们的隐私政策一样。我们对接入的相关第三方SDK在以下目录中列明,您可以通过相关链接查看第三方的数据使用和保护规则。这些第三方SDK包括:
+                    </p>
+                    <p style="text-indent: 20px;">
+                      1、百度定位
+                    </p>
+                    <p style="padding-left: 30px;word-break: break-all;">
+                      SDK官网:http://lbsyun.baidu.com/index.php?title=android-locsdk
+                      <br>所属主体:北京百度网讯科技有限公司
+                      <br>使用目的:根据位置信息,为用户提供所需的标讯信息。
+                      <br>收集的信息类型:设备信息(IMEI/Mac/android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/)、经纬度信息、位置信息。
+                      <br>收集方式:SDK本机采集。
+                      <br>隐私政策链接:https://map.baidu.com/zt/client/privacy/index.html
+                    </p>
+                  <p style="text-indent: 20px;">
+                    2、友盟+
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://devs.umeng.com/
+                    <br>所属主体:友盟同欣(北京)科技有限公司
+                    <br>使用目的:分享功能,微信分享、QQ分享、移动统计,app统计分析、应用性能监控,应用崩溃等信息捕获。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/地理位置信息)。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:https://www.umeng.com/page/policy
+                  </p>
+                  <p style="text-indent: 20px;">
+                    3、小米推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://dev.mi.com/console/appservice/push.html
+                    <br>所属主体:小米移动软件有限公司
+                    <br>使用目的:为小米手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:https://dev.mi.com/console/doc/detail?pId=1822
+                  </p>
+                  <p style="text-indent: 20px;">
+                    4、华为推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://developer.huawei.com/consumer/cn/hms/huawei-pushkit
+                    <br>所属主体:华为技术有限公司
+                    <br>使用目的:为华为手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:
+                    https://developer.huawei.com/consumer/cn/doc/start/agreement-0000001052728169
+                  </p>
+                  <p style="text-indent: 20px;">
+                    5、OPPO推送
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:
+                    https://open.oppomobile.com/new/introduction?page_name=oppopush
+                    <br>所属主体:广东欢太科技有限公司
+                    <br>使用目的:为OPPO手机用户推送标讯消息、活动优惠信息。
+                    <br>收集的信息类型:设备信息(IMEI/Mac/Android ID/IDFA/OPENUDID/GUID/SIM卡IMSI/),WLAN接入点。
+                    <br>收集方式:SDK本机采集。
+                    <br>隐私政策链接:
+                    https://open.oppomobile.com/new/developmentDoc/info?id=10288
+                  </p>
+                  <p style="text-indent: 20px;">
+                    6、支付宝支付
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://www.alipay.com/
+                    <br>所属主体:支付宝(中国)网络技术有限公司
+                    <br>使用目的:帮助用户在应用内使用支付宝支付。
+                    <br>收集的信息类型:设备信息(IMEI、IDFA、Android ID、MAC地址、OAID等相关信息)、应用信息(应用崩溃信息、通知开关状态、软件列表等相关信息)、设备参数及系统信息(设备类型、设备型号、操作系统及硬件相关信息)。
+                    <br>收集方式:SDK本机采集,不涉及数据共享。
+                    <br>隐私政策链接:
+                    https://render.alipay.com/p/yuyan/180020010001196791/preview.html?agreementId=AG00000132
+                  </p>
+                  <p style="text-indent: 20px;">
+                    7、微信支付
+                  </p>
+                  <p style="padding-left: 30px;word-break: break-all;;">
+                    SDK官网:https://pay.weixin.qq.com/index.php/core/home/login
+                    <br>所属主体:财付通支付科技有限公司
+                    <br>使用目的:帮助用户在应用内使用微信支付。
+                    <br>收集的信息类型:设备信息(IMEI、IDFA、Android ID、MAC地址、OAID等相关信息)、应用信息(应用崩溃信息、通知开关状态、软件列表等相关信息)、设备参数及系统信息(设备类型、设备型号、操作系统及硬件相关信息)。
+                    <br>收集方式:SDK本机采集,不涉及数据共享。
+                    <br>隐私政策链接:
+                    https://posts.tenpay.com/posts/18ed0968618e3db204d4931651708953.html
+                  </p>
                 <br>
                 <p style="font-size: 16px;">(二)转让</p>
                 <p style="text-indent: 20px;">我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</p>
@@ -175,7 +290,7 @@
                 <p>1. 我们具有明确的职权划分以及成型的访问控制机制,将有权接触到个人信息的工作人员限制在最小必要的范围之内;</p>
                 <p>2. 我们同时采用了加密技术,提高个人信息的安全性,对于个人敏感信息,我们将一律通过https加密协议传输,您的密码、口令在存储时将被额外加密;</p>
                 <p style="text-indent: 20px;">互联网环境并非百分之百安全,我们将尽力确保或担保您发送给我们的任何信息的安全性。如果我们的物理、技术或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改或毁坏,从而导致您的合法权益受损,我们将承担相应的法律责任。</p>
-                <p style="text-indent: 20px;">在不幸发生个人安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话或推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。</p>
+                <p style="text-indent: 20px;">在不幸发生个人安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话或消息通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。</p>
                 <p style="text-indent: 20px;">同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。</p>
                 <br>
                 <p style="font-size: 18px;">五、您如何管理您的个人信息</p>
@@ -200,8 +315,8 @@
                 <p style="text-indent: 20px;">请您理解,每个业务功能需要一些基本的个人信息才能得以完成,当您撤回同意或授权后,我们无法继续为您提供撤回同意或授权所对应的服务,也不再处理您相应的个人信息。但您撤回同意或授权的决定,不会影响此前基于您的授权而开展的个人信息处理。</p>
                 <p style="font-size: 16px;">4、注销账户</p>
                 <p style="text-indent: 20px;">您可以通过删除信息、关闭设备功能、在剑鱼标讯网站或软件中进行隐私设置等方式改变您授权我们继续收集个人信息的范围或撤回您的授权。您也可以通过注销账户的方式,撤回我们继续收集您个人信息的全部授权。</p>
-                <p style="font-size: 16px;">5、如果您不想接受我们给您发送的推送信息,您随时可通过以下方式取消:</p>
-                <p style="text-indent: 20px;">您可以通过移动端APP“设置-推送消息设置”设置是否接受我们通过“通知”推给您的信息。</p>
+                <p style="font-size: 16px;">5、如果您不想接受我们给您发送的标讯消息通知,您随时可通过以下方式取消:</p>
+                <p style="text-indent: 20px;">您可以通过移动端APP“设置-推送设置”设置是否接受我们通过“通知”推给您的信息。</p>
                 <p style="font-size: 16px;">6、响应您的请求</p>
                 <p style="text-indent: 20px;">如果您无法通过上述方式访问、更正或删除您的个人信息,或您需要访问、更正或删除您在使用我们产品与/或服务时所产生的其他个人信息,或您认为剑鱼标讯存在任何违反法律法规或与您关于个人信息的收集或使用的约定,您均可以发送电子邮件至jy@topnet.net.cn或通过本隐私政策中的其他方式与我们联系。为了保障安全,我们可能需要您提供书面请求,或提供您的身份证明文件,我们将在收到您反馈并验证您的身份后的15天内答复您的请求。对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。</p>
                 <p>在以下情形中,按照法律法规要求,我们将无法响应您的请求:</p>
@@ -228,30 +343,6 @@
                 <p>我们设立了个人信息保护专职部门,剑鱼标讯客服会将您的需求向其转达。</p>
                 <p>剑鱼标讯客服邮箱:jy@topnet.net.cn</p>
                 <br>
-                <p style="font-size: 18px;">附录:关于第三方软件开发工具包(SDK)的使用说明</p>
-                <p>我们仅会出于合法、正当、必要、特定、明确的目的获取您的信息,并将审慎评估对于第三方软件开发工具包(SDK)的使用,同时对于这些第三方软件开发工具包(SDK)的安全保障能力进行综合评估,尽最大可能保护数据安全,因第三方会动态修改权限获取,我们会尽可能同步并告知您。</p>
-                <p>(1)百度地图</p>
-                <p style="text-indent: 20px;">SDK用途:获取用户的位置信息(城市),根据地域提供更精准的服务。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息,位置权限</p>
-                <p>(2)小米</p>
-                <p style="text-indent: 20px;">SDK用途:用于向小米手机用户推送产品资讯和活动信息。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <p>(3)华为</p>
-                <p style="text-indent: 20px;">SDK用途:用于向华为手机用户推送产品资讯和活动信息。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <p>(4)友盟</p>
-                <p style="text-indent: 20px;">SDK用途:用于平台信息统计,推送应用优惠活动信息。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <p>(5)腾讯开放平台</p>
-                <p style="text-indent: 20px;">SDK用途:用于人脸识别,用户进行实名认证。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <p>(6)OPPO</p>
-                <p style="text-indent: 20px;">SDK用途:用于向OPPO手机用户推送产品资讯和活动信息。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <p>(7)支付宝</p>
-                <p style="text-indent: 20px;">SDK用途:用于调用支付宝实名认证信息。</p>
-                <p style="text-indent: 20px;">SDK收集的信息类型:手机设备信息</p>
-                <br>
                 <p style="font-size: 18px;">附件:《剑鱼标讯账户注销须知》</p>
                 <p>亲爱的剑鱼标讯用户:</p>
                 <p style="text-indent: 20px;">您在申请注销流程中点击同意前,应当认真阅读《剑鱼标讯账户注销须知》(以下称“《注销须知》”)。</p>

+ 24 - 1889
src/jfw/modules/app/src/web/templates/weixin/historypush.html

@@ -2,214 +2,22 @@
 <head>
     {{include "/common/meta.html"}}
     <title>标讯订阅</title>
-    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
-    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/subscribe.css?v={{Msg "seo" "version"}}"/>
+    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/local/layout.css" />
+    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/css/subscribe.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"}}
-    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/dropload.js"></script>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/local/dropload.js"></script>
     <!-- 2.8.5 -->
-    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
-    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}"/>
-    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}"/>
-    <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/p13.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/js/common.js?v={{Msg "seo" "version"}}"></script>
+    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/css/weui.min.css?v={{Msg "seo" "version"}}"/>
+    <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/iconfont/iconfont.css?v={{Msg "seo" "version"}}"/>
+    <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/css/p13.css?v={{Msg "seo" "version"}}" rel="stylesheet">
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
     <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}'/>
-    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/css/public.css?v={{Msg "seo" "version"}}'/>
-    <style>
-        .j-popup.van-popup--bottom .j-main {
-          height: 100%;
-        }
-        .merge-dialog,
-        .weui-dialog,
-        .weui-mask{
-          z-index: 99999;
-        }
-
-        .van-dialog,
-        .j-popup,
-        .j-overlay {
-            z-index: 99999!important;
-        }
-
-        .jymobile-setting-dialog .weui-dialog__hd{
-          text-align: center !important;
-        }
-        .jymobile-setting-dialog .weui-dialog__bd{
-          padding: .37rem .1rem .38rem !important;
-          color: #1D1D1D !important;
-          font-size: .32rem !important;
-          text-align: center !important;
-        }
-        .jymobile-setting-dialog .weui-dialog__ft{
-          display: flex !important;
-          padding: 0 0 .38rem 0 !important;
-          text-align: center !important;
-        }
-        .jymobile-setting-dialog .weui-dialog__ft .weui-dialog__btn_default{
-          margin-right: .3rem !important;
-        }
-        .jymobile-setting-dialog .weui-dialog__ft>a {
-            text-decoration: none !important;
-        }
-        .app-layout-header{
-            padding-left: 16px;
-            padding-right: 16px;
-            padding-top: 20px;
-        }
-        .app-layout-header .switch-vip:before, .app-layout-header .only-vip:before {
-            height: 18px;
-        }
-        .app-layout-header .switch-vip:before, .app-layout-header .only-member::after {
-            content: '';
-            display: flex;
-            margin-left: 4px;
-            width: 12px;
-            height: 12px;
-            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACSSURBVHgBzZO7CYAwFEWvQXCNWOoWDiFY27mUDmDjBo5gZ2vWEBElASGGFyGfwlOFGzgkeTdAJBIqXIaGZ9c5y3XZjrm+t/b1RuXph4SDhsyZo8QKs0gEHGGUJNmPCo4okSkpuknAEf2NvCUSNTVzlD4wROJ/ohSBPNUJOpHeP2+RWWJvkVnikKtxaCUOEb1+wg1trU+oaaKLhgAAAABJRU5ErkJggg==) no-repeat;
-            background-size: contain;
-        }
-        .app-layout-header .switch-vip:before, .app-layout-header .switch {
-            align-items: center;
-            font-size: 12px;
-        }
-        .app-layout-content-b .app-content::after{
-            content: '';
-            width: 100%;
-            height: 8px;
-            background: #F5F6F7;
-        }
-        .iosMeau{
-            height: 100%;
-        }
-        .app-layout-content-b {
-            height: calc(100vh - 70px);
-            overflow: hidden;
-        }
-        .collection .van-dropdown-menu__item {
-           flex: 1;
-           padding-left: 0;
-           padding-right: 0;
-        }
-        .collection .van-dropdown-item:nth-of-type(4) .van-dropdown-item__content {
-            max-height: unset;
-            overflow: unset;
-            height: 100%;
-        }
-        .empty{
-            padding-top: .34rem;
-        }
-    </style>
-    <style>
-        .oldUserTips{
-            position: fixed;
-            top: 0;
-            left: 0;
-            right: 0;
-            bottom: 0;
-            z-index: 99999;
-            background-color:rgba(0, 0, 0, 0.7);
-            display: none;
-        }
-        .updateTips-wrap{
-            width: 6.06rem;
-            height: 4.58rem;
-            background: #FFFFFF;
-            border-radius: 0.16rem 0.16rem 0.16rem 0.16rem;
-            position: absolute;
-            top: 50%;
-            left: 50%;
-            transform: translateX(-50%) translateY(-50%);
-        }
-        .updateTips-title{
-            text-align: center;
-            padding-top: 0.48rem;
-            font-size: 0.36rem;
-            font-weight: 500;
-            color: #161826;
-        }
-        .updateTips-text{
-            text-align: left;
-            padding: 0.16rem 0.6rem 0.1rem;
-            font-size: 0.3rem;
-            font-weight: 500;
-            color: #5E5E64;
-            line-height: 0.44rem;
-        }
-        .updateTips-btnWrap{
-            display: flex;
-            justify-content: center;
-            align-items: center;
-            margin-top: 0.32rem;
-            border-top:0.02rem solid rgba(0, 0, 0, 0.1) ;
-        }
-        .updateTips-btn{
-            font-size: 0.36rem;
-            font-weight: 500;
-            color: #161826;
-            width: 50%;
-            height: 0.92rem;
-            line-height: 0.92rem;
-            text-align: center;
-            cursor: pointer;
-        }
-        .updateTips-line{
-            height: 0.92rem;
-            width: 0.02rem;
-            background-color: rgba(0, 0, 0, 0.1);
-        }
-        .levelUp{
-            color: #2ABDD1;
-        }
-        #freeArea{
-            color: #2ABDD1;
-        }
-        /* 留资查看更多新增 */
-        .seeMore{
-            text-align: center;
-            line-height: 1.12rem;
-            height: 1.12rem;
-            background: #FFFFFF;
-            bottom: 1.4rem;
-        }
-        .seeMore + .dropload-down {
-            display: none;
-        }
-        .seeMore-btn{
-            font-size: .28rem;
-            color: #2ABED1;
-            display: contents;
-        }
-        .product-switch{
-          display: block;
-          height: auto;
-        }
-        .typeswitch{
-          height: 1.08rem;
-        }
-        .push-money-component {
-          height: auto;
-        }
-        .push-money-component .money-component-group {
-          min-height: auto;
-          flex: unset;
-          padding: 0;
-        }
-        .push-money-component .j-footer {
-          display: none;
-        }
-        .push-money-component .select-tag-group{
-          padding: 6px 0 0!important;
-        }
-        .push-money-component .select-tag-item.active::after{
-          background: none!important;
-        }
-        .selected{
-          background: #E8FAFD!important;
-          color: #2ABED1!important;
-        }
-    </style>
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/css/public.css?v={{Msg "seo" "version"}}'/>
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/css/old-page-style.css?v={{Msg "seo" "version"}}'/>
 </head>
 <body class="p13" id="viperSuper" style="background: #fff;overflow: hidden;">
 <!-- 加载数据-->
@@ -284,7 +92,7 @@
 <van-popup v-model="bigSubShow" class="product-switch" position="top" get-container="body">
     <div class="typeswitch entniche" v-if="isEntniche" @click="proClick('ent')">
       <div class="type-left">
-          <img class="icon-bm" src="/jyapp/images/shangjigl.png" alt="">
+          <img class="icon-bm" src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/shangjigl.png?v={{Msg "seo" "version"}}' alt="">
           <span class="bm-text">商机管理</span>
       </div>
       <div class="type-right">
@@ -302,7 +110,7 @@
     </div>
     <div class="typeswitch vipproduct" v-if="rootInfo.vipStatus > 0" @click="proClick('vip')">
         <div class="type-left">
-            <img class="icon-bm" src="/jyapp/vipsubscribe/image/vip-icon.png" alt="">
+            <img class="icon-bm" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/vip-icon.png?v={{Msg "seo" "version"}}" alt="">
             <span class="bm-text">超级订阅</span>
         </div>
         <div class="type-right">
@@ -315,8 +123,8 @@
     <div class="j-container">
     <div class="app-content j-header" style="background:#fff;border-top: 1px solid transparent;">
   		<div class="header_header" style="height: 60px;display:none;transition: all 0.1s;position: relative;width: 100%;">
-  			<div class="only-personal" style="position: absolute;top: 50%;left: 50%;background-image: url(/jyapp/vipsubscribe/image/entback.png?v=51430);background-size: 100%;background-repeat: no-repeat;border-radius: 8px;width: 92%;display: flex;align-items: center;justify-content: space-between;height: 44px;transform: translate(-50%, -50%);">
-  				<img style="width: 20px;height: 20px; margin-left: .3rem;" src="/jyapp/vipsubscribe/image/vip-icon.png?v=1">
+  			<div class="only-personal" style="position: absolute;top: 50%;left: 50%;background-image: url({{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/entback.png?v={{Msg "seo" "version"}});background-size: 100%;background-repeat: no-repeat;border-radius: 8px;width: 92%;display: flex;align-items: center;justify-content: space-between;height: 44px;transform: translate(-50%, -50%);">
+  				<img style="width: 20px;height: 20px; margin-left: .3rem;" src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/vip-icon.png?v={{Msg "seo" "version"}}'>
   				<span  data-name="doubleEleven_title" style="padding: 0 .12rem;flex: 1;font-size: .26rem;font-weight: 700;color: #fff;">全国企业随手查,竞争实力尽展示!</span>
   				<span  data-name="doubleEleven_button" class="switch_ext" id="app-historypush-vipSub-banner" style="border-radius: 32px;display: flex;flex-direction: row;padding: 3px 12px;font-size: 12px;color: #FAE7CA;margin-right: .2rem;background: linear-gradient(to bottom, #F1D090 0%, #FAE7CA 100%);color: #33323A;font-family: PingFang SC;font-size: 12px;line-height: 18px;letter-spacing: 0px;text-align: center;white-space: nowrap;">立即使用</span>
   			</div>
@@ -503,7 +311,7 @@
             </div>
         </span>
         <span class="empty findnull">
-            <div><img class="empty-img" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/nopush.png?v={{Msg "seo" "version"}}"></div>
+            <div><img class="empty-img" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/nopush.png?v={{Msg "seo" "version"}}"></div>
             <span class="empty-text">近期没有你想要的信息,再等等吧!<br>你也可以进入设置页面、调整一下关键词再回来看看。</span>
         </span>
         <span class="empty findnull_">
@@ -570,12 +378,12 @@
     <div class="weui-mask weui-animate-fade-in"></div>
     <div class="weui-dialog weui-animate-fade-in">
         <div class="my-dialog__hd">
-            <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/image/vipreport/dialog-image.png?v={{Msg "seo" "version"}}" alt="">
+            <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/dialog-image.png?v={{Msg "seo" "version"}}' alt="">
             <div class="jy_title">剑鱼标讯</div>
             <h2 class="weekly">每<span></span>订阅报告来啦</h2>
             <div class="term"></div>
             <a href="javascript:void(0)" class="vip_report_todetail">点击查看</a>
-            <img src="/jyapp/vipsubscribe/image/vipreport/close.svg" class="vip_report_tip_close">
+            <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/close.svg' class="vip_report_tip_close">
         </div>
     </div>
 </div>
@@ -593,7 +401,6 @@
     </div>
 </div>
 </div>
-<!--	<img src="/jyapp/images/gotosetpage.png?v=51430" id="gotosetpage">-->
 {{include "/common/baiducc.html"}}
 <div id="advertscript" class="hidden">
     {{$s:=(Ad "jyapp-wxpush-middle" -1)}}
@@ -603,7 +410,7 @@
             var random = Math.floor(Math.random() * ADList.length)
             var AD = ADList[random]
             var ADHtml = "<span class=\"closeadv-bg\"></span>"
-                + "<img src=\"{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/close_heidi.png?v={{Msg "seo" "version"}}\" class=\"closeadv\" onclick=\"closeadv(this)\">";
+                + "<img src=\"{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/close_heidi.png?v={{Msg "seo" "version"}}\" class=\"closeadv\" onclick=\"closeadv(this)\">";
             if (AD.s_pic) {
                 if (AD.s_link) {
                     var ADtitle = "";
@@ -632,8 +439,8 @@
   <div class="mask"></div>
   <div class="dialog">
       <div class="hd_img">
-          <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/merge.png?v={{Msg "seo" "version"}}" alt="" class="logo" />
-          <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/close.png?v={{Msg "seo" "version"}}" class="close">
+          <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/merge.png?v={{Msg "seo" "version"}}" alt="" class="logo" />
+          <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/images/close.png?v={{Msg "seo" "version"}}" class="close">
       </div>
       <div class="dialog_hd"><strong class="dialog_title">您同时拥有2个剑鱼标讯账号</strong></div>
       <div class="dialog_bd"><em style="color:#2ABED1">手机号:18609098787、微信号:LLL</em><br> 为保证您的正常使用,您可以根据自身情况进行设置。</div>
@@ -644,7 +451,7 @@
 </div>
 
 </body>
-<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/utils.js?v={{Msg "seo" "version"}}"></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}'></script>
 <script>
     var firstTime = ''
     let pushUrlTime = utils.getParam('pushtime')
@@ -654,6 +461,7 @@
     var productType = 0 // 0免费用户 1超级订阅 2大会员 // 3商机管理
     var historyVt = ''
 </script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/fastclick/1.0.6/fastclick.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
@@ -667,1680 +475,7 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/notice-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/money-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/keep-tags/keep-tags-template.js?v={{Msg "seo" "version"}}'></script>
-<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/historypush.js?v={{Msg "seo" "version"}}'></script>
-<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
-   <script>
-        // 双11活动文案修改
-        $.get('/jyactive/doubleEleven/isActiving?t=' + new Date().getTime(), function (r) {
-            if (r && r.data) {
-                if (r.data.isActiving) {
-                    $('*[data-name="doubleEleven_title"]').text('买超级订阅,买多久送多久!')
-                    $('*[data-name="doubleEleven_button"]').text('去抢')
-                }
-            }
-        })
-    </script>
-    <script type="text/javascript">
-    addEventListener('focus', function() {
-        if(document.activeElement = document.getElementById('iframeu6603902_0')) {
-            $.ajax({
-                type: 'POST',
-                url: '/publicapply/adLeague/click',
-                data: {
-                    client: 'APP',
-                    id: 'ad6',
-                    position: '订阅推送列表页'
-                },
-                success: function(res) {
-                        console.log(res)
-                }
-            })
-        }
-    });
-    </script>
-<script>
-        function hiddenTips() {
-            $('#UserTips').hide()
-        }
-        function gotoPay() {
-            $('#UserTips').hide()
-            location.href = '/jy_mobile/common/order/create/areapack?type=buy'
-        }
-        // 得到用户是否需要提醒省份订阅包过期
-        function getUserSubscribe() {
-            $.ajax({
-                url: '/publicapply/free/areapack/tip',
-                type: 'POST',
-                success: function (res) {
-                    if (res.data.tip) {
-                        $('#UserTips').show()
-                        $('#freeArea').text(res.data.area)
-                        tipsClose()
-                    } else {
-                        $('#UserTips').hide()
-                    }
-                }
-            })
-        }
-        getUserSubscribe()
-        function tipsClose() {
-            $.ajax({
-                url: '/publicapply/free/areapack/update',
-                type: 'POST',
-                success: function (res) {
-
-                }
-            })
-        }
-  // @手机号绑定及账号合并 2021/1/25
-  $("#toKeySet").on('click', tokeyset)
-  function receivePushMessageHandle(type,url){
-    if(type=="vipreport" || type == "memberreport"){
-      if(type=="memberreport"&&productType!=2){
-        return
-      }else if(type=="vipreport"&&productType!=1){
-        return
-      }
-      if((type=="vipreport" || type=="memberreport")&& $(".vip_report").is(":visible")){
-        $(".vip_report>a").show();
-      }
-    }
-  }
-    function closeadv(obj) {
-        closeAdvert = true;
-        $(obj).parent().prev().css("border-bottom", "1px solid #e5e6e9");
-        $(obj).parent().remove();
-        if(wxflag != "" && wxflag != null){
-            wxflag.resetload();
-        }
-    }
-
-    function AdClick(e, isExternal, link, title) {
-        var ce = $(e).parent();
-        adv_statistics(ce);
-        if (isExternal) {
-            if (!title) {
-                title = "剑鱼标讯"
-            }
-            JyObj.openExternalLink(link, title)
-        } else {
-            window.location.href = link;
-        }
-    }
-
-  if (sessionStorage && sessionStorage.reloadSubPage) {
-      sessionStorage.removeItem("reloadSubPage");
-      removeSessionStorage();
-      window.location.reload();
-  }
-  var firstPage = null;
-  var scrollTop = 0;
-  var dataCache = new Array();
-  var lasttime = 0;
-  var count = 0;
-  var wxflag = "";
-  var hasNextPage = false;
-  var pageIndex = 1;
-  var closeAdvert = false//是否关闭广告
-  var isread = {{.T.isread}}
-  var isPageShow = localStorage.getItem('hideBottom')
-  // '/jyapp/myinfo'这个接口的返回值(同步请求,放心使用)
-//   有无关键词同意用这个myInfo中的内容判断
-  var myInfo = {}
-  var isInTSguide = null
-
-  if (getUrlParam("f") == "push") {
-      removeSessionStorage();
-      if (history) {
-          sessionStorage.setItem(sessionStorage.userId + "_searchTime",getUrlParam("selectTime"));
-        history.replaceState(null, null, "/jyapp/swordfish/historypush");
-      }
-  }
-//   是否需要留资
-  function isNeedSales (callback) {
-      $.ajax({
-          type: 'GET',
-          url: '/salesLeads/retainedCapital',
-          data: { source: 'jypush_see10_plus_app' },
-          async: false,
-          success: function (res) {
-            callback(res)
-          }
-      })
-  }
-      function checkFreeList (data) {
-      if(window.isFree){
-        if (data.data.length > 10) {
-          // sessionStorage.setItem('isNeedSalesStatus', isNeedSalesStatus)
-          isNeedSales(function (res) {
-            // 推送列表 免费是否需要留资判断
-            var result = checkRequiredKeys(['name', 'phone', 'position', 'branch','company', 'companyType'], res.info)
-            if (!result && res.data && res.data.retainedCapital) {
-              data.data = data.data.slice(0, 10)
-              data.hasNextPage = false
-              $(".seeMore").show()
-              $(".seeMore-btn").on('click', function () {
-                location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=jypush_see10_plus_app'
-              })
-            }
-          })
-        }
-      }
-    }
-  $(function () {
-      setTimeout(function(){
-        loadJS("{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/fastclick.min.js",function(){
-          FastClick.attach(document.body);
-        });
-      },500);
-      var alert_other;
-      alert_other=setInterval(function(){
-        if(localStorage.canshowother && localStorage.getItem({{.T.userId}}+"_otherFlag")&&localStorage.getItem({{.T.userId}}+"_alert")==null){
-          $(".jy-alert-other").show();
-          localStorage.setItem({{.T.userId}}+"_alert","1")
-          clearInterval(alert_other);
-        }
-      },1000)
-
-      //到期提醒页面
-      var vipSubtips = {{.T.vipSubtips}};
-
-      if (Number(vipSubtips) === 0 && sessionStorage.vipSubtips == undefined) {
-        history.pushState({}, "", "");
-        sessionStorage.vipSubtips = "t";
-        window.location.replace("/jyapp/vipsubscribe/renewPage/exprie");
-        return
-      }
-      //===================
-      var isinitpage = false;
-      $(window).bind("pageshow", function (event) {
-        if (event.originalEvent.persisted) {
-          //返回不加载  导致菜单不出来
-          JyObj.hiddenBottom("1");
-          count=0;
-          initpage();
-          isinitpage = true;
-        }
-      });
-      if (!isinitpage) {
-        initpage();
-        isinitpage = true;
-      }
-      $(".vip_report").click(function () {
-          sessionStorage.setItem(vm.sessStorageKey, JSON.stringify(vm.$data))
-          setSessionStorage();
-
-          var tempUrl = "/vipreport/page/subreport.html"
-          if (window.isFreeUserStatus && window.isUserWeekMonthStatus) {
-              tempUrl += '?type=free'
-          } else if(productType == 2) {
-              tempUrl += '?type=member'
-          } else if(productType == 1) {
-            tempUrl += '?type=vip'
-          }
-          window.location.href = tempUrl;
-      });
-  });
-
-  var userId = "";
-  var selectArea = vm.area; // 地区
-  var selectCity = vm.city; // 城市
-  var selectIndustry = vm.subscopeclass // 行业
-  var selectCate = vm.buyerclass // 采购单位
-  var selectKeyword = vm.key // 关键词
-  var selectNotice = vm.subtype // 公告类型
-  var selectMoney = vm.selectMoney
-  var selectFile = vm.selectFile
-  //获取当前时间
-  var date = (function () {
-      var date = new Date();
-      var year = date.getFullYear();
-      var month = date.getMonth() + 1;
-      var day = date.getDate();
-      month = month < 10 ? '0' + month : month;
-      day = day < 10 ? '0' + day : day;
-      return year + '-' + month + '-' + day;
-  })();
-
-    let listparams = {
-        pageNum: 1
-    }
-    var listnum = 0
-    $.ajax({
-        url: '/publicapply/bidcoll/list',
-        type: "POST",
-        contentType: 'application/json;charset=utf-8',
-        data: JSON.stringify(listparams),
-        success: function(res) {
-            if(res.error_code == 0) {
-                if(res.data && res.data.res) {
-                    listnum = res.data.res.length
-                }
-            }
-        }
-    })
-  function initpage() {
-     console.log(selectMoney, selectFile, 'sessionstorage');
-      afterJyObjInit();
-      var thisClass=this;
-      $("#openmailpush").click(function () {
-          setSessionStorage();
-          window.location.href = '/jyapp/wxkeyset/keyset/seniorset';
-      });
-      $(".listcontent").scroll(function () {
-          scrollTop = $(this).scrollTop();
-      });
-      this.isCanSwitch=true;
-      this.InitPersonal=function(r){
-        $("#sub_manager").click(function() {
-            setSessionStorage();
-            sessionStorage.setItem(vm.sessStorageKey, JSON.stringify(vm.$data))
-            if(historyVt == 's') {
-              if(vm.entinfo.admin_department || vm.entinfo.admin_system) {
-                location.href = '/page_entniche_new/page/sub_management/sub_management_system.html'
-              } else {
-                location.href = '/page_entniche_new/page/subsetting/sub_entrance.html'
-              }
-              return
-            }
-            let thisType = sessionStorage.getItem('userIsNew')
-            if (window.userNewType || thisType) {
-                location.href = '/jyapp/vipsubscribe/toSubVipSetPage'
-            } else {
-                if(vm.rootInfo.memberStatus > 0) {
-                    location.href = '/jyapp/vipsubscribe/toSubVipSetPage?vSwitch=m'
-                } else {
-                    tokeyset()
-                }
-            }
-
-        });
-        $(".tab_left .area").hide();
-        if (r.isPassCount) {
-            if(vm.rootInfo.memberStatus > 0) {
-                $(".open_remind").hide();
-            } else {
-                $(".open_remind").show();
-            }
-        }
-        // 商机管理隐藏弹窗
-        if(r.userType == 'entniche') {
-          $(".open_remind").hide();
-        }
-        if (r.isExpire < 0 && r.vipStatus == -1) {
-          if (localStorage.getItem("nv_vip_" + userId) == null) {
-            // $(".nv_renew_toast").show();
-          }
-        }
-        thisClass.LoadDatas(r);
-      }
-      this.InitVip=function(r){
-        $("#sub_manager").click(function() {
-            setSessionStorage();
-            // console.log(vm.rootInfo, 'vmrootInfo')
-            sessionStorage.setItem(vm.sessStorageKey, JSON.stringify(vm.$data))
-            if(historyVt == 's') {
-              if(vm.entinfo.admin_department || vm.entinfo.admin_system) {
-                location.href = '/page_entniche_new/page/sub_management/sub_management_system.html'
-              } else {
-                location.href = '/page_entniche_new/page/subsetting/sub_entrance.html'
-              }
-              return
-            } else if(historyVt == 'm') {
-              location.href = '/jyapp/vipsubscribe/toSubVipSetPage?vSwitch=m'
-            } else if(historyVt == 'v') {
-              location.href = '/jyapp/vipsubscribe/toSubVipSetPage?vSwitch=v'
-            } else {
-              tosetpage()
-            }
-            // let thisType = sessionStorage.getItem('userIsNew')
-            // if (window.userNewType || thisType) {
-            //     location.href = '/jyapp/vipsubscribe/toSubVipSetPage'
-            // } else {
-            //     if(vm.selectPro == 1) {
-            //         location.href = '/jyapp/vipsubscribe/toSubVipSetPage'
-            //     } else {
-            //         tosetpage()
-            //     }
-            // }
-
-        });
-        if(productType == 0) {
-            $(".vip_report").show();
-        }
-        $(".tab_left .area").show();
-        if (!r.haskey) {
-            if(historyVt == 'm' && vm.rootInfo.isSubCount) {
-                $(".set_keyword").hide();
-            } else if(historyVt == 's'){
-                $(".set_keyword").hide();
-            } else {
-              $(".set_keyword").show();
-            }
-              if (r.isPassCount && (localStorage.isPassCount == null || localStorage.isPassCount != date.split("-")[2])) {
-                localStorage.isPassCount = date.split("-")[2]
-                // weuiDialog(); // liumiao让去掉
-              }
-          }
-          if (r.vipStatus != 1) {
-              if (r.isExpire > 1) {
-                  $(".renew_toast .isExpire").text(r.isExpire);
-                  $(".renew_toast").show();
-              } else if (r.isExpire > 0) {
-                  $(".renew_toast").find(".other").hide();
-                  $(".renew_toast").find(".today").show();
-                  $(".renew_toast").show();
-              }
-          } else {
-              if (r.isExpire > 1) {
-                  $("._renew_toast .isExpire").text(r.isExpire);
-                  $("._renew_toast").show();
-              } else if (r.isExpire > 0) {
-                  $("._renew_toast").find(".other").hide();
-                  $("._renew_toast").find(".today").show();
-                  $("._renew_toast").show();
-              }
-          }
-          thisClass.LoadDatas(r);
-      }
-      this.LoadDatas=function(r){
-        if(isPageShow == '1') {
-          localStorage.removeItem('hideBottom')
-          JyObj.hiddenBottom("0");
-        }
-        $(".app-content").css("display","flex");
-        if(r.reLoad){
-          removeSessionStorage();
-        }
-        if (sessionStorage && sessionStorage.historypushScrollTop && sessionStorage.historypushDataCache) {
-            if (sessionStorage.closeAdvert == "true") {
-                closeAdvert = true;
-            }
-            pageIndex = sessionStorage.historypushPageIndexCache;
-            hasNextPage = sessionStorage.historypushHasNextPage == "true" ? true : false;
-            scrollTop = sessionStorage.historypushScrollTop;
-            dataCache = JSON.parse(sessionStorage.historypushDataCache);
-            userId = sessionStorage.userId;
-            firstTime = sessionStorage.getItem(userId + "_searchTime");
-            selectArea = sessionStorage.getItem(userId + "_selectArea");
-            selectCity = sessionStorage.getItem(userId + "_selectCity");
-            selectIndustry = sessionStorage.getItem(userId + "_selectIndustry");
-            selectCate = sessionStorage.getItem(userId + "_selectCate");
-            selectKeyword = sessionStorage.getItem(userId + "_selectKeyword");
-            selectNotice = sessionStorage.getItem(userId + "_selectNotice");
-            selectMoney = sessionStorage.getItem(userId + "_selectMoney");
-            selectFile = sessionStorage.getItem(userId + "_selectFile");
-
-            // 判断是否需要修改某个收藏的状态
-            var listCollSessionId = sessionStorage.getItem('listCollSessionId')
-            if (listCollSessionId){
-                var listCollSessionBool = sessionStorage.getItem('listCollSessionBool')
-                if (dataCache && $.isArray(dataCache)) {
-                    dataCache.forEach(function (item) {
-                        if (item._id == listCollSessionId) {
-                            item.collection = listCollSessionBool
-                        }
-                    })
-                    sessionStorage.removeItem('listCollSessionId')
-                    sessionStorage.removeItem('listCollSessionBool')
-                }
-            }
-
-            $("#list>*").remove();
-            firstPage = dataCache;
-            if (dataCache.length == 0) {
-                hasNoData();
-            } else {
-                structureHtml(dataCache, true);
-            }
-            //appendList($(listCache),$(tableCache));
-            $(".listcontent").scrollTop(scrollTop);
-            if (sessionStorage.getItem('hasFreeMore') === 'true') {
-                isNeedSales(function (res) {
-                  var result = checkRequiredKeys(['name', 'phone', 'position', 'branch','company'], res.info)
-                  if (!result && res.data && res.data.retainedCapital) {
-                    $(".seeMore").show()
-                    $(".seeMore-btn").on('click', function () {
-                      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=jypush_see10_plus_app'
-                    })
-                  } else {
-                    location.reload()
-                  }
-                })
-              }
-            removeSessionStorage();
-        } else {
-            if(historyVt == 's') {
-                $(".set_keyword").hide();
-            }
-            userId = sessionStorage.userId;
-            // var isNeedSalesStatus = false
-            // var isNeedSalesStatus = true
-            console.log('load-ajax', selectFile, selectMoney, vm.selectFile, vm.selectMoney);
-            $.ajax({
-                type: 'post',
-                url: '/publicapply/subscribe/historyPush?t=' + new Date().getTime(),
-                data: {
-                  selectTime: firstTime,
-                  pageNum: 1,
-                  area: selectArea,
-                  city: selectCity,
-                  subscopeclass: selectIndustry,
-                  buyerclass: selectCate,
-                  key: selectKeyword,
-                  subtype: selectNotice,
-                  vt:historyVt,
-                  fileExists: vm.selectFile,
-                  price: vm.selectMoney
-                },
-                async: false,
-                dataType: 'json',
-                success: function (data) {
-                  if(!data.data) {
-                    data.data = []
-                  }
-                  checkFreeList(data)
-
-
-                     checkmerge(data.industry)
-                    if (data.otherFlag){
-                        localStorage.setItem({{.T.userId}}+"_otherFlag",data.otherFlag)
-                    }
-                    firstPage = data.data;
-                    isInTSguide = data.isInTSguide
-                    if (r.userType=="free" && firstPage.length <= 0 && !r.haskey && isInTSguide) {
-                        (function() {
-                            if (sessionStorage && (sessionStorage.keysetindexToHistory == "1" || sessionStorage.keysetindexToHistory == "2" || sessionStorage.keysetindexToHistory == "3")) {
-                                sessionStorage.removeItem("keysetindexToHistory");
-                                return
-                            }
-                            if (firstTime) {
-                                return
-                            }
-                            history.pushState({}, "", "");
-                            window.location.href = '/jyapp/wxkeyset/keyset/index';
-                        })();
-                    }
-
-                    // 非vip的新用户
-                    if (myInfo.userType !== 'vip') {
-                      if(myInfo.userType == 'entniche') {
-                        if(data.data) {
-                          if (data.data.length === 0) {
-                            $('.findnull_').show().siblings('.empty').hide()
-                          }
-                        } else {
-                          $('.findnull_').show().siblings('.empty').hide()
-                        }
-
-                        $('.header_header').hide()
-                      } else {
-                        // 如果是新用户(没有推送历史数据,没有关键词),直接就显示空页面
-                        if (data.data.length === 0 && myInfo.haskey === false && !firstTime) {
-                            if(vm.rootInfo.memberStatus > 0) {
-                                $('.header_header').hide()
-                            } else {
-                                $('.filter_tab').hide()
-                                $('.header_header').hide()
-                                $('.findnull-no-key').css({"display": 'block'}).siblings('.empty').hide()
-                            }
-                            return
-                        } else {
-                            if(vm.rootInfo.memberStatus > 0 || myInfo.userType == 'entniche') {
-                                $('.header_header').hide()
-                            } else {
-                                $('.header_header').show()
-                            }
-                        }
-                      }
-                    } else {
-                        if (data.data.length === 0) {
-                            $('.findnull_').show().siblings('.empty').hide()
-                        }
-
-                        $('.header_header').hide()
-                    }
-
-                    pageIndex = 2;
-                    lasttime = data.thistime;
-                    hasNextPage = data.hasNextPage;
-                    vm.hasNextPage = data.hasNextPage
-                    userId = data.userId;
-                    sessionStorage.userId = userId;
-                    sessionStorage.setItem(userId + "_searchTime", firstTime);
-                },
-                error: function (xhr, type) {
-                    hasNoData();
-                }
-            });
-            // firstPage.length = 0
-            if (firstPage.length == 0) {
-                //sessionStorage.removeItem("search_starttime");
-                sessionStorage.removeItem(sessionStorage.userId + "_searchTime");
-                hasNoData();
-                return;
-            }
-            dataCache = dataCache.concat(firstPage);
-            structureHtml(firstPage, true);
-
-            setTimeout(function () {
-                $(".listcontent").scrollTop(0);
-            }, 300);
-        }
-        setTimeout(() => {
-            $('#select-meau').css({'visibility': 'initial'})
-            $('#select-meau').css({'display':'flex'})
-        }, 500)
-        if (hasNextPage) {
-            setTimeout(function () {
-                wxflag = $('.listcontent').dropload({
-                    scrollArea: $(".listcontent"),
-                    // loadUpFn: function (me) {
-                    //     //loadDatas(me,-1);
-                    //     reloadFirstPage(me);//下拉刷新更新订阅词
-                    // },
-                    loadDownFn: function (me) {
-                        loadDatas(me, lasttime);
-                    }
-                });
-            }, 1000);
-        } else {
-            setTimeout(function () {
-                wxflag = $('.listcontent').dropload({
-                    scrollArea: $(".listcontent"),
-                    // loadUpFn: function (me) {
-                    //     loadDatas(me, -1);
-                    // },
-                    loadDownFn: function (me) {
-                        loadDatas(me, lasttime);
-                    }
-                });
-                noMoreData(wxflag);
-            }, 1000);
-        }
-      }
-      //
-      $.post("/publicapply/myinfo?t="+new Date().getTime(),null,function(r){
-        myInfo = r
-        if(r.vipStatus > 0){
-            // $(".switch").addClass("only-vip");
-            // $(".switch").text("超级订阅").show();
-            // $(".switch").click(tosetpage);
-            thisClass.InitVip(r);
-            extend(1);
-        }else{
-            if(vm.rootInfo.memberStatus <= 0) {
-              if(myInfo.userType == 'entniche') {
-                $('.header_header').hide()
-                $(".switch").addClass('switch_zj')
-                // $(".switch_right").hide()
-                $(".switch .switch_icon").addClass('icon_ent')
-                $(".switch .user_pro").text("商机管理").css('margin-right','.08rem')
-                $(".switch").show()
-                thisClass.InitPersonal(r);
-                if(historyVt === 's') {
-                  $(".switch").click(toEntNichePage);
-                }
-                extend(1)
-                return
-              }
-                setTimeout(function(){
-                    if (scrollTop==0 && r.haskey){
-                        $(".header_header").show();
-                    }
-                },200)
-
-                // 获取一下cache的列表数据
-                var listString = sessionStorage.getItem('historypushDataCache')
-                if (listString) {
-                    listString = JSON.parse(listString)
-                }
-
-                // 非vip
-                if (myInfo.userType !== 'vip') {
-                    if (listString) {
-                        $('.header_header').show()
-                    }
-                }
-                $(".app-content").css("justify-content","flex-start");
-                $(".switch").addClass("only-personal");
-                $(".switch .user_pro").text("立即使用 超级订阅");
-                $(".switch").click(tointroducepage);
-                $(".switch_ext").click(tointroducepage);
-                thisClass.InitPersonal(r);
-                extend(0);
-                // 免费用户删除类名
-                vm.RemoveClass('vip')
-                vm.RemoveClass('big')
-            } else {
-                thisClass.InitPersonal(r);
-                extend(1)
-            }
-        }
-      });
-  }
-  // 是否有未读的周报月报
-  function reportHtml(r){
-    if (r.unread > 0) {
-      $(".vip_report>a").show();
-    }else{
-      $(".vip_report>a").hide();
-    }
-    if (r.tip) {
-      if (r.tip.type == 2) {
-        $(".vip_report_tip .weekly>span").text("周");
-      } else {
-        $(".vip_report_tip .weekly>span").text("月");
-      }
-      $(".vip_report_tip .term").text(new Date(Number(r.tip.startdate + "000")).Format("yyyy年M月d日") + "-" + new Date(Number(r.tip.enddate + "000")).Format("yyyy年M月d日"));
-      $('.vip_report_tip').fadeIn();
-      $('.vip_report_todetail').on('click', function () {
-        $('.vip_report_tip').fadeOut();
-        localStorage.removeItem("reportTipTime");
-        localStorage.removeItem("reportData");
-        updateReportStatus(r.tip);
-      });
-      $('.weui-dialog img.vip_report_tip_close').click(function () {
-        $('.vip_report_tip').fadeOut();
-        localStorage.removeItem("reportTipTime");
-        localStorage.removeItem("reportData");
-        updateReportStatus();
-      });
-    }
-  }
-
-function extend(i){
-  window.listScroll = function() {
-    if (i==0){
-      var nowT = $(".listcontent").scrollTop()
-      if (nowT > 0) {
-        if (nowT > 50) {
-          // 修复非超级订阅用户,但是大会员会用户。在筛选结果只有4条数据时候滚动产生的无限循环
-          // 无限循环触发条件:nowT<50,设置高度,触发scroll事件,nowT<50 ...以此无限循环触发
-          $(".header_header").css({height: (60 - nowT) +'px'})
-          $(".header_header").hide();
-          $(".switch").fadeIn();
-        }else{
-          $(".header_header").show();
-          $(".switch").fadeOut();
-        }
-      } else {
-        $(".header_header").css({height: (60) +'px'})
-        $(".header_header").show()
-        $(".switch").fadeOut();
-      }
-    }
-  }
-}
-  //下拉刷新
-  function reloadFirstPage(me) {
-      if($(".vip_report").is(":hidden")||$(".vip_report>a").is(":hidden")){
-        afterJyObjInit();
-      }
-      selectArea = vm.area; // 地区
-      selectCity = vm.city; // 城市
-      selectIndustry = vm.subscopeclass // 行业
-      selectCate = vm.buyerclass // 采购单位
-      selectKeyword = vm.key // 关键词
-      selectNotice = vm.subtype // 公告类型
-      selectFile = vm.selectFile
-      selectMoney = vm.selectMoney
-      console.log('刷新-ajax', selectFile, selectMoney);
-      $.ajax({
-          type: 'post',
-          url: '/publicapply/subscribe/historyPush?t=' + new Date().getTime(),
-          data: {
-            selectTime: firstTime || vm.time,
-            pageNum: 1,
-            area: selectArea,
-            city: selectCity,
-            subscopeclass: selectIndustry,
-            buyerclass: selectCate,
-            key: selectKeyword,
-            subtype: selectNotice,
-            fileExists: selectFile,
-            price: selectMoney
-          },
-          async: false,
-          dataType: 'json',
-          success: function (data) {
-              pageIndex = 1;
-              lasttime = data.thistime;
-              firstPage = data.data;
-              hasNextPage = data.hasNextPage;
-              words = data.matchkeys;
-              count = 0;
-              dataCache = new Array();
-              $("#list>*").remove();
-              hasNextPage = true;
-              me.$domDown.html(me.opts.domDown.domLoad);
-              me.isData = true;
-              me.isLockUp = false;
-              me.isLockDown = false;
-              if (data.data.length == 0) {
-                  noMoreData(me);
-              } else {
-                  pageIndex++;
-                  lasttime = data["thistime"];
-                  dataCache = dataCache.concat(data["data"]);
-                  structureHtml(data["data"], true);
-                  if (data.hasNextPage) {
-                      // 每次数据插入,必须重置
-                      me.resetload();
-                  } else {
-                      noMoreData(me);
-                  }
-              }
-          },
-          error: function (xhr, type) {
-              hasNoData(me);
-          }
-      });
-  }
-
-  function loadDatas(me, le) {
-      wxflag = me;
-      selectArea = vm.area; // 地区
-      selectCity = vm.city; // 城市
-      selectIndustry = vm.subscopeclass // 行业
-      selectCate = vm.buyerclass // 采购单位
-      selectKeyword = vm.key // 关键词
-      selectNotice = vm.subtype // 公告类型
-      selectFile = vm.selectFile
-      selectMoney = vm.selectMoney
-      if(vm.hasNextPage) {
-        $.ajax({
-          type: 'post',
-          url: '/publicapply/subscribe/historyPaging',
-          data: {
-            pageNum: pageIndex,
-            selectTime: firstTime || vm.time,
-            area: selectArea,
-            city: selectCity,
-            subscopeclass: selectIndustry,
-            buyerclass: selectCate,
-            key: selectKeyword,
-            subtype: selectNotice,
-            vt:historyVt,
-            fileExists: selectFile,
-            price: selectMoney
-          },
-          dataType: 'json',
-          success: function (data) {
-              //没有数据
-              if (data.data.length == 0) {
-                  noMoreData(me);
-              } else {
-                  pageIndex++;
-                  lasttime = data["thistime"];
-                  dataCache = dataCache.concat(data["data"]);
-                  structureHtml(data["data"], false);
-                  if (data.hasNextPage) {
-                      // 每次数据插入,必须重置
-                      me.resetload();
-                  } else {
-                      noMoreData(me);
-                  }
-              }
-          },
-          error: function (xhr, type) {
-              noMoreData(me);
-          }
-        });
-      }
-  }
-
-  function noMoreData(me) {
-      if (me == null) {
-          return;
-      }
-      wxflag = me;
-      hasNextPage = false;
-      // 锁定
-      me.lock();
-      // 无数据
-      me.noData();
-      // 即使加载出错,也得重置
-      me.resetload();
-  }
-
-function hasNoData() {
-    var nokeyNoDataShow = $('.findnull-no-key').is(':visible')
-    var NoDataShow = $('.findnull-no-key').is(':hidden')
-    $(".listcontent").hide()
-    $("#loading").hide()
-    $('#select-meau').css({'visibility': 'initial'})
-    $('#select-meau').css({'display': 'flex'})
-    $(".color_top").hide()
-    // 如果no-key-no-data 不显示,才会显示no-data
-    if (!nokeyNoDataShow || !NoDataShow) {
-        $(".findnull_").css("display", "block")
-        $('.findnull_').siblings('.empty').hide()
-    } else {
-        $(".findnull_").css("display", "none")
-    }
-    if(!NoDataShow) {
-        if(!myInfo.haskey){
-          if(myInfo.userType == 'entniche') {
-            $(".findnull_").css("display", "block").siblings('.empty').hide()
-          } else {
-            $('.findnull-no-key').css("display", "block").siblings('.empty').hide()
-          }
-        } else {
-          $(".findnull_").css("display", "block").siblings('.empty').hide()
-        }
-    }
-}
-
-  function structureHtml(object, showAd) {
-      $('.findnull').hide()
-      $('.findnull_').hide()
-      $('.findnull-no-key').hide()
-      var listhtml = '';
-      var ad = $("#advertscript").html();
-      for (var index in object) {
-          var obj = object[index];
-          //标题(需要高亮)
-          var title = obj.title;
-          if(title==""||title==undefined){
-            continue
-          }
-          count++;
-          var mWords = "";
-          var _words = "";
-          if (obj.matchkeys != undefined && obj.matchkeys != null) {
-              _words = obj.matchkeys;
-          }
-          if (_words != null && _words.length > 0) {
-              for (var n = 0; n < _words.length; n++) {
-                  var keysTemp = _words[n].split("+");
-                  for (var m = 0; m < keysTemp.length; m++) {
-                      title = keyWordHighlight(title, keysTemp[m], '<font class="keyword">$1</font>');
-                  }
-              }
-              mWords = _words.join("_");
-          }
-          //地区
-          var area = obj.area;
-          var areaList = "";
-          if (area != "") {
-              area = $.trim(area);
-              area = area == "A" ? "全国" : area;
-              areaList = '<span class="location">' + area + '</span>';
-          }
-          //类型
-          var datatype = obj.type;
-          var datatypeList = "";
-          var datatypeTable = "";
-          if (datatype != "") {
-              datatypeList = '<span class="type">' + datatype + '</span>'
-              datatypeTable = datatype + "公告"
-          }
-          //行业
-          var ca_isvip = obj.ca_isvip
-          var industryname = "";
-          var industryListname = "";
-          if (ca_isvip) {
-              if (obj.buyerclass != null && obj.buyerclass != "") {
-                  industryname = obj.buyerclass
-                  industryListname = '<span class="buyerclass">' + industryname + '</span>';
-              }
-          } else {
-              if (obj.s_subscopeclass != null && obj.s_subscopeclass != "") {
-                  industryname = obj.s_subscopeclass
-                  industryListname = '<span class="industry">' + industryname + '</span>';
-              }
-          }
-          // 预算:budget;中标:bidamount
-          var moneyList = "";
-          if (obj.budget != null && obj.budget != "") {
-              moneyList = '<span class="bidamount">' + utils.moneyUnit(obj.budget) + '</span>';
-          }
-          if (obj.bidamount != null && obj.bidamount != "") {
-              moneyList = '<span class="bidamount">' + utils.moneyUnit(obj.bidamount) + '</span>';
-          }
-          //时间
-          var showdateList = ""
-          var showdateTable = ""
-
-          if (obj.publishtime) {
-              showdateList = utils.dateFromNow(obj.publishtime * 1000);
-              showdateTable = formatDate(obj.publishtime)
-              if (showdateList != null) {
-                  showdateList = '<span><i class="jyapp-icon jyapp-icon-bofangjilu" style="color:#7a7a7a;margin-right:2px;"></i>' + showdateList + '</span>'
-              }
-          }
-          //
-          var projectM = obj.ca_type;
-          var projectMList = "";
-          if (projectM == 1) {
-              projectMList = '<span class="projectM">项目匹配</span>'
-          } else {
-              projectMList = areaList + industryListname + datatypeList + moneyList
-          }
-          //序号位置
-          var paddingLeft = 20
-          var countLength = count.toString().length;
-          if (countLength > 1) {
-              paddingLeft = (countLength + 1) * 9;
-          }
-          //是否浏览过
-          var visited = "";
-          if (obj.ca_isvisit == 1) {
-              visited = "visited"
-          }
-          // 是否有附件
-          var fileText = ''
-          if (obj.ca_fileExists) {
-            fileText = '<font class="keyword" style="margin-right:4px;">[有附件]</font>'
-          }
-          if (showAd && index == 3 && !closeAdvert) {//广告位
-              var ad = $("#advertscript").html()
-              if (ad != ""&&ad.length>20) {
-                  listhtml += '<div class="tslist ' + visited + '" style="border-bottom: none;" words="' + mWords + '">'
-                  if (obj.site == '剑鱼信息发布平台') {
-                    listhtml += '<div class="userPublish">用户发布</div>'
-                  }
-                  listhtml += '<div class="resnumb">'
-                      + '<div class="one">'
-                      + '<span class="xh ' + visited + '">' + count + '.</span>'
-                      + '</div>'
-                      + '<div class="two bt-parent" style="display: flex;justify-content: space-between;padding-left:' + paddingLeft + 'px;">'
-                      + '<a class="bt ' + visited + '" eid="' + obj["_id"] + '"  push_date="' + obj["ca_date"] + '" list_index="' + obj["ca_index"] + '" projectM="' + obj["ca_type"] + '">' + fileText + title + '</a>'
-                      + '<div class="collec_star" collecnum="'+obj["collection"]+'" data-id="' + obj["_id"] + '">'
-                      + '<span class="shoucang"></span>'
-                      + '<span class="weishoucang"></span>'
-                      + '</div>'
-                      + '</div>'
-                      + '</div>'
-                      + '<div style="clear:both;">'
-                      + '</div>'
-                      + '<div class="restime time-diff">' + projectMList + showdateList + '</div>'
-                      + '<div style="clear:both;"></div>'
-                      + '</div>'
-                      + '<div class="adv-wxpush-center" adv_name="APP推送历史页-中部" id="E1">' + ad + '</div>'
-                  continue
-              }
-          }
-          listhtml += '<div class="tslist ' + visited + '" words="' + mWords + '">'
-          if (obj.site == '剑鱼信息发布平台') {
-            listhtml += '<div class="userPublish">用户发布</div>'
-          }
-          listhtml += '<div class="resnumb">'
-              + '<div class="one">'
-              + '<span class="xh ' + visited + '">' + count + '.</span>'
-              + '</div>'
-              + '<div class="two bt-parent" style="display: flex;justify-content: space-between;padding-left:' + paddingLeft + 'px;">'
-              + '<a class="bt ' + visited + '" eid="' + obj["_id"] + '"  push_date="' + obj["ca_date"] + '" list_index="' + obj["ca_index"] + '" projectM="' + obj["ca_type"] + '">' + fileText + title + '</a>'
-              + '<div class="collec_star" collecnum="'+obj["collection"]+'" data-id="' + obj["_id"] + '">'
-              + '<span class="shoucang"></span>'
-              + '<span class="weishoucang"></span>'
-              + '</div>'
-              + '</div>'
-              + '</div>'
-              + '<div style="clear:both;">'
-              + '</div>'
-              + '<div class="restime time-diff">' + projectMList + showdateList + '</div>'
-              + '<div style="clear:both;"></div>'
-              + '</div>'
-      }
-      if (object.length <= 3 && ad != undefined && ad != "" && !closeAdvert && showAd) {
-          appendList($("<div>" + listhtml + "<div class='adv-wxpush-center' id='E1'>" + ad + "</div></div>"));
-      } else {
-          appendList($("<div>" + listhtml + "</div>"));
-      }
-      if (object.length <= 4 && ad != undefined && ad != "") {
-          $(".closeadv").css("display", "none");
-          $(".closeadv-bg").css("display", "none");
-      } else {
-          $(".closeadv").css("display", "");
-          $(".closeadv-bg").css("display", "");
-      }
-    //   控制收藏五角星显示隐藏
-      $('.collec_star').each(function(item, index) {
-        // console.log($('.collec_star').eq(item)[0])
-        let collecnum = $('.collec_star').eq(item).attr('collecnum')
-        if(collecnum == 1) {
-            $('.collec_star').eq(item).find('.shoucang').show()
-            $('.collec_star').eq(item).find('.weishoucang').hide()
-        }else{
-            $('.collec_star').eq(item).find('.shoucang').hide()
-            $('.collec_star').eq(item).find('.weishoucang').show()
-        }
-      })
-
-       // 收藏或取消收藏
-        $('.collec_star').on('click', function(e){
-            const _this = this
-            e.stopPropagation()
-            const id = $(this).attr('data-id')
-            var shoucang = $(_this).find('.weishoucang').is(':hidden')
-            // 说明未收藏,点击收藏
-            if (vKeepComponent) {
-                vKeepComponent.changeBid(id, !shoucang)
-                // if(listnum < 100) {
-                //     vKeepComponent.changeKeepStatus(!shoucang, _this)
-                // }
-            }
-        })
-  }
-
-  var vKeepComponent = new Vue({
-        delimiters: ['${', '}'],
-        el: '#jyKeepComponent',
-        data: {
-            nowOpenBid: ''
-        },
-        methods: {
-            changeBid (id, type) {
-                this.nowOpenBid = id
-                this.$refs.vKeepComponent.ajaxAddKeep(id, type)
-            },
-            changeKeepStatus (type, that) {
-                if (!that) {
-                  that = $('*[data-id="'+this.nowOpenBid+'"]')
-                }
-                changeCollectStatus(type, that)
-                changeCollectDataStatus(type, this.nowOpenBid)
-            }
-        }
-    })
-    function changeCollectDataStatus (type, id) {
-        if (dataCache && $.isArray(dataCache)) {
-            dataCache.forEach(function (item) {
-                if (item._id == id) {
-                    item.collection = type ? 1 : 0
-                }
-            })
-        }
-    }
-    function changeCollectStatus(type, that) {
-        if(type) {
-            $(that).find('.shoucang').show()
-            $(that).find('.weishoucang').hide()
-            listnum++
-        } else {
-            $(that).find('.shoucang').hide()
-            $(that).find('.weishoucang').show()
-            listnum--
-        }
-    }
-
-  //
-  function formatDate(date, sl) {
-      var myDate = new Date(date * 1000);
-      var year = myDate.getFullYear();
-      var month = myDate.getMonth() + 1;
-      if (month < 10 && sl != "1") {
-          month = "0" + month
-      }
-      var date = myDate.getDate();
-      if (date < 10 && sl != "1") {
-          date = "0" + date
-      }
-      var hour = myDate.getHours()
-      var min = myDate.getMinutes()
-      if (sl == "1") {
-          if (hour < 10) {
-              hour = "0" + hour
-          }
-          if (min < 10) {
-              min = "0" + min
-          }
-          return year + "-" + month + "-" + date;
-      } else if (sl == "2") {
-          return year + "." + month + "." + date;
-      } else {
-          return year + "<br>" + month + "" + date;
-      }
-  }
-    function hiddenTips2() {
-        $('#tipsType').hide()
-    }
-    function updateJump2() {
-        $('#tipsType').hide()
-        location.href = '/jyapp/areaPack/page/set_area'
-        // location.replace('/jyapp/vipsubscribe/toSubVipSetPage?vSwitch=v')
-        // $.ajax({
-        //     url: '/publicapply/free/oneProvinceSet',
-        //     type: 'POST',
-        //     success: function (res) {
-        //         location.href = '/jyapp/areaPack/page/set_area'
-        //     }
-        // })
-    }
-  //
-  function appendList(content) {
-      content.children(".tslist").on("click", function (event) {
-        if (!window.userNewType&&!(vm.rootInfo.vipStatus>0||vm.rootInfo.memberStatus>0||myInfo.userType == 'entniche')) {
-            $('#tipsType').show()
-          } else {
-            $('#tipsType').hide()
-            var isv = $(this).find("a.bt").hasClass("visited");//是否为已读
-            setVisitedIndex($(this), "");
-            var sds = $(this).attr("words");
-            var h = $(this).find("a.bt").attr("s");
-            var eid = $(this).find("a.bt").attr("eid");
-            var index = $(this).find("a.bt").attr("projectm");
-            var pdate = $(this).find("a.bt").attr("push_date");
-            beforeJump(eid, h, sds, index, pdate, isv);
-            sessionStorage.setItem(vm.sessStorageKey, JSON.stringify(vm.$data))
-          }
-        })
-        $("#list").append(content);
-        $(".findnull").hide();
-        $(".listcontent").show();
-        setTimeout(function () {
-            $("#loading").hide();
-        }, 500)
-  }
-
-  function beforeJump(eid, h, sds, index, pd, vis) {
-      if (!vis) {
-          for (var i = 0; i < dataCache.length; i++) {
-              if (dataCache[i]._id == eid && dataCache[i].ca_date == pd) {
-                  dataCache[i].ca_isvisit = 1;
-                  break
-              }
-          }
-      }
-      setSessionStorage();
-      newredirect("", h, eid, "subkey_" + sds, index);
-  }
-
-  function setSessionStorage() {
-      if (sessionStorage && dataCache.length >= 0) {
-          sessionStorage.closeAdvert = closeAdvert;
-          sessionStorage.historypushScrollTop = scrollTop;
-          sessionStorage.historypushDataCache = JSON.stringify(dataCache);
-          sessionStorage.historypushPageIndexCache = pageIndex;
-          sessionStorage.historypushHasNextPage = hasNextPage;
-          sessionStorage.superSearch_iosNoRefresh = 'detail'
-          sessionStorage.hasFreeMore = $(".seeMore").is(":visible").toString()
-      }
-  }
-
-  function removeSessionStorage() {
-      sessionStorage.removeItem("historypushDataCache");
-      sessionStorage.removeItem("historypushPageIndexCache");
-      sessionStorage.removeItem("historypushScrollTop");
-      sessionStorage.removeItem("historypushHasNextPage");
-      sessionStorage.removeItem("closeAdvert");
-      sessionStorage.removeItem("hasFreeMore");
-  }
-
-  function setVisitedIndex(obj, eid) {
-      if (obj.find("a.bt").hasClass("visited") || obj.hasClass("visited")) {
-          return;
-      }
-      obj.find("a.bt").addClass("visited");
-      obj.find("span.xh").addClass("visited");
-      var vsid = obj.find("a.bt").attr("list_index");
-      if (vsid) {
-          $.ajax({
-              type: 'post',
-              url: '/publicapply/subscribe/setRead?t=' + new Date().getTime(),
-              data: {vsid: vsid},
-              async: false
-          });
-      }
-  }
-
-  //
-  var ajaxFlag = true;
-
-  function ajaxFun(time, area, city, subscopeclass, buyerclass, key, subtype, file, price) {
-    if(historyVt == 's') {
-      $(".set_keyword").hide();
-    }
-      if (!ajaxFlag) {
-          return
-      }
-      ajaxFlag = false;
-      $("#loading").show();
-      if(!time && !area && !city && !subscopeclass && !buyerclass && !key && !subtype){
-        afterJyObjInit();
-      }
-      if(isPageShow == '1') {
-        localStorage.removeItem('hideBottom')
-        JyObj.hiddenBottom("0");
-      }
-      // console.log(historyVt, 'historyVt');
-      console.log('ajaxFun-ajax', file, price);
-      $.ajax({
-          type: 'post',
-          url: '/publicapply/subscribe/historyPush?t=' + new Date().getTime(),
-          data: {
-            selectTime: time,
-            area: area,
-            city: city,
-            subscopeclass: subscopeclass,
-            pageNum: 1,
-            buyerclass: buyerclass,
-            key: key.replace(/\s/g, ','),
-            subtype: subtype,
-            vt:historyVt,
-            fileExists: file,
-            price: price
-          },
-          async: false,
-          dataType: 'json',
-          success: function (data) {
-            if(!data.data) {
-              hasNoData
-              return
-            }
-              pageIndex = 2;
-              lasttime = data.thistime;
-              firstPage = data.data;
-              hasNextPage = data.hasNextPage;
-              vm.hasNextPage = data.hasNextPage
-              userId = data.userId;
-              ajaxFlag = true;
-              if(!data.haskey) {
-                if(historyVt == 'm' && vm.rootInfo.isSubCount) {
-                    $(".set_keyword").hide();
-                } else if(historyVt == 's') {
-                    $(".set_keyword").hide();
-                } else {
-                  $(".set_keyword").show();
-                }
-              } else {
-                $(".set_keyword").hide();
-              }
-              if (time == undefined || time == "") {
-                  sessionStorage.removeItem(userId + "_searchTime");
-              } else {
-                  sessionStorage.setItem(userId + "_searchTime", time);
-              }
-              if (!area) {
-                  sessionStorage.removeItem(userId + "_selectArea");
-              }
-              if (!city) {
-                  sessionStorage.removeItem(userId + "_selectCity");
-              }
-              if (!selectFile) {
-                sessionStorage.removeItem(userId + "_selectFile");
-              }
-              if (!selectMoney) {
-                sessionStorage.removeItem(userId + "selectMoney");
-              }
-          },
-          error: function (xhr, type) {
-              ajaxFlag = true;
-              hasNoData();
-          }
-      });
-      dataCache = firstPage;
-      if (firstPage.length == 0) {
-          if ($(".findnull").css("display") == "block") {
-              $(".findnull").css("display", "none");
-          }
-          hasNoData();
-          return;
-      }
-      $("#list").html("");
-      count = 0;
-      structureHtml(firstPage, true);
-      setTimeout(function () {
-          $(".listcontent").scrollTop(0);
-      }, 300);
-      //================================
-      if (hasNextPage) {
-          setTimeout(function () {
-              wxflag = $('.listcontent').dropload({
-                  scrollArea: $(".listcontent"),
-                //   loadUpFn: function (me) {
-                //       //loadDatas(me,-1);
-                //       reloadFirstPage(me);//下拉刷新更新订阅词
-                //   },
-                  loadDownFn: function (me) {
-                      loadDatas(me, lasttime);
-                  }
-              });
-          }, 800);
-      } else {
-          wxflag = $('.listcontent').dropload({
-              scrollArea: $(".listcontent"),
-            //   loadUpFn: function (me) {
-            //       loadDatas(me, -1);
-            //   },
-              loadDownFn: function (me) {
-                  loadDatas(me, lasttime);
-              }
-          });
-          noMoreData(wxflag);
-      }
-  }
-
-  //免费用户关键词设置
-  function tokeyset() {
-    setSessionStorage()
-    // 如果没有订阅过,先去引导页(keyset/index会被重定向到引导页)
-    // 判断当前世大会员还是超级订阅
-    let switchProduct = sessionStorage.getItem('switch-product')
-    if(switchProduct) {
-        if(switchProduct == 'bigmember') {
-            window.location.href = '/jyapp/vipsubscribe/toSetKeyWordPage?vSwitch=m';
-        } else if(switchProduct == 'entniche') {
-          window.location.href = '/page_entniche_new/page/subsetting/keyWord.html'
-        } else {
-            if (isInTSguide) {
-                window.location.href = '/jyapp/wxkeyset/keyset/index';
-            } else {
-                if (myInfo.haskey) {
-                    window.location.href = '/jyapp/wxkeyset/keyset/index';
-                } else {
-                    if(myInfo.userType=="vip") {
-                        window.location.href = '/jyapp/vipsubscribe/toSetKeyWordPage'
-                    } else {
-                        //window.location.href = '/jyapp/vipsubscribe/toSetKeyWordPage'
-                        window.location.href = '/jyapp/vipsubscribe/toSubVipSetPage';
-                    }
-                }
-            }
-        }
-    } else {
-        if (isInTSguide) {
-            window.location.href = '/jyapp/wxkeyset/keyset/index';
-        } else {
-            if (myInfo.haskey) {
-                window.location.href = '/jyapp/wxkeyset/keyset/index';
-            } else {
-                if(myInfo.userType=="vip") {
-                    window.location.href = '/jyapp/vipsubscribe/toSetKeyWordPage'
-                } else {
-                    //window.location.href = '/jyapp/vipsubscribe/toSetKeyWordPage'
-                    window.location.href = '/jyapp/vipsubscribe/toSubVipSetPage';
-                }
-            }
-        }
-    }
-
-  }
-  // 清除超级订阅购买、续费、升级页面相关的优惠券、商品规格缓存
-  sessionStorage.removeItem('vip-cur-select-coupon')
-  sessionStorage.removeItem('$select-coupon')
-  sessionStorage.removeItem('vip-cur-select-size')
-  //介绍页
-  function tointroducepage() {
-      setSessionStorage();
-      window.location.href = "/jyapp/vipsubscribe/introducePage";
-  }
-
-  //我的企业列表
-  function toEntNichePage() {
-      setSessionStorage();
-      window.location.href = "/page_entniche_new/home";
-  }
-
-  //vip设置
-  function tosetpage() {
-      setSessionStorage();
-      window.location.href = "/jyapp/vipsubscribe/toSubVipSetPage?vSwitch=v";
-  }
-
-  //vip关键词设置
-  function tosetkeyspage() {
-      setSessionStorage();
-      window.location.href = "/jyapp/vipsubscribe/toSetKeyWordPage";
-  }
-
-  //续费
-  function torepay() {
-      setSessionStorage();
-      // window.location.href = "/jyapp/vipsubscribe/vipsubscribe_renew";
-      window.location.href = "/jy_mobile/common/order/create/svip?type=renew";
-  }
-
-  //购买
-  function topay() {
-      setSessionStorage();
-      // window.location.href = "/jyapp/vipsubscribe/vipsubscribe_new";
-      window.location.href = "/jy_mobile/common/order/create/svip?type=buy";
-  }
-  function updateReportStatus(tip) {
-      $.post("/subscribepay/report/tipover?t=" + new Date().getTime(), {type:productType==2?"member":"vip"}, function (r) {
-        if (tip) {
-          if(productType == 2){//大会员
-            if (tip.type == 2) { //周
-              window.location.href = "/jyapp/big/page/report_detail_week?start=" + tip.startdate + "&end=" + tip.enddate + "&pushcount=" + tip.pushcount+"&type=member";
-            }else{//月
-              window.location.href = "/jyapp/big/page/report_detail_month?start=" + tip.startdate + "&end=" + tip.enddate + "&pushcount=" + tip.pushcount+"&type=member";
-            }
-          }else{//超级订阅
-            window.location.href = "/vipreport/page/reportdetail.html?start=" + tip.startdate + "&end=" + tip.enddate + "&pushcount=" + tip.pushcount+"&type=vip";
-          }
-        }
-      });
-  }
-  function afterJyObjInit(){
-    try{
-      JyObj.hideRedSpotOnMenu("subscribe");
-    }catch(e){}
-  }
-  function iphoneXInit(){
-    $(".app-layout-content-b").css("top","89px");
-  }
-</script>
-<script type="text/javascript" charset="UTF-8">
-    function weuiDialog() {
-        weui.dialog({
-            title: '提示信息',
-            content: '您未设置关键词<br/>设置后接收信息更精确',
-            className: 'jymobile-setting-dialog',// 设置弹框的类名
-            buttons: [
-                {
-                    label: '去设置',
-                    type: 'primary',
-                    onClick: function () {
-                        // console.log('确定')
-                        tosetkeyspage();
-                    }
-                },
-                {
-                    label: '取消',
-                    type: 'default',
-                    onClick: function () {
-                        console.log('取消')
-                    }
-                }
-            ]
-        });
-    }
-
-    $('.open_remind .icon-chahao').on('click', function () {
-        $('.open_remind').hide()
-    })
-    //禁止默认行为方法
-    function stopScroll(e) {
-        e.preventDefault()
-    }
-    //用户合并
-    $(".dialog_alert .close").on("click",function(){
-      localStorage.canshowother=true
-      $(".dialog_alert").hide()
-    })
-    $(".dialog_alert .dialog_ft").on("click",function(){
-      localStorage.canshowother=true
-      window.location.href='/page_entniche/page/user/account_merge.html'
-    })
-    //关闭 其他采购单位行业 弹窗
-    function close_other(){
-      $(".jy-alert-other").hide();
-    }
-
-    //
-    $(function () {
-        $('#list').on('tap longTap', '.tslist',function(e){
-            var tempS = $(this).addClass("hover")
-            setTimeout(function () {
-                tempS.removeClass('hover')
-            }, 50)
-        })
-        try{
-          document.querySelector('.screen').addEventListener('touchmove', stopScroll, {passive: false});
-          document.querySelector('.tab_left').addEventListener('touchmove', stopScroll, {passive: false});
-          document.querySelector('.tab_right').addEventListener('touchmove', stopScroll, {passive: false});
-          document.querySelector('.handle_menu').addEventListener('touchmove', stopScroll, {passive: false});
-        }catch(e){}
-        if (firstTime != "" && firstTime != null) {
-            date = formatDate(firstTime / 1000, "1");
-        }
-
-        // 关闭设置弹窗
-        $('#close_set').on('click', function () {
-            $('.set_keyword').hide()
-        })
-        $('#close_renew').on('click', function () {
-            $('.renew_toast').hide()
-        })
-        $('#_close_renew').on('click', function () {
-            $('._renew_toast').hide()
-        })
-        $('#nv_close_renew').on('click', function () {
-            localStorage.setItem("nv_vip_" + userId, "T");
-            $('.nv_renew_toast').hide()
-        })
-
-    })
-    var mergedlist = []
-    var merge_industry = ["国土","林业","环保","卫生","工商","质监","食药","安监","地震","公安","文化","旅游","银监","保监"]
-    function checkmerge(state) {
-        if (checkindustry(state)){
-            var tips = "<span style='font-size:15px;font-family:PingFang SC;font-weight:bold;color:rgba(29,29,29,1);opacity:1;'>随着政府机构改革和职能转变工作深入推进,部分采购单位行业与现实不一致,为了提高订阅推送数据的准确性,剑鱼标讯需要针对采购单位行业名称进行优化。</span><br><span style='font-size:13px;font-family:PingFang SC;font-weight:400;color:rgba(104,104,104,1);opacity:1;'>采购单位名称的调整不影响所购买的采购单位数量,您仍可按需调整。<br><br>您订阅的:<br></span>"
-            var hasMerged = isread
-            var s_count=h_count=m_count=p_count=cultural_count=CBRC_count=t_count = 0
-            var nature_source = ["国土","林业"];
-            var health_commission = ["卫生"]
-            var market_supervision = ["工商","质监","食药"]
-            var contingency_management = ["安监","地震","公安"]
-            var cultural_tourism = ["文化","旅游"]
-            var CBRC = ["银监","保监"]
-            var ecological_environment = ["环保"]
-
-            state.forEach(function (item,index) {
-                if (merge_industry.indexOf(item)>-1){
-                    if (item == "国土"||item == "林业"){
-                        mergedlist.push("自然资源")
-                        // hasMerged = true
-                        nature_source = Highlight(nature_source,item)
-                        s_count++
-                    } else if (item == "环保"){
-                        mergedlist.push("生态环境")
-                        // hasMerged = true
-                        ecological_environment = Highlight(ecological_environment,item)
-                        h_count++
-
-                    } else if ( item == "卫生"){
-                        mergedlist.push("卫健委")
-                        // hasMerged = true
-                        health_commission= Highlight(health_commission,item)
-                        p_count++
-                    } else if (item == "工商"||item == "质监"||item == "食药"){
-                        mergedlist.push("市场监管")
-                        // hasMerged = true
-
-                        market_supervision =  Highlight(market_supervision,item)
-                        m_count++
-                    } else if (item == "地震"||item=="安监"||item=="公安"){
-                        if (item !=="公安"){
-                            mergedlist.push("应急管理")
-                        }else{
-                            mergedlist.push("公安")
-                        }
-                        // hasMerged = true
-                        contingency_management = Highlight(contingency_management,item)
-                        t_count++
-                    } else if (item=="文化"||item == "旅游"){
-                        mergedlist.push("文旅")
-                        // hasMerged = true
-                        cultural_tourism = Highlight(cultural_tourism,item)
-                        cultural_count++
-                    } else if  (item == "银监"||item == "保监"){
-                        mergedlist.push("银保监")
-                        // hasMerged = true
-                        CBRC= Highlight(CBRC,item)
-                        CBRC_count++
-                    }
-                }else{
-                    mergedlist.push(item)
-                }
-            })
-            if(s_count>=1){
-                tips +=nature_source.join('、')+" 合并为 【自然资源】<br>"
-            }
-            if (h_count>=1){
-                tips +=ecological_environment.join('、')+" 整合其他部门部分职能后更改为 【生态环境】<br>"
-            }
-            if (p_count>=1){
-                tips +=health_commission.join('、')+" 变更为 【卫健委】<br>"
-            }
-            if (m_count>=1){
-                tips +=market_supervision.join('、')+" 合并为 【市场监管】<br>"
-            }
-            if (t_count>=1){
-                tips +=contingency_management.join('、')+"中的消防 合并为 【应急管理】<br>"
-            }
-            if (cultural_count>=1){
-                tips +=cultural_tourism.join('、')+" 合并为 【文旅】<br>"
-            }
-            if (CBRC_count>=1){
-                tips +=CBRC.join('、')+" 合并为 【银保监】<br>"
-            }
-            if (!hasMerged){
-                $("#merge_content").html(tips)
-                $("#merge_dialog").show()
-            }
-        }
-
-    }
-
-    function acceptchange() {
-        var q = removeDuplicatedItem(mergedlist)
-        $.post("/subscribepay/vipsubscribe/mergeIndustry",{"industry":q.toString(),"isread":true},function (r) {
-            if (r.success){
-                console.log("行业合并成功")
-            }else{
-                console.log("行业合并失败")
-            }
-        })
-        $("#merge_dialog").hide()
-    }
-    function Highlight(a_list,key) {
-        a_list.forEach(function (item,index) {
-            if (item == key){
-                var m = "<span style='color:red'>"+item+"</span>"
-                a_list[index] = m
-
-            }
-        })
-        return a_list
-    }
-    function removeDuplicatedItem(ar) {
-        var ret = [];
-
-        for (var i = 0, j = ar.length; i < j; i++) {
-            if (ret.indexOf(ar[i]) === -1) {
-                ret.push(ar[i]);
-            }
-        }
-
-        return ret;
-    }
-    function checkindustry(industry){
-        var isinclude = false
-        if(!industry) {
-          return isinclude
-        }
-        industry.forEach(function (item,index) {
-            if (merge_industry.indexOf(item)>-1){
-                isinclude =  true
-                return
-            }
-        })
-        return isinclude
-    }
-</script>
-
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/js/historypush.js?v={{Msg "seo" "version"}}'></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/weui.js/1.2.1/weui.min.js></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/history-push/js/old-page-script.js?v={{Msg "seo" "version"}}'></script>
 </html>

+ 85 - 38
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -659,17 +659,13 @@
                 <div class="mask-zz">
                     <div style="position: relative">
                         <img class="dialog-top-img" src='/jyapp/images/wx/pc_zzt.png?v={{Msg "seo" "version"}}'>
-                        <div id="dialog-tip-title" style="position: absolute;top: 50%;left: 50%; transform: translateX(-50%);height: 26px;color: antiquewhite;font-size: 16px;">拟建项目抢先获知</div>
+                        <div id="dialog-tip-title" style="position: absolute;top: 50%;left: 50%; transform: translateX(-50%);height: 26px;color: antiquewhite;font-size: 16px;white-space: nowrap;">超前项目抢先知,中标更容易</div>
                     </div>
                     <div style="display: flex;flex-direction: column;justify-content: center;align-items: center;padding: 0.48rem 0.32rem;">
                         <div class="dialog-tip-text">
-                            提前获取正在审批中的
-                            <br>
-                            新项目,比招标信息更超前!
-                            <br>
-                            助您提前了解项目信息,把握重要商机!
+                            提前3-12个月获取审批中的新项目,超前项目抢先介入,商机提前掌控。
                         </div>
-                        <button class="free-btn-reword" style="background-color:  #2CB7CA;font-size: 0.32rem;color: white;border:none;width: 100%;height:0.72rem;border-radius: 0.12rem;">免费体验</button>
+                        <button class="free-btn-reword" style="background-color:  #2CB7CA;font-size: 0.32rem;color: white;border:none;width: 100%;height:0.72rem;border-radius: 0.12rem;">点击进入</button>
                     </div>
                 </div>
             </div>
@@ -712,7 +708,7 @@
                 </div>
                 <!-- e 大会员引流 e -->
                 <div id="tab2">
-                    <pre id="h_content">{{Html (Regexp (Regexp .T.obj.detail "(\\n|\\\\n)\\s+" "\n") "(\\n|\\\\n)+" "<br/>")}}</pre>
+                  <pre id="h_content">{{Html (Regexp (Regexp (or .T.obj.detail "") "(\\n|\\\\n)\\s+" "\n") "(\\n|\\\\n)+" "<br/>")}}</pre>
                 </div>
             </div>
             {{if .T.obj.projectinfo.attachments}}
@@ -918,6 +914,7 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
 <script src='/common-module/keep-tags/keep-tags-template.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/keep-tags/keep-ent-tags-template.js?v={{Msg "seo" "version"}}'></script>
+<script src='/common-module/mainSearch/js/advanced-project-table-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
 <!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
 <script> new VConsole(); </script> -->
@@ -1006,6 +1003,8 @@
     var buyertel_ = checkFreeView({{.T.obj.buyertel}});
     var projectname = {{.T.obj.projectname}};
     var isbid =false; //是否是中标,需要显示所有
+    // 是否超前项目(<拟建>、<采购意向>)
+    var advanceProject = subtype == '拟建'|| subtype == '采购意向'
 
     if (area!=""&&area!=null){
         count++
@@ -1043,7 +1042,7 @@
         // 如果项目是中标、成交、合同类型 则不显示投标决策分析入口
         $('.bid-dec-in').hide()
     }
-     // 判断是否开通大会员
+    // 判断是否开通大会员
     var bigstatus = 0
     var tab1hh;
     var tab2hh;
@@ -1171,9 +1170,7 @@
                 bigstatus = res.data.memberStatus
                 hasServiceArr = res.data.power ? res.data.power : []
                 isFollow()
-                if (window.isFree){
-                  checkShowDialog()
-                }
+                checkShowDialog()
                 if(window.entniche) {
                   $('.claim').show()
                 } else {
@@ -1293,24 +1290,30 @@
     }
     //是否显示遮罩层
     function checkShowDialog () {
-        var hasSubType = subtype == '拟建'|| subtype == '采购意向'
-        if (hasSubType) {
-          if (subtype == '采购意向') {
-            $('#dialog-tip-title').text('想中标?提前介入很关键!')
-            $(".dialog-tip-text").html('采购意向项目全公开,抢先获知采购项目需求,<br> 提前主动介入,中标几率更高!')
-          }
-        } else if (!canRead) {
-            $('#dialog-tip-title').text('免费查看更多公告')
-            $(".dialog-tip-text").html('请完善个人信息,获取更多免费查看公告权限')
-            $(".free-btn-reword").text('立即解锁')
-            $(".tab-ct").hide()
-            $(".atta-list").hide()
-            $(".abs").hide()
-            $(".right-container").hide()
+        // 改遮罩文字
+        if (advanceProject) {
+            if (subtype == '采购意向') {
+                $('#dialog-tip-title').text('项目提前介入,中标更轻松')
+                $(".dialog-tip-text").html('提前1-3个月获取项目信息,及早介入准备更充分')
+            }
+        } else {
+            if (!canRead) {
+                $('#dialog-tip-title').text('免费查看更多公告')
+                $(".dialog-tip-text").html('请完善个人信息,获取更多免费查看公告权限')
+                $(".free-btn-reword").text('立即解锁')
+            }
+            if (!canRead) {
+                $(".right-container").hide() // 收藏和关注
+            }
         }
 
-        if (hasSubType || !canRead) {
-            $(".prebuilt").remove()
+        // 显示隐藏
+        if (!canRead) {
+            // $(".prebuilt").remove()
+            $('#tab2').hide() // 摘要tab1+正文tab2
+            $(".tab-ct").hide() // 正文信息
+            $(".abs").hide() // 阅读原文和意见反馈
+            $(".atta-list").hide() // 附件列表
             $(".mask-zz").removeClass("hidden");
         } else {
             $(".prebuilt").css('height', 'unset')
@@ -1590,7 +1593,8 @@
                     var html = ''
                     if(mySysIsIos()){
                         for(var i=0;i<data.data.attachment.length;i++) {
-                            html += "<li class='downs'>"+"<a class='downfiles' data-href="+data.data.attachment[i].downurl+">"+data.data.attachment[i].filename+"</a></li>"
+                            var size =  data.data.attachment[i].size ? data.data.attachment[i].size.replace(/(^\s+)|(\s+$)|\s+/g,""): ''
+                            html += "<li class='downs'>"+"<a class='downfiles' date-size="+ size +" data-href="+data.data.attachment[i].downurl+">"+data.data.attachment[i].filename+"</a></li>"
                         }
                     }else{
                         for(var i=0;i<data.data.attachment.length;i++) {
@@ -1603,6 +1607,8 @@
                      // 下载附件
                     $('.downs').on('click', function() {
                       var url = $(this).find('a').attr('data-href')
+                      var size = $(this).find('a').attr('date-size')
+                      var fileName = $(this).find('a').text()
                       console.log(window.isNoMember, window.isFree,window.freeFile, window.vipStatus, window.viper)
                       // 免费用户
                       if (window.isFree) {
@@ -1638,7 +1644,7 @@
                         // 大会员用户 有下载权限
                         if (window.isMemberAndPower) {
                           if(mySysIsIos()){
-                            iosShow(url)
+                            iosShow(url,fileName,size,false)
                           } else {
                             location.href = url
                           }
@@ -1648,10 +1654,9 @@
                         if (window.vipStatus > 0) {
                           // 是新超级订阅用户
                           if (window.viper) {
-                            var fileName = $(this).find('a').text()
                             // IOS APP端特殊流程处理,先提示填写邮箱后扣次数
                             if(mySysIsIos()) {
-                              return iosShow(url, fileName)
+                              return iosShow(url, fileName,size,false)
                             }
                             downFileOfVIP(fileName)
                             return
@@ -1723,9 +1728,10 @@
                 for(var i=0;i<r.data.attachment.length;i++) {
                   if (name!=""&&name == r.data.attachment[i].filename){
                     var url = r.data.attachment[i].downurl
+                    var size = r.data.attachment[i].size
                     if (url){
                       if(mySysIsIos()){
-                          iosShow(url)
+                          iosShow(url,name,size,true)
                       } else {
                           location.href = url
                       }
@@ -1737,9 +1743,28 @@
             }
           })
     }
-    andownload()
+    //ios更改为下载
+    //老版本还走邮件模式  新版本走下载 需要判断版本号
+    //isfree 是否是免费
+    function iosShow(url,fileName,size,isfree){
+      var version = JyObj.getVersion()
+      if(version && compareVersion('3.0.4',version)){
+        //切割名称获取格式
+          var name = fileName ? fileName.substring(0, fileName.lastIndexOf('.')) : ''
+          var types = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : ''
+          if (isfree){
+              JyObj.downLoadFile(name,types,url,size);
+          }else{
+            downFileOfVIP(fileName, function (url) {
+              JyObj.downLoadFile(name,types,url,size);
+            })
+          }
+        }else{
+          iosShow_email(url,fileName,isfree)
+        }
+    }
     //如果是ios显示附件下载弹框
-    function iosShow(url, fileName){
+    function iosShow_email(url, fileName,isfree){
         var iptemail = ''
         var goemail = {{.T.email}}
         var downemail = sessionStorage.getItem('downemail')
@@ -1772,7 +1797,7 @@
 
                     //按下确定按钮执行的操作
                     //todo ....
-                    if (fileName) {
+                    if (!isfree) {
                         downFileOfVIP(fileName, function (url) {
                             sendAlert(url,getinputemail)
                         })
@@ -2062,12 +2087,22 @@
             $(".lead-btn").css({'display':'flex'});
             $('.lead_export').hide()
             $('.bigvip_drain').hide()
-		    $('.lead_drain').show()
+            $('.lead_drain').show()
         }else{
             $('.lead-btn').hide()
             $('.lead_drain').hide()
             $('.lead_export').css({'display':'flex'})
         }
+      } else if (advanceProject) {
+        var advanceTableShow = advanceProjectTable.checkTableShow()
+        if (advanceTableShow && canRead) {
+          // 超前项目表格展示
+          $("#tab1").show();
+          $(".fatNav").show();
+          $(".explain").show();
+          $(".lead-btn").css({'display': 'flex'});
+          $('.lead_export').hide()
+        }
       }
       //公告摘要表格基本信息数据
       var outhtml ='';
@@ -2129,7 +2164,15 @@
           }
           outhtml +='<li style="border-top:1px solid #ebebeb;"><p class="name">拟定单一来源采购供应商</p><p class="textcontent">'+rerwinner+'</p></li>'
       }
-      $("#baseInfo ul").html(outhtml);
+      // <拟建项目>、<采购意向>
+      if (advanceProject) {
+        var needShow = advanceProjectTable.checkTableShow()
+        if (needShow) {
+          advanceProjectTable.render()
+        }
+      } else {
+        $("#baseInfo ul").html(outhtml);
+      }
       //中标信息
       if(isbid){
           var rerwinner = {{.T.obj.winnerMap}};
@@ -2858,6 +2901,10 @@
       window.addEventListener('pagehide', function () {
           isPageHide = true;
       });
+      if (canRead) {
+        // 有权限查看的才会下载附件
+        andownload()
+      }
       // 收藏
       $('.collec_star').on('click', function () {
         var $this = $(this)

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

@@ -294,7 +294,7 @@ func (pwp *PortraitProjectScreen) GetWinnerList() (list []map[string]interface{}
 			(*newData)[k]["firsttime"] = rowData["publishtime"]
 		}
 
-		for _, name := range []string{"budget", "subtype", "toptype", "_id", "projectname", "publishtime"} {
+		for _, name := range []string{"subtype", "toptype", "_id", "projectname", "publishtime"} {
 			delete((*newData)[k], name)
 		}
 	}

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

@@ -8,7 +8,7 @@ import (
 	_ "filter"
 	"net/http"
 
-	//_ "qfw/util/jylog" //日志文件
+	_ "qfw/util/jylog" //日志文件
 	_ "service"
 
 	"github.com/go-xweb/xweb"

+ 6 - 2
src/jfw/modules/bigmember/src/service/push/push.go

@@ -31,6 +31,7 @@ type pushSet struct {
 	Newproject_forecast int    //新项目预测
 	Analy_report        int    //分析报告
 	Entinfo             int    //企业情报
+	WXPush              int    // wx推送
 }
 
 //4.6.0修改 只把有权益的存入map返给前端, k:权益 v:是否开启
@@ -91,6 +92,7 @@ func (a *Action) Detail() {
 			"subscribe":      util.IntAllDef(o_member_jy["i_subscribe"], 1),
 			"follow_project": util.IntAllDef(o_member_jy["i_follow_project"], 1),
 			"follow_ent":     util.IntAllDef(o_member_jy["i_follow_ent"], 1),
+			"wxpush":         util.IntAll(o_member_jy["i_wxpush"]),
 		}
 		power := []int{}
 		BigMsg := jy.GetBigVipUserBaseMsg(userId, Mysql, Mgo)
@@ -131,6 +133,7 @@ func (a *Action) Detail() {
 			"mailpush":       mailpush,
 			"mail":           mail,
 			"analy_report":   util.IntAllDef(o_vipjy["i_analy_report"], 1),
+			"wxpush":         util.IntAll(o_vipjy["i_wxpush"]),
 		}
 	case "free_subscribe":
 		user, _ := Mgo.FindById("user", userId, `{"s_myemail":1,"o_jy":1}`)
@@ -194,8 +197,8 @@ func (a *Action) Detail() {
 			if phone == "" {
 				phone, _ = (*user)["s_m_phone"]
 			}
-			entniche_user := Mysql.SelectBySql(`select a.id,a.ent_id,a.mail,b.model,c.dept_id from entniche_user a 
-				inner join entniche_info b on (a.phone=? and b.status=1 and a.ent_id=b.id) 
+			entniche_user := Mysql.SelectBySql(`select a.id,a.ent_id,a.mail,b.model,c.dept_id from entniche_user a
+				inner join entniche_info b on (a.phone=? and b.status=1 and a.ent_id=b.id)
 				inner join entniche_department_user c on (a.id=c.user_id)`, phone)
 			if len(*entniche_user) == 1 {
 				if model := util.IntAll((*entniche_user)[0]["model"]); model > 0 {
@@ -307,6 +310,7 @@ func (a *Action) Update() {
 				"o_member_jy.i_mailpush":   ps.Mailpush,
 				"o_member_jy.s_email":      ps.Mail,
 				"o_member_jy.l_modifydate": time.Now().Unix(),
+				"o_member_jy.i_wxpush":     ps.WXPush,
 			}
 			if ps.Subscribe >= 0 {
 				set["o_member_jy.i_subscribe"] = ps.Subscribe

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

@@ -167,7 +167,7 @@ initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avat
             EasyAlert.show("最多可关注<br>"+followEntLimit+"个企业!");
             return;
           }
-          window.location.href = "/jyapp/followent/addEnt";
+          window.location.href = "/jylab/followent/addEnt";
         });
         if (res.list.length == 0) {
           return;

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

@@ -124,5 +124,6 @@
     "androidUrl": "/jyapp/vipsubscribe/toOrderDetailPage?orderCode=%s",
     "iosUrl": "/jyapp/vipsubscribe/toOrderDetailPage?orderCode=%s",
     "weChatUrl": "/front/vipsubscribe/toOrderDetailPage?orderCode=%s"
-  }
+  },
+  "keywordsLimit":35
 }

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

@@ -88,6 +88,7 @@ type config struct {
 		IosUrl     string
 		WeChatUrl  string
 	}
+	KeywordsLimit int
 }
 type mgoConf struct {
 	Address           string

+ 1 - 0
src/jfw/modules/subscribepay/src/entity/dataReportStruct.go

@@ -100,6 +100,7 @@ func (this *dataReportStruct) NewOrder(param frpc.JyPayOrderParam) (ordercode st
 		"dis_word":             param.Detail["disWord"],               //分销口令
 		"distribution_channel": distributionChannel,                   //销售渠道
 		"order_channel":        util.GetRpcOrderChannel(param.PayWay), //下单渠道
+		"audit_status":         3,                                     //默认审核通过
 	})
 	if orderId <= 0 {
 		err = errors.New("订单插入失败")

+ 1 - 0
src/jfw/modules/subscribepay/src/entity/jyCourseOnlineStruct.go

@@ -161,6 +161,7 @@ func (this *jyCourseOnline) NewOrder(param frpc.JyPayOrderParam) (ordercode stri
 		"order_channel":        util.GetRpcOrderChannel(param.PayWay), //下单渠道
 		"discount_price":       discount_price,
 		"d_relation_id":        userLotteryId,
+		"audit_status":         3, //默认审核通过
 	}
 	if param.Phone != "" {
 		insertMap["user_phone"] = param.Phone

+ 4 - 3
src/jfw/modules/subscribepay/src/entity/member.go

@@ -91,9 +91,10 @@ func (m *memberStruct) PayCallBack(param *CallBackParam) bool {
 func normal_member(level int, enddate time.Time, userId string) {
 	//修改用户表权限
 	set := map[string]interface{}{
-		"i_member_status":    level,
-		"i_member_starttime": time.Now().Unix(),
-		"i_member_endtime":   enddate.Unix(),
+		"i_member_status":      level,
+		"i_member_starttime":   time.Now().Unix(),
+		"i_member_endtime":     enddate.Unix(),
+		"o_member_jy.i_wxpush": 1,
 	}
 	if level == 4 { //试用用户
 		set["i_member_trial"] = 1 //试用标识

+ 40 - 1
src/jfw/modules/subscribepay/src/entity/shareFission.go

@@ -28,6 +28,17 @@ func NewShareFission(userId, shareUid string) *ShareFission {
 	}
 }
 
+// 活动赠送
+const (
+	SaleChannel051    = "x051"          // 销售渠道活动赠送
+	OrderPassed       = 3               // 订单审核状态-审核通过
+	TableAuditRecords = "audit_records" // 审核记录表
+	OperateCreate     = 1               // 审核轨迹操作类型-新增
+	AuditCreate       = 2               // 审核类型-创建订单
+)
+
+var jianyubiReg = regexp.MustCompile(`达到(\d+)剑鱼币`)
+
 //增加权益
 func (this *ShareFission) AddPower(r *http.Request) {
 	if this.ShareUid != "" { //有分享人
@@ -109,7 +120,18 @@ func Order(userid, starttime, endtime string, types, dayNum int, remark string)
 		"vip_endtime":    endtime,
 		"billingMode":    0, //计费模式 0免费 1付费
 	}
-	return util.Mysql.Insert("dataexport_order", insertMap) != 0
+	// 如果备注为剑鱼币兑换
+	if jianyubiReg.MatchString(remark) {
+		insertMap["distribution_channel"] = SaleChannel051 // 销售渠道
+	}
+	insertMap["audit_status"] = OrderPassed // 订单审核状态
+	if util.Mysql.Insert("dataexport_order", insertMap) != 0 {
+		// 新增一条审核记录
+		CreateOrderAuditRecord(ordercode, qu.FormatDate(&now, qu.Date_Full_Layout))
+		return true
+	} else {
+		return false
+	}
 }
 
 func (this *ShareFission) Record() {
@@ -119,3 +141,20 @@ func (this *ShareFission) Record() {
 		"createtime": time.Now().Unix(),
 	})
 }
+
+func CreateOrderAuditRecord(orderCode string, createTime string) {
+	saveData := map[string]interface{}{
+		"operator":      "-",
+		"create_time":   createTime,
+		"operator_type": OperateCreate,
+		"audit_status":  OrderPassed,
+		"order_code":    orderCode,
+		"audit_type":    AuditCreate,
+	}
+	if !InsertAudit(saveData) {
+		log.Println("新增审核轨迹保存失败", saveData)
+	}
+}
+func InsertAudit(data map[string]interface{}) bool {
+	return util.Mysql.Insert(TableAuditRecords, data) > 0
+}

+ 1 - 0
src/jfw/modules/subscribepay/src/service/aiForecastPack.go

@@ -65,6 +65,7 @@ func (a *AiForecastPack) CreateOrder() {
 			"user_id":        userId,
 			"pay_way":        "",
 			"original_price": order_money,
+			"audit_status":   3, //默认审核通过
 		})
 		log.Println("AI预测包购买订单", userId, order_id, code)
 		if order_id > 0 {

+ 1 - 0
src/jfw/modules/subscribepay/src/service/areaPack.go

@@ -117,6 +117,7 @@ func (this *AreaPack) CreateOrder() {
 			"d_relation_id":        userLotteryId,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		//校验
 		rdata, ok := util.MQFW.FindById("user", userId, `{"o_jy":1}`)

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

@@ -101,6 +101,7 @@ func (b *Bigmember) CreateOrder() {
 			"original_price":       order_money,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		order_phone := b.GetString("order_phone") //p19.3用户信息采集 手机号
 		if order_phone != "" {

+ 10 - 0
src/jfw/modules/subscribepay/src/service/commonAction.go

@@ -550,6 +550,7 @@ func (this *CommonAction) Createorder() {
 			"dis_word":             inserMap.DisWord,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 
 		if openId := qutil.ObjToString(this.GetSession("s_m_openid")); openId != "" {
@@ -589,6 +590,15 @@ func (this *CommonAction) Createorder() {
 			insertM["expiration_time"] = inserMap.ExpirationTime
 		}
 		orderid := util.Mysql.Insert("dataexport_order", insertM)
+		//审核轨迹
+		util.Mysql.Insert("audit_records", map[string]interface{}{
+			"operator":      "-",
+			"create_time":   qutil.NowFormat(qutil.Date_Full_Layout),
+			"operator_type": 1,
+			"audit_status":  3,
+			"order_code":    inserMap.OrderCode,
+			"audit_type":    2,
+		})
 		if orderid <= 0 {
 			return nil, fmt.Errorf("创建订单异常")
 		}

+ 1 - 0
src/jfw/modules/subscribepay/src/service/courseAction.go

@@ -325,6 +325,7 @@ func (this *CourseAction) Reserve() {
 			"filter":               string(datailMsg),   //订单详情
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		})
 		if orderId == 0 {
 			return &entity.FuncResult{false, errors.New("数据库操作异常,请稍后重试"), nil}

+ 1 - 0
src/jfw/modules/subscribepay/src/service/dataExportPay.go

@@ -200,6 +200,7 @@ func (p *DataExportPay) CreateOrder() {
 			"dis_word":             disWord,             //202020817分销口令
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		})
 		if orderid > 0 {
 			p.SetSession("DataExportVerifyPhone_val", user_phone)

+ 1 - 0
src/jfw/modules/subscribepay/src/service/dataexportPack.go

@@ -184,6 +184,7 @@ func (this *DataExportPack) CreateOrder() {
 			"dis_word":             disWordStr,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		})
 		if orderid <= 0 {
 			return nil, fmt.Errorf("创建订单异常")

+ 1 - 0
src/jfw/modules/subscribepay/src/service/entniche.go

@@ -65,6 +65,7 @@ func (e *Entniche) Buy() {
 			"pay_way":              "",
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		})
 		if order_id > 0 {
 			return 1, code

+ 2 - 1
src/jfw/modules/subscribepay/src/service/index_p1.go

@@ -93,7 +93,8 @@ func (this *IndexSearch) GetIndexMessage() {
 				history = strings.Split(h, ",")
 				_history = strings.Split(h, ",")
 				for k, v := range _history {
-					b_word, _, _ := jy.InterceptSearchKW(v, true, true)
+					//默认关键词不超过35个字符
+					b_word, _, _ := jy.InterceptSearchKW(v, qutil.IntAllDef(config.Config.KeywordsLimit, 35), true)
 					if b_word == "" {
 						_history = append(_history[:k], _history[k+1:]...)
 					}

+ 10 - 0
src/jfw/modules/subscribepay/src/service/integral.go

@@ -128,6 +128,7 @@ func (b *Integral) CreateOrder() {
 			"d_relation_id":        userLotteryId,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		order_phone := b.GetString("order_phone") //p19.3用户信息采集 手机号
 		if order_phone != "" {
@@ -137,6 +138,15 @@ func (b *Integral) CreateOrder() {
 			insertObj["user_phone"] = order_phone
 		}
 		order_id := util.Mysql.Insert("dataexport_order", insertObj)
+		//审核轨迹
+		util.Mysql.Insert("audit_records", map[string]interface{}{
+			"operator":      "-",
+			"create_time":   qutil.NowFormat(qutil.Date_Full_Layout),
+			"operator_type": 1,
+			"audit_status":  3,
+			"order_code":    code,
+			"audit_type":    2,
+		})
 		if order_id > 0 {
 			//绑定卡卷
 			if userLotteryId != "" && lotteryId != "" {

+ 77 - 50
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -68,38 +68,28 @@ func (this *OrderListDetails) GetOrderPayAllMsg() {
 // 订单列表首页
 func (o *OrderListDetails) MyOrder() {
 	//每页显示数
-	userId := o.Session().Get("userId")
+	userId, _ := o.Session().Get("userId").(string)
 	returnMap := map[string]interface{}{}
 	if userId == "" {
 		o.ServeJson(returnMap)
 		return
 	}
-	queryM := map[string]interface{}{
-		"user_id":    userId,
-		"del_status": 0, //默认未删除
-	}
-
 	typ := o.GetString("type") // 0全部 1未支付 2已支付 3已取消
-	sta := TypSta(typ)
-	if sta != nil {
-		queryM["order_status"] = sta
-	}
 	fromPage := o.GetString("fromPage")
-	if fromPage == "wx" { //微信暂无企业商机管理
-		queryM["product_type"] = map[string]interface{}{"ne": "企业商机管理"}
-	}
+
 	//总数
 	pageNum := qutil.IntAll(o.GetString("pageNum"))
 	pageNum = qutil.If(pageNum == 0, 1, pageNum).(int)
 	i_page_size := qutil.IntAll(o.GetString("page_size"))
 	i_page_size = qutil.If(i_page_size == 0, 10, i_page_size).(int)
 
-	haveNextPage, res, _ := o.Datas(queryM, pageNum, i_page_size)
+	sql, sqlC := getOrderSql(userId, fromPage, typ)
+	haveNextPage, res, _ := o.Datas(sql, pageNum, 10)
 	if res != nil {
-		o.SetRes(res, queryM)
+		o.SetRes(res, userId)
 	}
 	if fromPage == "pc" {
-		returnMap["count"] = util.Mysql.Count(tableName_order, queryM)
+		returnMap["count"] = util.Mysql.CountBySql(sqlC)
 	}
 	returnMap["res"] = res
 	returnMap["hasNextPage"] = haveNextPage
@@ -128,26 +118,20 @@ func (o *OrderListDetails) DeleteOrder() error {
 			"id":      o.GetString("id"),
 			"user_id": userId.(string),
 		}
-		queryM := map[string]interface{}{
-			"user_id":    userId.(string),
-			"del_status": 0, //默认未删除
-		}
+		fromPage := o.GetString("fromPage")
 		nextPage := false
 		// 0全部 1未支付 2已支付
 		typ := o.GetString("type")
 		cancel := o.GetString("cancel")
 		pageNum, _ := o.GetInteger("pageNum")
-		sta := TypSta(typ)
-		if sta != nil {
-			queryM["order_status"] = sta
-		}
-		if o.GetString("fromPage") != "" && o.GetString("fromPage") == "wx" { //微信暂无企业商机管理
-			queryM["product_type"] = map[string]interface{}{"ne": "企业商机管理"}
-		}
+
+		sql, _ := getOrderSql(userId.(string), fromPage, typ)
+
 		var haveNextPage = false
 		var res = []map[string]interface{}{}
-		if o.GetString("fromPage") == "" || o.GetString("fromPage") != "pc" {
-			haveNextPage, res, _ = o.Datas(queryM, pageNum, 10)
+		if fromPage == "" || fromPage != "pc" {
+			// haveNextPage, res, _ = o.Datas1(queryM, pageNum, 10)
+			haveNextPage, res, _ = o.Datas(sql, pageNum, 10)
 			if len(res) > 0 {
 				res = res[0:1]
 				//用于删除订单后 判断新增的订单之后 是否有下一页
@@ -155,7 +139,7 @@ func (o *OrderListDetails) DeleteOrder() error {
 			}
 			if res != nil {
 				log.Println(res)
-				o.SetRes(res, queryM)
+				o.SetRes(res, userId.(string))
 			}
 		}
 		var boo = false
@@ -194,9 +178,6 @@ func (o *OrderListDetails) DeleteOrder() error {
 				//删除订单
 				boo = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"del_status": 1, "del_time": qutil.FormatDate(&now, qutil.Date_Full_Layout)})
 			}
-			// if boo {
-			// 	util.MsgRemind.Delete(qutil.IntAll((*order)["id"]))
-			// }
 		}
 
 		o.ServeJson(map[string]interface{}{
@@ -483,13 +464,12 @@ and order_status=1 and  product_type in(`
 	return m
 }
 
-func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[string]interface{}) {
+func (o *OrderListDetails) SetRes(res []map[string]interface{}, userId string) {
 	entid := o.GetUserEntId() //用户购买的entid
-	ent_ordercode := GetEntOrdercode(queryM, entid)
+	ent_ordercode := GetEntOrdercode(userId, entid)
 	var create_time_stamp int64 = 0
-	userid := qutil.ObjToString(queryM["user_id"])
 	//获取最后一次购买的vip订单
-	lastOrderMap := LastOrder("VIP订阅,省份订阅包", userid)
+	lastOrderMap := LastOrder("VIP订阅,省份订阅包", userId)
 
 	for _, v := range res {
 		//获取单号 如果是vip xx小时取消
@@ -537,16 +517,18 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 		}
 		orderMoney := v["order_money"]
 		discount_price := v["discount_price"]
+		//对公转账的订单也有优惠
+		if discount_price != nil {
+			v["discount_price"] = float64(discount_price.(int64)) / 100
+		}
 		if orderMoney != nil {
-			if v["pay_way"] == "transferAccounts" && qutil.IntAll(v["order_status"]) == 1 { //对公转账 订单金额展示为实付金额
+			if v["pay_way"] == "transferAccounts" && qutil.IntAll(v["order_status"]) == 1 && qutil.Int64All(v["return_status"]) > 0 { //对公转账 订单金额展示为实付金额
 				v["order_money"] = float64(qutil.Int64All(v["pay_money"])) / 100
 			} else {
 				v["order_money"] = float64(orderMoney.(int64)) / 100
-				if discount_price != nil {
-					v["discount_price"] = float64(discount_price.(int64)) / 100
-				}
 			}
 		}
+		log.Println(orderMoney, "---", orderMoney.(int64), float64(orderMoney.(int64))/100, v["order_money"])
 		pay_money := v["pay_money"]
 		if pay_money != nil {
 			v["pay_money"] = float64(pay_money.(int64)) / 100
@@ -583,16 +565,18 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 }
 
 // 查询数据
-func (o *OrderListDetails) Datas(queryM map[string]interface{}, pageNum, pagesize_max int) (haveNextPage bool, result []map[string]interface{}, err error) {
-	res := *util.Mysql.Find(tableName_order, queryM, "id,order_code,order_channel,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,pay_money,data_count,order_status,pay_way,product_type,filter,pay_time,vip_starttime,vip_endtime,applybill_status,applybill_type,applybill_taxnum,applybill_company,vip_type,course_status,discount_price,d_relation_id,billingMode,is_backstage_order,return_status,expiration_time", "create_time desc", -1, 0)
-	if len(res) > 0 {
+func (o *OrderListDetails) Datas(sql string, pageNum, pagesize_max int) (haveNextPage bool, result []map[string]interface{}, err error) {
+	log.Println(sql)
+	res := util.Mysql.SelectBySql(sql)
+	log.Println(res)
+	if len(*res) > 0 {
 		start := (pageNum - 1) * pagesize_max
 		end := pageNum * pagesize_max
-		if end > len(res) {
-			end = len(res)
+		if end > len(*res) {
+			end = len(*res)
 		}
-		if start < len(res) {
-			result = res[start:end]
+		if start < len(*res) {
+			result = (*res)[start:end]
 		}
 		//
 		for i := 0; i < len(result); i++ {
@@ -982,10 +966,14 @@ func (o *OrderListDetails) JyPoint() {
 	})
 }
 
-func GetEntOrdercode(query map[string]interface{}, entid []int) []string {
+func GetEntOrdercode(userId string, entid []int) []string {
 	//获取购买的所有企业最近一次的ordercode
 	entordercode := []string{}
-	query["product_type"] = "企业商机管理"
+	query := map[string]interface{}{
+		"product_type": "企业商机管理",
+		"user_id":      userId,
+		"order_status": 1,
+	}
 	for _, v := range entid {
 		query["filter_id"] = v
 		lastbuy_ent := *util.Mysql.Find(tableName_order, query, "order_code,pay_time", "pay_time desc", -1, 0)
@@ -1021,3 +1009,42 @@ func deleteRepeat(slice []int) []int {
 	}
 	return slice_repeat
 }
+
+//获取订单列表sql语句拼接
+//userId 用户id
+//fromPage 来源地址
+//typ 类型
+//@return sql语句 countsql语句
+func getOrderSql(userId, fromPage, typ string) (string, string) {
+	sql := fmt.Sprintf(`select id,order_code,order_channel,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,pay_money,data_count,order_status,pay_way,product_type,filter,pay_time,vip_starttime,vip_endtime,applybill_status,applybill_type,applybill_taxnum,applybill_company,vip_type,course_status,discount_price,d_relation_id,billingMode,is_backstage_order,return_status,expiration_time from dataexport_order
+		where del_status=0 and audit_status=3 AND (is_backstage_order =0 AND user_id ='%s')`, userId)
+	sqlC := fmt.Sprintf(`select count(1) from dataexport_order
+		where del_status=0 and audit_status=3 AND (is_backstage_order =0 AND user_id ='%s')`, userId)
+
+	if fromPage == "wx" {
+		sql += `AND product_type !="企业商机管理"` //微信暂无企业商机管理
+	}
+	// 0全部 1未支付 2已支付 3已取消
+	//拼接sql
+	switch typ {
+	case "0", "":
+		s := fmt.Sprintf(` or (order_status =1 AND is_backstage_order=1 and user_id ='%s')  `, userId)
+		sql += s
+		sqlC += s
+	case "1":
+		s := ` AND order_status = 0`
+		sql += s
+		sqlC += s
+	case "2":
+		s := fmt.Sprintf(`AND order_status = 1 or (order_status =1 AND is_backstage_order=1 and user_id ='%s')  `, userId)
+		sql += s
+		sqlC += s
+	case "3":
+		s := ` AND order_status in(-2,-3)`
+		sql += s
+		sqlC += s
+	}
+	sql += " order by create_time desc"
+
+	return sql, sqlC
+}

+ 1 - 0
src/jfw/modules/subscribepay/src/service/resourcePack.go

@@ -112,6 +112,7 @@ func (this *ResourcePack) CreateOrder() {
 		"d_relation_id":        filter.UserLotteryId,
 		"distribution_channel": distributionChannel, //销售渠道
 		"order_channel":        orderChannel,        //下单渠道
+		"audit_status":         3,                   //默认审核通过
 	})
 	if orderid <= 0 {
 		this.ServeJson(OrderResult{Msg: "创建订单异常"})

+ 5 - 3
src/jfw/modules/subscribepay/src/service/salesCreateOrder.go

@@ -8,9 +8,6 @@ import (
 	"entity"
 	"errors"
 	"fmt"
-	"github.com/SKatiyar/qr"
-	"github.com/go-xweb/xweb"
-	"go.mongodb.org/mongo-driver/bson"
 	"log"
 	"net/url"
 	"pay"
@@ -20,6 +17,10 @@ import (
 	"strconv"
 	"time"
 	"util"
+
+	"github.com/SKatiyar/qr"
+	"github.com/go-xweb/xweb"
+	"go.mongodb.org/mongo-driver/bson"
 )
 
 type SalesCreateOrder struct {
@@ -158,6 +159,7 @@ func (this *SalesCreateOrder) CreateBySeller() {
 			"order_channel":        "xdqd04",  //下单渠道-启明星后台销售创建
 			"salesperson":          sellPName, //销售人员
 			"salesperson_id":       sellPid,   //销售人员id
+			"audit_status":         3,         //默认审核通过
 		}
 
 		if inserMap.VipStartTime != "" && inserMap.VipEndTime != "" {

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

@@ -314,6 +314,7 @@ func (this *SubscribeChange) Upgrade() {
 			"dis_word":             disWord,
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		if order_phone != "" {
 			if !jy.PhoneReg.MatchString(order_phone) {

+ 2 - 0
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -313,6 +313,7 @@ func (this *SubVipPayOrder) CreateOrder() {
 			"dis_word":             disWord,             //分销口令
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		if orderType != 5 && order_phone != "" { //p19.3用户信息采集(仅付费可填写手机号)
 			if !jy.PhoneReg.MatchString(order_phone) {
@@ -516,6 +517,7 @@ func (this *SubVipPayOrder) Renew() {
 			"vip_starttime":        qutil.FormatDate(&startTime, qutil.Date_Full_Layout),
 			"vip_endtime":          qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
 			"vip_type":             1,
+			"audit_status":         3, //默认审核通过
 		}
 
 		if userfilter != nil && len(*userfilter) > 0 {

+ 1 - 0
src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go

@@ -320,6 +320,7 @@ func (this *TrialOrder) TrialPay() {
 			"vip_endtime":          qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
 			"distribution_channel": distributionChannel, //销售渠道
 			"order_channel":        orderChannel,        //下单渠道
+			"audit_status":         3,                   //默认审核通过
 		}
 		if order_phone != "" {
 			if !jy.PhoneReg.MatchString(order_phone) {

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

@@ -412,7 +412,7 @@ func (m *msgRemind) loadOrder() {
 	log.Println("开始加载72小时内的订单到内存中。。。")
 	startTime := time.Unix(time.Now().Unix()-MsgRemind.getExpireTime(), 0)
 	startTimes := util.FormatDate(&startTime, util.Date_Full_Layout)
-	list := Mysql.SelectBySql("select id,order_code,order_money,user_id,create_time,remind_status,vip_type,product_type from dataexport_order where order_money>0 and create_time>=? and product_type in ('VIP订阅','大会员') and order_status=0 and del_status=0 and (remind_status<>2 or remind_status is null)", startTimes)
+	list := Mysql.SelectBySql("select id,order_code,order_money,user_id,create_time,remind_status,vip_type,product_type from dataexport_order where order_money>0 and create_time>=? and product_type in ('VIP订阅','大会员') and order_status=0 and del_status=0 and (remind_status<>2 or remind_status is null) and audit_status=3", startTimes)
 	if list == nil {
 		log.Println("加载72小时内的订单到内存中失败")
 		return

+ 8 - 8
src/jfw/public/public.go

@@ -21,7 +21,7 @@ var filterReg_3 = regexp.MustCompile("(项目|公告|公示)$")
 var filterReg_2 = regexp.MustCompile("^[)\\)>》】\\]}}〕,,;;::'\"“”。.\\??、/+=\\_—*&……\\^%$¥@!!`~·(\\(<《【\\[{{〔]+$")
 var filterReg_1 = regexp.MustCompile("^([0-9]{1,3}|[零一二三四五六七八九十]{1,2}|联系人?|电话|地址|编号|采购|政府采购|成交|更正|招标|中标|变更|结果)$")
 var filterReg = regexp.MustCompile("^[的人号时元万公告项目地址电话邮编日期联系招标中结果成交项目项目采购采购项目政府采购公告更正公告]+$")
-var MgoBiddingFields = `{"_id":1,"projectname":1,"projectcode":1,"title":1,"s_winner":1,"buyertel":1,"bidstatus":1,"site":1,"bidamount":1,"toptype":1,"winneraddr":1,"winner":1,"agency":1,"buyer":1,"detail":1,"city":1,"subtype":1,"buyerclass":1,"href":1,"comeintime":1,"winnertel":1,"area":1,"publishtime":1,"buyeraddr":1,"agencytel":1,"budget":1,"entidlist":1,"buyerperson":1,"winnerperson":1,"agencyaddr":1,"recommended_service":1,"competehref":1}`
+var MgoBiddingFields = `{"_id":1,"projectname":1,"projectcode":1,"title":1,"s_winner":1,"buyertel":1,"bidstatus":1,"site":1,"bidamount":1,"toptype":1,"winneraddr":1,"winner":1,"agency":1,"buyer":1,"detail":1,"city":1,"subtype":1,"buyerclass":1,"href":1,"comeintime":1,"winnertel":1,"area":1,"publishtime":1,"buyeraddr":1,"agencytel":1,"budget":1,"entidlist":1,"buyerperson":1,"winnerperson":1,"agencyaddr":1,"recommended_service":1,"competehref":1,"owner":1,"total_investment":1,"projectaddr":1,"projectperiod":1,"approvedept":1,"approvecontent":1,"approvecode":1,"approvenumber":1,"approvetime":1,"approvestatus":1,"project_scale":1}`
 
 const (
 	INDEX = "bidding"
@@ -96,7 +96,7 @@ func BidListConvert(industry string, list *[]map[string]interface{}) {
 	}
 }
 
-//a_mergeorder 根据这三个字段产生的顺序,决定用哪个当作openid
+// a_mergeorder 根据这三个字段产生的顺序,决定用哪个当作openid
 func GetOldOpenId(userId string) (*map[string]interface{}, string) {
 	user, ok := MQFW.FindById("user", userId, `{"s_m_openid":1,"a_m_openid":1,"s_phone":1,"a_mergeorder":1,"o_jy":1,"l_firstpushtime":1}`)
 	if !ok || user == nil {
@@ -146,7 +146,7 @@ func PushView(userid, allquery, field string, pageNum, pageSize int) (keys []int
 	return
 }
 
-//查询获取最多订阅词
+// 查询获取最多订阅词
 func GetHotkeys() []interface{} {
 	sess := MQFW.GetMgoConn()
 	defer MQFW.DestoryMongoConn(sess)
@@ -183,7 +183,7 @@ func GetWinnerNewestDatas(winner string) *[]map[string]interface{} {
 	return data
 }
 
-//删除redis相关数据
+// 删除redis相关数据
 func DelRelRedis(userid interface{}, relationinfo interface{}) {
 	defer util.Catch()
 	uid, _ := userid.(string)
@@ -197,9 +197,9 @@ func DelRelRedis(userid interface{}, relationinfo interface{}) {
 	}
 }
 
-//合并两次检索结果(根据filed从大到小)
-//sortFiled 排序字段
-//Mergefiled 判重字段
+// 合并两次检索结果(根据filed从大到小)
+// sortFiled 排序字段
+// Mergefiled 判重字段
 func MapArrSortMerge(arr1, arr2 []map[string]interface{}, mergeFiled, sortFiled string) *[]map[string]interface{} {
 	for _, v := range arr1 {
 		for n, m := range arr2 {
@@ -246,7 +246,7 @@ func MapArrSortMerge(arr1, arr2 []map[string]interface{}, mergeFiled, sortFiled
 	// return &tmp
 }
 
-//保存用户搜索日志
+// 保存用户搜索日志
 func SaveUserSearchLog(request *http.Request, userid string, count int64, platform, source string, condition map[string]interface{}) {
 	go func() {
 		data := map[string]interface{}{

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

@@ -79,6 +79,7 @@ type adInfo struct {
 		StartTime string `json:"startTime"` //开始时间
 		EndTime   string `json:"endTime"`   //结束时间
 		IosHref   string `json:"iosHref"`   //根据客户端不同 是否访问不同地址
+		Theme     string `json:"theme"`     // 主题样式
 	} `json:"o_extend"` //拓展属性
 	S_script string `json:"s_script"` //脚本代码
 }

+ 2 - 0
src/main.go

@@ -3,6 +3,7 @@ package main
 import (
 	_ "jfw/active"
 	. "jfw/config"
+	"jfw/jyutil"
 
 	_ "qfw/util/jylog" //日志文件
 	// _ "jfw/course"  线下课程 dev3.5.2 21年2.24 下线
@@ -97,5 +98,6 @@ func initXweb() {
 	xweb.RootApp().AppConfig.CacheTemplates = Sysconfig["cacheflag"].(bool)
 	xweb.RootApp().AddTmplVar("Msg", tag.Msg)
 	xweb.RootApp().AddTmplVar("Ad", tag.Ad)
+	xweb.RootApp().AddTmplVar("JyCms", jyutil.GetFirstJyCms)
 	xweb.RootApp().Logger.SetOutputLevel(1) //输出日志,改为4则不输出任何日志
 }

+ 69 - 1
src/web/staticres/big-member/css/set_area_industry_cate.css

@@ -257,4 +257,72 @@
   }
 	#typeHidden{
 		display:none;
-	}
+	}
+#js_dialog .weui-dialog{
+  border-radius: 8px;
+  left: .72rem;
+  right: .72rem;
+}
+#js_dialog .weui-dialog__hd{
+  padding: .48rem 0 0.16rem;
+  color: #171826;
+  font-size: .36rem;
+  line-height: .52rem;
+}
+#js_dialog .weui-dialog__bd{
+  padding-bottom: .48rem;
+  color: #5F5E64;
+  font-size: .3rem;
+  text-align: justify;
+}
+#match_dialog .weui-dialog__bd .match_notice{
+  display: block;
+  font-size: .26rem;
+  color: #9B9CA3;
+  margin-top: .36rem;
+}
+#js_dialog .weui-dialog__ft{
+  line-height: .92rem;
+}
+#js_dialog .weui-dialog__btn{
+  color: #2ABED1;
+  font-size: .36rem;
+  font-weight: 500;
+}
+#js_dialog .weui-dialog__btn:active {
+  background-color: #fff;
+}
+#match_dialog .weui-dialog{
+  border-radius: 8px;
+  left: .72rem;
+  right: .72rem;
+}
+#match_dialog .weui-dialog__hd{
+  padding: .48rem 0 0.16rem;
+  color: #171826;
+  font-size: .36rem;
+  line-height: .52rem;
+}
+#match_dialog .weui-dialog__bd{
+  padding-bottom: .48rem;
+  color: #5F5E64;
+  font-size: .3rem;
+  text-align: justify;
+}
+#match_dialog .weui-dialog__bd .match_notice{
+  display: block;
+  font-size: .26rem;
+  color: #9B9CA3;
+  margin-top: .36rem;
+}
+#match_dialog .weui-dialog__ft{
+  line-height: .92rem;
+}
+#match_dialog .weui-dialog__btn{
+  color: #2ABED1;
+  font-size: .36rem;
+  font-weight: 500;
+}
+#match_dialog .weui-dialog__btn:active {
+  background-color: #fff;
+}

+ 1 - 56
src/web/staticres/big-member/js/contrast_trial.js

@@ -230,10 +230,8 @@ var vm = new Vue({
             $(".call-counsel").on('click', function () {
                 location.href = "./customer"
             })
-            
-            // 初始化智齿客服
+
             this.checkConfirmDisabled()
-            this.getOfflineMessageCount()
         },
         checkConfirmDisabled: function () {
             $.ajax({
@@ -346,59 +344,6 @@ var vm = new Vue({
         },
         confirmAction: function () {
             location.href = 'ontrial_commit'
-        },
-        getOfflineMessageCount: function () {
-            try {
-                var nowPlatform = this.isApp ? 'app' : 'wxh5';
-                (function (w, d, e, x) {
-                    w[e] = function () { w.cbk = w.cbk || []; w.cbk.push(arguments); }
-                    x = d.createElement('script');
-                    x.async = true;
-                    x.id = 'zhichiScript';
-                    x.className="zhiCustomBtn";
-    
-                    x.src = 'https://' + nowPlatform + '-jianyu.sobot.com/chat/frame/v2/entrance.js?sysnum=9d1e3980f91e4b75b8f04e2d206a4c76&t=' + new Date().getTime();
-                    window.xxx = x
-                    d.body.appendChild(x);
-                })(window, document, 'zc');
-                $.post("/jypay/user/getSimpleData?t="+new Date().getTime(),{},function(r){
-                    var ajaxUserInfo = {
-                        headImage: '',
-                        nickName: '默认昵称',
-                        userId: '',
-                    }
-    
-                    if (r) {
-                        Object.keys(ajaxUserInfo).forEach(function (v) {
-                            if (r[v] && r[v] !== '') {
-                                ajaxUserInfo[v] = r[v]
-                            }
-                        })
-                    }
-    
-                    zc('config', {
-                        custom:true,
-                        top_bar_flag: 0,
-                        auto_expand: false,
-                        show_face: 1,
-                        async: 0,
-                        photo_flag: false,
-                        partnerid: ajaxUserInfo.userId,
-                        face: ajaxUserInfo.headImage
-                    })
-                    zc("offline_message_count",function(res){
-                        console.log(res, 'offline_message_count')
-                        if (res && res.size && res.size > 0) {
-                            var omc = res.size > 99 ? '99+' : res.size
-                            $(".icon-badge-number").attr('data-badge-number', omc).show()
-                        } else {
-                            $(".icon-badge-number").removeAttr('data-badge-number')
-                        }
-                    })
-                })
-            } catch (e) {
-                console.log('error: ',e)
-            }
         }
     },
 })

+ 45 - 1
src/web/staticres/big-member/js/set_cate.js

@@ -5,7 +5,7 @@ var vNode = {
     data: {
         // 原始数据
         cateListMapExp: {
-            '#': ['全部'],
+            '#': ['全部', '匹配未分类类型'],
             C: ['财政', '传媒', '城管', '采矿业', '出版广电'],
             D: ['档案', '党委办', '电信行业'],
             F: ['法院', '发改'],
@@ -63,6 +63,9 @@ var vNode = {
         nowSelectIndex: -1,
         allNeedTipIndexMap: {},
         commond_industry: [],
+        otherbuy: false,
+        bigArea: {},
+        matchbuyother: 0
     },
     computed: {
         resetButtonDisabled: function () {
@@ -71,6 +74,7 @@ var vNode = {
         }
     },
     created: function () {
+        this.infoAjax()
         this.initCateMap()
         this.setCateState(this.initCate)
         let _this = this
@@ -180,6 +184,26 @@ var vNode = {
                 $('.add_alert').hide()
             }
         },
+        infoAjax () {
+            let _this = this
+            $.ajax({
+                type:'POST',
+                url:'/bigmember/use/info',
+                success:function(res){
+                    if(res.error_code == 0){
+                        _this.bigArea = res.data.member_jy.o_area
+                        _this.matchbuyother = res.data.member_jy.i_matchbuyerclass_other
+                        if(_this.matchbuyother == 1) {
+                            _this.cateListMap['#'][1].selected = true
+                            _this.otherbuy = true
+                        } else {
+                            _this.cateListMap['#'][1].selected = false
+                            _this.otherbuy = false
+                        }
+                    }
+                }
+            }) 
+        },
         // 按钮点击事件
         changeCateState: function (e,item) {
           var _this = this
@@ -210,6 +234,9 @@ var vNode = {
                     this.setCateState()
                 }
             }
+            if(item.name == "匹配未分类类型") {
+                this.otherbuy = item.selected
+            }
         },
         // 弹窗取消事件
         setCancel: function () {
@@ -268,6 +295,7 @@ var vNode = {
                 }
 
                 this.cateListMap['#'][0].selected = true
+                this.cateListMap['#'][1].selected = true
             } else {
                 this.setCateState()
                 this.cateListMap['#'][0].selected = false
@@ -311,6 +339,12 @@ var vNode = {
                 confirmButtonColor: '#2cb7ca'
             })
         },
+        showMatchDialog: function () {
+            $('#match_dialog').show()
+        },
+        myKnow: function() {
+            $('#match_dialog').hide()
+        },
         onReset: function () {
             this.showNeedPopver(false)
             this.setCateState(this.initCate)
@@ -321,6 +355,16 @@ var vNode = {
             }
         },
         onConfirm: function () {
+            let _this = this
+            $.ajax({
+                type: 'POST',
+                url: '/publicapply/subscribe/setUserInfo',
+                data: {
+                    pageType: 'other_buyerclass',
+                    other: _this.otherbuy?1:0,
+                    vSwitch: 'm'
+                }
+            })
             var selectedCity = this.getSelected()
             try {
                 onConfirm && onConfirm(selectedCity)

+ 61 - 15
src/web/staticres/big-member/js/set_infotype.js

@@ -18,11 +18,44 @@ var vNode = {
                 level: 1,
                 children: []
             },
+            {
+              name: '采购意向',
+              value: '采购意向',
+              showHelp: true,
+              level: 1,
+              children: []
+            },
             {
                 name: '招标预告',
-                value: '预告',
+                value: '',
                 level: 1,
-                children: []
+                children: [
+                    {
+                        name: '预告',
+                        value: '预告',
+                        level: 2,
+                    },
+                    {
+                        name: '预审',
+                        value: '预审',
+                        level: 2,
+                    },
+                    {
+                        name: '预审结果',
+                        value: '预审结果',
+                        level: 2,
+                    },
+                    {
+                        name: '论证意见',
+                        value: '论证意见',
+                        level: 2,
+                    },
+                    {
+                        name: '需求公示',
+                        value: '需求公示',
+                        level: 2,
+                    },
+                ]
             },
             {
                 name: '招标公告',
@@ -64,12 +97,12 @@ var vNode = {
                         value: '变更',
                         level: 2,
                     },
-                    {
-                        name: '其它',
-                        value: '其它',
-                        level: 2,
-                        hidden: "typeHidden",
-                    },
+                    // {
+                    //     name: '其它',
+                    //     value: '其它',
+                    //     level: 2,
+                    //     hidden: "typeHidden",
+                    // },
                 ]
             },
             {
@@ -277,7 +310,7 @@ var vNode = {
                         if (inList) {
                             selectedCount ++
                             iitem.selected = true
-                            if(iitem.value=="其它"){
+                        	if(iitem.value=="其它"){
 								iitem.hidden = ""
 							}
                         }
@@ -298,9 +331,6 @@ var vNode = {
             }
 
             this.infoTypeList.forEach(function (item) {
-                if (item.value && item.selected) {
-                    arr.push(item.value)
-                }
 
                 if (item.level !== 0) {
                     item.children.forEach(function (iitem) {
@@ -309,15 +339,31 @@ var vNode = {
                         }
                     })
                 }
+                if (item.value && item.selected) {
+                    arr.push(item.value)
+                }
+                if (item.selected && item.name === '招标公告') {
+                    arr.push('其它')
+                }
             })
             return arr
         },
         // 显示拟建帮助弹窗
-        showNjHelpDialog: function () {
+        showNjHelpDialog: function (name) {
+          let htmlText = '“拟建项目”是指那些处于前期立项、审批阶段的项目。供应商应在立项阶段掌握项目信息,做到早介入,稳拿单。'
+          if (name == '采购意向') {
+            htmlText = '“采购意向”是指未发布招标公告前1-3个月,政府单位的采购意向信息,包含采购内容、预算金额、预计采购时间、采购联系人及联系方式等相关信息。'
+            this.$dialog.alert({
+              message: htmlText,
+              confirmButtonColor: '#2cb7ca',
+              confirmButtonText:'我知道了'
+            })
+          } else {
             this.$dialog.alert({
-                message: '“拟建项目”是指那些处于前期立项、审批阶段的项目。供应商应在立项阶段掌握项目信息,做到早介入,稳拿单。',
-                confirmButtonColor: '#2cb7ca'
+              message: htmlText,
+              confirmButtonColor: '#2cb7ca'
             })
+          }
         },
         onReset: function () {
             this.setInfoTypeState(this.initInfoType)

+ 1188 - 0
src/web/staticres/brand/css/brand.css

@@ -0,0 +1,1188 @@
+.brand_box {
+    width: 100%;
+    padding-top: 64px;
+    background: #FFF;
+    /* padding-bottom: 438px; */
+    padding-bottom: 111px;
+    overflow: hidden;
+}
+.viewer-open{
+    padding-right: 17px !important;
+}
+.head_img {
+    width: 100%;
+    height: 480px;
+    background: url('/brand/img/brandHead.png') center center no-repeat;
+    background-size: cover;
+}
+
+.tabs_box {
+    width: 100%;
+    height: 64px;
+    background: #F5FCFD;
+    position: relative;
+    left: 0;
+    top: 0;
+}
+
+.perch_box {
+    width: 100%;
+    height: 64px;
+}
+
+.tabs_content {
+    width: 1000px;
+    height: 64px;
+    margin: auto;
+}
+
+.tabs_item {
+    width: 20%;
+    height: 64px;
+    cursor: pointer;
+}
+
+.tabs_item .text {
+    width: 120px;
+    height: 64px;
+    box-sizing: border-box;
+    line-height: 64px;
+    text-align: center;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    letter-spacing: 0.1em;
+    color: #1D1D1D;
+    margin: auto;
+}
+
+.tabs_item .active {
+    font-size: 20px;
+    border-bottom: 4px solid #2CB7CA;
+}
+
+.company_introduction {
+    width: 100%;
+    height: 1058px;
+    background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #F4FFFF 46.5%, rgba(244, 255, 255, 0) 100%);
+    margin-top: 15px;
+    box-sizing: border-box;
+    padding-top: 80px;
+}
+
+.company_introduction .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 40px;
+    line-height: 53px;
+    letter-spacing: 0.1em;
+    color: #000000;
+    text-align: center;
+}
+
+.company_introduction .text_box {
+    width: 920px;
+    margin: auto;
+    margin-top: 32px;
+    padding-top: 0;
+}
+
+.text_box .center_text {
+    width: 595px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #1D1D1D;
+    margin-left: 44px;
+}
+
+.company_profile {
+    width: 1080px;
+    height: 96px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    letter-spacing: 0.1em;
+    color: #686868;
+    margin: auto;
+    margin-top: 40px;
+}
+
+.deadline {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 28px;
+    letter-spacing: 0.1em;
+    color: #1D1D1D;
+    margin-top: 40px;
+    text-align: center;
+}
+
+.left_line {
+    width: 120px;
+    height: 1px;
+    background: #2CB7CA;
+    margin-top: 40px;
+}
+
+.right_line {
+    width: 120px;
+    height: 1px;
+    background: #2CB7CA;
+    margin-top: 40px;
+}
+
+.company_introduction .data_text {
+    width: 1000px;
+    margin: auto;
+    display: flex;
+    margin-top: 32px;
+}
+
+.data_text .item {
+    /* flex: 1; */
+}
+
+.ml-50 {
+    margin-left: 50px;
+}
+
+.data_text .item .tit {
+    font-style: normal;
+    font-weight: 700;
+    font-size: 40px;
+    line-height: 54px;
+    color: #1D1D1D;
+    text-align: center;
+}
+
+.data_text .item .tit span {
+    font-style: normal;
+    font-weight: 700;
+    font-size: 20px;
+    /* line-height: 54px; */
+    color: #1D1D1D;
+    vertical-align: middle;
+}
+
+.data_text .item .text {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 14px;
+    line-height: 20px;
+    letter-spacing: 0.1em;
+    color: #686868;
+    text-align: center;
+    margin-top: 10px;
+}
+
+.introduction_bottom {
+    width: 100%;
+    height: 480px;
+    background: url('/brand/img/brandBG1.png') center center no-repeat;
+    background-size: cover;
+    margin-top: 20px;
+    box-sizing: border-box;
+    padding-top: 58px;
+}
+
+.introduction_bottom .tit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #1D1D1D;
+}
+
+.introduction_bottom .text {
+    width: 639px;
+    height: 96px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #686868;
+    margin: auto;
+    margin-top: 10px;
+}
+
+.introduction_bottom .text span {
+    color: rgba(42, 190, 209, 1);
+    font-weight: 700;
+}
+
+.introduction_bottom .text2 {
+    width: 353px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #686868;
+    margin: auto;
+}
+
+.certificate_box {
+    width: 100%;
+    overflow: hidden;
+    height: 150px;
+    box-sizing: border-box;
+}
+
+.certificate_box .content {
+    /* overflow: hidden; */
+    height: 150px;
+    box-sizing: border-box;
+}
+
+.certificate_box .img_box {
+    width: 220px;
+    height: 150px;
+    display: inline-block;
+    /* 重要 inline-block */
+    white-space: nowrap;
+    margin-left: 20px;
+
+}
+
+.marquee {
+    height: 150px !important;
+}
+
+.certificate_box .content img {
+    width: 220px;
+    height: 150px;
+    display: block;
+}
+
+.businesslicense_box {
+    width: 100%;
+    overflow: hidden;
+    height: 200px;
+    box-sizing: border-box;
+    margin-top: 40px;
+
+}
+
+.businesslicense_box .content {
+    /* overflow: hidden; */
+    height: 200px;
+    box-sizing: border-box;
+
+}
+
+.marquee_two {
+    height: 200px !important;
+}
+
+.businesslicense_box .img_box {
+    width: 148px;
+    height: 200px;
+    display: inline-block;
+    white-space: nowrap;
+    margin-left: 20px;
+
+}
+
+.businesslicense_box .content img {
+    width: 148px;
+    height: 200px;
+    display: block;
+}
+
+.enterprise_culture {
+    width: 100%;
+    /* height: 1138px; */
+    /* margin-top: 80px; */
+    padding-top: 80px;
+    background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #F4FFFF 46.5%, rgba(244, 255, 255, 0) 100%);
+}
+
+.enterprise_culture .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #1D1D1D;
+}
+
+.enterprise_culture .middle {
+    width: 1200px;
+    margin: auto;
+    display: flex;
+    margin-top: 40px;
+}
+
+.enterprise_culture .middle .item {
+    flex: 1;
+    position: relative;
+}
+
+.enterprise_culture .middle .item .line_box {
+    position: absolute;
+    bottom: 0;
+    right: 0;
+    width: 390px;
+}
+
+.line_box .one {
+    width: 180px;
+    height: 1px;
+    left: calc(50% - 180px/2 + 510px);
+    background: linear-gradient(90deg, #2CB7CA 0%, rgba(44, 183, 202, 0) 100%);
+    opacity: 0.8;
+    float: right;
+}
+
+.line_box .two {
+    width: 300px;
+    height: 1px;
+    left: calc(50% - 300px/2 + 450px);
+    background: linear-gradient(90deg, rgba(44, 183, 202, 0) 0%, #2CB7CA 100%);
+    opacity: 0.6;
+    margin-top: 15px;
+    float: right;
+}
+
+.line_box .three {
+    width: 390px;
+    height: 1px;
+    left: calc(50% - 390px/2 + 405px);
+    background: linear-gradient(90deg, #2CB7CA 0%, rgba(44, 183, 202, 0) 100%);
+    opacity: 0.4;
+    margin-top: 15px;
+    float: right;
+}
+
+.enterprise_culture .middle .item img {
+    width: 178px;
+    height: 104px;
+    display: block;
+    margin: auto;
+}
+
+.enterprise_culture .middle .item .tit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 32px;
+    letter-spacing: 0.05em;
+    color: #1D1D1D;
+    margin-top: 40px;
+    text-align: center;
+}
+
+.enterprise_culture .middle .item .text {
+    width: 360px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #666666;
+    text-align: center;
+    margin: auto;
+    margin-top: 10px;
+}
+
+.life_img {
+    width: 1200px;
+    margin: auto;
+    margin-top: 80px;
+}
+
+.life_img .desc {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    /* identical to box height, or 200% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* Font/#686868 */
+    color: #686868;
+    margin-top: 10px;
+}
+
+.life_img .img_box {
+    width: 1200px;
+    margin-top: 40px;
+}
+
+.life_img .img_box img {
+    width: 280px;
+    height: 196px;
+    display: block;
+
+}
+
+.history {
+    width: 1200px;
+    height: 793.75px;
+    margin: auto;
+    background: url('/brand/img/brandBG2.png') center center no-repeat;
+    background-size: cover;
+    margin-top: 80px;
+
+}
+
+.history .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 28px;
+    line-height: 40px;
+    /* identical to box height, or 143% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* Font/#1d1d1d */
+    color: #1D1D1D;
+    margin-top: 22px;
+
+}
+
+.history .desc {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 18px;
+    line-height: 32px;
+    /* identical to box height, or 178% */
+    letter-spacing: 0.1em;
+    /* Font/#686868 */
+    color: #686868;
+    margin-top: 18px;
+    text-align: center;
+
+}
+
+.history .content .left {
+    width: 410px;
+    height: 240px;
+    float: left;
+    position: relative;
+    margin-top: 40px;
+}
+
+.history .content .right {
+    /* display: flex; */
+    float: left;
+    margin-left: 143px;
+    display: none;
+
+}
+
+.history .bg_box {
+    width: 120px;
+    height: 240px;
+    background: linear-gradient(180deg, #2ABED1 0%, rgba(42, 190, 209, 0) 100%);
+    opacity: 0.2;
+    transform: rotate(-180deg);
+}
+
+.history .content_box {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 410px;
+    height: 240px;
+}
+
+.history .tab_text {
+    height: 120px;
+}
+
+.history .tab_text img {
+    width: 18px;
+    /* height: 24px; */
+    float: left;
+    margin-top: 50px;
+    margin-left: 20px;
+    display: none;
+
+}
+
+.img_show {
+    display: block !important;
+}
+
+.history .tab_text p {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 55px;
+    line-height: 120px;
+    /* identical to box height, or 214% */
+    float: right;
+    /* Font/#1d1d1d */
+    color: #1D1D1D;
+    opacity: 0.3;
+    display: flex;
+    align-items: flex-end;
+    text-align: right;
+    letter-spacing: 0.5em;
+    cursor: pointer;
+}
+.tab_text:hover p {
+    color: #2CB7CA;
+    opacity: 1 !important;
+    
+}
+.active_t {
+    opacity: 1 !important;
+
+}
+
+.history .time {
+    width: 190px;
+    margin-top: 40px;
+    float: left;
+}
+
+.history .time .text {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 24px;
+    line-height: 40px;
+    /* identical to box height, or 167% */
+    letter-spacing: 0.3em;
+    /* #2CB7CA */
+    color: #2CB7CA;
+    /* text-align: center; */
+}
+
+.time .line {
+    width: 1px;
+    height: 60px;
+    margin-left: 90px;
+    margin-top: 20px;
+    margin-bottom: 20px;
+    /* main/2ABED1 */
+    background: #2ABED1;
+}
+
+.history .intro {
+    margin-left: 40px;
+    margin-top: 40px;
+    float: left;
+}
+
+.intro .tit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    /* identical to box height, or 200% */
+    letter-spacing: 0.05em;
+    /* #000000 */
+    color: #000000;
+    /* Inside auto layout */
+    flex: none;
+    order: 0;
+    flex-grow: 0;
+}
+
+.intro .dec {
+    width: 400px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    /* identical to box height, or 200% */
+    letter-spacing: 0.1em;
+    color: #666666;
+    /* Inside auto layout */
+    flex: none;
+    order: 1;
+    flex-grow: 0;
+    margin-top: 8px;
+}
+
+.Company_Dynamic {
+    width: 100%;
+    /* height: 1000px; */
+    background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #F4FFFF 10.5%, rgba(244, 255, 255, 0) 100%);
+    position: relative;
+    top: -80px;
+}
+
+#Company_Dynamic {
+    position: absolute;
+    top: -80px;
+    left: 0;
+}
+
+.Company_Dynamic .content {
+    width: 1040px;
+    margin: auto;
+    position: relative;
+    /* padding-top: 80px; */
+}
+
+.Company_Dynamic .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 28px;
+    line-height: 36px;
+    /* identical to box height, or 129% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* Font/#1d1d1d */
+    color: #1D1D1D;
+}
+
+.more {
+    font-style: italic;
+    font-weight: 300;
+    font-size: 16px;
+    line-height: 24px;
+    /* identical to box height, or 150% */
+    background: linear-gradient(90deg, #2CB7CA 0%, #2950DD 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    background-clip: text;
+    text-fill-color: transparent;
+    visibility: middle;
+    position: absolute;
+    right: 10px;
+    top: 12px;
+    cursor: pointer;
+}
+
+.more img {
+    width: 14.2px;
+    margin-left: 7px;
+}
+
+.Company_Dynamic .list_ {
+    width: 100%;
+    padding-top: 1px;
+}
+
+.Company_Dynamic .list_ .item {
+    width: 100%;
+    background: #FFFFFF;
+    border: 1px solid rgba(0, 0, 0, 0.05);
+    border-radius: 4px;
+    margin-top: 20px;
+    height: 200px;
+    padding: 20px 40px 30px 40px;
+    box-sizing: border-box;
+    position: relative;
+    cursor: pointer;
+}
+
+.Company_Dynamic .list_ .item .text_box {
+    width: 680px;
+    float: left;
+}
+
+.Company_Dynamic .list_ .item .tit {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 30px;
+    /* identical to box height, or 150% */
+    /* #000000 */
+    color: #000000;
+    width: 680px;
+}
+
+.Company_Dynamic .list_ .item:hover .tit {
+    color: #2CB7CA;
+}
+
+.Company_Dynamic .list_ .item:hover {
+    box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);
+}
+
+.Company_Dynamic .list_ .item .text {
+    -webkit-line-clamp: 2;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    font-style: normal;
+    font-weight: 290;
+    font-size: 15px;
+    line-height: 20px;
+    /* or 133% */
+    color: rgba(63, 64, 64, 0.8);
+    margin-top: 20px;
+
+}
+
+.Company_Dynamic .item img {
+    width: 240px;
+    height: 160px;
+    float: right;
+}
+
+.Company_Dynamic .list_ .item .time {
+    font-style: italic;
+    font-weight: 300;
+    font-size: 14px;
+    line-height: 20px;
+    /* identical to box height, or 143% */
+    /* text-align: right; */
+    background: linear-gradient(90deg, #2CB7CA 0%, #2950DD 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    background-clip: text;
+    text-fill-color: transparent;
+    position: absolute;
+    left: 40px;
+    bottom: 30px;
+    width: 100px;
+}
+
+.join_us {
+    width: 1200px;
+    margin: auto;
+    position: relative;
+}
+
+#join_us {
+    position: absolute;
+    top: -80px;
+    left: 0;
+}
+
+.join_us .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 28px;
+    line-height: 36px;
+    /* identical to box height, or 129% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* #000000 */
+    color: #000000;
+}
+
+.join_us .desc {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 36px;
+    /* identical to box height, or 225% */
+    letter-spacing: 0.1em;
+    /* Style */
+    color: rgba(63, 64, 64, 0.8);
+    text-align: center;
+    margin-top: 20px;
+}
+
+.join_us .email_box {
+    width: 940px;
+    /* height: 126px; */
+    margin: auto;
+    background: url('/brand/img/join.png') center center no-repeat;
+    background-size: cover;
+    margin-top: 40px;
+    padding-top: 41px;
+    box-sizing: border-box;
+    border-top: 1px solid  rgb(0 0 0 / 5%);
+}
+.join_us .email_box .link {
+    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;
+    color: #1D1D1D;
+
+}
+
+.link a {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    /* identical to box height, or 200% */
+    letter-spacing: 0.1em;
+    color: rgba(42, 190, 209, 1);
+    text-decoration: underline;
+    text-underline-offset: 4px;
+
+}
+
+.email_box .txt {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 36px;
+    /* identical to box height, or 225% */
+    letter-spacing: 0.1em;
+    /* Style */
+    color: rgba(63, 64, 64, 0.8);
+    margin-top: 20px;
+    text-align: center;
+}
+
+.position_box {
+    width: 1200px;
+    margin: auto;
+    /* margin-top: 40px; */
+}
+
+.position_box .item {
+    width: 368px;
+    height: 368px;
+    border-radius: 16px;
+    float: left;
+    box-sizing: border-box;
+    padding: 40px 0 0 40px;
+    margin-top: 48px;
+}
+
+.position_box .item .branchtit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    letter-spacing: 0.1em;
+    /* Style */
+    color: rgba(63, 64, 64, 0.8);
+}
+
+.position_box .item .jobtit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 28px;
+    line-height: 36px;
+    /* identical to box height, or 129% */
+    letter-spacing: 0.1em;
+    /* #000000 */
+    color: #000000;
+    margin-top: 20px;
+}
+
+.people_box {
+    margin-top: 92px;
+}
+
+.people_box .num_one {
+    width: 36px;
+    height: 36px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: #2CB7CA;
+    border-radius: 50%;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    letter-spacing: 0.1em;
+    /* #FFFFFF */
+    color: #FFFFFF;
+    float: left;
+
+}
+
+.people_box .num_two {
+    width: 66px;
+    height: 36px;
+    background: #2CB7CA;
+    border-radius: 20px;
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    letter-spacing: 0.1em;
+    /* #FFFFFF */
+    color: #FFFFFF;
+    float: left;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.people_box .unit {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 38px;
+    /* identical to box height, or 160% */
+    letter-spacing: 0.1em;
+    /* Style */
+    color: rgba(63, 64, 64, 0.8);
+    float: left;
+    margin-left: 10px;
+}
+
+.position_box .city {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 32px;
+    /* identical to box height, or 160% */
+    letter-spacing: 0.1em;
+    /* Style */
+    color: rgba(63, 64, 64, 0.8);
+    margin-top: 40px;
+}
+
+.contact_us {
+    width: 1200px;
+    margin: auto;
+    margin-top: 100px;
+}
+
+.contact_us .title {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 28px;
+    line-height: 36px;
+    /* identical to box height, or 129% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* #000000 */
+    color: #000000;
+}
+
+.contact_us .email {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 32px;
+    /* identical to box height, or 160% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* Font/#1d1d1d */
+    color: #1D1D1D;
+    margin-top: 42px;
+}
+
+.contact_us .email a {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 32px;
+    text-align: center;
+    letter-spacing: 0.1em;
+    text-decoration-line: underline;
+    text-underline-offset: 5px;
+    /* main/2ABED1 */
+    color: #2ABED1;
+    margin-left: 40px;
+}
+
+.contact_us .address {
+    font-style: normal;
+    font-weight: 290;
+    font-size: 20px;
+    line-height: 32px;
+    text-align: center;
+    margin-top: 28px;
+    /* identical to box height, or 160% */
+    letter-spacing: 0.1em;
+    /* #000000 */
+    color: #000000;
+}
+
+.contact_us .map_box {
+    width: 100%;
+    height: 400px;
+    margin-top: 40px;
+    /* background: #F5FCFD; */
+
+}
+
+.contact_us .qr_box {
+    width: 100%;
+    margin-top: 40px;
+    display: flex;
+}
+
+.qr_box .item {
+    flex: 1;
+}
+
+.qr_box .item .tit {
+    width: 88px;
+    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;
+}
+
+.qr_box .name {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 16px;
+    line-height: 32px;
+    /* identical to box height, or 200% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    /* Font/#1d1d1d */
+    color: #1D1D1D;
+    /* Inside auto layout */
+    flex: none;
+    order: 0;
+    flex-grow: 0;
+    margin-top: 40px;
+}
+
+.qr_box .qr {
+    width: 160px;
+    height: 160px;
+    display: block;
+    margin: auto;
+}
+
+.qr_box .phone {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 20px;
+    line-height: 40px;
+    /* identical to box height, or 200% */
+    text-align: center;
+    letter-spacing: 0.05em;
+    /* #000000 */
+    color: #000000;
+    /* Inside auto layout */
+    flex: none;
+    order: 2;
+    flex-grow: 0;
+    margin-top: 10px;
+}
+
+.qr_box .desc {
+    font-style: normal;
+    font-weight: 400;
+    font-size: 14px;
+    line-height: 32px;
+    /* identical to box height, or 229% */
+    text-align: center;
+    letter-spacing: 0.1em;
+    color: #666666;
+    /* Inside auto layout */
+    flex: none;
+    order: 3;
+    flex-grow: 0;
+}
+
+.map_box img {
+    width: 100%;
+    height: 100%;
+}
+
+.bg_green {
+    background: linear-gradient(199.51deg, rgba(213, 247, 238, 0.96) 18.54%, rgba(255, 255, 255, 0) 86.93%);
+}
+
+.bg_biue {
+    background: linear-gradient(199.51deg, rgba(213, 242, 247, 0.96) 18.54%, rgba(255, 255, 255, 0) 86.93%);
+}
+
+.bg_yellow {
+    background: linear-gradient(199.51deg, rgba(247, 237, 213, 0.96) 18.54%, rgba(255, 255, 255, 0) 86.93%);
+}
+
+.mb-48 {
+    margin-bottom: 48px;
+}
+
+.width-800 {
+    width: 800px !important;
+}
+
+.ml_48 {
+    margin-left: 48px;
+}
+
+.mt-40 {
+    margin-top: 40px;
+}
+
+.mt-20 {
+    margin-top: 20px;
+}
+
+.mt-100 {
+    margin-top: 100px;
+}
+
+.mt-60 {
+    margin-top: 60px;
+}
+
+.ml-20 {
+    margin-left: 20px;
+}
+
+.fl {
+    float: left;
+}
+
+.rl {
+    float: right;
+}
+
+.mt-28 {
+    margin-top: 28px;
+}
+
+.mt-45 {
+    margin-top: 45px;
+}
+
+clearfix:after {
+    content: ".";
+    display: block;
+    clear: both;
+    visibility: hidden;
+    line-height: 0;
+    height: 0;
+    font-size: 0;
+}
+
+.clearfix {
+    *zoom: 1;
+}
+
+.fixed {
+    position: fixed;
+    left: 0;
+    top: 0;
+    z-index: 99;
+}
+
+@keyframes CfadeInUp {
+    from {
+        transform: translateY(50px);
+    }
+
+    to {
+        transform: translateY(0px);
+        opacity: 1;
+    }
+}
+
+.CfadeInUp {
+    opacity: 0;
+    animation: 1s ease forwards alternate;
+}

+ 55 - 0
src/web/staticres/brand/css/liMarquee.css

@@ -0,0 +1,55 @@
+/*Plugin CSS*/
+.str_wrap {
+	overflow:hidden;
+	//zoom:1;
+	width:100%;
+	font-size:12px;
+	line-height:16px;
+	position:relative;
+	-moz-user-select: none;
+	-khtml-user-select: none;
+	user-select: none;  
+	background:#f6f6f6;
+	white-space:nowrap;
+}
+
+.str_wrap.str_active {
+	background:#f1f1f1;
+}
+.str_move { 
+	white-space:nowrap;
+	position:absolute; 
+	top:0; 
+	left:0;
+	cursor:move;
+}
+.str_move_clone {
+	display:inline-block;
+	//display:inline;
+	//zoom:1;
+	vertical-align:top;
+	position:absolute; 
+	left:100%;
+	top:0;
+}
+.str_vertical .str_move_clone {
+	left:0;
+	top:100%;
+}
+.str_down .str_move_clone {
+	left:0;
+	bottom:100%;
+}
+.str_vertical .str_move,
+.str_down .str_move {
+	white-space:normal;
+	width:100%;
+}
+.str_static .str_move,
+.no_drag .str_move,
+.noStop .str_move{
+	cursor:inherit;
+}
+.str_wrap img {
+	max-width:none !important;	
+}

+ 456 - 0
src/web/staticres/brand/css/viewer.css

@@ -0,0 +1,456 @@
+/*!
+ * Viewer.js v1.10.4
+ * https://fengyuanchen.github.io/viewerjs
+ *
+ * Copyright 2015-present Chen Fengyuan
+ * Released under the MIT license
+ *
+ * Date: 2022-02-13T08:39:57.620Z
+ */
+
+.viewer-zoom-in::before, .viewer-zoom-out::before, .viewer-one-to-one::before, .viewer-reset::before, .viewer-prev::before, .viewer-play::before, .viewer-next::before, .viewer-rotate-left::before, .viewer-rotate-right::before, .viewer-flip-horizontal::before, .viewer-flip-vertical::before, .viewer-fullscreen::before, .viewer-fullscreen-exit::before, .viewer-close::before {
+    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC");
+    background-repeat: no-repeat;
+    background-size: 280px;
+    color: transparent;
+    display: block;
+    font-size: 0;
+    height: 20px;
+    line-height: 0;
+    width: 20px;
+  }
+
+.viewer-zoom-in::before {
+  background-position: 0 0;
+  content: "Zoom In";
+}
+
+.viewer-zoom-out::before {
+  background-position: -20px 0;
+  content: "Zoom Out";
+}
+
+.viewer-one-to-one::before {
+  background-position: -40px 0;
+  content: "One to One";
+}
+
+.viewer-reset::before {
+  background-position: -60px 0;
+  content: "Reset";
+}
+
+.viewer-prev::before {
+  background-position: -80px 0;
+  content: "Previous";
+}
+
+.viewer-play::before {
+  background-position: -100px 0;
+  content: "Play";
+}
+
+.viewer-next::before {
+  background-position: -120px 0;
+  content: "Next";
+}
+
+.viewer-rotate-left::before {
+  background-position: -140px 0;
+  content: "Rotate Left";
+}
+
+.viewer-rotate-right::before {
+  background-position: -160px 0;
+  content: "Rotate Right";
+}
+
+.viewer-flip-horizontal::before {
+  background-position: -180px 0;
+  content: "Flip Horizontal";
+}
+
+.viewer-flip-vertical::before {
+  background-position: -200px 0;
+  content: "Flip Vertical";
+}
+
+.viewer-fullscreen::before {
+  background-position: -220px 0;
+  content: "Enter Full Screen";
+}
+
+.viewer-fullscreen-exit::before {
+  background-position: -240px 0;
+  content: "Exit Full Screen";
+}
+
+.viewer-close::before {
+  background-position: -260px 0;
+  content: "Close";
+}
+
+.viewer-container {
+  bottom: 0;
+  direction: ltr;
+  font-size: 0;
+  left: 0;
+  line-height: 0;
+  overflow: hidden;
+  position: absolute;
+  right: 0;
+  -webkit-tap-highlight-color: transparent;
+  top: 0;
+  -ms-touch-action: none;
+      touch-action: none;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none
+}
+
+.viewer-container::-moz-selection, .viewer-container *::-moz-selection {
+    background-color: transparent;
+  }
+
+.viewer-container::selection,
+  .viewer-container *::selection {
+    background-color: transparent;
+  }
+
+.viewer-container:focus {
+    outline: 0;
+  }
+
+.viewer-container img {
+    display: block;
+    height: auto;
+    max-height: none !important;
+    max-width: none !important;
+    min-height: 0 !important;
+    min-width: 0 !important;
+    width: 100%;
+  }
+
+.viewer-canvas {
+  bottom: 0;
+  left: 0;
+  overflow: hidden;
+  position: absolute;
+  right: 0;
+  top: 0
+}
+
+.viewer-canvas > img {
+    height: auto;
+    margin: 15px auto;
+    max-width: 90% !important;
+    width: auto;
+  }
+
+.viewer-footer {
+  bottom: 0;
+  left: 0;
+  overflow: hidden;
+  position: absolute;
+  right: 0;
+  text-align: center;
+}
+
+.viewer-navbar {
+  background-color: rgba(0, 0, 0, 50%);
+  overflow: hidden;
+}
+
+.viewer-list {
+  box-sizing: content-box;
+  height: 50px;
+  margin: 0;
+  overflow: hidden;
+  padding: 1px 0
+}
+
+.viewer-list > li {
+    color: transparent;
+    cursor: pointer;
+    float: left;
+    font-size: 0;
+    height: 50px;
+    line-height: 0;
+    opacity: 0.5;
+    overflow: hidden;
+    transition: opacity 0.15s;
+    width: 30px
+  }
+
+.viewer-list > li:focus,
+    .viewer-list > li:hover {
+      opacity: 0.75;
+    }
+
+.viewer-list > li:focus {
+      outline: 0;
+    }
+
+.viewer-list > li + li {
+      margin-left: 1px;
+    }
+
+.viewer-list > .viewer-loading {
+    position: relative
+  }
+
+.viewer-list > .viewer-loading::after {
+      border-width: 2px;
+      height: 20px;
+      margin-left: -10px;
+      margin-top: -10px;
+      width: 20px;
+    }
+
+.viewer-list > .viewer-active,
+  .viewer-list > .viewer-active:focus,
+  .viewer-list > .viewer-active:hover {
+    opacity: 1;
+  }
+
+.viewer-player {
+  background-color: #000;
+  bottom: 0;
+  cursor: none;
+  display: none;
+  left: 0;
+  position: absolute;
+  right: 0;
+  top: 0;
+  z-index: 1
+}
+
+.viewer-player > img {
+    left: 0;
+    position: absolute;
+    top: 0;
+  }
+
+.viewer-toolbar > ul {
+    display: inline-block;
+    margin: 0 auto 5px;
+    overflow: hidden;
+    padding: 6px 3px
+  }
+
+.viewer-toolbar > ul > li {
+      background-color: rgba(0, 0, 0, 50%);
+      border-radius: 50%;
+      cursor: pointer;
+      float: left;
+      height: 24px;
+      overflow: hidden;
+      transition: background-color 0.15s;
+      width: 24px
+    }
+
+.viewer-toolbar > ul > li:focus,
+      .viewer-toolbar > ul > li:hover {
+        background-color: rgba(0, 0, 0, 80%);
+      }
+
+.viewer-toolbar > ul > li:focus {
+        box-shadow: 0 0 3px #fff;
+        outline: 0;
+        position: relative;
+        z-index: 1;
+      }
+
+.viewer-toolbar > ul > li::before {
+        margin: 2px;
+      }
+
+.viewer-toolbar > ul > li + li {
+        margin-left: 1px;
+      }
+
+.viewer-toolbar > ul > .viewer-small {
+      height: 18px;
+      margin-bottom: 3px;
+      margin-top: 3px;
+      width: 18px
+    }
+
+.viewer-toolbar > ul > .viewer-small::before {
+        margin: -1px;
+      }
+
+.viewer-toolbar > ul > .viewer-large {
+      height: 30px;
+      margin-bottom: -3px;
+      margin-top: -3px;
+      width: 30px
+    }
+
+.viewer-toolbar > ul > .viewer-large::before {
+        margin: 5px;
+      }
+
+.viewer-tooltip {
+  background-color: rgba(0, 0, 0, 80%);
+  border-radius: 10px;
+  color: #fff;
+  display: none;
+  font-size: 12px;
+  height: 20px;
+  left: 50%;
+  line-height: 20px;
+  margin-left: -25px;
+  margin-top: -10px;
+  position: absolute;
+  text-align: center;
+  top: 50%;
+  width: 50px;
+}
+
+.viewer-title {
+  color: #ccc;
+  display: inline-block;
+  font-size: 12px;
+  line-height: 1.2;
+  margin: 0 5% 5px;
+  max-width: 90%;
+  opacity: 0.8;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  transition: opacity 0.15s;
+  white-space: nowrap
+}
+
+.viewer-title:hover {
+    opacity: 1;
+  }
+
+.viewer-button {
+  background-color: rgba(0, 0, 0, 50%);
+  border-radius: 50%;
+  cursor: pointer;
+  height: 80px;
+  overflow: hidden;
+  position: absolute;
+  right: -40px;
+  top: -40px;
+  transition: background-color 0.15s;
+  width: 80px
+}
+
+.viewer-button:focus,
+  .viewer-button:hover {
+    background-color: rgba(0, 0, 0, 80%);
+  }
+
+.viewer-button:focus {
+    box-shadow: 0 0 3px #fff;
+    outline: 0;
+  }
+
+.viewer-button::before {
+    bottom: 15px;
+    left: 15px;
+    position: absolute;
+  }
+
+.viewer-fixed {
+  position: fixed;
+}
+
+.viewer-open {
+  overflow: hidden;
+}
+
+.viewer-show {
+  display: block;
+}
+
+.viewer-hide {
+  display: none;
+}
+
+.viewer-backdrop {
+  background-color: rgba(0, 0, 0, 50%);
+}
+
+.viewer-invisible {
+  visibility: hidden;
+}
+
+.viewer-move {
+  cursor: move;
+  cursor: -webkit-grab;
+  cursor: grab;
+}
+
+.viewer-fade {
+  opacity: 0;
+}
+
+.viewer-in {
+  opacity: 1;
+}
+
+.viewer-transition {
+  transition: all 0.3s;
+}
+
+@-webkit-keyframes viewer-spinner {
+  0% {
+    transform: rotate(0deg);
+  }
+
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes viewer-spinner {
+  0% {
+    transform: rotate(0deg);
+  }
+
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+.viewer-loading::after {
+    -webkit-animation: viewer-spinner 1s linear infinite;
+            animation: viewer-spinner 1s linear infinite;
+    border: 4px solid rgba(255, 255, 255, 10%);
+    border-left-color: rgba(255, 255, 255, 50%);
+    border-radius: 50%;
+    content: "";
+    display: inline-block;
+    height: 40px;
+    left: 50%;
+    margin-left: -20px;
+    margin-top: -20px;
+    position: absolute;
+    top: 50%;
+    width: 40px;
+    z-index: 1;
+  }
+
+@media (max-width: 767px) {
+  .viewer-hide-xs-down {
+    display: none;
+  }
+}
+
+@media (max-width: 991px) {
+  .viewer-hide-sm-down {
+    display: none;
+  }
+}
+
+@media (max-width: 1199px) {
+  .viewer-hide-md-down {
+    display: none;
+  }
+}

+ 1 - 0
src/web/staticres/brand/css/zoomify.min.css

@@ -0,0 +1 @@
+.zoomify{cursor:pointer;cursor:-webkit-zoom-in;cursor:zoom-in}.zoomify.zoomed{cursor:-webkit-zoom-out;cursor:zoom-out;padding:0;margin:0;border:none;border-radius:0;box-shadow:none;position:relative;z-index:1501}.zoomify-shadow{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:block;z-index:1500;background:rgba(0,0,0 ,.3);opacity:0}.zoomify-shadow.zoomed{opacity:1;cursor:pointer;cursor:-webkit-zoom-out;cursor:zoom-out}

BIN
src/web/staticres/brand/img/1@3x.png


BIN
src/web/staticres/brand/img/2@3x.png


BIN
src/web/staticres/brand/img/3@3x.png


BIN
src/web/staticres/brand/img/4@3x.png


BIN
src/web/staticres/brand/img/5@3x.png


BIN
src/web/staticres/brand/img/6@3x.png


BIN
src/web/staticres/brand/img/7@3x.png


BIN
src/web/staticres/brand/img/8@3x.png


BIN
src/web/staticres/brand/img/AAA.png


BIN
src/web/staticres/brand/img/AAA1.png


BIN
src/web/staticres/brand/img/AAA10.png


BIN
src/web/staticres/brand/img/AAA2.png


BIN
src/web/staticres/brand/img/AAA3.png


BIN
src/web/staticres/brand/img/AAA4.png


BIN
src/web/staticres/brand/img/AAA5.png


BIN
src/web/staticres/brand/img/AAA6.png


BIN
src/web/staticres/brand/img/AAA7.png


BIN
src/web/staticres/brand/img/AAA8.png


BIN
src/web/staticres/brand/img/AAA9.png


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно