Эх сурвалжийг харах

Merge branch 'feature/v4.8.28' into dev/v4.8.28_rjj

renjiaojiao 2 жил өмнө
parent
commit
0b8e07ec6c

+ 5 - 4
src/go.mod

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

+ 10 - 8
src/go.sum

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTm
 app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230621114846-e9533ffc8ba0 h1:sKWgJriRTdxEuNkzAooMAjs+2bPu1mq9Q493aMA98oI=
-app.yhyue.com/moapp/jypkg v0.0.0-20230621114846-e9533ffc8ba0/go.mod h1:Ize93SJEPkBR0Tz8PM2KTJK3bpzlD/qp1JwJ4kdmlss=
+app.yhyue.com/moapp/jypkg v0.0.0-20230627054426-ae1e762303e9 h1:7IMkKYkuiUCRravDJFHgHSx1zixWN/AoduUhNs+yMoI=
+app.yhyue.com/moapp/jypkg v0.0.0-20230627054426-ae1e762303e9/go.mod h1:JBkMSnaOQbfV80laTPwjzjfP6nLXOQpJBaNUdvKV2tw=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -1043,8 +1043,8 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
-golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
+golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
+golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1312,8 +1312,8 @@ google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxH
 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA=
-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -1342,8 +1342,8 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5
 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
 google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
-google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
+google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ=
+google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1420,6 +1420,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 h1:lZ0XCzRDSOBaoJczQudZ3KZhRs4zm5sjboDpwuYZUVM=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602/go.mod h1:Jjhym3U0MFdSgeafHPm758NefCPZpekg2sWPh6Gy6Jk=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

+ 136 - 11
src/jfw/front/shorturl.go

@@ -4,6 +4,7 @@ import (
 	"database/sql"
 	"errors"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"jy/src/jfw/config"
 	"jy/src/jfw/wx"
 	"log"
@@ -55,6 +56,30 @@ var Map_stype = map[string]bool{
 	"advancedProject": true,
 }
 
+var TypeCodeMap = map[string]string{
+	"拟建":   "拟建项目",
+	"采购意向": "采购意向",
+	"预告":   "招标预告",
+	"预审":   "资格预审",
+	"预审结果": "资格预审结果",
+	"论证意见": "论证意见",
+	"需求公示": "需求公示",
+	"招标":   "公开招标",
+	"邀标":   "邀请招标",
+	"询价":   "询价采购",
+	"竞谈":   "竞争性谈判",
+	"单一":   "单一来源采购",
+	"竞价":   "竞价公告",
+	"变更":   "变更公告",
+	"中标":   "中标公示",
+	"成交":   "成交公告",
+	"废标":   "废标公告",
+	"流标":   "流标公告",
+	"合同":   "合同公告信息",
+	"验收":   "验收公告信息",
+	"违规":   "违规信息",
+}
+
 var seoAgentReg = regexp.MustCompile("Baiduspider|360Spider|bingbot|Googlebot")
 
 func (s *Short) Article(stype, id string) error {
@@ -150,6 +175,8 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 						retMap["subtype"], _ = obj["subtype"].(string)
 						retMap["subscopeclass"], _ = obj["s_subscopeclass"].(string)
 						retMap["publishtime"] = util.IntAll(obj["publishtime"])
+						retMap["keywords"] = KeyWordHandle(obj)
+						retMap["description"] = DescriptionHandle(stype, obj)
 					}
 					s.T["shareid"] = config.Seoconfig["baiduSEM-p"].(string)
 					s.T["logid"] = config.Seoconfig["baiduSEM-p"].(string)
@@ -184,7 +211,6 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			ssOpenid := s.Session().Get("s_m_openid")
 			po, bo, wo, obj := pcVRT(sid, industry, stype, true)
 			if obj != nil && len(obj) > 0 {
-
 				if len(po) > 0 {
 					s.T["projectOther"] = po
 				}
@@ -231,11 +257,11 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 					obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
 				}
 				s.T["url"] = s.Uri()
+				obj["keywords"] = KeyWordHandle(obj)
+				obj["description"] = DescriptionHandle(stype, obj)
 				s.T["obj"] = obj
-
 				content, _ := s.Render4Cache("/pc/biddetail_rec.html", &s.T)
-				timeout := 60 * 20
-				redis.Put("newother", catchKey, string(content), timeout)
+				redis.Put("newother", catchKey, string(content), 60*20)
 				return s.SetBody(content)
 			}
 		} else {
@@ -334,7 +360,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 		canRead := false
 		if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
 			((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
-			stype == "mailprivate" || stype == "indexcontent" { //邮箱推送
+			stype == "mailprivate" || stype == "indexcontent" || stype == "bdprivate" { //邮箱推送
 			canRead = true
 		} else {
 			canRead = SeeDetailLimit(obj, userId, sid)
@@ -418,6 +444,8 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			s.T["advertUrl"] = config.Sysconfig["advertUrl"]
 			s.T["canRead"] = canRead
 			obj["industry"] = industry
+			obj["keywords"] = KeyWordHandle(obj)
+			obj["description"] = DescriptionHandle(stype, obj)
 			s.T["obj"] = obj
 			//获取打赏文案
 			s.T["rewardText"], s.T["advertText"] = getRewardText()
@@ -453,7 +481,7 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			var node bool
 			if ((isVip && isOldVip) || isMember || isEntniche) || //老版本vip、大会员、商机管理
 				((isVip && !isOldVip) && (!(util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向"))) || //新超级订阅非采购意向”和“拟建项目”
-				stype == "mailprivate" || stype == "indexcontent" { //邮箱推送
+				stype == "mailprivate" || stype == "indexcontent" || stype == "bdprivate" { //邮箱推送
 				node = true
 			} else {
 				_, _, _, objc := pcVRT(sid, indust, stype, isVip || isMember || isEntniche)
@@ -560,7 +588,8 @@ func (s *Short) LoginCommon(userId, stype, id string) error {
 			if ssOpenid != nil {
 				obj["ucbsId"] = encrypt.EncodeArticleId2ByCheck("ucbs#" + ssOpenid.(string) + "#" + id)
 			}
-
+			obj["keywords"] = KeyWordHandle(obj)
+			obj["description"] = DescriptionHandle(stype, obj)
 			s.T["obj"] = obj
 			s.T["url"] = s.Uri()
 			return s.Render("/pc/biddetail_rec.html", &s.T)
@@ -1008,7 +1037,8 @@ func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 		}
 		s.T["logid"] = config.Seoconfig["jysskzy"].(string)
 		s.T["shareid"] = se.EncodeString(shareid)
-		s.T["keywords"] = s.GetString("kds")
+		//s.T["keywords"] = s.GetString("kds")
+
 		s.DisableHttpCache()
 		po, bo, wo, obj := pcVRT(sid, industry, stype, false || false || false)
 		if obj != nil && len(obj) > 0 {
@@ -1024,6 +1054,7 @@ func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 			FieldProcessing(obj, "", industry, id, "", userId, stype, false)
 			obj["urlpath"] = s.Uri()
 			obj["industry"] = industry
+
 			if userId == "" {
 				obj["winnerTitle"] = obj["winner"]
 				obj["buyerTitle"] = obj["buyer"]
@@ -1031,19 +1062,20 @@ func (s *Short) NologinCommon(userId, stype, id, sid string) error {
 				obj["projectcodeTitle"] = obj["projectcode"]
 				log.Println(time.Now().UnixNano())
 				obj = Filter(obj)
-				obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(obj))
+				//obj["description"] = fmt.Sprintf("%s,%s。", obj["title"], baseInfo(obj))
 			}
 			if obj["publishtime"] != nil {
 				obj["publishtimeShorDate"] = time.Unix(util.Int64All(obj["publishtime"]), 0).Format(date.Date_Short_Layout)
 			}
+			obj["keywords"] = KeyWordHandle(obj)
+			obj["description"] = DescriptionHandle("nologin", obj)
 			s.T["obj"] = obj
 			s.T["url"] = s.Uri()
 			s.T["newBidInfoList"] = tg.GetNewBidInfo()
 			s.T["industryInfoList"] = tg.GetConsult()
 			s.T["hotLabelList"] = tg.GetHotLabel(30)
 			content, _ := s.Render4Cache("/pc/tags/detail.html", &s.T)
-			timeout := 60 * 60 * 24
-			redis.Put("newother", catchKey, string(content), timeout)
+			redis.Put("newother", catchKey, string(content), 60*2)
 			return s.SetBody(content)
 		}
 	} else {
@@ -1121,3 +1153,96 @@ func RegDetail(html string) string {
 	}
 	return ""
 }
+
+func KeyWordHandle(obj map[string]interface{}) string {
+	keywordArr := []string{}
+	owner := util.InterfaceToStr(obj["owner"])
+	buyer := util.InterfaceToStr(obj["buyer"])
+	if buyer == "" {
+		buyer = owner
+	}
+	if buyer != "" && buyer != config.Sysconfig["detailMosaicTxt"] {
+		keywordArr = append(keywordArr, buyer)
+	}
+	if util.InterfaceToStr(obj["s_winner"]) != "" && util.InterfaceToStr(obj["s_winner"]) != config.Sysconfig["detailMosaicTxt"] {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["s_winner"]))
+	}
+	if obj["purchasinglist"] != nil && obj["purchasinglist"] != "" {
+		i := 0
+		for _, v := range gconv.SliceMap(obj["purchasinglist"]) {
+			if i == 5 {
+				break
+			}
+			if util.InterfaceToStr(v["itemname"]) != "" && util.InterfaceToStr(obj["s_winner"]) != config.Sysconfig["detailMosaicTxt"] {
+				keywordArr = append(keywordArr, util.InterfaceToStr(v["itemname"]))
+				i++
+			}
+		}
+	}
+	if util.InterfaceToStr(obj["subtype"]) != "" && util.InterfaceToStr(obj["subtype"]) != "其它" {
+		keywordArr = append(keywordArr, TypeCodeMap[util.InterfaceToStr(obj["subtype"])])
+	}
+	if util.InterfaceToStr(obj["area"]) != "" {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["area"])+"招标")
+	}
+	if util.InterfaceToStr(obj["city"]) != "" {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["city"])+"招标")
+	}
+	keywordArr = append(keywordArr, "剑鱼标讯")
+	keyword := strings.Join(keywordArr, ",")
+	return keyword
+}
+func DescriptionHandle(stype string, obj map[string]interface{}) string {
+	description := ""
+	publishtime := util.Int64All(obj["l_publishtime"])
+	if publishtime == 0 {
+		publishtime = util.Int64All(obj["publishtime"])
+	}
+	pushTime := time.Unix(publishtime, 0)
+	title := util.InterfaceToStr(obj["title"])
+	owner := util.InterfaceToStr(obj["owner"])
+	buyer := util.InterfaceToStr(obj["buyer"])
+	if buyer == "" {
+		buyer = owner
+	}
+	s_winner := util.InterfaceToStr(obj["s_winner"])
+	area := util.InterfaceToStr(obj["area"])
+	city := util.InterfaceToStr(obj["city"])
+	if stype == "bdprivate" {
+		//bdprivate
+		//{项目标题},采购单位:{采购单位名称},成交供应商:{中标企业名称},公告日期:{公告日期}。
+		descriptionArr := []string{}
+		if title != "" {
+			descriptionArr = append(descriptionArr, title)
+		}
+		if buyer != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("采购单位:%s", buyer))
+		}
+		if s_winner != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("成交供应商:%s", s_winner))
+		}
+		if publishtime != 0 {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("公告日期:%s", pushTime.Format("2006年01月02日")))
+		}
+		descriptionArr = append(descriptionArr, "查看该项目信息详情请访问剑鱼标讯官网。")
+		description = strings.Join(descriptionArr, ",")
+	} else {
+		//descriptionStr = "%s,项目所属地区是%s%s,项目采购单位是%s,项目发布时间是%s"
+		descriptionArr := []string{}
+		if title != "" {
+			descriptionArr = append(descriptionArr, title)
+		}
+		if area != "" || city != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目所属地区是%s%s", area, city))
+		}
+		if buyer != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目采购单位是%s", buyer))
+		}
+		if publishtime != 0 {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目发布时间是%s", pushTime.Format("2006年01月02日")))
+		}
+		descriptionArr = append(descriptionArr, "查看该项目信息详情请访问剑鱼标讯官网。")
+		description = strings.Join(descriptionArr, ",")
+	}
+	return description
+}

+ 4 - 4
src/jfw/front/tags.go

@@ -408,7 +408,7 @@ func (this *Tags) GetIndustry(industryHref string) interface{} {
 				v: industryMap[v],
 			})
 		}
-		redis.Put("other", rediskey, m, 2*60*60)
+		redis.Put("other", rediskey, m, 2*60)
 		return m
 	}
 	return nil
@@ -493,7 +493,7 @@ func (this *Tags) GetStype(href string) (list []map[string]interface{}) {
 			}
 		}
 		list = m
-		redis.Put("other", rediskey, list, 2*60*60)
+		redis.Put("other", rediskey, list, 2*60)
 	}
 	return list
 }
@@ -677,8 +677,8 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 					industry = strings.Split(industry, "_")[0]
 				}
 				public.BidListConvert(industry, datas)
-				redis.Put("other", rediskey, datas, 2*60*60)
-				redis.Put("other", rediskeyCount, count, 2*60*60)
+				redis.Put("other", rediskey, datas, 2*60)
+				redis.Put("other", rediskeyCount, count, 2*60)
 				return *datas, count, false
 			}
 		}

+ 119 - 1
src/jfw/modules/app/src/app/front/shorturl.go

@@ -11,6 +11,8 @@ import (
 	"strings"
 	"time"
 
+	"github.com/gogf/gf/v2/util/gconv"
+
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/fsw"
@@ -39,6 +41,29 @@ func init() {
 
 var DateFullLayout = "2006-01-02 15:04:05"
 var suffix_msgt = "_SX"
+var TypeCodeMap = map[string]string{
+	"拟建":   "拟建项目",
+	"采购意向": "采购意向",
+	"预告":   "招标预告",
+	"预审":   "资格预审",
+	"预审结果": "资格预审结果",
+	"论证意见": "论证意见",
+	"需求公示": "需求公示",
+	"招标":   "公开招标",
+	"邀标":   "邀请招标",
+	"询价":   "询价采购",
+	"竞谈":   "竞争性谈判",
+	"单一":   "单一来源采购",
+	"竞价":   "竞价公告",
+	"变更":   "变更公告",
+	"中标":   "中标公示",
+	"成交":   "成交公告",
+	"废标":   "废标公告",
+	"流标":   "流标公告",
+	"合同":   "合同公告信息",
+	"验收":   "验收公告信息",
+	"违规":   "违规信息",
+}
 
 func (s *Short) Article(stype, id string) error {
 	//先判断是否有session
@@ -267,6 +292,8 @@ func (s *Short) Article(stype, id string) error {
 		s.T["advertName"] = config.Sysconfig["advertName"]
 		s.T["advertUrl"] = config.Sysconfig["advertUrl"]
 		obj["industry"] = industry
+		obj["keywords"] = KeyWordHandle(obj)
+		obj["description"] = DescriptionHandle(stype, obj)
 		s.T["obj"] = obj
 		s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
 		content, err := s.Render4Cache("/weixin/wxinfocontent.html", &s.T)
@@ -333,8 +360,10 @@ func NoLoginArticle(stype, sid string) map[string]interface{} {
 		obj["buyerTitle"] = obj["buyer"]
 		obj["projectnameTitle"] = obj["projectname"]
 		obj["projectcodeTitle"] = obj["projectcode"]
+		obj["keywords"] = KeyWordHandle(obj)
+		obj["description"] = DescriptionHandle("nologin", obj)
 		obj = Filter(obj)
-		redis.Put("other", catchKey, obj, 60*60*2)
+		redis.Put("other", catchKey, obj, 60*2)
 	}
 	return obj
 }
@@ -612,3 +641,92 @@ func baseInfo(obj map[string]interface{}) string {
 	}
 	return info
 }
+func KeyWordHandle(obj map[string]interface{}) string {
+	keywordArr := []string{}
+	owner := util.InterfaceToStr(obj["owner"])
+	buyer := util.InterfaceToStr(obj["buyer"])
+	if buyer == "" {
+		buyer = owner
+	}
+	if buyer != "" && buyer != config.Sysconfig["detailMosaicTxt"] {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["buyer"]))
+	}
+	if util.InterfaceToStr(obj["s_winner"]) != "" && util.InterfaceToStr(obj["s_winner"]) != config.Sysconfig["detailMosaicTxt"] {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["s_winner"]))
+	}
+	if obj["purchasinglist"] != nil && obj["purchasinglist"] != "" {
+		i := 0
+		for _, v := range gconv.SliceMap(obj["purchasinglist"]) {
+			if i == 5 {
+				break
+			}
+			if util.InterfaceToStr(v["itemname"]) != "" && util.InterfaceToStr(obj["s_winner"]) != config.Sysconfig["detailMosaicTxt"] {
+				keywordArr = append(keywordArr, util.InterfaceToStr(v["itemname"]))
+				i++
+			}
+		}
+	}
+	if util.InterfaceToStr(obj["subtype"]) != "" && util.InterfaceToStr(obj["subtype"]) != "其它" {
+		keywordArr = append(keywordArr, TypeCodeMap[util.InterfaceToStr(obj["subtype"])])
+	}
+	if util.InterfaceToStr(obj["area"]) != "" {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["area"])+"招标")
+	}
+	if util.InterfaceToStr(obj["city"]) != "" {
+		keywordArr = append(keywordArr, util.InterfaceToStr(obj["city"])+"招标")
+	}
+	keywordArr = append(keywordArr, "剑鱼标讯")
+	keyword := strings.Join(keywordArr, ",")
+	return keyword
+}
+func DescriptionHandle(stype string, obj map[string]interface{}) string {
+	description := ""
+	pushTime := time.Unix(util.Int64All(obj["l_publishtime"]), 0)
+	title := util.InterfaceToStr(obj["title"])
+	owner := util.InterfaceToStr(obj["owner"])
+	buyer := util.InterfaceToStr(obj["buyer"])
+	if buyer == "" {
+		buyer = owner
+	}
+	s_winner := util.InterfaceToStr(obj["s_winner"])
+	publishtime := util.Int64All(obj["l_publishtime"])
+	area := util.InterfaceToStr(obj["area"])
+	city := util.InterfaceToStr(obj["city"])
+	if stype == "bdprivate" {
+		//bdprivate
+		//{项目标题},采购单位:{采购单位名称},成交供应商:{中标企业名称},公告日期:{公告日期}。
+		descriptionArr := []string{}
+		if title != "" {
+			descriptionArr = append(descriptionArr, title)
+		}
+		if buyer != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("采购单位:%s", buyer))
+		}
+		if s_winner != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("成交供应商:%s", s_winner))
+		}
+		if publishtime != 0 {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("公告日期:%s", pushTime.Format("2006年01月02日")))
+		}
+		descriptionArr = append(descriptionArr, "查看该项目信息详情请访问剑鱼标讯官网。")
+		description = strings.Join(descriptionArr, ",")
+	} else {
+		//descriptionStr = "%s,项目所属地区是%s%s,项目采购单位是%s,项目发布时间是%s"
+		descriptionArr := []string{}
+		if title != "" {
+			descriptionArr = append(descriptionArr, title)
+		}
+		if area != "" || city != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目所属地区是%s%s", area, city))
+		}
+		if buyer != "" {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目采购单位是%s", buyer))
+		}
+		if publishtime != 0 {
+			descriptionArr = append(descriptionArr, fmt.Sprintf("项目发布时间是%s", pushTime.Format("2006年01月02日")))
+		}
+		descriptionArr = append(descriptionArr, "查看该项目信息详情请访问剑鱼标讯官网。")
+		description = strings.Join(descriptionArr, ",")
+	}
+	return description
+}

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

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

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 86 - 497
src/jfw/modules/app/src/go.sum


+ 23 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/analysis_result.css

@@ -381,6 +381,29 @@
   width: 100%;
   height: .64rem;
 }
+.switchTab .switch-tab{
+  position: relative;
+  height: .44rem;
+  margin-left: .32rem;
+  font-size: .28rem;
+  color: #171826;
+}
+.switchTab .switch-tab.textColor{
+  color: #2ABED1;
+}
+.switchTab .switch-tab .line {
+  position: absolute;
+  bottom: 0;
+  left: .3rem;
+  width: .48rem;
+  height: .04rem;
+  background: #2ABED1;
+  border-radius: .02rem;
+}
+
+.switchTab .switch-tab {
+  margin-top: .18rem;
+}
 #analysis-result .switchTab .switch_label{
   color: #9B9CA3;
   font-size: .24rem;

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

@@ -158,8 +158,8 @@ var vNode = {
                     if(item.project_rate){
                         item.project_rate = (item.project_rate*100).fixed(2) + '%'
                     }
-                    if(item.firsttime){
-                        item.firsttime = new Date(Number(item.firsttime + '000')).pattern('yyyy/MM/dd')
+                    if(item.jgtime){
+                        item.jgtime = new Date(Number(item.jgtime + '000')).pattern('yyyy-MM-dd')
                     }
                     let winnerArrList = []
                     if (Array.isArray(item.s_winner)) {

+ 60 - 27
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/analysis_result.js

@@ -137,7 +137,8 @@ var vNode = {
             id: '',
             isHaveTop: false, // 是否需要置顶tab
             setHeight: 0, // 置顶高度
-            setHeightActive: ''
+            setHeightActive: '',
+            loadingEmpty: false
         }
     },
     computed: {
@@ -243,24 +244,35 @@ var vNode = {
         this.getStickyTop()
         window.addEventListener('scroll', this.handleScroll, true);
         this.init();
-        const observer = new IntersectionObserver(this.handleIntersection, {
-          root: null, // 默认为浏览器视窗
-          threshold: 0, // 交叉比例,0为完全进入视窗
-        });
-        console.log(this.$refs.analysisTab)
-        observer.observe(this.$refs.analysisTab)
+        this.setInterSection()
     },
     methods: {
+        setInterSection () {
+          this.isHaveTop = false
+          const observer = new IntersectionObserver(this.handleIntersection, {
+            root: null, // 默认为浏览器视窗
+            threshold: 0, // 交叉比例,0为完全进入视窗
+          });
+          console.log(this.$refs.analysisTab)
+          observer.observe(this.$refs.analysisTab)
+        },
         handleIntersection(entries) {
-          entries.forEach((entry) => {
-            // 元素不可见
-            if (!entry.isIntersecting) {
-              this.isHaveTop = true
-              this.calcStickyOffset()
-            } else {
-              this.isHaveTop = false
-            }
-          })
+          if(!entries[0].isIntersecting) {
+            this.isHaveTop = true
+            this.calcStickyOffset()
+          } else {
+            this.isHaveTop = false
+          }
+          // entries.forEach((entry) => {
+          //   // 元素不可见
+          //   console.log(entry.isIntersecting)
+          //   if (!entry.isIntersecting) {
+          //     this.isHaveTop = true
+          //     this.calcStickyOffset()
+          //   } else {
+          //     this.isHaveTop = false
+          //   }
+          // })
         },
         calcStickyOffset: function () {
           var headerHeight = $('.jy-app-header')[0].clientHeight
@@ -277,11 +289,13 @@ var vNode = {
           })
         },
         onTabWinnerClick (newval) {
+          this.hotWinnerEnt.hotTabActive = newval
           this.filterData.HotWinnerType = newval
           this.loading = this.showLoading()
           this.getProjectWinnerEnt()
         },
         onTabHistoryClick (newval) {
+          this.historyExpert.historyTabActive = newval
           if(newval === 0) {
             this.filterData.projectScope = 1
           } else {
@@ -522,6 +536,11 @@ var vNode = {
           this.getProjectWinnerEnt()
           this.getProjectDetail()
           this.getHistoryExpert()
+          if(data.searchItem === 1) {
+            this.historyExpert.historyTabActive = 0
+          } else {
+            this.historyExpert.historyTabActive = 1
+          }
         },
         setYearData () {
           let num = 1
@@ -533,11 +552,20 @@ var vNode = {
           } else {
             num = 5
           }
-          this.year = new Date().getFullYear() - num;
+          let month = new Date().getMonth() + 1; // 获取月份,需要加1,因为月份从0开始计数
+          let day = new Date().getDate(); // 获取日期
+          if(month < 10) {
+            month = '0' + month
+          }
+          if(day < 10) {
+            day = '0' + day
+          }
+          this.year = new Date().getFullYear() - num + '/' + month + '/' + day;
         },
         // 获取详情页数据
         getChartData:function() {
             var that = this;
+            that.loadingEmpty = false
             var loading = this.showLoading()
             const {pname, buyer, area, limitTime, keys, searchItem} = this.filterData
             var data = {
@@ -559,6 +587,7 @@ var vNode = {
                 contentType: 'application/json',
                 success:function(res) {
                   console.log(res)
+                  that.loadingEmpty = true
                     if(res.error_code == 0) {
                         if(res.data.PCount) {
                           that.listCount.pCount = res.data.PCount
@@ -593,6 +622,7 @@ var vNode = {
                     loading.clear();
                 },
                 error:function() {
+                  that.loadingEmpty = true
                     loading.clear()
                 }
             })
@@ -661,8 +691,8 @@ var vNode = {
                       if(item.project_rate){
                           item.project_rate = (item.project_rate*100).fixed(2) + '%'
                       }
-                      if(item.firsttime){
-                          item.firsttime = new Date(Number(item.firsttime + '000')).pattern('yyyy-MM-dd')
+                      if(item.jgtime){
+                          item.jgtime = new Date(Number(item.jgtime + '000')).pattern('yyyy-MM-dd')
                       }
                       let winnerArrList = []
                       if (Array.isArray(item.s_winner)) {
@@ -766,11 +796,6 @@ var vNode = {
             sid: sid,
             projectScope: projectScope ? projectScope : 0
           }
-          if(data.searchItem === 1) {
-            this.historyExpert.historyTabActive = 0
-          } else {
-            this.historyExpert.historyTabActive = 1
-          }
           $.ajax({
               type:'post',
               url:'/bigmember/decision/decReviewExperts',
@@ -925,6 +950,7 @@ var vNode = {
                     v.parent = v.doc_count / data[0].doc_count*100 + "%";
                 })
                 this.expertWinArr = data;
+                this.isShow.showExperts = true
             } else {
                 this.isShow.showExperts = false
             }
@@ -1271,7 +1297,8 @@ var vNode = {
                 hotWinnerEnt: this.hotWinnerEnt,
                 historyExpert: this.historyExpert,
                 listCount: this.listCount,
-                isHaveTop: this.isHaveTop
+                isHaveTop: this.isHaveTop,
+                loadingEmpty: this.loadingEmpty
                 }
             // console.log(data)
             sessionStorage.setItem('searchItem', this.filterData.searchItem)
@@ -1323,13 +1350,17 @@ var vNode = {
                 this.listCount = $data.listCount
                 this.active = $data.active
                 this.isHaveTop = $data.isHaveTop
+                this.loadingEmpty = $data.loadingEmpty
                 var _this = this
                 this.$nextTick(function(){
-                  _this.$refs.wrapper.scrollTop = $data.scrollTop || 0
+                  setTimeout(() => {
+                    _this.$refs.wrapper.scrollTop = $data.scrollTop || 0
+                  }, 500)
                 })
                 this.initChartData()
                 this.disWinnerAmount(this.cacheImgData.winnerAmount);
                 this.disReviewExperts(this.cacheImgData.reviewExperts);
+                this.setInterSection()
                 // sessionStorage.removeItem('$data-analysis-result' + this.filterData.searchItem)
             }
             return !!$data
@@ -1345,7 +1376,6 @@ var vNode = {
         },
         onTabClick (page) {
           this.setModuleState()
-          this.active = page
           // this.filterData.projectScope
           // historyExpert.historyTabActive
           this.savePageData()
@@ -1388,6 +1418,9 @@ var vNode = {
               this.getHistoryExpert()
             }
           }
+          setTimeout(() => {
+            this.active = page
+          }, 200)
         },
     }
 }

+ 30 - 10
src/jfw/modules/app/src/web/templates/big-member/page_analysis_result.html

@@ -122,7 +122,7 @@
                               </div>
                           </div>
                           <div class="summary-tip">
-                              <p class="van-hairline--top">数据统计范围:${year}/01/01 至今</p>
+                              <p class="van-hairline--top">数据统计范围:${year}至今</p>
                           </div>
                       </div>
                       <div class="projects" v-if="isShow.showProjectList">
@@ -147,7 +147,9 @@
                             </div>
                             <div class="pl-info can-click">
                                 <span>中标单位:</span>
-                                <span @click="goEntImg(winner.id)" v-for="winner in item.s_winner" :key="winner.id">${winner.name}</span>
+                                <div class="winner-list">
+                                  <span  @click="goEntImg(winner.id)" v-for="winner in item.s_winner" :key="winner.id">${winner.name}</span> 
+                                </div>
                             </div>
                             <div class="pl-info">
                                 <span>中标金额:</span>
@@ -194,10 +196,18 @@
                             <span>同类项目热点中标企业TOP10</span>
                             <div class="switchTab">
                               <span class="switch_label">排序:</span>
-                              <van-tabs class="switch_tab_list" :class="'winner_' + hotWinnerEnt.hotTabActive" v-model:active="hotWinnerEnt.hotTabActive" @click="onTabWinnerClick">
+                              <div :class="{'textColor': hotWinnerEnt.hotTabActive==0}" class="switch-tab" @click="onTabWinnerClick(0)">
+                                <span>中标金额</span>
+                                <div v-if="hotWinnerEnt.hotTabActive==0" class="line"></div>
+                              </div>
+                              <div :class="{'textColor': hotWinnerEnt.hotTabActive==1}" class="switch-tab" @click="onTabWinnerClick(1)">
+                                <span>中标数量</span>
+                                <div v-if="hotWinnerEnt.hotTabActive==1" class="line"></div>
+                              </div>
+                              <!-- <van-tabs class="switch_tab_list" :class="'winner_' + hotWinnerEnt.hotTabActive" v-model:active="hotWinnerEnt.hotTabActive" @click="onTabWinnerClick">
                                 <van-tab title="中标金额"></van-tab>
                                 <van-tab title="中标数量"></van-tab>
-                              </van-tabs>
+                              </van-tabs> -->
                             </div>
                         </div>
                           <div class="win-content">
@@ -289,10 +299,20 @@
                           <div class="filter-title">
                               <span>历史合作评标专家</span>
                               <div class="switchTab">
-                                <van-tabs class="switch_tab_list" :class="'history_'+ historyExpert.historyTabActive" v-model:active="historyExpert.historyTabActive" @click="onTabHistoryClick">
-                                  <van-tab title="全部项目"></van-tab>
-                                  <van-tab title="同类项目"></van-tab>
-                                </van-tabs>
+                                <div :class="{'textColor': historyExpert.historyTabActive==0}" class="switch-tab" @click="onTabHistoryClick(0)">
+                                  <span>全部项目</span>
+                                  <div v-if="historyExpert.historyTabActive==0" class="line"></div>
+                                </div>
+                                <div :class="{'textColor': historyExpert.historyTabActive==1}" class="switch-tab" @click="onTabHistoryClick(1)">
+                                  <span>同类项目</span>
+                                  <div v-if="historyExpert.historyTabActive==1" class="line"></div>
+                                </div>
+                                <!-- <div class="switch-main">
+                                  <van-tabs class="switch_tab_list" :class="'history_'+ historyExpert.historyTabActive" v-model:active="historyExpert.historyTabActive" @click="onTabHistoryClick">
+                                    <van-tab title="全部项目"></van-tab>
+                                    <van-tab title="同类项目"></van-tab>
+                                  </van-tabs>
+                                </div> -->
                               </div>
                           </div>
                           <p style="display: flex;justify-content: space-between;align-items: center;padding:0 .32rem;font-size: .24rem;color:#9B9CA3;height: .48rem;">
@@ -319,7 +339,7 @@
                         <div class="link-btn" @click="onTabClick(1)" v-if="active !== 1 && listCount.AreaCount > 0">${filterData.area}同类项目分析</div>
                         <div class="link-btn" @click="onTabClick(2)" v-if="active !== 2">全国同类项目分析</div>
                       </div>
-                      <div class="jy-empty jy-main-empty" v-if="!isHaveTrue">
+                      <div class="jy-empty jy-main-empty" v-if="!isHaveTrue && loadingEmpty">
                         <div class="jy-empty-img"></div>
                         <div class="jy-empty-text" style="padding-bottom: 0.32rem;">
                           <span style="color: #171826;" v-if="active === 0">${filterData.pname}</span><br/>
@@ -333,7 +353,7 @@
                         </div>
                       </div>
                     </div>
-                    <div class="jy-empty" v-if="listCount.pCount === 0">
+                    <div class="jy-empty" v-if="listCount.pCount === 0 && isShow.isShowAll">
                       <div class="jy-empty-img"></div>
                       <p class="jy-empty-text" style="padding-bottom: 0.32rem;">
                         对不起,没有匹配到同类项目<br/>

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

@@ -2,7 +2,7 @@
 <head>
     {{include "/common/meta.html"}}
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    <meta name="keywords" content="">
+    <meta name="keywords" content="{{.T.obj.keywords}}">
     <meta name="description" content="{{.T.obj.description}}">
     <title>公告信息</title>
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/alertPopShow.css?v={{Msg "seo" "version"}}" rel="stylesheet">

+ 14 - 0
src/jfw/modules/bigmember/src/service/analysis/decision.go

@@ -387,6 +387,20 @@ func (this *Analysis) DecReviewExperts() {
 				if getRes.ServiceId == 0 {
 					getRes.ServiceId = 6
 				}
+				//各维度项目数量
+				all_count, area_count, buyer_count := AnalyzeNumber(getRes.Area, getRes.BuyerContent, getRes.Buyer, getRes.LimitTime)
+				var isAnalyze bool
+				if all_count == 0 || (getRes.SearchItem == 1 && buyer_count == 0) ||
+					(getRes.SearchItem == 2 && area_count == 0) {
+					isAnalyze = true
+				}
+				if isAnalyze {
+					regMap.Data = map[string]interface{}{
+						"PAnalysis": nil,
+					}
+					this.ServeJson(regMap)
+					return
+				}
 				// getRes.Buyer = "北京市交通委员会密云公路分局"
 				//采购单位的采购类型
 				buyer_buyerClass := ""

+ 7 - 1
src/web/staticres/common-module/analysis-filter/css/analysis-filter.css

@@ -52,6 +52,8 @@
 }
 .analysis-filter .van-field__control{
   font-size: .32rem;
+  white-space: pre-wrap;
+  word-wrap: break-word;
 }
 
 .analysis-filter .van-field__control::-webkit-scrollbar {
@@ -165,6 +167,10 @@
 }
 
 .van-popup.van-popover {
-  width: 80%;
+  width: 92%;
   left: 0.5rem;
+}
+
+.van-popover__arrow {
+  display: none;
 }

+ 3 - 3
src/web/staticres/common-module/analysis-filter/js/analysis-filter.js

@@ -2,7 +2,7 @@ var analysisTemp = `
 <div class="analysis-filter">
   <van-form @submit="onSubmit" class="j-container">
     <van-cell-group inset>
-      <van-popover :close-on-click-action="true" :close-on-click-outside="true" v-model="showPopover">
+      <van-popover :show-arrow="false" :close-on-click-action="true" :close-on-click-outside="true" v-model="showPopover">
         <template #reference>
           <van-field
             v-model="filters.pname"
@@ -33,7 +33,7 @@ var analysisTemp = `
           </ul>
         </div>
       </van-popover>
-      <van-popover :close-on-click-action="true" :close-on-click-outside="true" v-model="showBuyerPopover">
+      <van-popover :show-arrow="false" :close-on-click-action="true" :close-on-click-outside="true" v-model="showBuyerPopover">
         <template #reference>
           <van-field
             required
@@ -86,7 +86,7 @@ var analysisTemp = `
           </div>
         </template>
         <template #button>
-          <button type="button" class='addkeys' @click="addKeys" size="small">添加</button>
+          <button type="button" :disabled="filters.keys==''" class='addkeys' @click="addKeys" size="small">添加</button>
         </template>
       </van-field>
       <van-field

+ 1 - 1
src/web/templates/pc/tags/detail.html

@@ -1,7 +1,7 @@
 <html style="height: 100%">
 <head>
   <title>{{.T.obj.title}} - 剑鱼标讯</title>
-  <meta name="keywords" content="">
+  <meta name="keywords" content="{{.T.obj.keywords}}">
   <meta name="description" content="{{.T.obj.description}}">
   <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0" user-scalable="no" />
 	<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />

+ 4 - 2
src/web/templates/weixin/messagedetail.html

@@ -2,6 +2,8 @@
 <head>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 <meta name="format-detection" content="telephone=no, email=no"/>
+  <meta name="Keywords" content="{{.T.obj.keywords}}"/>
+  <meta name="Description" content="{{.T.obj.description}}"/>
 <title>公告信息</title>
 <link href="{{Msg "seo" "cdn"}}/css/bootstrap.min.css" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/wxswordfish/style.css?v={{Msg "seo" "version"}}" rel="stylesheet">
@@ -73,7 +75,7 @@ body{
 	}
 	$("body").show();
 	/**/
-	$(".content img").each(function() {   
+	$(".content img").each(function() {
         //var src=$(this).attr("src");
 		//var add = "http://wxws.qmx.top"
 		//$(this).attr("src",add+src);
@@ -83,4 +85,4 @@ body{
 </script>
 {{include "/common/baiducc.html"}}
 </body>
-</html>
+</html>

+ 3 - 1
src/web/templates/weixin/wxinfocontent.html

@@ -1,7 +1,9 @@
 <html>
 <head>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-<title>公告信息</title>
+  <meta name="Keywords" content="{{.T.obj.keywords}}"/>
+  <meta name="Description" content="{{.T.obj.description}}"/>
+  <title>公告信息</title>
 <link href="{{Msg "seo" "cdn"}}/css/bootstrap.min.css" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/wxswordfish/style.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">

+ 2 - 0
src/web/templates/weixin/wxinfocontent_rec.html

@@ -1,5 +1,7 @@
 <html>
 <head>
+  <meta name="Keywords" content="{{.T.obj.keywords}}"/>
+  <meta name="Description" content="{{.T.obj.description}}"/>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 <title>公告信息</title>
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">

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