Przeglądaj źródła

Merge remote-tracking branch 'origin/feature/v4.8.25' into dev/v4.8.25_dx

# Conflicts:
#	src/jfw/modules/app/src/go.mod
#	src/jfw/modules/app/src/go.sum
duxin 2 lat temu
rodzic
commit
275fd2fb82
75 zmienionych plików z 5424 dodań i 1704 usunięć
  1. 4 4
      src/db.json
  2. 2 2
      src/jfw/front/tags.go
  3. 4 97
      src/jfw/modules/app/src/app/front/login.go
  4. 11 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/j-icons.css
  5. 160 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/page_pro_follow_detail.css
  6. 15 1
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/page_pro_follow_list.css
  7. 25 3
      src/jfw/modules/app/src/web/staticres/jyapp/css/wxinfocontent.css
  8. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/images/canbiao.png
  9. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/images/canbiao_gray.png
  10. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/images/person_cb.png
  11. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/images/weicanbiao.png
  12. 161 2
      src/jfw/modules/app/src/web/templates/big-member/page_client_follow_detail.html
  13. 9 0
      src/jfw/modules/app/src/web/templates/big-member/page_client_follow_list.html
  14. 667 3
      src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_detail.html
  15. 81 2
      src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_list.html
  16. 17 6
      src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html
  17. 166 0
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  18. 2 2
      src/jfw/modules/bigmember/src/db.json
  19. 5 1
      src/jfw/modules/bigmember/src/entity/followProject.go
  20. 1 1
      src/jfw/modules/bigmember/src/go.mod
  21. 32 21
      src/jfw/modules/bigmember/src/service/analysis/decision.go
  22. 6 5
      src/jfw/modules/bigmember/src/service/analysis/power.go
  23. 15 1
      src/jfw/modules/bigmember/src/service/follow/project.go
  24. 3 2
      src/jfw/modules/bigmember/src/service/search/search.go
  25. 2 2
      src/jfw/modules/bigmember/src/util/power.go
  26. 2 2
      src/jfw/modules/wxtoken/src/config.json
  27. 32 31
      src/seo.json
  28. 11 0
      src/web/staticres/big-member/css/j-icons.css
  29. 163 0
      src/web/staticres/big-member/css/page_pro_follow_detail.css
  30. 15 1
      src/web/staticres/big-member/css/page_pro_follow_list.css
  31. 18 0
      src/web/staticres/common-module/big-member/css/page_client_follow_list.css
  32. BIN
      src/web/staticres/common-module/big-member/image/canbiao-active.png
  33. BIN
      src/web/staticres/common-module/big-member/image/canbiao-red.png
  34. BIN
      src/web/staticres/common-module/big-member/image/canbiao.png
  35. BIN
      src/web/staticres/common-module/big-member/image/person_cb.png
  36. 510 0
      src/web/staticres/common-module/big-member/js/page_client_follow_detail.js
  37. 79 2
      src/web/staticres/common-module/big-member/js/page_client_follow_list.js
  38. 33 10
      src/web/staticres/common-module/collection/css/index.css
  39. 98 22
      src/web/staticres/common-module/collection/js/index-wx.js
  40. 85 8
      src/web/staticres/common-module/collection/js/index.js
  41. 1 1
      src/web/staticres/common-module/public/head.js
  42. 0 0
      src/web/staticres/common-module/track/j-track-core.amd.min.js
  43. 0 0
      src/web/staticres/common-module/track/j-track-core.es.min.js
  44. 0 0
      src/web/staticres/common-module/track/j-track-core.min.js
  45. 0 0
      src/web/staticres/common-module/track/j-track.amd.min.js
  46. 0 0
      src/web/staticres/common-module/track/j-track.es.min.js
  47. 0 0
      src/web/staticres/common-module/track/j-track.min.js
  48. BIN
      src/web/staticres/commonFunctions/participate-ent.png
  49. BIN
      src/web/staticres/commonFunctions/participate-person.png
  50. 18 4
      src/web/staticres/css/dev2/biddingSearch.css
  51. 10 1
      src/web/staticres/css/dev2/newBidSearch.css
  52. 23 0
      src/web/staticres/css/wxcontentinfo.css
  53. 12 0
      src/web/staticres/frontRouter/pc/collection/css/index-pc.css
  54. 70 0
      src/web/staticres/frontRouter/pc/collection/js/index-pc.js
  55. BIN
      src/web/staticres/images/canbiao-active.png
  56. BIN
      src/web/staticres/images/canbiao-red.png
  57. BIN
      src/web/staticres/images/canbiao.png
  58. BIN
      src/web/staticres/images/circle-share.png
  59. BIN
      src/web/staticres/images/person.png
  60. BIN
      src/web/staticres/images/person_cb.png
  61. BIN
      src/web/staticres/images/weicanbiao.png
  62. BIN
      src/web/staticres/images/wxkeyset/right.png
  63. 97 1
      src/web/staticres/js/superSearch.js
  64. 6 13
      src/web/staticres/pccss/pc-detail.css
  65. 161 2
      src/web/templates/big-member/wx/page_client_follow_detail.html
  66. 9 0
      src/web/templates/big-member/wx/page_client_follow_list.html
  67. 673 2
      src/web/templates/big-member/wx/page_pro_follow_detail.html
  68. 95 3
      src/web/templates/big-member/wx/page_pro_follow_list.html
  69. 1 0
      src/web/templates/frontRouter/pc/collection/sess/index.html
  70. 19 8
      src/web/templates/frontRouter/wx/collection/sess/index.html
  71. 1622 1428
      src/web/templates/pc/biddetail_rec.html
  72. 2 1
      src/web/templates/pc/classifylist.html
  73. 2 2
      src/web/templates/pc/dataExport_sieve.html
  74. 29 1
      src/web/templates/pc/supsearch.html
  75. 140 6
      src/web/templates/weixin/wxinfocontent_rec.html

+ 4 - 4
src/db.json

@@ -15,7 +15,7 @@
 			"password": "123456"
 		},
 		"ent": {
-			"address": "192.168.3.207:27001,192.168.3.206:27002",
+			"address": "192.168.3.206:27002",
 	 		"size": 5,
 	 		"dbName": "mixdata",
 			"userName": "jyDevGroup",
@@ -27,7 +27,7 @@
 	 		"dbName": "jyqyfw"
 		},
 		"bidding": {
-			"address": "192.168.3.207:27001,192.168.3.206:27002",
+			"address": "192.168.3.206:27002",
 	 		"size": 5,
 	 		"dbName": "qfw_data",
 			"replSet": "",
@@ -48,10 +48,10 @@
     },
     "redis": {
     	"main":{
-			"address": "other=192.168.3.206:1712,push=192.168.3.206:1712,sso=192.168.3.206:1712,session=192.168.3.11:1713,recovery=192.168.3.206:1712,merge=192.168.3.206:1712,newother=192.168.3.206:1712,poly=192.168.3.149:1713"
+			"address": "other=192.168.3.149:1712,push=192.168.3.149:1712,sso=192.168.3.149:1712,session=192.168.3.11:1713,recovery=192.168.3.149:1712,merge=192.168.3.149:1712,newother=192.168.3.149:1712,poly=192.168.3.149:1713"
 		},
 		"login": {
-			"address": "login=192.168.3.206:1712"
+			"address": "login=192.168.3.149:1713"
 		}
     },
     "mysql": {

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

@@ -649,7 +649,7 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 			var datas *[]map[string]interface{}
 			var startPage int
 			currentPage := 5
-			limitcount := 50
+			limitcount := qu.IntAllDef(config.Seoconfig["tagsLimitCount"], 50)
 			count := elastic.Count(INDEX, TYPE, query1)
 			if keyword == "" {
 				r := rand.New(rand.NewSource(time.Now().UnixNano()))
@@ -661,7 +661,7 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, bidField, startPage, limitcount)
 			} else {
 				log.Println(keyword, area, city, industry)
-				_, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, "", stype, industry, "", "", "", "", "", "", "", 0, true, []string{"title", "detail"}, bidField, "", false, false, "", 50, "")
+				_, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, "", stype, industry, "", "", "", "", "", "", "", 0, true, []string{"title", "detail"}, bidField, "", false, false, "", limitcount, "")
 
 				if datas != nil && len(*datas) > limitcount {
 					*datas = (*datas)[0:limitcount]

+ 4 - 97
src/jfw/modules/app/src/app/front/login.go

@@ -15,7 +15,6 @@ import (
 	utils "jy/src/jfw/modules/app/src/app/jyutil"
 
 	qutil "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/encrypt"
 	. "app.yhyue.com/moapp/jybase/mongodb"
 	"app.yhyue.com/moapp/jybase/redis"
 	qrpc "app.yhyue.com/moapp/jybase/rpc"
@@ -29,7 +28,6 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"github.com/dchest/captcha"
 	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/primitive"
 )
 
 // UserSign 签名
@@ -309,7 +307,7 @@ func (l *Login) Sess(ostr string) error {
 				return l.Redirect("/jyapp/free/mob/err")
 			}
 			if sessVal["userId"] == nil {
-				if createSession(l.Session(), fmt.Sprint(identity.UserId), 3, l.ResponseWriter, false) {
+				if jy.JyAppCreateSession(mongodb, l.Session(), fmt.Sprint(identity.UserId), 3, l.ResponseWriter, false, config.Middleground, qutil.ObjToString(config.Sysconfig["appPushServiceRpc"]), qutil.IntAll(config.Sysconfig["criticality"])) {
 					hasSession = true
 				} else {
 					log.Println("创建session失败", str)
@@ -331,7 +329,7 @@ func (l *Login) Sess(ostr string) error {
 						loginType = 1
 					}
 				}
-				if createSession(l.Session(), loginId, loginType, l.ResponseWriter, true) {
+				if jy.JyAppCreateSession(mongodb, l.Session(), loginId, loginType, l.ResponseWriter, true, config.Middleground, qutil.ObjToString(config.Sysconfig["appPushServiceRpc"]), qutil.IntAll(config.Sysconfig["criticality"])) {
 					hasSession = true
 					if identity := config.Middleground.UserCenter.IdentityByUserId(qutil.Int64All(l.GetSession("base_user_id"))); identity != nil {
 						hasSession = hasSession && NewIdentityInfo(identity).Switch(l.Session(), &public.MQFW)
@@ -986,97 +984,6 @@ func findWxExistsId(phoneNum string) interface{} {
 	return nil
 }
 
-/*
- * 创建session
- * loginType 0 _id 1 s_phone 2 a_m_openid
- */
-func createSession(s *httpsession.Session, loginId string, loginType int, rw http.ResponseWriter, isSwitchToBestIdentity bool) bool {
-	if loginId == "" {
-		return false
-	}
-	query := map[string]interface{}{
-		"i_appid": 2,
-	}
-	switch loginType {
-	case 0: //_id登录
-		query["_id"], _ = primitive.ObjectIDFromHex(loginId)
-		break
-	case 1: //s_phone登录
-		query["s_phone"] = loginId
-		break
-	case 2: //a_m_openid登录
-		query["a_m_openid"] = loginId
-		break
-	case 3: //base_user_id登录
-		query["base_user_id"] = qutil.Int64All(loginId)
-		break
-	default:
-		return false
-	}
-	data, ok := mongodb.FindOneByField("user", query, `{"s_m_openid":1,"s_phone":1,"s_jpushid":1,"s_opushid":1,"s_appponetype":1,"s_headimageurl":1,"s_phone":1,"s_nickname":1,"s_appversion":1,"i_unlimited":1,"s_jyname":1,"base_user_id":1}`)
-	if !ok || data == nil || len(*data) == 0 {
-		return false
-	}
-	person := *data
-	sessVal := map[string]interface{}{}
-	sessVal["userId"] = BsonIdToSId(person["_id"])
-	sessVal["mgoUserId"] = sessVal["userId"]
-	sessVal["s_jpushid"] = person["s_jpushid"]
-	sessVal["s_m_openid"] = person["s_m_openid"]
-	sessVal["s_opushid"] = person["s_opushid"]
-	sessVal["s_appponetype"] = person["s_appponetype"]
-	sessVal["s_appversion"] = person["s_appversion"]
-	sessVal["s_headimageurl"] = strings.Replace(qutil.ObjToString(person["s_headimageurl"]), "http://", "https://", 1)
-	sessVal["i_unlimited"] = qutil.IntAll(person["i_unlimited"])
-	sessVal["base_user_id"] = qutil.IntAll(person["base_user_id"])
-	if qutil.ObjToString(person["s_phone"]) != "" {
-		phone := person["s_phone"].(string)
-		sessVal["s_phone"] = phone
-		phone = string(phone[0:3]) + "****" + string(phone[len(phone)-4:])
-		sessVal["s_nickname"] = phone
-	}
-	if qutil.ObjToString(person["s_m_phone"]) != "" {
-		s_m_phone := person["s_m_phone"].(string)
-		sessVal["s_m_phone"] = s_m_phone
-	}
-	if qutil.ObjToString(person["s_nickname"]) != "" {
-		sessVal["app_name"] = person["s_nickname"]
-	}
-	// 剑鱼昵称
-	if qutil.ObjToString(person["s_jyname"]) != "" {
-		sessVal["s_jyname"] = person["s_jyname"]
-	}
-	s.SetMultiple(sessVal)
-	if isSwitchToBestIdentity {
-		SwitchToBest(qutil.Int64All(sessVal["base_user_id"]), s, config.Middleground, &public.MQFW, true)
-	}
-	//cookie
-	maxAge := int(time.Hour * 72 / time.Second) //3天,单位秒
-	expires := time.Now().Add(72 * time.Hour)
-	simpleuid := encrypt.SE.EncodeString(BsonIdToSId(person["_id"]))
-	c := &http.Cookie{
-		Name:     "ud_safe",
-		Value:    simpleuid,
-		Path:     "/",
-		HttpOnly: false,
-		MaxAge:   maxAge,
-		Expires:  expires,
-	}
-	http.SetCookie(rw, c)
-	//多账号登陆用户
-	i_unlimited := qutil.IntAll(person["i_unlimited"])
-	if i_unlimited > 0 {
-		uid := BsonIdToSId(person["_id"])
-		jy.PutLoginSess(mongodb, qutil.ObjToString(config.Sysconfig["appPushServiceRpc"]), fmt.Sprint(s.Id()), uid, qutil.IntAll(config.Sysconfig["criticality"]), i_unlimited)
-		redis.Put("other", fmt.Sprintf("app_%s", fmt.Sprint(s.Id())), &jy.AppLoginPush{
-			JgPushId:    qutil.ObjToString(person["s_jpushid"]),
-			OtherPushId: qutil.ObjToString(person["s_opushid"]),
-			PhoneType:   qutil.ObjToString(person["s_appponetype"]),
-		}, 86400*30)
-	}
-	return true
-}
-
 // 清除session
 func ClearSession(s *httpsession.Session) {
 	s.Clear()
@@ -1191,7 +1098,7 @@ func afterLogin(user map[string]interface{}, session *httpsession.Session, rid,
 			jyutil.UnLoginPush.DeleteBuff(rid)
 		}
 	}()
-	createSession(session, userid, 0, rw, true)
+	jy.JyAppCreateSession(mongodb, session, userid, 0, rw, true, config.Middleground, qutil.ObjToString(config.Sysconfig["appPushServiceRpc"]), qutil.IntAll(config.Sysconfig["criticality"]))
 	return createSign(userid, rid, "登录后", session)
 }
 
@@ -1215,7 +1122,7 @@ func autoLogin(sign, from string, session *httpsession.Session, rw http.Response
 	// 		return -3
 	// 	}
 	// }
-	if createSession(session, u.UserId, 0, rw, true) {
+	if jy.JyAppCreateSession(mongodb, session, u.UserId, 0, rw, true, config.Middleground, qutil.ObjToString(config.Sysconfig["appPushServiceRpc"]), qutil.IntAll(config.Sysconfig["criticality"])) {
 		return 1
 	}
 	return 0

+ 11 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/j-icons.css

@@ -372,6 +372,17 @@
     background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANySURBVHgB7VndUdtAEP5OsvPsDiIqiDMJmWEgg1VBTAVABZAKwBUEKghUEFKB7AmEBwg4FcTpgKc8YKTN7kk2MsPpx5asyUTfjHxne3W7e3u3u7cH1KhRo0aVUCgI3uWlA7/RVcp6BaIOCC0evaX/JNxxfyQPEQ0wfjhz3bURCsDCCngXP3YU0TZ3O8iHIang2F1/d4IFMLcC3rerjlLqM3cd/YPMsqXOyMcAtj/EfXPkuq/vNK1328KLMdPZbfg+v2d9mFoHbBUV9OZVJLcCIozVDA4ItD8VAHSMceNkInCmcULLHSCaAAV1FIytXp4xwvdywPMuHdVsfuFuW2acFPXcjdUjLADv/Gqfhf8UfR3ReOzm2R+ZFYiE9xDOWG5GZY1tZSGSZRNjMCxSeIGMJWPK2MJDrKz3TQZkUkDWPB5nZ6tI4SeIlNgSHvy0I56pSF1C0WYTbwNmsFKG8DP8wuV0y90WxwzXfb/aT6JPtUDkKXjP0seyhRdoS4B6mnfophORaIHY7I86G29XsET0z69/ceNwjNhNihGJFmDh96SVQIMlQ8cWLYO1nURnVEDWIsTfA3eLhvu5wIFRePPTubi5eWkiM1ug2eiGHXWGCiARmQJ8lf79H3/LRGdUQJHalJaUP0BlUH39KRmuAWYLqChJC4NLNfD9Ce+OiSRpEzv6k7NKVIaIN5ExKicpoF/Kmx0WiRjvuRT4J5CkwONhpCLEeBtXQaoC4UmqKkx5j0wURgXYB0/cZxtV4YWteXNU/m0iMVvAIu3CFOxNVAROZSa8+yYaswJc+tAtUbfCfdCdkeUZGBWIUuc+xIU1H3awZEgmjNB9DpPS+EQ3SkqdSsuH7j0sGdNzCNeOkugSFXDX35wg9ACOVA+wJAy+X8uEOcI7LRNODWR8rNuVlq1wEKXYpUJ4sAfUpZos55BUBeRMSgQxo65MlKlErLwC4ZnlHJItlXiwDzFT8iheiVjRzIEs25BnKv6PwpYgVnwaIbTEbREbWzasaugyioM5imZzFXfR8A+VwsS15q4u6zE4tkTu2ZHf9D7jZVNqcXdGiCfV5fASg8vr4RH0+fK6b7eVjU0E1J0pr7OnSytgFa7AE0VkJvMmfX223GllFxxPoT1TU66YuBhAbBV5Zq+YxELskoOfsPmKaa38Kl+NGjVqlI+/zO65Qdp3pJkAAAAASUVORK5CYII=");
 }
 
+.icon-canbiao-red {
+    width: .4rem;
+    height: .4rem;
+    background-image: url(/common-module/big-member/image/canbiao-red.png);
+}
+.icon-canbiao-blue {
+    width: .4rem;
+    height: .4rem;
+    background-image: url(/common-module/big-member/image/canbiao-active.png);
+}
+
 /******** img背景图 **********/
 .j-img {
     display: inline-block;

+ 160 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/page_pro_follow_detail.css

@@ -3,6 +3,18 @@
   /*开标提醒弹窗样式*/
 }
 
+.currentTimeDiv{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-height: .48rem;
+  padding: .06rem 0;
+  background: #FFE9EA;
+  color: #FF3A20;
+  font-size: .24rem;
+  line-height: .36rem;
+}
+
 .prodetail .prodetailTop {
   background: #fff;
   box-shadow: inset 0px -0.5px 0px rgba(0, 0, 0, 0.05);
@@ -173,6 +185,71 @@
   margin-right: .08rem;
 }
 
+.prodetail .bid_status.prosummary {
+  margin-bottom: .2rem;
+  padding-bottom: .32rem;
+}
+
+.prodetail .bid_status.prosummary .summary_title{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.prodetail .bid_status.prosummary .summary_title .actionBtn{
+  color: #2ABED1;
+  font-size: 14px;
+  text-decoration: underline;
+}
+.prodetail .bid_status .van-cell{
+  display: flex;
+  align-items: flex-start;
+  padding: .3rem 0;
+}
+.prodetail .bid_status .van-cell .van-field__label{
+  font-size: .3rem;
+}
+.prodetail .bid_status .van-cell .van-field__body textarea {
+  min-height: .48rem;
+}
+.prodetail .bid_status .van-cell .van-field__control{
+  font-size: .32rem;
+}
+.prodetail .bid_status .van-cell--required::before{
+  left: -.16rem;
+}
+.prodetail .bid_status .van-field__label {
+  margin-right: .32rem;
+}
+
+.popupTime .van-cell.cell_checked .van-cell__title{
+  color: #2ABED1;
+}
+
+.popupTime .van-cell__title{
+  font-size: 14px;
+}
+
+.popupTime .van-checkbox__icon--checked .van-icon.van-icon-success{
+  background-color: #2ABED1;
+  border-color: #2ABED1;
+}
+.bid_status .view-result-tip{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: .1rem .16rem;
+  margin: .24rem 0;
+  font-size: .3rem;
+  color: #2ABED1;
+  background: linear-gradient(270deg, rgba(234, 248, 250, 0) 0%, #EAF8FA 52.08%, rgba(234, 248, 250, 0) 100%);
+}
+.view_history{
+  margin-bottom: .2rem;
+}
+.view_history .van-cell{
+  padding: .3rem .32rem;
+}
 .columnLine{
   display: flex;
   margin: 0 0 0 16px;
@@ -344,6 +421,20 @@
   color: #2ABED1;
 }
 
+.prodetail .popupTime .popupTime-main .bid_ul .bid_select{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 16px;
+  height: 1.08rem;
+  color: #171826;
+  font-size: 16px;
+}
+.bid_select>img{
+  width: .48rem;
+  height: .48rem;
+}
+
 /*取消关注弹窗样式*/
 .caredialog {
   width: 6.06rem;
@@ -737,3 +828,72 @@
   height: .92rem;
   background: #e6e6e6;
 }
+
+
+.refer_stand{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 .32rem .36rem;
+  min-height: .8rem;
+  background: #fff;
+}
+.refer_stand .r-s-left{
+  font-size: .28rem;
+  line-height: .4rem;
+  color: #5F5E64;
+}
+.refer_stand .r-s-left, .refer_stand .r-s-right{
+  display: flex;
+  align-items: center;
+}
+
+.refer_stand .r-s-left img, .refer_stand .r-s-right img{
+  margin-right: .08rem;
+  width: .48rem;
+  height: .48rem;
+}
+.refer_stand .r-s-right{
+  font-size: .28rem;
+}
+
+.submitBtn{
+  height: .92rem;
+  width: 100%;
+  background: #2ABED1;
+  border-radius: .16rem;
+  border: none;
+}
+
+.acc-input-group {
+  position: relative;
+}
+
+.acc-input-group .popover-acc-input-group .popover-acc-input-group--item {
+  width: 100%;
+  font-weight: 500;
+  font-size: 14px;
+  line-height: 20px;
+  color: #171826;
+  padding: 8px 16px;
+  box-sizing: border-box;
+}
+.acc-input-group .popover-acc-input-group {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  top: 60px;
+  width: 100%;
+  background: #fff;
+  max-height: 170px;
+  overflow: scroll;
+  z-index: 9999999;
+  height: 170px;
+  border-radius: 8px;
+  border: 1px solid #eee;
+}
+.cancel_select{
+  font-size: .28rem;
+  color: #2ABED1;
+  margin-left: .32rem;
+}

+ 15 - 1
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/page_pro_follow_list.css

@@ -160,10 +160,24 @@
     color: #a0a0a0 !important;
 }
 
-.article-item-hd {
+.article-item-hd,
+.article-item-ft {
   display: flex;
   justify-content: space-between;
 }
+.article-item-ft {
+  margin-top: .24rem;
+}
+.article-item-ft .action-item {
+  display: flex;
+  align-items: center;
+  font-size: .28rem;
+  line-height: .4rem;
+  color: #5F5E64;
+}
+.action-item .label-icon {
+  margin-left: 0.08rem;
+}
 
 .bi-report-inject-button {
   display: inline-block;

+ 25 - 3
src/jfw/modules/app/src/web/staticres/jyapp/css/wxinfocontent.css

@@ -287,7 +287,7 @@ body .loading_ p span {
 .toolbar {
     position: relative;
     font-size: 13px;
-    margin: 10px 16px 16px;
+    margin: 10px 16px 0;
 }
 
 .toolbar .tool_top {
@@ -301,6 +301,28 @@ body .loading_ p span {
     justify-content: space-between;
 }
 
+.toolbar .refer_stand{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: .8rem;
+}
+.toolbar .refer_stand .r-s-left{
+  font-size: 14px;
+  line-height: 20px;
+  color: #5F5E64;
+}
+.toolbar .refer_stand .r-s-left, .toolbar .refer_stand .r-s-right{
+  display: flex;
+  align-items: center;
+}
+
+.toolbar .refer_stand .r-s-left img, .toolbar .refer_stand .r-s-right img {
+  margin-right: 4px;
+  width: 24px;
+  height: 24px;
+}
+
 .toolbar .tool_bottom.new_layout.free_user {
   justify-content:flex-start;
   flex-direction: column;
@@ -317,7 +339,7 @@ body .loading_ p span {
 
 .forecast {
     position: absolute;
-    top: 20px;
+    top: 26px;
     right: -16px;
     display: flex;
     justify-content: center;
@@ -866,7 +888,7 @@ pre {
 .projectMatch {}
 
 .time_label {
-    margin-top: 10px;
+    margin: 10px 0 16px;
     display: flex;
     align-items: center;
     justify-content: space-between;

BIN
src/jfw/modules/app/src/web/staticres/jyapp/images/canbiao.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/images/canbiao_gray.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/images/person_cb.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/images/weicanbiao.png


+ 161 - 2
src/jfw/modules/app/src/web/templates/big-member/page_client_follow_detail.html

@@ -29,7 +29,10 @@
     <div id="jyKeepEntComponent">
         <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
     </div>
-    <div class="j-main prodetail" id="v-pro" v-cloak>
+    <div class="j-main prodetail" id="v-pro" v-cloak @click="doClosePopover">
+      <div class="currentTimeDiv" style="display: none;">
+        投标截止倒计时:${cbInfo.setTime}
+      </div>
         <div class="prodetailTop">
             <div class="prodetail_title">
                 ${this.$data.prolist.projectname}
@@ -78,6 +81,21 @@
                 <span class="j-icon icon-bells"></span>
             </template>
         </div>
+        <div class="refer_stand" v-if="cbInfo.canBiaoInfo.showStopParticipate || cbInfo.canBiaoInfo.showParticipate || cbInfo.canBiaoInfo.userName">
+          <div class="refer_name">
+            <div class="r-s-left" v-if="cbInfo.canBiaoInfo.userName">
+              <!-- <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/person_cb.png?v={{Msg "seo" "version"}}" alt=""> -->
+              <span>参标人:</span>
+              <span class="cb_name">${cbInfo.canBiaoInfo.userName}</span>
+            </div>
+          </div>
+          <div class="r-s-right" @click="setCanBiao($event)">
+            <img class="weicanbiao" v-if="cbInfo.canBiaoInfo.showParticipate" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/weicanbiao.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showParticipate" class="isCB weicanbiao">参标</span>
+            <img style="margin-left: .16rem;" class="canbiao" v-if="cbInfo.canBiaoInfo.showStopParticipate" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showStopParticipate" class="isCB canbiao">终止参标</span>
+          </div>
+        </div>
         <van-popup class="popupTime j-container" v-model="remindershow" round position="bottom">
             <div class="popupTime-header">
                 <div class="header-title">开标提醒</div>
@@ -198,7 +216,148 @@
                 </div>
             </div>
         </div>
-
+        <div class="bid_status prosummary" v-if="cbInfo.canBiaoInfo.showUpdate">
+          <div class="summary_title">
+            <h2 class="title_h2">投标状态更新</h2>
+            <span @click="setBidInfo()" v-if="editBtnStatus.show" class="actionBtn">${editBtnStatus.status == 1 ? '编辑' : '取消' }</span>
+          </div>
+          <div class="view-result-tip">
+            <span>想知道谁最有可能参标吗?</span>
+            <span @click="location.href='/jyapp/big/page/analysis_search'" style="text-decoration: underline;">点这里查看分析结果</span>
+          </div>
+          <van-form :readonly="editBtnStatus.status == 1" @submit="onSubmit">
+            <van-field
+              @click="bidTypePopup = (editBtnStatus.status != 1)"
+              required
+              readonly
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidType"
+              name="bidType"
+              label="投标类型"
+              placeholder="请选择投标类型"
+            ></van-field>
+            <van-field
+              @click="bidProject = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidStage"
+              name="bidStage"
+              readonly
+              :rows="rownum"
+              autosize
+              label="投标项目阶段"
+              type="textarea"
+              placeholder="请选择投标项目阶段"
+            ></van-field>
+            <van-field
+              @click="isBidPopup = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              placeholder="请选择是否中标"
+              readonly
+              v-model="bidParams.isWin"
+              name="isWin"
+              :label="showChannel? '渠道是否中标':'是否中标'"
+            ></van-field>
+            <div class="channel_module" v-if="showChannel">
+              <div class="acc-input-group">
+                <van-field type="textarea" autosize :rows="rownum" @input="doQueryAccEntName" placeholder="请输入渠道名称" v-model.trim="bidParams.channelName" name="channelName" label="渠道名称"></van-field>
+                <div class="popover-acc-input-group" v-show="showAccEntList">
+                  <div class="popover-acc-input-group--item" v-for="(item, index) in accEntList" v-bind:key="index" @click="doSelectEnt(item)">${item.value}</div>
+                </div>
+            </div>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入联系人姓名" v-model.trim="bidParams.channelPerson" name="channelPerson" label="联系人"></van-field>
+              <van-field maxlength="11" type="tel" placeholder="请输入联系电话" v-model.trim="bidParams.channelPhone" name="channelPhone" label="联系电话"></van-field>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入中标单位名称" v-model.trim="bidParams.winner" name="winner" label="中标单位"></van-field>
+            </div>
+            <van-button :disabled="showDisbaled" v-if="editBtnStatus.status != 1" class="submitBtn" round type="primary" native-type="submit">保存</van-button>
+          </van-form>
+        </div>
+        <div class="view_history" @click="getActionHistory()" v-if="cbInfo.isShowRefer">
+          <van-cell title="查看操作记录" is-link></van-cell>
+        </div>
+        <van-popup class="popupTime j-container" v-model="bidTypePopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">选择投标类型</div>
+              <div class="header-close" @click="bidTypePopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidType(1)">
+                <span>直接投标</span>
+                <img v-show="copyBidParams.bidType == 1" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidType(2)">
+                <span>渠道投标</span>
+                <img v-show="copyBidParams.bidType == 2" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="isBidPopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">
+                <span>是否中标</span>
+                <span @click="cancelSelect()" class="cancel_select">取消选择</span>
+              </div>
+              <div class="header-close" @click="isBidPopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidStatus(1)">
+                <span>是</span>
+                <img v-if="copyBidParams.isWin === 1" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidStatus(2)">
+                <span>否</span>
+                <img v-if="copyBidParams.isWin === 2" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="bidProject" round position="bottom">
+        <div class="popupTime-header">
+            <div class="header-title">投标项目阶段</div>
+            <div class="header-close" @click="BidProjectPopupClose()">
+                <span class="j-icon base-icon icon-delete-gray"></span>
+            </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <van-cell-group>
+            <van-cell
+              :class="{'cell_checked': item.checked}"
+              v-for="item in bidStageOptions"
+              :key="item.value"
+              :title="item.label"
+              :label-align="labelAlign"
+              icon-size="16px"
+              @click="onCellClick(item)"
+            >
+              <template #right-icon>
+                <van-checkbox v-model="item.checked" :name="item.value"/>
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+        <div class="j-footer">
+            <div class="j-button-group">
+              <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
+                <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
+            </div>
+        </div>
+    </van-popup>
         <van-dialog v-model:show="isExportDialogShow" title="发送邮箱地址" :show-confirm-button="false">
             <p class="p1">项目报告文件将以邮件的形式发送至您的邮箱</p>
             <div class="v-inpt isActive">

+ 9 - 0
src/jfw/modules/app/src/web/templates/big-member/page_client_follow_list.html

@@ -72,6 +72,15 @@
                                 <div class="squot" v-if="item.i_apppushunread!=0&&item.i_apppushunread!=null"></div>
                             </div>
                         </div>
+                        <div class="article-item-ft">
+                            <div class="placement"></div>
+                            <span class="ft-right-actions">
+                                <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                                    <span class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                                    <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                                </div>
+                            </span>
+                        </div>
                     </div>
                 </van-list>
             </div>

+ 667 - 3
src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_detail.html

@@ -29,7 +29,10 @@
         <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
     </div>
     <!--S-Vue-->
-    <div class="j-main prodetail" id="v-pro" v-cloak>
+    <div class="j-main prodetail" id="v-pro" v-cloak @click="doClosePopover">
+        <div class="currentTimeDiv" style="display: none;">
+          投标截止倒计时:${cbInfo.setTime}
+        </div>
         <div class="prodetailTop">
             <div class="prodetail_title">
                 ${this.$data.prolist.projectname}
@@ -78,6 +81,21 @@
                 <span class="j-icon icon-bells"></span>
             </template>
         </div>
+        <div class="refer_stand" v-if="cbInfo.canBiaoInfo.showStopParticipate || cbInfo.canBiaoInfo.showParticipate || cbInfo.canBiaoInfo.userName">
+          <div class="refer_name">
+            <div class="r-s-left" v-if="cbInfo.canBiaoInfo.userName">
+              <!-- <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/person_cb.png?v={{Msg "seo" "version"}}" alt=""> -->
+              <span>参标人:</span>
+              <span class="cb_name">${cbInfo.canBiaoInfo.userName}</span>
+            </div>
+          </div>
+          <div class="r-s-right" @click="setCanBiao($event)">
+            <img class="weicanbiao" v-if="cbInfo.canBiaoInfo.showParticipate" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/weicanbiao.png?v={{Msg "seo" "version"}}" alt="" />
+            <span v-if="cbInfo.canBiaoInfo.showParticipate" class="isCB weicanbiao">参标</span>
+            <img style="margin-left: .16rem;" class="canbiao" v-if="cbInfo.canBiaoInfo.showStopParticipate" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/canbiao.png?v={{Msg "seo" "version"}}" alt="" />
+            <span v-if="cbInfo.canBiaoInfo.showStopParticipate" class="isCB canbiao">终止参标</span>
+          </div>
+        </div>
         <van-popup class="popupTime j-container" v-model="remindershow" round position="bottom">
             <div class="popupTime-header">
                 <div class="header-title">开标提醒</div>
@@ -197,7 +215,148 @@
                 </div>
             </div>
         </div>
-
+        <div class="bid_status prosummary" v-if="cbInfo.canBiaoInfo.showUpdate">
+          <div class="summary_title">
+            <h2 class="title_h2">投标状态更新</h2>
+            <span @click="setBidInfo()" v-if="editBtnStatus.show" class="actionBtn">${editBtnStatus.status == 1 ? '编辑' : '取消' }</span>
+          </div>
+          <div class="view-result-tip">
+            <span>想知道谁最有可能参标吗?</span>
+            <span @click="location.href='/jyapp/big/page/analysis_search'" style="text-decoration: underline;">点这里查看分析结果</span>
+          </div>
+          <van-form :readonly="editBtnStatus.status == 1" @submit="onSubmit">
+            <van-field
+              @click="bidTypePopup = (editBtnStatus.status != 1)"
+              required
+              readonly
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidType"
+              name="bidType"
+              label="投标类型"
+              placeholder="请选择投标类型"
+            ></van-field>
+            <van-field
+              @click="bidProject = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidStage"
+              name="bidStage"
+              readonly
+              :rows="rownum"
+              autosize
+              type="textarea"
+              label="投标项目阶段"
+              placeholder="请选择投标项目阶段"
+            ></van-field>
+            <van-field
+              @click="isBidPopup = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              placeholder="请选择是否中标"
+              readonly
+              v-model="bidParams.isWin"
+              name="isWin"
+              :label="showChannel? '渠道是否中标':'是否中标'"
+            ></van-field>
+            <div class="channel_module" v-if="showChannel">
+              <div class="acc-input-group">
+                <van-field type="textarea" autosize :rows="rownum" @input="doQueryAccEntName" placeholder="请输入渠道名称" v-model.trim="bidParams.channelName" name="channelName" label="渠道名称"></van-field>
+                <div class="popover-acc-input-group" v-show="showAccEntList">
+                  <div class="popover-acc-input-group--item" v-for="(item, index) in accEntList" v-bind:key="index" @click="doSelectEnt(item)">${item.value}</div>
+                </div>
+              </div>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入联系人姓名" v-model.trim="bidParams.channelPerson" name="channelPerson" label="联系人"></van-field>
+              <van-field maxlength="11" type="tel" placeholder="请输入联系电话" v-model.trim="bidParams.channelPhone" name="channelPhone" label="联系电话"></van-field>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入中标单位名称" v-model.trim="bidParams.winner" name="winner" label="中标单位"></van-field>
+            </div>
+            <van-button :disabled="showDisbaled" v-if="editBtnStatus.status != 1" class="submitBtn" round type="primary" native-type="submit">保存</van-button>
+          </van-form>
+        </div>
+        <div class="view_history" @click="getActionHistory()" v-if="cbInfo.isShowRefer">
+          <van-cell title="查看操作记录" is-link></van-cell>
+        </div>
+        <van-popup class="popupTime j-container" v-model="bidTypePopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">选择投标类型</div>
+              <div class="header-close" @click="bidTypePopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidType(1)">
+                <span>直接投标</span>
+                <img v-show="copyBidParams.bidType == 1" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidType(2)">
+                <span>渠道投标</span>
+                <img v-show="copyBidParams.bidType == 2" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="isBidPopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">
+                <span>是否中标</span>
+                <span @click="cancelSelect()" class="cancel_select">取消选择</span>
+              </div>
+              <div class="header-close" @click="isBidPopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidStatus(1)">
+                <span>是</span>
+                <img v-if="copyBidParams.isWin === 1" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidStatus(2)">
+                <span>否</span>
+                <img v-if="copyBidParams.isWin === 2" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="bidProject" round position="bottom">
+        <div class="popupTime-header">
+            <div class="header-title">投标项目阶段</div>
+            <div class="header-close" @click="BidProjectPopupClose()">
+                <span class="j-icon base-icon icon-delete-gray"></span>
+            </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <van-cell-group>
+            <van-cell
+              :class="{'cell_checked': item.checked}"
+              v-for="item in bidStageOptions"
+              :key="item.value"
+              :title="item.label"
+              :label-align="labelAlign"
+              icon-size="16px"
+              @click="onCellClick(item)"
+            >
+              <template #right-icon>
+                <van-checkbox v-model="item.checked" :name="item.value" />
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+        <div class="j-footer">
+            <div class="j-button-group">
+              <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
+                <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
+            </div>
+        </div>
+    </van-popup>
         <van-dialog v-model:show="isExportDialogShow" title="发送邮箱地址" :show-confirm-button="false">
             <p class="p1">项目报告文件将以邮件的形式发送至您的邮箱</p>
             <div class="v-inpt isActive">
@@ -225,7 +384,8 @@
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/forward-share/js/forward.js?v={{Msg "seo" "version"}}'></script>
-
+<!-- <script src="https://cdn.bootcss.com/vConsole/3.3.4/vconsole.min.js"></script>
+<script> new VConsole(); </script> -->
 <script>
     var MoneyUnit = {
         levelArr: ['元', '万元', '亿元', '万亿元'],
@@ -341,6 +501,57 @@
             isRequestIng:false,
             isExportDialogShow: false,
             cid: '', // 取消认领id
+            cbInfo: {
+              isShowRefer: false,
+              canBiaoInfo: {
+                showStopParticipate: false
+              },
+              setTime: '',
+              countdownTimer: null
+            },
+            bidTypePopup: false,
+            isBidPopup: false,
+            bidProject: false,
+            showBidType: true,
+            showChannel: false,
+            copyBidParams: {
+              bidType: '',
+              bidStage: '',
+              isWin: '',
+              channelName: '',
+              channelPerson: '',
+              channelPhone: '',
+              winner: '',
+              sid: ''
+            },
+            bidParams: {
+              bidType: '',
+              bidStage: '',
+              isWin: '',
+              channelName: '',
+              channelPerson: '',
+              channelPhone: '',
+              winner: '',
+              sid: ''
+            },
+            isWinBid: false,
+            checkedList: [],
+            formSchemaOptions: {
+              bidStage: [],
+              'bidStage-1': [],
+              checkedListMap: {
+                1: [],
+                2: []
+              }
+            },
+            showAccEntList: false,
+            accEntList: [],
+            labelAlign: 'left',
+            editBtnStatus: {
+              show: false,
+              status: 0
+            },
+            rownum: 1,
             proParams: {}
         },
         created() {
@@ -363,6 +574,10 @@
                 this.sid = JSON.parse(sessionStorage.getItem('bigvip-fid')).sid
             }
             this.getProDetail()
+            this.getOptionsInfo()
+            this.getCanBiaoInfo()
+            this.getBidContent()
+            this.getHaveActionHistory()
         },
         mounted () {
           this.getShareParams()
@@ -379,9 +594,446 @@
                 } else {
                     return true
                 }
+            },
+            bidStageOptions: function () {
+              const result = this.formSchemaOptions['bidStage' + (this.copyBidParams.bidType == 1 ? '-1' : '')].map(option => ({
+                checked: this.checkedList.includes(option),
+                value: option,
+                label: option
+              }))
+              return result
+            },
+            showDisbaled: function () {
+              return this.bidParams.bidType === ''
             }
         },
         methods: {
+          doClosePopover () {
+            this.showAccEntList = false
+          },
+          // 重置投标阶段变更
+          cancelBidStage () {
+            const resetList = (this.formSchemaOptions.checkedListMap[this.copyBidParams.bidType] || []).map(v => v)
+            this.checkedList = resetList
+          },
+          doQueryAccEntName (str) {
+            // TODO 需添加防抖
+            this.showAccEntList = false
+            this.fetchChannelNameList(str, list => {
+              this.showAccEntList = list.length > 0
+              this.accEntList = list
+            })
+          },
+          doSelectEnt (item) {
+            this.setParams(this.bidParams, item)
+            this.setParams(this.copyBidParams, item)
+            this.showAccEntList = false
+          },
+          setParams(params, item) {
+            const { value, company_phone, legal_person } = item || {};
+            params.channelName = value || ''
+            // params.channelPhone = company_phone || ''
+            // params.channelPerson = legal_person || ''
+          },
+
+          /**
+           * 获取模糊渠道名称列表
+           * @param str
+           * @param cb
+           */
+          fetchChannelNameList (str, cb) {
+            const query = str.trim()
+            if (query.length < 2) {
+              return cb([])
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/bigmember/search/ent/association',
+              data: {
+                name: query
+              },
+              success: function (res) {
+                if (res.error_code == 0) {
+                  if (res.data) {
+                    const result = (res.data.list || []).map(v => {
+                      return {
+                        ...v,
+                        value: v.name
+                      }
+                    })
+                    cb(result)
+                  }
+                }
+              },
+              error: function (error) {
+                cb([])
+              }
+            })
+          },
+          // 获取选项
+          getOptionsInfo () {
+            const _this = this
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/setUpInfo',
+              contentType: 'application/json',
+              data: JSON.stringify({
+                sid: _this.sid
+              }),
+              success: function (res) {
+                if (res.error_code === 0) {
+                  const data = res.data || {}
+                  if (data.bidType) {
+                    _this.formSchemaOptions.bidStage = data.bidType.find(v => v.name === '渠道投标').content || []
+                    _this.formSchemaOptions['bidStage-1'] = data.bidType.find(v => v.name === '直接投标').content || []
+                  }
+                }
+              }
+            })
+          },
+          // 查看操作记录
+          getActionHistory: function () {
+            location.href = '/jy_mobile/project/operatingRecord?sid=' + this.sid
+          },
+          // 选择是否中标
+          selectBidStatus: function(data) {
+            this.copyBidParams.isWin = data
+          },
+          // 是否中标取消选择
+          cancelSelect () {
+            this.bidParams.isWin = ''
+            this.copyBidParams.isWin = ''
+            this.bidParams.winner = ''
+            this.copyBidParams.winner = ''
+            this.isBidPopupClose()
+          },
+          saveStatus: function (str) {
+            switch (str) {
+              case '0':
+                if(this.bidParams.bidType) {
+                  if (!((this.bidParams.bidType.indexOf('直接') !== -1 && parseInt(this.copyBidParams.bidType) === 1) || (this.bidParams.bidType.indexOf('渠道') !== -1 && parseInt(this.copyBidParams.bidType) === 2))) {
+                    this.bidParams = {
+                      bidType: this.copyBidParams.bidType,
+                      bidStage: '',
+                      isWin: '',
+                      channelName: '',
+                      channelPerson: '',
+                      channelPhone: '',
+                      winner: '',
+                      sid: ''
+                    }
+                    this.copyBidParams = {
+                      bidType: this.copyBidParams.bidType,
+                      bidStage: '',
+                      isWin: '',
+                      channelName: '',
+                      channelPerson: '',
+                      channelPhone: '',
+                      winner: '',
+                      sid: ''
+                    }
+                    this.checkedList = []
+                  }
+                }
+                break;
+              case '1':
+                if (this.checkedList.length > 0) {
+                  this.copyBidParams.bidStage = this.checkedList.join('、')
+                } else {
+                  this.copyBidParams.bidStage = ''
+                }
+                break
+              default:
+                break;
+            }
+            const { channelName, channelPhone, channelPerson, winner } = this.bidParams || {};
+            this.copyBidParams.channelName = channelName || ''
+            this.copyBidParams.channelPhone = channelPhone || ''
+            this.copyBidParams.channelPerson = channelPerson || ''
+            this.copyBidParams.winner = winner || ''
+
+            Object.assign(this.bidParams, this.copyBidParams)
+            if (this.bidParams.bidType == 1) {
+              this.bidParams.bidType = '直接投标'
+              this.showChannel = false
+            } else if (this.bidParams.bidType == 2) {
+              this.bidParams.bidType = '渠道投标'
+              this.showChannel = true
+            }
+            // 带出中标单位
+            if (this.bidParams.isWin == 1) {
+              this.bidParams.isWin = '是'
+              const sWin = this.prodetail.projectInfo.s_winner || ''
+              if (sWin && !winner) {
+                this.bidParams.winner = sWin
+              }
+            } else if (this.bidParams.isWin == 2) {
+              this.bidParams.isWin = '否'
+              this.bidParams.winner = ''
+            } else {
+              this.bidParams.isWin = ''
+              this.bidParams.winner = ''
+            }
+            this.bidTypePopupClose()
+            this.BidProjectPopupClose()
+            this.isBidPopupClose()
+          },
+          // 选择投标类型
+          selectBidType: function(data) {
+            this.copyBidParams.bidType = data
+            //  checkedList 切换时清空
+            if (data != this.copyBidParams.bidType) {
+              this.checkedList = []
+              this.copyBidParams.isWin = 0
+            }
+          },
+          // 查询是否有操作记录
+          getHaveActionHistory: function () {
+            const _this = this
+            const params = {
+              pageSize: 1,
+              sid: this.sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/records',
+              contentType: 'application/json',
+              data: JSON.stringify(params),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  let list = res.data.list
+                  if(!list) {list = []}
+                  if (list.length > 0) {
+                    _this.cbInfo.isShowRefer = true
+                  } else {
+                    _this.cbInfo.isShowRefer = false
+                  }
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+          // 获取投标状态信息
+          getBidContent: function () {
+            const _this = this
+            const params = {
+              sid: this.sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/content',
+              contentType: 'application/json',
+              data: JSON.stringify(params),
+              success: function(res) {
+                if(res.error_code === 0 && res.data) {
+                  if (Object.keys(res.data).length > 0) {
+                    _this.editBtnStatus.show = true
+                    _this.editBtnStatus.status = 1
+                    const { bidStage, bidType, channelName, channelPerson, channelPhone, isWin, winner} = res.data
+                    let getParams = {
+                      bidType: '',
+                      bidStage: '',
+                      isWin: '',
+                      channelName: channelName,
+                      channelPerson: channelPerson,
+                      channelPhone: channelPhone,
+                      winner: winner
+                    }
+                    if (bidStage && bidStage.length > 0) {
+                      _this.checkedList = bidStage
+                      getParams.bidStage = bidStage.join('、')
+                    }
+                    if (isWin == 1) {
+                      getParams.isWin = '是'
+                    } else if(isWin == 2) {
+                      getParams.isWin = '否'
+                    } else {
+                      getParams.isWin = ''
+                    }
+                    if(bidType == 1) {
+                      getParams.bidType = '直接投标'
+                      _this.showChannel = false
+                      _this.formSchemaOptions.checkedListMap[1] = [].concat(bidStage || [])
+                    } else {
+                      getParams.bidType = '渠道投标'
+                      _this.showChannel = true
+                      _this.formSchemaOptions.checkedListMap[2] = [].concat(bidStage || [])
+                    }
+                    if (res.data) {
+                      Object.assign(_this.copyBidParams, res.data)
+                    }
+                    _this.bidParams = getParams
+                  }
+                }
+              }
+            })
+          },
+          onSubmit: function() {
+            // 在这里处理表单提交逻辑
+            const _this = this
+            this.copyBidParams.bidType = parseInt(this.copyBidParams.bidType)
+            this.copyBidParams.isWin = this.copyBidParams.isWin ? parseInt(this.copyBidParams.isWin) : 0
+            // this.bidParams.winner = this.prodetail.s_winner
+            this.bidParams.sid = this.sid
+            const {channelName, channelPerson, channelPhone, winner, sid, bidStage, isWin } = this.bidParams
+            let tranWin = 0
+            if (isWin === '是') {
+              tranWin = 1
+            } else if (isWin === '否') {
+              tranWin = 2
+            } else {
+              tranWin = 0
+            }
+            const ajaxParams = {
+              bidType: parseInt(this.copyBidParams.bidType),
+              bidStage: bidStage ? bidStage.split('、') : [],
+              isWin: tranWin,
+              channelName: channelName,
+              channelPerson: channelPerson,
+              channelPhone: channelPhone,
+              winner: winner,
+              sid: sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/updateBidStatus',
+              contentType: 'application/json',
+              data: JSON.stringify(ajaxParams),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  _this.$toast('保存成功')
+                  _this.editBtnStatus.show = true
+                  _this.editBtnStatus.status = 1
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+          onCellClick(data) {
+            if (this.checkedList.includes(data.value)) {
+              this.checkedList = this.checkedList.filter(v => v !== data.value)
+            } else {
+              this.checkedList.push(data.value)
+                }
+          },
+          // 设置倒计时
+          updateCountdown: function() {
+            if (!this.cbInfo.canBiaoInfo.bidEndTime) {
+              $('.currentTimeDiv').hide()
+              return
+            }
+            const targetTime = this.cbInfo.canBiaoInfo.bidEndTime * 1000
+            // const targetTime = 1684485592876
+            const now = new Date().getTime(); // 获取当前时间
+            const diff = targetTime - now; // 计算时间差
+            const seconds = Math.floor(diff / 1000); // 转换为秒数
+            // 计算天、小时、分钟、秒数
+            const days = Math.floor(seconds / (60 * 60 * 24));
+            const hours = Math.floor((seconds % (60 * 60 * 24)) / (60 * 60));
+            const minutes = Math.floor((seconds % (60 * 60)) / 60);
+            const remainingSeconds = seconds % 60;
+
+            // 将倒计时显示在页面上
+            this.cbInfo.setTime = `${days}天 ${hours}小时 ${minutes}分钟 ${remainingSeconds}秒`;
+
+            // 如果倒计时结束,清除定时器
+            if (diff < 0) {
+              clearInterval(this.cbInfo.countdownTimer);
+              if(!this.cbInfo.canBiaoInfo.userName) {
+                this.cbInfo.canBiaoInfo.showStopParticipate = false
+              }
+              $('.currentTimeDiv').hide()
+            } else {
+              $('.currentTimeDiv').show()
+            }
+          },
+          // 点击参标
+          setCanBiao: function (e) {
+            const rsRight = $(e.target).hasClass('r-s-right')
+            let weicanbiao = $(e.target).hasClass('weicanbiao')
+            if (rsRight) {
+              const showElem1 = $($(e.target).find('img')[0])
+              if(showElem1.is(':hidden')) {
+                weicanbiao = false
+              } else {
+                weicanbiao = true
+              }
+            }
+            const _this = this
+            const type = weicanbiao ? 'in' : 'out';
+            const url = '/jyapi/jybx/core/participate/'+ type + '/info'
+            const params = {
+              bidIds: this.sid
+            }
+            const outParams = {
+              bidIds: this.sid,
+              projectId: this.cbInfo.canBiaoInfo.projectId
+            }
+            $.ajax({
+              type: 'POST',
+              url: url,
+              contentType: 'application/json',
+              data: JSON.stringify(weicanbiao ? params : outParams),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  if(res.data) {
+                    _this.getCanBiaoInfo()
+                    if (type === 'in') {
+                      _this.getHaveActionHistory()
+                      _this.$toast('已参标,请前往我的参标项目列表查看')
+                    }
+                    // 更新收藏列表
+                    const updateCBStatus = {
+                      id: _this.sid,
+                      value: type === 'in' ? 1 : 0
+                    }
+                    sessionStorage.setItem('actionCBInfo', JSON.stringify(updateCBStatus))
+                  }
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+
+          // 获取参标状态
+          getCanBiaoInfo: function() {
+              const _this = this
+              const param = {
+                sid: this.sid
+              }
+              $.ajax({
+                type: 'POST',
+                url: '/jyapi/jybx/core/participate/info',
+                contentType: 'application/json',
+                data: JSON.stringify(param),
+                success: function(res) {
+                  if(res.error_code == 0) {
+                    const data = res.data;
+                    if (Object.keys(data).length > 0) {
+                      _this.cbInfo.canBiaoInfo = data
+                      _this.cbInfo.countdownTimer = setInterval(_this.updateCountdown, 1000);
+                      if (data.userName) {
+                        const newList = data.userName.split(',').map(item => item.trim()).filter(item => item)
+                        const userNameString = newList.length > 1 ? newList.slice(0,1).join(',') + '等' : newList.join(',')
+                        data.userName = userNameString
+                      }
+                    }
+                  }
+                }
+              })
+            },
+            // 编辑投标状态
+            setBidInfo: function () {
+              if (this.editBtnStatus.status == 1) {
+                this.editBtnStatus.status = 2
+              } else if (this.editBtnStatus.status == 2) {
+                this.editBtnStatus.status = 1
+                this.getBidContent()
+              }
+            },
             getShareParams () {
               this.proParams = {
                 type: '2',
@@ -680,6 +1332,18 @@
             popupClose: function () {
                 this.remindershow = false
             },
+            // 关闭投标类型弹窗
+            bidTypePopupClose: function () {
+                this.bidTypePopup = false
+            },
+            // 关闭是否中标弹窗
+            isBidPopupClose: function () {
+              this.isBidPopup = false
+            },
+            // 关闭投标项目阶段弹窗
+            BidProjectPopupClose: function () {
+              this.bidProject = false
+            },
             // 关注
             confirmCare: function () {
                 var _this = this

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

@@ -16,7 +16,7 @@
     <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}}/jyapp/big-member/css/page_pro_follow_list.css" />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/css/page_pro_follow_list.css' />
     <!--E-当前页面的css资源-->
 </head>
 <body>
@@ -67,6 +67,15 @@
                                 <div class="squot" v-if="item.i_apppushunread!=0&&item.i_apppushunread!=null"></div>
                             </div>
                         </div>
+                        <div class="article-item-ft">
+                            <div class="placement"></div>
+                            <span class="ft-right-actions">
+                                <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                                    <span class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                                    <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                                </div>
+                            </span>
+                        </div>
                     </div>
                 </van-list>
                 <div class="tip" v-if="!isbigvip">
@@ -256,6 +265,8 @@
                                       res.data.List[i].b_thirtydays = "jyovertime"
                                     }
                                 }
+                                _this.preSortList(res.data.List)
+                                _this.getCanBiaoStatus(res.data.List)
                                 _this.list = _this.list.concat(res.data.List)
                                 if(!res.data.hasNext){
                                     _this.loading = true
@@ -278,6 +289,19 @@
                     },
                 })
             },
+            preSortList: function (list) {
+                var _this = this
+                list.forEach(function (item) {
+                    _this.preSortItem(item)
+                })
+            },
+            preSortItem: function (item) {
+                // 参标相关信息
+                item.isCB = {
+                    id: '',
+                    value: 0
+                }
+            },
             followView:function(fid,sid,item) {
                 if(item.i_apppushunread){
                     item.i_apppushunread = 0
@@ -407,7 +431,62 @@
                         loading.clear()
                     }
                 })
-            }
+            },
+            // 获取参标状态
+            getCanBiaoStatus: function (list) {
+                var idArr = list.map(function (item) {
+                    return item.sid
+                })
+                if (idArr.length > 0) {
+                    idArr = idArr.join(',')
+                } else {
+                    idArr = ''
+                }
+                var params = { ids: idArr }
+                $.ajax({
+                    url: '/jyapi/jybx/core/participate/show',
+                    type: 'POST',
+                    contentType: 'application/json',
+                    data: JSON.stringify(params),
+                    success: function (res) {
+                        if (res.error_code === 0 && Array.isArray(res.data)) {
+                            list.forEach(function (v) {
+                                res.data.forEach(function (m) {
+                                    if (v.sid === m.id) {
+                                        Object.assign(v.isCB, m)
+                                    }
+                                })
+                            })
+                        }
+                    }
+                })
+            },
+            // 参标操作
+            setCanBiaoStatus (item) {
+                if (item.isCB && item.isCB.value) {
+                    this.$toast('如需终止参标,请在详情页进行操作。')
+                    return
+                }
+                var _this = this
+                var params = { bidIds: item.sid }
+                $.ajax({
+                    url: '/jyapi/jybx/core/participate/in/info',
+                    type: 'POST',
+                    contentType: 'application/json',
+                    data: JSON.stringify(params),
+                    success: function (res) {
+                        if (res.error_code === 0 && res.data) {
+                            _this.$toast('已参标,请前往我的参标项目列表查看。')
+                            _this.$set(item, 'isCB', {
+                                id: item.sid,
+                                value: true
+                            })
+                        } else {
+                          _this.$toast(res.error_msg)
+                        }
+                    }
+                })
+            },
         }
     }
     var vueComponent = new Vue(vNode)

+ 17 - 6
src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html

@@ -92,25 +92,36 @@
               @load="getList"
             >
               <div class="collec_li" :class="{ visited: item.visited ,userpub:item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'}" v-for="(item, index) in listState.list" :key="index" @click="linkRouter(item)">
-                <div v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'" class="yhfb">用户发布</div>
                 <div class="collec_head">
                   <div class="collec_title ellipsis-2 visited-hd">
-                    <span v-if="item.fileExists" style="color: #2ABED1;">[有附件] </span>
                     <div v-html="item.title" style="display: inline;"></div>
                   </div>
-                  <div class="collec_star" @click="collecClick(event,item._id)">
-                    <button class="bi-report-inject-button" :disabled="item.added" v-if="biEnv" @click.prevent.stop="biAddProject(item)">${ item.added ? '已添加' : '添加' }</button>
-                    <span class="shoucang" v-if="condition && !biEnv"></span>
-                  </div>
                 </div>
                 <div class="collec_action">
                   <ul class="collec_tags">
+                    <li class="tag_active red visited-ft2" v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'">用户发布</li>
                     <li class="tag_active visited-ft" v-if="item.area&&item.area!==''">${item.area}</li>
                     <li class="tag_active visited-ft" v-if="item.buyerclass&&item.buyerclass!==''">${item.buyerclass}</li>
                     <li class="tag_active visited-ft" v-if="item.type&&item.type!==''">${item.type}</li>
                     <li class="tag_active visited-ft" v-if="item.bidamount&&item.bidamount!==''">${item.bidamount}</li>
+                    <li class="tag_active blue visited-ft2" v-if="item.fileExists">有附件</li>
                   </ul>
+                </div>
+                <div class="collec_ft">
                   <div class="collec_time visited-ft">${item.publishtime}</div>
+                  <span class="ft-right-actions">
+                    <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                      <span style="margin-right: 0.08rem" class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                      <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                    </div>
+                    <div class="action-item collec_star" @click="collecClick(event,item._id)">
+                      <button class="bi-report-inject-button" :disabled="item.added" v-if="biEnv" @click.prevent.stop="biAddProject(item)">${ item.added ? '已添加' : '添加' }</button>
+                      <span class="action-item" v-if="condition && !biEnv">
+                        <span class="shoucang" style="margin-right: 0.08rem"></span>
+                        已收藏
+                      </span>
+                    </div>
+                  </span>
                 </div>
               </div>
             </van-list>

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

@@ -485,6 +485,19 @@
                           </div>
                       </div>
                     </div>
+                    <div class="refer_stand">
+                      <div class="r-s-left">
+                        <!-- <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/person_cb.png?v={{Msg "seo" "version"}}" alt=""> -->
+                        <span>参标人:</span>
+                        <span class="cb_name"></span>
+                      </div>
+                      <div class="r-s-right">
+                        <img style="display: none;" class="weicanbiao" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/weicanbiao.png?v={{Msg "seo" "version"}}" alt="">
+                        <span style="display: none;" class="isCB weicanbiao">参标</span>
+                        <img style="display: none;margin-left: .16rem;" class="canbiao" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+                        <span style="display: none;" class="isCB canbiao">终止参标</span>
+                      </div>
+                    </div>
                 {{else}}
                     <!--非付费用户-->
                     <div class="tool_top">
@@ -569,6 +582,17 @@
                             }
                         </script>
                     </div>
+                    <div class="refer_stand">
+                      <div class="r-s-left">
+                        <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/person_cb.png?v={{Msg "seo" "version"}}" alt="">
+                        <span class="cb_name"></span>
+                      </div>
+                      <div class="r-s-right">
+                        <img class="weicanbiao" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/weicanbiao.png?v={{Msg "seo" "version"}}" alt="">
+                        <img class="canbiao" style="display: none;" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+                        <span class="isCB"></span>
+                      </div>
+                    </div>
                 {{end}}
                 <div class="forecast" style="display: none">
                     <span class="for_face"></span>
@@ -1014,6 +1038,7 @@
     var winner_conEntId = {{.T.obj.entId}};
     var hasServiceArr = [];
     var drainInfo = {} // 大会员引流文案字段
+    var canBiaoInfo = {} // 项目参标信息
     if(s_winner){
         winner_con = s_winner;
     }
@@ -1585,6 +1610,146 @@
       }
     }
 
+    // 查询项目是否可以参标
+    // function getCanCanBiao () {
+    //   const params = {
+    //     ids: id
+    //   }
+    //   $.ajax({
+    //     type: 'POST',
+    //     url: '/jyapi/jybx/core/participate/show',
+    //     contentType: 'application/json',
+    //     data: JSON.stringify(params),
+    //     success: function(res) {
+    //       if(res.error_code === 0) {
+    //         if (res.data) {
+    //           getCanBiaoInfo()
+    //         } else {
+    //           $('.refer_stand').hide()
+    //         }
+    //       } else {
+    //         EasyAlert.show(res.error_msg)
+    //       }
+    //     }
+    //   })
+    // }
+
+    // 点击参标
+    $('.refer_stand .r-s-right').on('click', function(e) {
+      const rsRight = $(e.target).hasClass('r-s-right')
+      let weicanbiao = $(e.target).hasClass('weicanbiao')
+      if (rsRight) {
+        const showElem1 = $($(e.target).find('img')[0])
+        if(showElem1.is(':hidden')) {
+          weicanbiao = false
+        } else {
+          weicanbiao = true
+        }
+      }
+      const type = weicanbiao ? 'in' : 'out';
+      const url = '/jyapi/jybx/core/participate/'+ type + '/info'
+      const params = {
+        bidIds: id
+      }
+      const outParams = {
+        projectIds: canBiaoInfo.projectId
+      }
+      $.ajax({
+        type: 'POST',
+        url: url,
+        contentType: 'application/json',
+        data: JSON.stringify(weicanbiao ? params : outParams),
+        success: function(res) {
+          if(res.error_code === 0) {
+            if(res.data) {
+              getCanBiaoInfo()
+              if (type === 'in') {
+                EasyAlert.show('已参标,请前往我的参标项目列表查看')
+              }
+              // 更新收藏列表
+              const updateCBStatus = {
+                id: id,
+                value: type === 'in' ? 1 : 0
+              }
+              sessionStorage.setItem('actionCBInfo', JSON.stringify(updateCBStatus))
+            }
+          } else {
+            EasyAlert.show(res.error_msg)
+          }
+        }
+      })
+    })
+
+    // 获取参标状态
+    function getCanBiaoInfo () {
+      const param = {
+        sid: id
+      }
+      $.ajax({
+        type: 'POST',
+        url: '/jyapi/jybx/core/participate/info',
+        contentType: 'application/json',
+        data: JSON.stringify(param),
+        success: function(res) {
+          if(res.error_code == 0) {
+            const data = res.data;
+            const cbNameElem = $('.cb_name');
+            const isCBElem = $('.isCB');
+            if (Object.keys(data).length > 0) {
+              window.canBiaoInfo = data
+              if (!data.bidEndTime) {
+                data.bidEndTime = 0
+              }
+              if (!data.currentTime) {
+                data.currentTime = 0
+              }
+              if (data.userName) {
+                const newList = data.userName.split(',').map(item => item.trim()).filter(item => item)
+                const userNameString = newList.length > 1 ? newList.slice(0,1).join(',') + '等' : newList.join(',')
+                data.userName = userNameString
+                $('.r-s-left').css('visibility', 'inherit')
+                cbNameElem.html(data.userName)
+              } else {
+                $('.r-s-left').css('visibility', 'hidden')
+              }
+              // if(!data.bidEndTime) {
+              //   $('.r-s-right').css('visibility', 'inherit')
+              // } else {
+              //   if (data.currentTime > data.bidEndTime) {
+              //     $('.r-s-right').css('visibility', 'hidden')
+              //   } else {
+              //     $('.r-s-right').css('visibility', 'inherit')
+              //   }
+              // }
+              if (data.showStopParticipate) {
+                $('.canbiao').show();
+                $('.isCB.canbiao').show()
+              } else {
+                $('.canbiao').hide();
+                $('.isCB.canbiao').hide()
+              }
+              if (data.showParticipate) {
+                $('.weicanbiao').show();
+                $('.isCB.weicanbiao').show()
+              } else {
+                $('.weicanbiao').hide();
+                $('.isCB.weicanbiao').hide()
+              }
+              if (!data.showStopParticipate && !data.showParticipate && !data.userName) {
+                $('.refer_stand').hide()
+              }
+            } else {
+              $('.refer_stand').hide()
+            }
+          } else {
+            $('.refer_stand').hide()
+          }
+        }
+      })
+    }
+
+    getCanBiaoInfo()
+
     var vShareCom = new Vue({
       el: '.forward-share',
       components: {
@@ -1610,6 +1775,7 @@
       }
     })
 
+
     // 商机管理-认领客户
     var vKeepEntComponent = new Vue({
       delimiters: ['${', '}'],

+ 2 - 2
src/jfw/modules/bigmember/src/db.json

@@ -45,13 +45,13 @@
   },
   "redis": {
     "main":{
-      "address": "other=192.168.3.206:1712,session=192.168.3.11:1713,push=192.168.3.206:1712,pushcache_1=192.168.3.206:5000,pushcache_2_a=192.168.3.206:5001,pushcache_2_b=192.168.3.206:5002,newother=192.168.3.206:1712"
+      "address": "other=192.168.3.149:1712,session=192.168.3.149:1713,push=192.168.3.149:1712,pushcache_1=192.168.3.149:5000,pushcache_2_a=192.168.3.149:5001,pushcache_2_b=192.168.3.149:5002,newother=192.168.3.149:1712"
     }
   },
   "mysql": {
     "main": {
       "dbName": "jianyu",
-      "address": "192.168.3.11:3366",
+      "address": "192.168.3.149:3306",
       "userName": "root",
       "passWord": "Topnet123",
       "maxOpenConns": 5,

+ 5 - 1
src/jfw/modules/bigmember/src/entity/followProject.go

@@ -250,7 +250,7 @@ func (this *ProjectFollow) GetProjectDetailBySid(sid string) (res map[string]int
 		}
 		log.Printf("ProjectFollow GetProjectDetailBySid Unmarshal err %v\n", err)
 	}
-	list := elastic.Get("projectset", "projectset", `{"query": {"bool": {"must": [{"match": {"list.infoid": "`+sid+`"}}]}},"_source":["list","projectcode","projectname","bidopentime","area","city","agency","buyer","buyerperson","buyertel","bidstatus"],"from": 0,"size": 1}`)
+	list := elastic.Get("projectset", "projectset", `{"query": {"bool": {"must": [{"match": {"list.infoid": "`+sid+`"}}]}},"_source":["list","projectcode","projectname","bidopentime","area","city","agency","buyer","buyerperson","buyertel","bidstatus","winner"],"from": 0,"size": 1}`)
 	if len(*list) == 0 {
 		return nil, errors.New("没有找到项目信息")
 	}
@@ -279,6 +279,10 @@ func (this *ProjectFollow) GetProjectDetailBySid(sid string) (res map[string]int
 			})
 		}
 	}
+	if finalDate["winner"] != nil {
+		finalDate["s_winner"] = finalDate["winner"]
+		delete(finalDate, "winner")
+	}
 	finalDate["list"] = thisList
 	//redis缓存一星期
 	redis.Put("other", redisKey, &finalDate, 60*60*5)

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

@@ -1,6 +1,6 @@
 module jy/src/jfw/modules/bigmember/src
 
-go 1.18
+go 1.20
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230511020847-9b0fbc33ff1c

+ 32 - 21
src/jfw/modules/bigmember/src/service/analysis/decision.go

@@ -43,10 +43,10 @@ type ViewKeyWord struct {
 	MatchWay int      `json:"matchway"`  //匹配模式
 }
 
-//投标决策分析id
+// 投标决策分析id
 var ServiceId = 6
 
-//采购单位和中标企业 其他项目明细/类似项目明细
+// 采购单位和中标企业 其他项目明细/类似项目明细
 func (this *Analysis) ProjectInfoByBW() {
 	defer qutil.Catch()
 	r := func() Result {
@@ -73,7 +73,7 @@ func (this *Analysis) ProjectInfoByBW() {
 	this.ServeJson(r)
 }
 
-//试用用户分析
+// 试用用户分析
 func (this *Analysis) TrialInfo() {
 	defer qutil.Catch()
 	userId, _ := this.GetSession("userId").(string)
@@ -116,7 +116,7 @@ func (this *Analysis) TrialInfo() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
-//决策分析内容-普通用户
+// 决策分析内容-普通用户
 func (this *Analysis) FreeDecInfo() {
 	defer qutil.Catch()
 	var regMap = Result{
@@ -133,14 +133,15 @@ func (this *Analysis) FreeDecInfo() {
 		}
 		if getRes.Sid != "" && getRes.Pname != "" && len(getRes.BuyerContent) > 0 {
 			userId, _ := this.GetSession("userId").(string)
-			main_userId, phone, _ := util.MainUserId(this.Session())
+			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+			mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
 			entity.UIL.Lock()
-			if entity.UIL.DecLock[main_userId] == nil {
-				entity.UIL.DecLock[main_userId] = &sync.Mutex{}
+			if entity.UIL.DecLock[mainUserid] == nil {
+				entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
 			}
 			entity.UIL.Unlock()
-			entity.UIL.DecLock[main_userId].Lock()
-			defer entity.UIL.DecLock[main_userId].Unlock()
+			entity.UIL.DecLock[mainUserid].Lock()
+			defer entity.UIL.DecLock[mainUserid].Unlock()
 			if getRes.ServiceId == 0 {
 				getRes.ServiceId = 6
 			}
@@ -159,7 +160,7 @@ func (this *Analysis) FreeDecInfo() {
 			decQuery := DecQueryFree(getRes.Area, getRes.BuyerClass, getRes.BuyerContent, getRes.Industry, getRes.Buyer, buyer_buyerClass, getRes.MinPrice, getRes.MaxPrice)
 			regMap.Data = getDecInfoFree(decQuery, buyer_buyerClass, getRes)
 			//投标决策分析历史记录
-			go SaveDecHistortList(getRes, userId, main_userId, phone, "", 0, this.Request)
+			go SaveDecHistortList(getRes, userId, mainUserid, phone, "", 0, this.Request, "free")
 		} else {
 			regMap.Error_code = Error_code_1002
 			regMap.Error_msg = Error_msg_1002
@@ -171,7 +172,7 @@ func (this *Analysis) FreeDecInfo() {
 	this.ServeJson(regMap)
 }
 
-//决策分析内容
+// 决策分析内容
 func (this *Analysis) DecInfo() {
 	defer qutil.Catch()
 	var regMap = Result{
@@ -191,18 +192,28 @@ func (this *Analysis) DecInfo() {
 			var base64Key = "" //加密串
 			userId, _ := this.GetSession("userId").(string)
 			//是否是子账号
-			main_userId, phone, member_status := util.MainUserId(this.Session())
-			if member_status == 0 {
+			//main_userId, phone, member_status := util.MainUserId(this.Session())
+			bigMsg := jy.GetBigVipUserBaseMsg(this.Session(), *config.Middleground)
+			mainUserid, phone := qutil.If(bigMsg.Data.Member.Pid != "", bigMsg.Data.Member.Pid, userId).(string), bigMsg.Data.Free.Phone
+			isAble := false
+			if len(bigMsg.Data.Member.MemberPowerList) > 0 {
+				for _, v := range bigMsg.Data.Member.MemberPowerList {
+					if v == 6 {
+						isAble = true
+					}
+				}
+			}
+			if !isAble {
 				regMap.Error_code = Error_code_1004
 				regMap.Error_msg = Error_msg_1004
 			} else {
 				entity.UIL.Lock()
-				if entity.UIL.DecLock[main_userId] == nil {
-					entity.UIL.DecLock[main_userId] = &sync.Mutex{}
+				if entity.UIL.DecLock[mainUserid] == nil {
+					entity.UIL.DecLock[mainUserid] = &sync.Mutex{}
 				}
 				entity.UIL.Unlock()
-				entity.UIL.DecLock[main_userId].Lock()
-				defer entity.UIL.DecLock[main_userId].Unlock()
+				entity.UIL.DecLock[mainUserid].Lock()
+				defer entity.UIL.DecLock[mainUserid].Unlock()
 				if getRes.ServiceId == 0 {
 					getRes.ServiceId = 6
 				}
@@ -222,7 +233,7 @@ func (this *Analysis) DecInfo() {
 				decQuery := DecQuery(getRes.Area, getRes.BuyerClass, getRes.BuyerContent, getRes.Industry, getRes.Buyer, buyer_buyerClass, getRes.MinPrice, getRes.MaxPrice)
 				regMap.Data = getDecInfo(decQuery, buyer_buyerClass, getRes)
 				//投标决策分析历史记录
-				go SaveDecHistortList(getRes, userId, main_userId, phone, base64Key, decCount, this.Request)
+				go SaveDecHistortList(getRes, userId, mainUserid, phone, base64Key, decCount, this.Request, "pay")
 			}
 		} else {
 			regMap.Error_code = Error_code_1002
@@ -235,7 +246,7 @@ func (this *Analysis) DecInfo() {
 	this.ServeJson(regMap)
 }
 
-//投标决策分析
+// 投标决策分析
 func getDecInfoFree(decQuery, buyer_buyerClass string, dec *DecParam) map[string]interface{} {
 	t1 := time.Now()
 	//
@@ -287,7 +298,7 @@ func getDecInfoFree(decQuery, buyer_buyerClass string, dec *DecParam) map[string
 	return aggsArr
 }
 
-//投标决策分析
+// 投标决策分析
 func getDecInfo(decQuery, buyer_buyerClass string, dec *DecParam) map[string]interface{} {
 	t1 := time.Now()
 	//
@@ -720,7 +731,7 @@ func getDecInfo(decQuery, buyer_buyerClass string, dec *DecParam) map[string]int
 	}
 }
 
-//决策分析 根据字段权重排序 中标企业和中标价格
+// 决策分析 根据字段权重排序 中标企业和中标价格
 var (
 	bidtype_score        = 1 //采购方式
 	review_experts_score = 1 //评审专家

+ 6 - 5
src/jfw/modules/bigmember/src/service/analysis/power.go

@@ -51,7 +51,7 @@ func AnalysisPower(atype, userId, pname, sid string, serviceId int) (int, string
 	return f_0, "", 0
 }
 
-//获取mysql 大会员权限信息
+// 获取mysql 大会员权限信息
 func getBAmountInfo(userId string, serviceId int) int {
 	// info := db.Mysql.SelectBySql("SELECT * FROM bigmember_amount a WHERE a.user_id = '" + userId + "' AND a.is_ing = 1")
 	info := db.Mysql.SelectBySql(`SELECT a.i_frequency FROM `+jy.BigmemberUserPowerTable+` a WHERE a.s_userid = ? AND a.i_status = 0 AND a.s_serviceid = ?`, userId, serviceId)
@@ -63,7 +63,7 @@ func getBAmountInfo(userId string, serviceId int) int {
 	return 0
 }
 
-//更新sql库 大会员用户服务表 bigmember_service_user
+// 更新sql库 大会员用户服务表 bigmember_service_user
 func UpdatePower(userId string, serviceId int) {
 	var sql = `UPDATE ` + jy.BigmemberUserPowerTable + ` a SET a.i_frequency= IF(a.i_frequency<1,0,a.i_frequency-1) WHERE a.s_userid = ? AND a.s_serviceid = ? `
 
@@ -74,7 +74,7 @@ func UpdatePower(userId string, serviceId int) {
 	}
 }
 
-//保存中标预测记录
+// 保存中标预测记录
 func SaveFWHistorys(status int, userId, f_userId, base64Key, phone string, currentCount int, r *http.Request, res *util.ForecastS, ai int) {
 	if status == 2 {
 		status = 1
@@ -113,8 +113,8 @@ func SaveFWHistorys(status int, userId, f_userId, base64Key, phone string, curre
 	}
 }
 
-//保存投标决策分析记录
-func SaveDecHistortList(res *DecParam, userId, main_userId, phone, base64Key string, decCount int, r *http.Request) {
+// 保存投标决策分析记录
+func SaveDecHistortList(res *DecParam, userId, main_userId, phone, base64Key string, decCount int, r *http.Request, source string) {
 	// log.Println(res, userId)
 	remark := map[string]interface{}{
 		"area":         res.Area,
@@ -147,6 +147,7 @@ func SaveDecHistortList(res *DecParam, userId, main_userId, phone, base64Key str
 		"s_browser":            r.UserAgent(),
 		"s_app_v":              res.AppVersion,
 		"s_key":                base64Key,
+		"source":               source,
 	}
 	fi := db.Mysql.Insert("bigmember_consume", insert)
 	if fi == 0 {

+ 15 - 1
src/jfw/modules/bigmember/src/service/follow/project.go

@@ -3,6 +3,7 @@ package follow
 import (
 	. "app.yhyue.com/moapp/jybase/api"
 	qutil "app.yhyue.com/moapp/jybase/common"
+	elastic "app.yhyue.com/moapp/jybase/es"
 	"errors"
 	"fmt"
 	"jy/src/jfw/modules/bigmember/src/entity"
@@ -211,6 +212,17 @@ func (this *FollowProject) FollowDetail() {
 	this.ServeJson(NewResult(rData, errMsg))
 }
 
+func GetWinnerFromProjectSet(sid string) (winner string) {
+	list := elastic.Get("projectset", "projectset", `{"query": {"bool": {"must": [{"match": {"list.infoid": "`+sid+`"}}]}},"_source":["winner"],"from": 0,"size": 1}`)
+	if len(*list) == 0 {
+		return
+	}
+	finalDate := (*list)[0]
+	if finalDate["winner"] != nil {
+		winner = qutil.ObjToString(finalDate["winner"])
+	}
+	return
+}
 func mergeFollowDetail(followInfo, projectInfo map[string]interface{}, sid string) (map[string]interface{}, error) {
 	//未关注查看项目信息
 	visitArr := []string{}
@@ -232,7 +244,9 @@ func mergeFollowDetail(followInfo, projectInfo map[string]interface{}, sid strin
 		}
 		delete(followInfo, "visit")
 	}
-
+	if projectInfo["s_winner"] == nil {
+		projectInfo["s_winner"] = GetWinnerFromProjectSet(sid)
+	}
 	infoMapArr := []map[string]interface{}{}
 	if infoArrTmp, t := projectInfo["list"].([]map[string]interface{}); t { //查库 list类型为[]map[string]interface{}
 		infoMapArr = infoArrTmp

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

@@ -21,8 +21,8 @@ type Search struct {
 	searchlog        xweb.Mapper `xweb:"/search/searchlog"`         //搜索日志
 }
 
-//查询中标企业名称【带曾用名检索】
-const queryFullEntName = `{"query":{"function_score":{"query":{"multi_match":{"query":"%s","type":"phrase","fields":["name","history_name"]}},"field_value_factor":{"field":"company_type_int","modifier":"reciprocal","factor":2}}},"_source":["name","history_name","company_type_int","_id","company_area","company_city","establish_date","capital","company_phone"],"size":%d}`
+// 查询中标企业名称【带曾用名检索】
+const queryFullEntName = `{"query":{"function_score":{"query":{"multi_match":{"query":"%s","type":"phrase","fields":["name","history_name"]}},"field_value_factor":{"field":"company_type_int","modifier":"reciprocal","factor":2}}},"_source":["name","history_name","company_type_int","_id","company_area","company_city","establish_date","capital","company_phone","legal_person"],"size":%d}`
 
 func (s *Search) EntAssociation() {
 	if !R.CheckReqParam(s.ResponseWriter, s.Request, "name") {
@@ -46,6 +46,7 @@ func (s *Search) EntAssociation() {
 					"establish_date": qutil.Int64All(v["establish_date"]),   //注册日期
 					"capital":        qutil.Float64All(v["capital"]),        //注册资本
 					"company_phone":  qutil.ObjToString(v["company_phone"]), //企业联系方式
+					"legal_person":   qutil.ObjToString(v["legal_person"]),  //企业法人
 				}
 				if timestamp := qutil.Int64All(v["establish_date"]); timestamp > 0 {
 					tmp["establish_date"] = time.Unix(timestamp, 0).Format(Date_Short_Layout)

+ 2 - 2
src/jfw/modules/bigmember/src/util/power.go

@@ -16,9 +16,9 @@ func MainUserId(session *httpsession.Session) (string, string, int) {
 	bigMsg := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
 	if bigMsg.Data.Member.Pid == "" {
 		userId := session.Get("userId").(string)
-		return userId, "phone", bigMsg.Status
+		return userId, bigMsg.Data.Free.Phone, bigMsg.Status
 	}
-	return bigMsg.Data.Member.Pid, "phone", bigMsg.Status
+	return bigMsg.Data.Member.Pid, bigMsg.Data.Free.Phone, bigMsg.Status
 }
 
 //获取该用户所有主账号+子账号

+ 2 - 2
src/jfw/modules/wxtoken/src/config.json

@@ -1,8 +1,8 @@
 {
 	"wxs":[
 		{
-			"appid":"wx5b1c6e7cc4dac0e4",
-			"appsecret":"b026103ffebd2291b3edb7a269612112"
+			"appid":"wx6bb62470ce51e432",
+			"appsecret":"b9374cd43f677a6792ff7b1a23301ac3"
 		}
 	],
 	"redis":"wxtoken=192.168.3.206:1712"

+ 32 - 31
src/seo.json

@@ -238,181 +238,181 @@
     "stype": {
         "NJXM": {
             "NAME": "拟建",
-            "TITLE": "拟建项目_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国拟建项目",
             "KEYWORDS": "拟建项目,拟在建项目,拟建项目网,拟建项目信息",
             "DESCRIPTION": "剑鱼标讯拟建项目专栏,包含国家发改委和各部委提供的尚处于前期立项、审批阶段的招投标项目,各供应商应在立项阶段就开始掌握最新的项目信息,做到早介入,早准备,稳拿单。"
         },
         "ZBYG": {
             "NAME": "招标预告",
-            "TITLE": "招标预告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标预告信息",
             "KEYWORDS": "招标预告,招标预告信息,招标预公告",
             "DESCRIPTION": "剑鱼标讯招标预告栏目,每天发布国内最新的招标预告信息,提供各行业招标预告信息的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_YG": {
             "NAME": "预告",
-            "TITLE": "招标预告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国预告信息",
             "KEYWORDS": "招标预告,招标预告信息,招标预公告",
             "DESCRIPTION": "剑鱼标讯招标预告栏目,每天发布国内最新的招标预告信息,提供各行业招标预告信息的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_XQGS":{
         	   "NAME": "需求公示",
-            "TITLE": "需求公示_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国需求公示信息",
             "KEYWORDS": "需求公示,需求公示信息,需求预公示",
             "DESCRIPTION": "剑鱼标讯招标需求公示,每天发布国内最新的需求公示,提供各行业需求公示的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_YS":{
         	   "NAME": "预审",
-            "TITLE": "预审_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国预审信息",
             "KEYWORDS": "预审,预审信息,预审",
             "DESCRIPTION": "剑鱼标讯预审,每天发布国内最新的预审信息,提供各行业预审的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_LZYJ":{
         	   "NAME": "论证意见",
-            "TITLE": "论证意见_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国论证意见信息",
             "KEYWORDS": "论证意见,论证意见信息,论证意见",
             "DESCRIPTION": "剑鱼标讯论证意见,每天发布国内最新的论证意见,提供各行业需求公示的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_YSJG":{
         	   "NAME": "预审结果",
-            "TITLE": "预审结果_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国预审结果信息",
             "KEYWORDS": "预审结果,预审结果信息,预审结果",
             "DESCRIPTION": "剑鱼标讯预审结果,每天发布国内最新的预审结果,提供各行业需求公示的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBYG_QT":{
         	   "NAME": "招标预告其它",
-            "TITLE": "招标预告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标预告其它信息",
             "KEYWORDS": "招标预告,预审结果信息,预审结果",
             "DESCRIPTION": "剑鱼标讯招标预告,每天发布国内最新的招标预告,提供各行业需求公示的搜索查询服务,不仅及时准确,而且更加专业。"
         },
         "ZBGG_ZB": {
             "NAME": "招标",
-            "TITLE": "公开招标_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国公开招标信息",
             "KEYWORDS": "公开招标,公开招标信息,公开招标公告,公开招标网",
             "DESCRIPTION": "剑鱼标讯公开招标栏目,提供国内各行业最新最全的公开招标信息,出色的搜索查询服务,可以让用户更加快速高效的获取想要的信息。"
         },
         "ZBGG_YB": {
             "NAME": "邀标",
-            "TITLE": "邀请招标_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国邀请招标信息",
             "KEYWORDS": "邀请招标,邀请招标信息,邀请招标公告",
             "DESCRIPTION": "剑鱼标讯邀请招标栏目,及时准确的提供国内各行业最新的邀请招标信息,出色的搜索查询服务,可以让用户更加高效的获取想要的信息。"
         },
         "ZBGG_XJ": {
             "NAME": "询价",
-            "TITLE": "询价采购_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国询价采购信息",
             "KEYWORDS": "询价采购,询价采购信息,询价采购公告",
             "DESCRIPTION": "获取全国各行业最新的询价采购信息,就来剑鱼标讯询价采购专栏,数据多而全,搜索查询更全面,专业性更高。"
         },
         "ZBGG_JT": {
             "NAME": "竞谈",
-            "TITLE": "竞争性谈判_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国竞争性谈判信息",
             "KEYWORDS": "竞争性谈判,竞争性谈判采购,竞争性谈判信息,竞争性谈判公告",
             "DESCRIPTION": "剑鱼标讯竞争性谈判栏目,专业为广大用户提供国内各省、各行业最新的竞争性谈判采购信息和查询服务。招标数据每天保持更新,及时而且准确。"
         },
         "ZBGG_DY": {
             "NAME": "单一",
-            "TITLE": "单一来源_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国单一来源信息",
             "KEYWORDS": "单一来源,单一来源采购,单一来源信息,单一来源采购公告",
             "DESCRIPTION": "剑鱼标讯单一来源栏目,包含国内各省、各行业最新的单一来源采购公告,使用招标搜索功能,可以帮助用户更快速的获取这些信息。"
         },
         "ZBGG_JJ": {
             "NAME": "竞价",
-            "TITLE": "公开竞价_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国公开竞价信息",
             "KEYWORDS": "公开竞价,网上竞价,公开竞价信息,公开竞价采购",
             "DESCRIPTION": "剑鱼标讯公开竞价专栏,提供全国各省和更行业最新的公开竞价信息,你想看的这里都有,使用公开竞价的搜索查询服务更省心。"
         },
         "ZBGG_BG": {
             "NAME": "变更",
-            "TITLE": "变更公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国变更公告信息",
             "KEYWORDS": "变更公告,更正公告,变更公告信息,招标变更公告",
             "DESCRIPTION": "变更公告是招标公告发布后,针对该公告的的地址、时间、招标内容等信息的变更通知。及时查询和获取全国最新的变更公告,就在剑鱼标讯变更公告专栏。"
         },
         "ZBJG_ZHB": {
             "NAME": "中标",
-            "TITLE": "中标公示_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国中标公示信息",
             "KEYWORDS": "中标公示,中标公示信息,中标公告结果,中标公示网",
             "DESCRIPTION": "剑鱼标讯中标公示栏目,涵盖全国各省各行业最新的中标公示信息,可以帮助用户轻松查询到想看的中标信息,好用又省心。"
         },
         "ZBJG_CJ": {
             "NAME": "成交",
-            "TITLE": "成交公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国成交公告信息",
             "KEYWORDS": "成交公告,成交公告信息,成交结果,成交结果公告",
             "DESCRIPTION": "剑鱼标讯成交公告栏目,提供专业的成交公告查询,成交结果查看等功能,全国各省和各个行业的成交公告信息都可以查看和查询。"
         },
         "ZBJG_FB": {
             "NAME": "废标",
-            "TITLE": "废标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国废标公告信息",
             "KEYWORDS": "废标公告,废标公告信息,终止公告",
             "DESCRIPTION": "剑鱼标讯废标公告栏目,提供全国各省,各行业最新的废标公告信息,出色的废标公告查询功能,支持多条件筛选,使用更简单。"
         },
         "ZBJG_LB": {
             "NAME": "流标",
-            "TITLE": "流标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国流标公告信息",
             "KEYWORDS": "流标公告,流标公示,招标失败公告,采购失败公告",
             "DESCRIPTION": "剑鱼标讯流标公告栏目,帮助用户准确获取和查询最新的流标公告信息,提前掌握招投标的进展情况,工作更轻松。"
         },
         "ZBJG_JGBG": {
             "NAME": "结果变更",
-            "TITLE": "流标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国结果变更信息",
             "KEYWORDS": "流标公告,流标公示,招标失败公告,采购失败公告",
             "DESCRIPTION": "剑鱼标讯流标公告栏目,帮助用户准确获取和查询最新的流标公告信息,提前掌握招投标的进展情况,工作更轻松。"
         },
         "ZBJG_QT": {
             "NAME": "招标结果其它",
-            "TITLE": "其他招标结果_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国其他招标结果信息",
             "KEYWORDS": "其他招标结果,其他招标结果",
             "DESCRIPTION": "剑鱼标讯流标公告栏目,帮助用户准确获取和查询最新的流标公告信息,提前掌握招投标的进展情况,工作更轻松。"
         },
         "ZBXYXX_HT": {
             "NAME": "合同",
-            "TITLE": "合同公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国合同公告信息",
             "KEYWORDS": "合同公告,合同公告信息,采购合同公告",
             "DESCRIPTION": "剑鱼标讯合同公告专栏,包含当前国内各省和各行业最全面的合同公告信息,使用合同公告搜索查询功能,获取信息更快更准确。"
         },
         "ZBXYXX_YS": {
             "NAME": "验收",
-            "TITLE": "验收公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国验收公告信息",
             "KEYWORDS": "验收公告,验收公告信息,验收项目",
             "DESCRIPTION": "剑鱼标讯验收公告专栏,涵盖当前国内各省和各行业最全面的验收公告信息,使用验收公告搜索查询功能,获取信息更快更准确。"
         },
         "ZBXYXX_WG": {
             "NAME": "违规",
-            "TITLE": "违规处理_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国违规处理信息",
             "KEYWORDS": "违规处理,违规处理信息,违规招投标",
             "DESCRIPTION": "剑鱼标讯违规处理栏目,每天汇总全国招投标行业最新的违规处理信息,搜索查询功能可以让用户更全面的了解招投标违规信息。"
         },
         "ZBXYXX_QT": {
             "NAME": "招标信用信息其它",
-            "TITLE": "招标信用信息其他相关_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标信用信息其它信息",
             "KEYWORDS": "其它招标信用信,其它公告信息,验收项目",
             "DESCRIPTION": "剑鱼标讯验收公告专栏,涵盖当前国内各省和各行业最全面的验收公告信息,使用验收公告搜索查询功能,获取信息更快更准确。"
         },
         "ZBGG_QT": {
             "NAME": "招标公告其它",
-            "TITLE": "其他招标信息_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "招标公告其它信息",
             "KEYWORDS": "结果公告,土地拍卖,国有产权拍卖,矿权拍卖",
             "DESCRIPTION": "剑鱼标讯其他信息专栏为您提供招投标项目的结果公告,土地拍卖信息、国有产权拍卖信息和矿权拍卖信息等内容,让你更详细、更全面的了解所有招投标信息。"
         },
         "ZBGG":{
         		"NAME": "招标公告",
-            "TITLE": "招标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标公告信息",
             "KEYWORDS": "公开招标,公开招标信息,公开招标公告,公开招标网",
             "DESCRIPTION": "剑鱼标讯公开招标栏目,提供国内各行业最新最全的公开招标信息,出色的搜索查询服务,可以让用户更加快速高效的获取想要的信息。"
         },
         "ZBJG":{
         	"NAME": "招标结果",
-            "TITLE": "招标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标结果信息",
             "KEYWORDS": "公开招标,公开招标信息,公开招标公告,公开招标网",
             "DESCRIPTION": "剑鱼标讯公开招标栏目,提供国内各行业最新最全的公开招标信息,出色的搜索查询服务,可以让用户更加快速高效的获取想要的信息。"
         },
         "ZBXYXX":{
         	"NAME": "招标信用信息",
-            "TITLE": "招标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国招标信用信息",
             "KEYWORDS": "公开招标,公开招标信息,公开招标公告,公开招标网",
             "DESCRIPTION": "剑鱼标讯公开招标栏目,提供国内各行业最新最全的公开招标信息,出色的搜索查询服务,可以让用户更加快速高效的获取想要的信息。"
         },
         "ZBCGYX":{
         	"NAME": "采购意向",
-            "TITLE": "招标公告_剑鱼标讯,全行业招标信息智能推送领导者!",
+            "TITLE": "全国采购意向信息",
             "KEYWORDS": "公开招标,公开招标信息,公开招标公告,公开招标网",
             "DESCRIPTION": "剑鱼标讯公开招标栏目,提供国内各行业最新最全的公开招标信息,出色的搜索查询服务,可以让用户更加快速高效的获取想要的信息。"
         }
@@ -4491,5 +4491,6 @@
 	"seoKeywordSuffix":"",
 	"seoLetterPageSize":1000,
 	"seoAreaSuffix":"政府采购网",
-  "appNewUserTime":1668155814
+  "appNewUserTime":1668155814,
+  "tagsLimitCount":300
 }

+ 11 - 0
src/web/staticres/big-member/css/j-icons.css

@@ -372,6 +372,17 @@
     background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANySURBVHgB7VndUdtAEP5OsvPsDiIqiDMJmWEgg1VBTAVABZAKwBUEKghUEFKB7AmEBwg4FcTpgKc8YKTN7kk2MsPpx5asyUTfjHxne3W7e3u3u7cH1KhRo0aVUCgI3uWlA7/RVcp6BaIOCC0evaX/JNxxfyQPEQ0wfjhz3bURCsDCCngXP3YU0TZ3O8iHIang2F1/d4IFMLcC3rerjlLqM3cd/YPMsqXOyMcAtj/EfXPkuq/vNK1328KLMdPZbfg+v2d9mFoHbBUV9OZVJLcCIozVDA4ItD8VAHSMceNkInCmcULLHSCaAAV1FIytXp4xwvdywPMuHdVsfuFuW2acFPXcjdUjLADv/Gqfhf8UfR3ReOzm2R+ZFYiE9xDOWG5GZY1tZSGSZRNjMCxSeIGMJWPK2MJDrKz3TQZkUkDWPB5nZ6tI4SeIlNgSHvy0I56pSF1C0WYTbwNmsFKG8DP8wuV0y90WxwzXfb/aT6JPtUDkKXjP0seyhRdoS4B6mnfophORaIHY7I86G29XsET0z69/ceNwjNhNihGJFmDh96SVQIMlQ8cWLYO1nURnVEDWIsTfA3eLhvu5wIFRePPTubi5eWkiM1ug2eiGHXWGCiARmQJ8lf79H3/LRGdUQJHalJaUP0BlUH39KRmuAWYLqChJC4NLNfD9Ce+OiSRpEzv6k7NKVIaIN5ExKicpoF/Kmx0WiRjvuRT4J5CkwONhpCLEeBtXQaoC4UmqKkx5j0wURgXYB0/cZxtV4YWteXNU/m0iMVvAIu3CFOxNVAROZSa8+yYaswJc+tAtUbfCfdCdkeUZGBWIUuc+xIU1H3awZEgmjNB9DpPS+EQ3SkqdSsuH7j0sGdNzCNeOkugSFXDX35wg9ACOVA+wJAy+X8uEOcI7LRNODWR8rNuVlq1wEKXYpUJ4sAfUpZos55BUBeRMSgQxo65MlKlErLwC4ZnlHJItlXiwDzFT8iheiVjRzIEs25BnKv6PwpYgVnwaIbTEbREbWzasaugyioM5imZzFXfR8A+VwsS15q4u6zE4tkTu2ZHf9D7jZVNqcXdGiCfV5fASg8vr4RH0+fK6b7eVjU0E1J0pr7OnSytgFa7AE0VkJvMmfX223GllFxxPoT1TU66YuBhAbBV5Zq+YxELskoOfsPmKaa38Kl+NGjVqlI+/zO65Qdp3pJkAAAAASUVORK5CYII=");
 }
 
+.icon-canbiao-red {
+    width: .4rem;
+    height: .4rem;
+    background-image: url(/common-module/big-member/image/canbiao-red.png);
+}
+.icon-canbiao-blue {
+    width: .4rem;
+    height: .4rem;
+    background-image: url(/common-module/big-member/image/canbiao-active.png);
+}
+
 /******** img背景图 **********/
 .j-img {
     display: inline-block;

+ 163 - 0
src/web/staticres/big-member/css/page_pro_follow_detail.css

@@ -3,6 +3,18 @@
   /*开标提醒弹窗样式*/
 }
 
+.currentTimeDiv{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-height: .48rem;
+  padding: .06rem 0;
+  background: #FFE9EA;
+  color: #FF3A20;
+  font-size: .24rem;
+  line-height: .36rem;
+}
+
 .prodetail .prodetailTop {
   background: #fff;
   box-shadow: inset 0px -0.5px 0px rgba(0, 0, 0, 0.05);
@@ -175,6 +187,75 @@
   margin-right: .08rem;
 }
 
+.prodetail .bid_status.prosummary {
+  margin-bottom: .2rem;
+  padding-bottom: .32rem;
+}
+
+.prodetail .bid_status.prosummary .summary_title{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.prodetail .bid_status.prosummary .summary_title .actionBtn{
+  color: #2ABED1;
+  font-size: 14px;
+  text-decoration: underline;
+}
+.prodetail .bid_status .van-cell{
+  display: flex;
+  align-items: flex-start;
+  padding: .3rem 0;
+}
+.prodetail .bid_status .van-cell .van-field__label{
+  font-size: 15px;
+}
+.prodetail .bid_status .van-cell .van-field__label{
+  font-size: .3rem;
+}
+.prodetail .bid_status .van-cell .van-field__body textarea {
+  min-height: .48rem;
+}
+.prodetail .bid_status .van-cell .van-field__control{
+  font-size: .32rem;
+}
+.prodetail .bid_status .van-cell--required::before{
+  left: -.16rem;
+}
+.prodetail .bid_status .van-field__label {
+  margin-right: .32rem;
+}
+
+.popupTime .van-cell.cell_checked .van-cell__title{
+  color: #2ABED1;
+}
+
+.popupTime .van-cell__title{
+  font-size: 14px;
+}
+
+.popupTime .van-checkbox__icon--checked .van-icon.van-icon-success{
+  background-color: #2ABED1;
+  border-color: #2ABED1;
+}
+.bid_status .view-result-tip{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: .1rem .16rem;
+  margin: .24rem 0;
+  font-size: .3rem;
+  color: #2ABED1;
+  background: linear-gradient(270deg, rgba(234, 248, 250, 0) 0%, #EAF8FA 52.08%, rgba(234, 248, 250, 0) 100%);
+}
+.view_history{
+  margin-bottom: .2rem;
+}
+.view_history .van-cell{
+  padding: .3rem .32rem;
+}
+
 .columnLine{
   display: flex;
   margin: 0 0 0 16px;
@@ -346,6 +427,20 @@
   color: #2ABED1;
 }
 
+.prodetail .popupTime .popupTime-main .bid_ul .bid_select{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 16px;
+  height: 1.08rem;
+  color: #171826;
+  font-size: 16px;
+}
+.bid_select>img{
+  width: .48rem;
+  height: .48rem;
+}
+
 /*取消关注弹窗样式*/
 .caredialog {
   width: 6.06rem;
@@ -739,3 +834,71 @@
   height: .92rem;
   background: #e6e6e6;
 }
+.refer_stand{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 .32rem .36rem;
+  min-height: .8rem;
+  background: #fff;
+}
+.refer_stand .r-s-left{
+  font-size: .28rem;
+  line-height: .4rem;
+  color: #5F5E64;
+}
+.refer_stand .r-s-left, .refer_stand .r-s-right{
+  display: flex;
+  align-items: center;
+}
+
+.refer_stand .r-s-left img, .refer_stand .r-s-right img{
+  margin-right: .08rem;
+  width: .48rem;
+  height: .48rem;
+}
+.refer_stand .r-s-right{
+  font-size: .28rem;
+}
+
+.submitBtn{
+  height: .92rem;
+  width: 100%;
+  background: #2ABED1;
+  border-radius: .16rem;
+  border: none;
+}
+
+.acc-input-group {
+  position: relative;
+}
+
+.acc-input-group .popover-acc-input-group .popover-acc-input-group--item {
+  width: 100%;
+  font-weight: 500;
+  font-size: 14px;
+  line-height: 20px;
+  color: #171826;
+  padding: 8px 16px;
+  box-sizing: border-box;
+}
+.acc-input-group .popover-acc-input-group {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  top: 60px;
+  width: 100%;
+  background: #fff;
+  max-height: 170px;
+  overflow: scroll;
+  z-index: 9999999;
+  height: 170px;
+  border-radius: 8px;
+  border: 1px solid #eee;
+}
+
+.cancel_select{
+  font-size: .28rem;
+  color: #2ABED1;
+  margin-left: .32rem;
+}

+ 15 - 1
src/web/staticres/big-member/css/page_pro_follow_list.css

@@ -160,10 +160,24 @@
     color: #a0a0a0 !important;
 }
 
-.article-item-hd {
+.article-item-hd,
+.article-item-ft {
   display: flex;
   justify-content: space-between;
 }
+.article-item-ft {
+  margin-top: .24rem;
+}
+.article-item-ft .action-item {
+  display: flex;
+  align-items: center;
+  font-size: .28rem;
+  line-height: .4rem;
+  color: #5F5E64;
+}
+.action-item .label-icon {
+  margin-left: 0.08rem;
+}
 
 .bi-report-inject-button {
   display: inline-block;

+ 18 - 0
src/web/staticres/common-module/big-member/css/page_client_follow_list.css

@@ -263,4 +263,22 @@
   line-height: 24px;
   background: #F5F6F7;
   color: #5F5E64;
+}
+
+.article-item-ft {
+  display: flex;
+  justify-content: space-between;
+}
+.article-item-ft {
+  margin-top: .24rem;
+}
+.article-item-ft .action-item {
+  display: flex;
+  align-items: center;
+  font-size: .28rem;
+  line-height: .4rem;
+  color: #5F5E64;
+}
+.action-item .label-icon {
+  margin-left: 0.08rem;
 }

BIN
src/web/staticres/common-module/big-member/image/canbiao-active.png


BIN
src/web/staticres/common-module/big-member/image/canbiao-red.png


BIN
src/web/staticres/common-module/big-member/image/canbiao.png


BIN
src/web/staticres/common-module/big-member/image/person_cb.png


+ 510 - 0
src/web/staticres/common-module/big-member/js/page_client_follow_detail.js

@@ -113,6 +113,58 @@ var vNode = {
         isRequestIng:false,
         isExportDialogShow: false,
         cid: '', // 取消认领id
+        cbInfo: {
+          isShowRefer: false,
+          canBiaoInfo: {
+            showStopParticipate: false
+          },
+          setTime: '',
+          countdownTimer: null
+        },
+        bidTypePopup: false,
+        isBidPopup: false,
+        bidProject: false,
+        showBidType: true,
+        showChannel: false,
+        copyBidParams: {
+          bidType: '',
+          bidStage: '',
+          isWin: '',
+          channelName: '',
+          channelPerson: '',
+          channelPhone: '',
+          winner: '',
+          sid: ''
+        },
+        bidParams: {
+          bidType: '',
+          bidStage: '',
+          isWin: '',
+          channelName: '',
+          channelPerson: '',
+          channelPhone: '',
+          winner: '',
+          sid: ''
+        },
+        isWinBid: false,
+        checkedList: [],
+            formSchemaOptions: {
+              bidStage: [],
+              'bidStage-1': [],
+              checkedListMap: {
+                1: [],
+                2: []
+              }
+            },
+            showAccEntList: false,
+            accEntList: [],
+        labelAlign: 'left',
+
+        editBtnStatus: {
+          show: false,
+          status: 0
+        },
+        rownum: 1,
         proParams: {}
     },
     computed: {
@@ -125,6 +177,17 @@ var vNode = {
                 return true
             }
         },
+        bidStageOptions: function () {
+          const result = this.formSchemaOptions['bidStage' + (this.copyBidParams.bidType == 1 ? '-1' : '')].map(option => ({
+            checked: this.checkedList.includes(option),
+            value: option,
+            label: option
+          }))
+          return result
+        },
+        showDisbaled: function () {
+          return this.bidParams.bidType === ''
+        }
     },
     created() {
         this.isOpening()
@@ -147,11 +210,458 @@ var vNode = {
             this.sid = JSON.parse(sessionStorage.getItem('bigvip-fid')).sid
         }
         this.getProDetail()
+        this.getOptionsInfo()
+        this.getCanBiaoInfo()
+        this.getBidContent()
+        this.getHaveActionHistory()
     },
     mounted () {
       this.getShareParams()
     },
     methods: {
+          doClosePopover () {
+            this.showAccEntList = false
+          },
+          // 重置投标阶段变更
+          cancelBidStage () {
+            const resetList = (this.formSchemaOptions.checkedListMap[this.copyBidParams.bidType] || []).map(v => v)
+            this.checkedList = resetList
+          },
+          doQueryAccEntName (str) {
+            // TODO 需添加防抖
+            this.showAccEntList = false
+            this.fetchChannelNameList(str, list => {
+              this.showAccEntList = list.length > 0
+              this.accEntList = list
+            })
+          },
+          doSelectEnt (item) {
+            this.setParams(this.bidParams, item)
+            this.setParams(this.copyBidParams, item)
+            this.showAccEntList = false
+          },
+          setParams(params, item) {
+            const { value, company_phone, legal_person } = item || {};
+            params.channelName = value || ''
+            // params.channelPhone = company_phone || ''
+            // params.channelPerson = legal_person || ''
+          },
+          /**
+           * 获取模糊渠道名称列表
+           * @param str
+           * @param cb
+           */
+          fetchChannelNameList (str, cb) {
+            const query = str.trim()
+            if (query.length < 2) {
+              return cb([])
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/bigmember/search/ent/association',
+              data: {
+                name: query
+              },
+              success: function (res) {
+                if (res.error_code == 0) {
+                  if (res.data) {
+                    const result = (res.data.list || []).map(v => {
+                      return {
+                        ...v,
+                        value: v.name
+                      }
+                    })
+                    cb(result)
+                  }
+                }
+              },
+              error: function (error) {
+                cb([])
+              }
+            })
+          },
+          // 获取选项
+          getOptionsInfo () {
+            const _this = this
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/setUpInfo',
+              contentType: 'application/json',
+              data: JSON.stringify({
+                sid: _this.sid
+              }),
+              success: function (res) {
+                if (res.error_code === 0) {
+                  const data = res.data || {}
+                  if (data.bidType) {
+                    _this.formSchemaOptions.bidStage = data.bidType.find(v => v.name === '渠道投标').content || []
+                    _this.formSchemaOptions['bidStage-1'] = data.bidType.find(v => v.name === '直接投标').content || []
+                  }
+                }
+              }
+            })
+          },
+      // 查看操作记录
+      getActionHistory: function () {
+        location.href = '/jy_mobile/project/operatingRecord?sid=' + this.sid
+      },
+      // 选择是否中标
+      selectBidStatus: function(data) {
+        this.copyBidParams.isWin = data
+      },
+      // 是否中标取消选择
+      cancelSelect () {
+        this.bidParams.isWin = ''
+        this.copyBidParams.isWin = ''
+        this.bidParams.winner = ''
+        this.copyBidParams.winner = ''
+        this.isBidPopupClose()
+      },
+      saveStatus: function (str) {
+        switch (str) {
+          case '0':
+            if(this.bidParams.bidType) {
+              if (!((this.bidParams.bidType.indexOf('直接') !== -1 && parseInt(this.copyBidParams.bidType) === 1) || (this.bidParams.bidType.indexOf('渠道') !== -1 && parseInt(this.copyBidParams.bidType) === 2))) {
+                this.bidParams = {
+                  bidType: this.copyBidParams.bidType,
+                  bidStage: '',
+                  isWin: '',
+                  channelName: '',
+                  channelPerson: '',
+                  channelPhone: '',
+                  winner: '',
+                  sid: ''
+                }
+                this.copyBidParams = {
+                  bidType: this.copyBidParams.bidType,
+                  bidStage: '',
+                  isWin: '',
+                  channelName: '',
+                  channelPerson: '',
+                  channelPhone: '',
+                  winner: '',
+                  sid: ''
+                }
+                this.checkedList = []
+              }
+            }
+            break;
+          case '1':
+            if (this.checkedList.length > 0) {
+              this.copyBidParams.bidStage = this.checkedList.join('、')
+            } else {
+              this.copyBidParams.bidStage = ''
+            }
+            break
+          default:
+            break;
+        }
+        const { channelName, channelPhone, channelPerson, winner } = this.bidParams || {};
+        this.copyBidParams.channelName = channelName || ''
+        this.copyBidParams.channelPhone = channelPhone || ''
+        this.copyBidParams.channelPerson = channelPerson || ''
+        this.copyBidParams.winner = winner || ''
+
+        Object.assign(this.bidParams, this.copyBidParams)
+        if (this.bidParams.bidType == 1) {
+          this.bidParams.bidType = '直接投标'
+          this.showChannel = false
+        } else if (this.bidParams.bidType == 2) {
+          this.bidParams.bidType = '渠道投标'
+          this.showChannel = true
+        }
+        // 带出中标单位
+        if (this.bidParams.isWin == 1) {
+          this.bidParams.isWin = '是'
+          const sWin = this.prodetail.projectInfo.s_winner || ''
+          if (sWin && !winner) {
+            this.bidParams.winner = sWin
+          }
+        } else if (this.bidParams.isWin == 2) {
+          this.bidParams.isWin = '否'
+          this.bidParams.winner = ''
+        } else {
+          this.bidParams.isWin = ''
+          this.bidParams.winner = ''
+        }
+        this.bidTypePopupClose()
+        this.BidProjectPopupClose()
+        this.isBidPopupClose()
+      },
+      // 选择投标类型
+      selectBidType: function(data) {
+        this.copyBidParams.bidType = data
+            //  checkedList 切换时清空
+            if (data != this.copyBidParams.bidType) {
+              this.checkedList = []
+              this.copyBidParams.isWin = 0
+            }
+      },
+      // 查询是否有操作记录
+      getHaveActionHistory: function () {
+        const _this = this
+        const params = {
+          pageSize: 1,
+          sid: this.sid
+        }
+        $.ajax({
+          type: 'POST',
+          url: '/jyapi/jybx/core/participate/records',
+          contentType: 'application/json',
+          data: JSON.stringify(params),
+          success: function(res) {
+            if(res.error_code === 0 && res.data) {
+              let list = res.data.list
+              if(!list) {list = []}
+              if (list.length > 0) {
+                _this.cbInfo.isShowRefer = true
+              } else {
+                _this.cbInfo.isShowRefer = false
+              }
+            } else {
+              _this.$toast(res.error_msg)
+            }
+          }
+        })
+      },
+      // 获取投标状态信息
+      getBidContent: function () {
+        const _this = this
+        const params = {
+          sid: this.sid
+        }
+        $.ajax({
+          type: 'POST',
+          url: '/jyapi/jybx/core/participate/content',
+          contentType: 'application/json',
+          data: JSON.stringify(params),
+          success: function(res) {
+            if(res.error_code === 0 && res.data) {
+              if (Object.keys(res.data).length > 0) {
+                _this.editBtnStatus.show = true
+                _this.editBtnStatus.status = 1
+                const { bidStage, bidType, channelName, channelPerson, channelPhone, isWin, winner} = res.data
+                let getParams = {
+                  bidType: '',
+                  bidStage: '',
+                  isWin: '',
+                  channelName: channelName,
+                  channelPerson: channelPerson,
+                  channelPhone: channelPhone,
+                  winner: winner
+                }
+                if (bidStage && bidStage.length > 0) {
+                  _this.checkedList = bidStage
+                  getParams.bidStage = bidStage.join('、')
+                }
+                if (isWin == 1) {
+                  getParams.isWin = '是'
+                } else if(isWin == 2) {
+                  getParams.isWin = '否'
+                } else {
+                  getParams.isWin = ''
+                }
+                if(bidType == 1) {
+                  getParams.bidType = '直接投标'
+                  _this.showChannel = false
+                  _this.formSchemaOptions.checkedListMap[1] = [].concat(bidStage || [])
+                } else {
+                  getParams.bidType = '渠道投标'
+                  _this.showChannel = true
+                  _this.formSchemaOptions.checkedListMap[2] = [].concat(bidStage || [])
+                }
+                if (res.data) {
+                  Object.assign(_this.copyBidParams, res.data)
+                }
+                _this.bidParams = getParams
+              }
+            }
+          }
+        })
+      },
+      onSubmit: function() {
+        // 在这里处理表单提交逻辑
+        const _this = this
+        this.copyBidParams.bidType = parseInt(this.copyBidParams.bidType)
+        this.copyBidParams.isWin = this.copyBidParams.isWin ? parseInt(this.copyBidParams.isWin) : 0
+            // this.bidParams.winner = this.prodetail.s_winner
+        this.bidParams.sid = this.sid
+        const {channelName, channelPerson, channelPhone, winner, sid, bidStage, isWin } = this.bidParams
+        let tranWin = 0
+        if (isWin === '是') {
+          tranWin = 1
+        } else if (isWin === '否') {
+          tranWin = 2
+        } else {
+          tranWin = 0
+        }
+        const ajaxParams = {
+          bidType: parseInt(this.copyBidParams.bidType),
+          bidStage: bidStage ? bidStage.split('、') : [],
+          isWin: tranWin,
+          channelName: channelName,
+          channelPerson: channelPerson,
+          channelPhone: channelPhone,
+          winner: winner,
+          sid: sid
+        }
+        $.ajax({
+          type: 'POST',
+          url: '/jyapi/jybx/core/participate/updateBidStatus',
+          contentType: 'application/json',
+          data: JSON.stringify(ajaxParams),
+          success: function(res) {
+            if(res.error_code === 0) {
+              _this.$toast('保存成功')
+              _this.editBtnStatus.show = true
+              _this.editBtnStatus.status = 1
+            } else {
+              _this.$toast(res.error_msg)
+            }
+          }
+        })
+      },
+      onCellClick(data) {
+            if (this.checkedList.includes(data.value)) {
+              this.checkedList = this.checkedList.filter(v => v !== data.value)
+        } else {
+              this.checkedList.push(data.value)
+            }
+      },
+      // 设置倒计时
+      updateCountdown: function() {
+        if (!this.cbInfo.canBiaoInfo.bidEndTime) {
+          $('.currentTimeDiv').hide()
+          return
+        }
+        const targetTime = this.cbInfo.canBiaoInfo.bidEndTime * 1000
+        // const targetTime = 1684485592876
+        const now = new Date().getTime(); // 获取当前时间
+        const diff = targetTime - now; // 计算时间差
+        const seconds = Math.floor(diff / 1000); // 转换为秒数
+        // 计算天、小时、分钟、秒数
+        const days = Math.floor(seconds / (60 * 60 * 24));
+        const hours = Math.floor((seconds % (60 * 60 * 24)) / (60 * 60));
+        const minutes = Math.floor((seconds % (60 * 60)) / 60);
+        const remainingSeconds = seconds % 60;
+
+        // 将倒计时显示在页面上
+        this.cbInfo.setTime = `${days}天 ${hours}小时 ${minutes}分钟 ${remainingSeconds}秒`;
+
+        // 如果倒计时结束,清除定时器
+        if (diff < 0) {
+          clearInterval(this.cbInfo.countdownTimer);
+          if(this.cbInfo.canBiaoInfo.userName) {
+            $('.refer_stand .r-s-right').css('visibility', 'hidden')
+          } else {
+            $('.refer_stand .r-s-left').css('visibility', 'hidden')
+            this.cbInfo.canBiaoInfo.showStopParticipate = false
+          }
+          $('.currentTimeDiv').hide()
+        } else {
+          if(!this.cbInfo.canBiaoInfo.userName) {
+            $('.refer_stand .r-s-left').css('visibility', 'hidden')
+          }
+          $('.currentTimeDiv').show()
+        }
+      },
+      // 点击参标
+      setCanBiao: function (e) {
+        const rsRight = $(e.target).hasClass('r-s-right')
+        let weicanbiao = $(e.target).hasClass('weicanbiao')
+        if (rsRight) {
+          const showElem1 = $($(e.target).find('img')[0])
+          if(showElem1.is(':hidden')) {
+            weicanbiao = false
+          } else {
+            weicanbiao = true
+          }
+        }
+        const _this = this
+        const type = weicanbiao ? 'in' : 'out';
+        const url = '/jyapi/jybx/core/participate/'+ type + '/info'
+        const params = {
+          bidIds: this.sid
+        }
+        const outParams = {
+          bidIds: this.sid,
+          projectId: this.cbInfo.canBiaoInfo.projectId
+        }
+        $.ajax({
+          type: 'POST',
+          url: url,
+          contentType: 'application/json',
+          data: JSON.stringify(weicanbiao ? params : outParams),
+          success: function(res) {
+            if(res.error_code === 0) {
+              if(res.data) {
+                _this.getCanBiaoInfo()
+                if (type === 'in') {
+                  _this.getHaveActionHistory()
+                  _this.$toast('已参标,请前往我的参标项目列表查看')
+                }
+                // 更新收藏列表
+                const updateCBStatus = {
+                  id: _this.sid,
+                  value: type === 'in' ? 1 : 0
+                }
+                sessionStorage.setItem('actionCBInfo', JSON.stringify(updateCBStatus))
+              }
+            } else {
+              _this.$toast(res.error_msg)
+            }
+          }
+        })
+      },
+
+      // 获取参标状态
+      getCanBiaoInfo: function() {
+          const _this = this
+          const param = {
+            sid: this.sid
+          }
+          $.ajax({
+            type: 'POST',
+            url: '/jyapi/jybx/core/participate/info',
+            contentType: 'application/json',
+            data: JSON.stringify(param),
+            success: function(res) {
+              if(res.error_code == 0) {
+                const data = res.data;
+                if (Object.keys(data).length > 0) {
+                  _this.cbInfo.canBiaoInfo = data
+                  _this.cbInfo.countdownTimer = setInterval(_this.updateCountdown, 1000);
+                  if (data.userName) {
+                    const newList = data.userName.split(',').map(item => item.trim()).filter(item => item)
+                    const userNameString = newList.length > 1 ? newList.slice(0,1).join(',') + '等' : newList.join(',')
+                    data.userName = userNameString
+                  }
+                }
+              }
+            }
+          })
+        },
+        // 编辑投标状态
+        setBidInfo: function () {
+          if (this.editBtnStatus.status == 1) {
+            this.editBtnStatus.status = 2
+          } else if (this.editBtnStatus.status == 2) {
+            this.editBtnStatus.status = 1
+            this.getBidContent()
+          }
+        },
+        // 关闭投标类型弹窗
+        bidTypePopupClose: function () {
+            this.bidTypePopup = false
+        },
+        // 关闭是否中标弹窗
+        isBidPopupClose: function () {
+          this.isBidPopup = false
+        },
+        // 关闭投标项目阶段弹窗
+        BidProjectPopupClose: function () {
+          this.bidProject = false
+        },
         getShareParams () {
           this.proParams = {
             type: '2',

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

@@ -46,7 +46,8 @@ var vNode = {
         this.getAreaList()
     },
     mounted () {
-        $(this.$refs.jList).scrollTop(this.scrollTop)
+      utils.iosBackRefresh()
+      $(this.$refs.jList).scrollTop(this.scrollTop)
     },
     methods: {
         recover: function () {
@@ -60,6 +61,7 @@ var vNode = {
                     }
                     this.$data[key] = $data[key]
                 }
+                this.checkCBStateChanged()
                 sessionStorage.removeItem(this.sessStorageKey)
             }
             return !!$data
@@ -215,6 +217,10 @@ var vNode = {
                                 res.data.List[i].budget = utils.moneyUnit(res.data.List[i].budget)
                                 res.data.List[i].b_thirtydays = ""
                                 res.data.List[i].l_createtime = _this.timeDiff(res.data.List[i].l_createtime)
+                                res.data.List[i].isCB = {
+                                    id: '',
+                                    value: 0
+                                }
                                 try {
                                     res.data.List[i].visited = visitedPath.pathVisited(
                                         new VisitedPathItem(
@@ -230,6 +236,7 @@ var vNode = {
                                     res.data.List[i].b_thirtydays = "jyovertime"
                                 }
                             }
+                            _this.getCBProject(res.data.List)
                             if(_this.carePro !== '' || _this.pageNum == 0) {
                                 _this.list = res.data.List
                                 _this.newList = res.data.List
@@ -326,7 +333,77 @@ var vNode = {
                 td = minutes + "分钟前";
             }
             return td;
-        }
+        },
+        checkCBStateChanged: function () {
+            var actionInfo = sessionStorage.getItem('actionCBInfo')
+            if (actionInfo) {
+                var info = JSON.parse(actionInfo)
+                this.list.forEach(function (item) {
+                    if (item.sid === info.id) {
+                        item.isCB.value = info.value
+                    }
+                })
+            }
+        },
+        getCBProject: function(arr) {
+            let idArr = arr.map(item => item.sid)
+            if (idArr.length > 0) {
+              idArr = idArr.join(',')
+            } else {
+              idArr = ''
+            }
+            const params = {
+              ids: idArr
+            }
+            $.ajax({
+              url: '/jyapi/jybx/core/participate/show',
+              type: "POST",
+              contentType: 'application/json;charset=utf-8',
+              data:JSON.stringify(params),
+              success: function(res){
+                if(res.error_code == 0) {
+                  if(res.data) {
+                    arr.forEach(v => {
+                      res.data.forEach(m => {
+                        if (v.sid === m.id) {
+                          Object.assign(v.isCB, m)
+                        }
+                      })
+                    })
+                  }
+                }
+              },
+              error: function(){
+                _this.$toast(res.error_msg)
+              }
+            })
+        },
+          // 参标
+        setCanBiaoStatus: function(item) {
+            if (item.isCB && item.isCB.value) {
+              this.$toast('如需终止参标,请在详情页进行操作。')
+              return
+            }
+            var _this = this
+            var params = { bidIds: item.sid }
+            $.ajax({
+                url: '/jyapi/jybx/core/participate/in/info',
+                type: 'POST',
+                contentType: 'application/json',
+                data: JSON.stringify(params),
+                success: function (res) {
+                    if (res.error_code === 0 && res.data) {
+                        _this.$toast('已参标,请前往我的参标项目列表查看。')
+                        _this.$set(item, 'isCB', {
+                            id: item.sid,
+                            value: true
+                        })
+                    } else {
+                      _this.$toast(res.error_msg)
+                    }
+                }
+            })
+        },
     }
 }
 var vueComponent = new Vue(vNode)

+ 33 - 10
src/web/staticres/common-module/collection/css/index.css

@@ -227,11 +227,6 @@
     height: .4rem;
 }
 
-.collection .van-list {
-    padding: 0 .32rem;
-    background: #ffffff;
-}
-
 .collection .listaction {
     display: -webkit-box;
     display: -webkit-flex;
@@ -295,14 +290,22 @@
 }
 
 .collection .collec_li {
-    padding: .36rem 0 .4rem;
+    padding: .36rem .32rem .24rem;
     width: 100%;
     background: #ffffff;
     border-bottom: 0.5px solid rgba(0, 0, 0, 0.05);
 }
+.collection .collec_li:not(:last-of-type) {
+    margin-bottom: .16rem;
+}
+.ft-right-actions,
+.action-item {
+    display: flex;
+    align-items: center;
+}
 
 .collection .userpub{
-  padding: 0 0 .4rem;
+  /* padding: 0 0 .4rem; */
 }
 
 .collection .collec_li .yhfb{
@@ -383,7 +386,9 @@
     -webkit-align-items: center;
     align-items: center;
 }
-
+.visited .visited-ft2 {
+    opacity: .6;
+}
 .collec_action .collec_tags .tag_active {
     margin-right: .08rem;
     padding: .02rem .16rem;
@@ -392,11 +397,29 @@
     text-align: CENTER;
     line-height: .36rem;
     color: #5f5e64;
-    border-radius: .05rem;
-    opacity: 1;
+    border-radius: .08rem;
     background: #f7f9fa;
     border: 1px solid rgba(0, 0, 0, 0.05);
 }
+.collec_action .collec_tags .tag_active.blue {
+    color: #2ABED1;
+    border-color: #2ABED1;
+    background: rgba(42, 190, 209, 0.1);
+}
+.collec_action .collec_tags .tag_active.red {
+    color: #FB483D;
+    border-color: rgba(255, 58, 32, 0.1);
+    background: rgba(255, 58, 32, 0.1);
+}
+
+.collec_ft {
+    margin-top: .24rem;
+    padding-top: .24rem;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    border-top: 1px solid rgba(0, 0, 0, 0.05);
+}
 
 .collec_action .collec_time {
     font-size: .24rem;

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

@@ -121,15 +121,12 @@ var vNode = {
       }
       this.getUserRoot()
     }
-  },
-  mounted() {
     if(this.limitlist.label !=='' || this.limitlist.selectTime != '' || this.limitlist.buyerclass != '' ||  this.limitlist.buyerPhone != 0 || this.limitlist.winnerPhone != 0) {
       this.limitshow = true
-    } else {
-      this.limitshow = false
     }
   },
   mounted () {
+    utils.iosBackRefresh()
     setTimeout(() => {
       $(this.$refs.jList).scrollTop(this.listState.scrollTop)
     }, 300)
@@ -143,15 +140,25 @@ var vNode = {
           $data = JSON.parse($data)
           var listState = $data["listState"];
           var list = listState["list"];
+          let actionCBInfo = sessionStorage.getItem('actionCBInfo')
+          if(actionCBInfo) {
+            actionCBInfo = JSON.parse(actionCBInfo)
+          }
           for (var i=0;i<list.length;i++){
-        	if (sessionStorage.getItem('listCollSessionId')&&sessionStorage.getItem('listCollSessionId')==list[i]["_id"]){
-				if (sessionStorage.getItem('listCollSessionBool')=="0"){
-					listState["list"].splice(i,1);
-				}
-   				sessionStorage.removeItem('listCollSessionId')
-   				sessionStorage.removeItem('listCollSessionBool')
-		    }
-	      }
+            if (sessionStorage.getItem('listCollSessionId')&&sessionStorage.getItem('listCollSessionId')==list[i]["_id"]){
+              if (sessionStorage.getItem('listCollSessionBool')=="0"){
+                listState["list"].splice(i,1);
+              }
+              sessionStorage.removeItem('listCollSessionId')
+              sessionStorage.removeItem('listCollSessionBool')
+            }
+            if (actionCBInfo) {
+              if (actionCBInfo.id == list[i]._id) {
+                list[i].isCB.value = actionCBInfo.value
+              }
+              sessionStorage.removeItem('actionCBInfo')
+            }
+          }
           for (var key in $data) {
               if (excludeKey.indexOf(key) !== -1) {
                   continue
@@ -175,13 +182,13 @@ var vNode = {
           sessionStorage.removeItem(this.sessStorageKey)
       }
       return !!$data
-    },
-    setrecover: function() {
-      var scrollTop = $(this.$refs.jList).scrollTop()
-      // 如果滚动高度为0,或者entList长度为0,则不缓存数据(即返回刷新)
-      this.listState.scrollTop = scrollTop
-      sessionStorage.setItem(this.sessStorageKey, JSON.stringify(this.$data))
-    },
+  },
+  setrecover: function() {
+    var scrollTop = $(this.$refs.jList).scrollTop()
+    // 如果滚动高度为0,或者entList长度为0,则不缓存数据(即返回刷新)
+    this.listState.scrollTop = scrollTop
+    sessionStorage.setItem(this.sessStorageKey, JSON.stringify(this.$data))
+  },
     // 判断是否是有权限
     getUserRoot: function() {
       let _this = this
@@ -189,6 +196,7 @@ var vNode = {
         url: '/publicapply/bidcoll/power',
         type: 'POST',
         success: function(res) {
+          console.log(res)
           if(res.data.entniche || res.data.member || res.data.vip > 0) {
             _this.screenShow = true
           } else {
@@ -225,18 +233,25 @@ var vNode = {
     // 获取列表数据
     getList: function(isScreen) {
       let _this = this
-      _this.listState.loading = true
       let params = _this.limitlist
+      _this.listState.loading = true
       $.ajax({
         url: '/publicapply/bidcoll/list',
         type: "POST",
         contentType: 'application/json;charset=utf-8',
         data: JSON.stringify(params),
         success: function(res){
+          if (params.pageNum === 1) {
+            _this.listState.list = []
+          }
           if (res.error_code == 0) {
             if (res.data && res.data.res && $.isArray(res.data.res)) {
               try {
                 res.data.res.forEach(function (item) {
+                    item.isCB = {
+                      id: '',
+                      value: 0
+                    }
                     item.visited = visitedPath.pathVisited(
                         new VisitedPathItem(
                             '/article/content/*.html',
@@ -278,6 +293,9 @@ var vNode = {
                 } else {
                   _this.listState.list = _this.listState.list.concat(res.data.res)
                 }
+                if (!_this.biEnv) {
+                  _this.getCBProject(res.data.res)
+                }
                 _this.listState.loading = false
                 if(!res.data.haveNextPage){
                   _this.listState.loading = true
@@ -305,6 +323,65 @@ var vNode = {
         }
       })
     },
+    getCBProject: function(arr) {
+      let idArr = arr.map(item => item._id)
+      if (idArr.length > 0) {
+        idArr = idArr.join(',')
+      } else {
+        idArr = ''
+      }
+      const params = {
+        ids: idArr
+      }
+      $.ajax({
+        url: '/jyapi/jybx/core/participate/show',
+        type: "POST",
+        contentType: 'application/json;charset=utf-8',
+        data:JSON.stringify(params),
+        success: function(res){
+          if(res.error_code == 0) {
+            if(res.data) {
+              arr.forEach(v => {
+                res.data.forEach(m => {
+                  if (v._id === m.id) {
+                    Object.assign(v.isCB, m)
+                  }
+                })
+              })
+            }
+          }
+        },
+        error: function(){
+          _this.$toast(res.error_msg)
+        }
+      })
+    },
+    // 参标
+    setCanBiaoStatus: function(item) {
+      if (item.isCB && item.isCB.value) {
+        this.$toast('如需终止参标,请在详情页进行操作。')
+        return
+      }
+      var _this = this
+      var params = { bidIds: item._id }
+      $.ajax({
+          url: '/jyapi/jybx/core/participate/in/info',
+          type: 'POST',
+          contentType: 'application/json',
+          data: JSON.stringify(params),
+          success: function (res) {
+              if (res.error_code === 0 && res.data) {
+                  _this.$toast('已参标,请前往我的参标项目列表查看。')
+                  _this.$set(item, 'isCB', {
+                      id: item._id,
+                      value: true
+                  })
+              } else {
+                _this.$toast(res.error_msg)
+              }
+          }
+      })
+    },
     // 取消收藏
     collecClick: function(e,id) {
       e.stopPropagation()
@@ -424,7 +501,6 @@ var vNode = {
     },
     // 取消按钮事件
     cancel: function(data) {
-      console.log(data)
       if(data.name == 'dateItem'){
         this.limitlist.selectTime = ''
         this.tagText.timeText = '收藏时间'
@@ -454,6 +530,7 @@ var vNode = {
     },
     // 刷新列表
     reLoadList: function(isScreen) {
+      console.log(isScreen)
       this.getList(isScreen)
     },
     // 关闭菜单
@@ -471,7 +548,6 @@ var vNode = {
         url: '/publicapply/bidcoll/getLabel',
         type: "POST",
         success: function(res){
-          console.log(res)
           if(res.error_code == 0 && res.data) {
             res.data.reverse().forEach(function(item, index){
               item.type = false

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

@@ -128,6 +128,7 @@ var vNode = {
     }
   },
   mounted() {
+    utils.iosBackRefresh()
     setTimeout(() => {
       $(this.$refs.jList).scrollTop(this.listState.scrollTop)
     }, 300)
@@ -141,15 +142,25 @@ var vNode = {
           $data = JSON.parse($data)
           var listState = $data["listState"];
           var list = listState["list"];
+          let actionCBInfo = sessionStorage.getItem('actionCBInfo')
+          if(actionCBInfo) {
+            actionCBInfo = JSON.parse(actionCBInfo)
+          }
           for (var i=0;i<list.length;i++){
-        	if (sessionStorage.getItem('listCollSessionId')&&sessionStorage.getItem('listCollSessionId')==list[i]["_id"]){
-				if (sessionStorage.getItem('listCollSessionBool')=="0"){
-					listState["list"].splice(i,1);
-				}
-   				sessionStorage.removeItem('listCollSessionId')
-   				sessionStorage.removeItem('listCollSessionBool')
-		    }
-	      }
+        	  if (sessionStorage.getItem('listCollSessionId')&&sessionStorage.getItem('listCollSessionId')==list[i]["_id"]){
+              if (sessionStorage.getItem('listCollSessionBool')=="0"){
+                listState["list"].splice(i,1);
+              }
+              sessionStorage.removeItem('listCollSessionId')
+              sessionStorage.removeItem('listCollSessionBool')
+            }
+            if (actionCBInfo) {
+              if (actionCBInfo.id == list[i]._id) {
+                list[i].isCB.value = actionCBInfo.value
+              }
+              sessionStorage.removeItem('actionCBInfo')
+            }
+          }
           for (var key in $data) {
               if (excludeKey.indexOf(key) !== -1) {
                   continue
@@ -239,6 +250,10 @@ var vNode = {
             if (res.data && res.data.res && $.isArray(res.data.res)) {
               try {
                 res.data.res.forEach(function (item) {
+                    item.isCB = {
+                      id: '',
+                      value: 0
+                    }
                     item.visited = visitedPath.pathVisited(
                         new VisitedPathItem(
                             '/article/content/*.html',
@@ -280,6 +295,9 @@ var vNode = {
                 } else {
                   _this.listState.list = _this.listState.list.concat(res.data.res)
                 }
+                if (!_this.biEnv) {
+                  _this.getCBProject(res.data.res)
+                }
                 _this.listState.loading = false
                 if(!res.data.haveNextPage){
                   _this.listState.loading = true
@@ -307,6 +325,65 @@ var vNode = {
         }
       })
     },
+    getCBProject: function(arr) {
+      let idArr = arr.map(item => item._id)
+      if (idArr.length > 0) {
+        idArr = idArr.join(',')
+      } else {
+        idArr = ''
+      }
+      const params = {
+        ids: idArr
+      }
+      $.ajax({
+        url: '/jyapi/jybx/core/participate/show',
+        type: "POST",
+        contentType: 'application/json;charset=utf-8',
+        data:JSON.stringify(params),
+        success: function(res){
+          if(res.error_code == 0) {
+            if(res.data) {
+              arr.forEach(v => {
+                res.data.forEach(m => {
+                  if (v._id === m.id) {
+                    Object.assign(v.isCB, m)
+                  }
+                })
+              })
+            }
+          }
+        },
+        error: function(){
+          _this.$toast(res.error_msg)
+        }
+      })
+    },
+    // 参标
+    setCanBiaoStatus: function(item) {
+      if (item.isCB && item.isCB.value) {
+        this.$toast('如需终止参标,请在详情页进行操作。')
+        return
+      }
+      var _this = this
+      var params = { bidIds: item._id }
+      $.ajax({
+          url: '/jyapi/jybx/core/participate/in/info',
+          type: 'POST',
+          contentType: 'application/json',
+          data: JSON.stringify(params),
+          success: function (res) {
+              if (res.error_code === 0 && res.data) {
+                  _this.$toast('已参标,请前往我的参标项目列表查看。')
+                  _this.$set(item, 'isCB', {
+                      id: item._id,
+                      value: true
+                  })
+              } else {
+                _this.$toast(res.error_msg)
+              }
+          }
+      })
+    },
     // 取消收藏
     collecClick: function(e,id) {
       e.stopPropagation()

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

@@ -44,7 +44,7 @@
       window.clab_tracker = tracker
     }
     // 初始化JTrack
-    var sdkVersion = 117
+    var sdkVersion = 120
     if (window.goTemplateData && window.goTemplateData.version) {
       sdkVersion = window.goTemplateData.version
     }

Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track-core.amd.min.js


Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track-core.es.min.js


Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track-core.min.js


Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track.amd.min.js


Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track.es.min.js


Plik diff jest za duży
+ 0 - 0
src/web/staticres/common-module/track/j-track.min.js


BIN
src/web/staticres/commonFunctions/participate-ent.png


BIN
src/web/staticres/commonFunctions/participate-person.png


+ 18 - 4
src/web/staticres/css/dev2/biddingSearch.css

@@ -1610,13 +1610,16 @@ position: absolute;
   background: #fff;
   border: 1px solid #2CB7CA;
 }
-.liLuceneList .bid-list-tags .icon-collect{
+.liLuceneList .bid-list-tags .icon-collect,.liLuceneList .bid-list-tags .icon-canbiao{
   position: relative;
   width: 54px;
   background-size: 20px 20px;
   background-position: left center;
 }
-.liLuceneList .bid-list-tags .icon-collect::after{
+.liLuceneList .bid-list-tags .icon-canbiao{
+    width: 60px;
+}
+.liLuceneList .bid-list-tags .icon-collect::after, .liLuceneList .bid-list-tags .icon-canbiao::after{
   position: absolute;
   content: '收藏';
   left: 24px;
@@ -1625,10 +1628,16 @@ position: absolute;
   line-height: 22px;
   color: #1D1D1D;
 }
+.liLuceneList .bid-list-tags .icon-canbiao::after {
+    content: '参标';
+}
 .liLuceneList .bid-list-tags .icon-collect.checked{
   width: 68px;
 }
-.liLuceneList .bid-list-tags .icon-collect.checked::after{
+.liLuceneList .bid-list-tags .icon-canbiao.checked{
+    width: 88px;
+}
+.liLuceneList .bid-list-tags .icon-collect.checked::after, .liLuceneList .bid-list-tags .icon-canbiao.checked::after{
   position: absolute;
   content: '已收藏';
   left: 24px;
@@ -1637,6 +1646,11 @@ position: absolute;
   line-height: 22px;
   color: #1D1D1D;
 }
+
+.liLuceneList .bid-list-tags .icon-canbiao.checked::after{
+    content: '终止参标';
+    width: 88px !important;
+}
 .liLuceneList  .luce-field{
   margin-top: 16px;
 }
@@ -1704,4 +1718,4 @@ body{
 }
 #searchInner .searchControl .searchTender{
   border: 0;
-}
+}

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

@@ -216,7 +216,7 @@
   background: transparent url(/images/collected.png) 10px center no-repeat;
   background-size: 20px;
 }
-.icon-collect{
+.icon-collect, .icon-canbiao{
   display: inline-block;
   width: 20px;
   height: 20px;
@@ -230,6 +230,15 @@
   background: transparent url(/images/collected.png) center no-repeat;
   background-size: contain;
 }
+
+.icon-canbiao {
+  background-image: url(/images/canbiao.png);
+}
+
+.icon-canbiao.checked {
+  background-image: url(/images/canbiao-active.png);
+}
+
 .fold{
   width: 126px;
   height: 28px;

+ 23 - 0
src/web/staticres/css/wxcontentinfo.css

@@ -502,3 +502,26 @@ a.menu_list {
     height: 12px;
     background: #E5E5E5;
 }
+
+.toolbar .refer_stand{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: .8rem;
+}
+.toolbar .refer_stand .r-s-left{
+  font-size: 14px;
+  line-height: 20px;
+  color: #5F5E64;
+}
+.toolbar .refer_stand .r-s-left, .toolbar .refer_stand .r-s-right{
+  display: flex;
+  align-items: center;
+}
+
+.toolbar .refer_stand .r-s-left img, .toolbar .refer_stand .r-s-right img{
+  margin-right: 4px;
+  width: 24px;
+  height: 24px;
+}
+

+ 12 - 0
src/web/staticres/frontRouter/pc/collection/css/index-pc.css

@@ -39,6 +39,18 @@
     background-repeat: no-repeat;
     background-size: contain;
 }
+.icon-canbiao {
+    background:transparent url(/images/canbiao.png) no-repeat center;
+    background-size: contain;
+}
+.i-canbiao{
+    margin-right:0px !important;
+}
+
+.icon-canbiao-active {
+    background:transparent url(/images/canbiao-active.png) no-repeat center;
+    background-size: contain;
+}
 .icon-hot-vip {
     display: inline-block;
     width: 42px;

+ 70 - 0
src/web/staticres/frontRouter/pc/collection/js/index-pc.js

@@ -117,6 +117,12 @@ var vm = new Vue({
                 })
             }
         })
+       var _this = this
+      document.addEventListener('visibilitychange', function() {
+        if (document.visibilityState === 'visible') {
+          _this.getBidIsJoin()
+        }
+      })
     },
     methods: {
         showToast: function (content, timer, callback) {
@@ -207,6 +213,7 @@ var vm = new Vue({
                                 } else {
                                   _this.currentPageAllChecked = true
                                 }
+                                item.joinBid = undefined
                                 item.star = true
                                 item.index = _this.calcListIndex(index)
                                 try {
@@ -223,6 +230,8 @@ var vm = new Vue({
                               _this.tableShowData = list || []
                               _this.tableFirst20 = list.slice(0, 20)
                             }
+                          // 获取参标数据
+                          _this.getBidIsJoin()
                         }
                     } else {
                         this.listState.total = 0
@@ -750,6 +759,67 @@ var vm = new Vue({
                     _this.bi.loading = false
                 }
             })
+        },
+       // 获取参标数据
+       getBidIsJoin() {
+          var _this = this
+          var paramsData = {
+           ids: _this.listState.list.map(function(item){
+             return item._id
+           }).join()
+         }
+          $.ajax({
+           type: 'post',
+           contentType: "application/json",
+           url: '/jyapi/jybx/core/participate/show?t=' + Date.now(),
+           data: JSON.stringify(paramsData),
+           dataType: 'json',
+           success: function (r) {
+             if (r.data && r.error_code == 0) {
+               var data = r.data || []
+               data.forEach(function(item) {
+                 _this.listState.list.forEach(function(temp) {
+                   if (item.id == temp._id) {
+                     temp.joinBid = Boolean(item.value)
+                   }
+                 })
+               })
+             }
+           }
+         })
+       },
+      /******参标********/
+      /**
+       * 参标、终止参标
+       * @param action in:参标;out:终止参标;transfer:划转
+       * @param bidIds 招标信息id(加密) 必传
+       * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传(bidIds和projectIds必传一个)
+       * @param callback
+       */
+      joinBidAction (item) {
+        if(item.joinBid) {
+          return this.showToast('如需终止参标,需要在详情页进行操作。')
         }
+        var params = {
+          bidIds: item._id
+        }
+        var _this = this
+        $.ajax({
+          type:'post',
+          contentType: "application/json",
+          url:'/jyapi/jybx/core/participate/in/info',
+          data: JSON.stringify(params),
+          dataType: 'json',
+          success: function(r){
+            if (r && r.data && r.error_code == 0) {
+              item.joinBid = true
+              _this.showToast('已参标,请前往我的参标项目列表查看。')
+            } else if(r.error_code == -1) {
+              var msg = r.error_msg || '参标错误,请稍后重试'
+              _this.showToast(msg)
+            }
+          }
+        })
+      },
     }
 })

BIN
src/web/staticres/images/canbiao-active.png


BIN
src/web/staticres/images/canbiao-red.png


BIN
src/web/staticres/images/canbiao.png


BIN
src/web/staticres/images/circle-share.png


BIN
src/web/staticres/images/person.png


BIN
src/web/staticres/images/person_cb.png


BIN
src/web/staticres/images/weicanbiao.png


BIN
src/web/staticres/images/wxkeyset/right.png


+ 97 - 1
src/web/staticres/js/superSearch.js

@@ -14,7 +14,6 @@ var listModel = localStorage.getItem('login-clear-bidsearch-list-model') || 'S'
 var buyerLink = '/swordfish/page_big_pc/free/loading/buyer/'
 // 企业画像中转页
 var winnerLink = '/swordfish/page_big_pc/free/loading/ent/'
-
 $(function() {
 	priceTime();
 	$(".Price-content").find("span:first-child").click(function(){
@@ -370,6 +369,10 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
                   listHtml+='<span class="tags-item tags-file">'+'有附件'+'</span>'
                 }
                 listHtml+='</div>'
+                listHtml+='<div>'
+                // 是否参标(2022/05/12)
+                 listHtml += '<i class="icon-canbiao" dataid="'+datas[i]._id+'" style="display:none"></i>'
+
                 // // 是否收藏
                 listHtml += '<i class="icon-collect" dataid="'+datas[i]._id+'"></i>'
                 // 是否山川应用嵌入环境 添加操作按钮
@@ -377,6 +380,7 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
                 if (inInjectBI) {
                   listHtml += '<button class="bi-report-inject-button" data-id="'+datas[i]._id+'">添加</button>'
                 }
+              listHtml+='</div>'
             listHtml += '</div>'
             // 详细列表内容
             if (listModel === 'D') {
@@ -616,8 +620,13 @@ function appendDatas(datas,flag,isNew,onlyUpdateTable){
 	$(".tabContainer").css("min-height","");
 	submitflag=true;
   // backTopAdjust();
+
   // 生成dom之后再查标讯有无收藏
   getBidIsColl()
+
+  // 生成dom之后再查标讯有无参标
+  getBidIsJoin()
+
   checkVisited()
   // 生成dom之后再查询是否勾选
   getCheckList()
@@ -1210,6 +1219,11 @@ $(function () {
 	setTimeout(function(){
 		showSearchTipForTimeRange(false);
 	},500)
+  document.addEventListener('visibilitychange', function() {
+    if (document.visibilityState === 'visible') {
+      getBidIsJoin()
+    }
+  })
 })
 
 function autoModelFn (r) {
@@ -1565,6 +1579,88 @@ function collectClick() {
   })
 }
 
+/*******参标方法start**********/
+/*
+  招标信息是否参标藏接口ajax
+  bids: String, // 招标信息id(多个用,号拼接) 必填
+*/
+function getBidIsJoin () {
+  joinBidsClick()
+  var bids = ""
+  var dataId = ""
+  // 区分标题搜索和全文搜索收藏
+  // var allSearch = selectType.indexOf('content') > -1 && $("#zbSeatchT [name='keywords']").val() !== ""
+  // // console.log('当前是否显示的是全文',allSearch)
+  // var $dom = allSearch ? $('.all-text-checkbox[name="bid-list"]') : $('.title-text-checkbox[name="bid-list"]')
+  var $dom = $('.title-text-checkbox[name="bid-list"]')
+  $dom.each(function () {
+    if ($(this).attr('dataid')) {
+      dataId = $(this).attr("dataid");
+      if (bids != "") {
+        bids += ",";
+      }
+      bids += dataId;
+    }
+  })
+  var paramsData = {
+    ids: bids
+  }
+  $.ajax({
+    type: 'post',
+    contentType: "application/json",
+    url: '/jyapi/jybx/core/participate/show?t=' + Date.now(),
+    data: JSON.stringify(paramsData),
+    dataType: 'json',
+    success: function (r) {
+      if (r.data) {
+        var data = r.data
+        $('.icon-canbiao').removeClass('checked')
+        data.forEach(function (item, index) {
+          $('.icon-canbiao[dataid="' + item.id + '"]').show()
+          // $('.icon-canbiao[dataid="' + item + '"]').css("display","inline-block");
+          if(item.value) {
+            $('.icon-canbiao[dataid="' + item.id + '"]').addClass('checked')
+          }
+        })
+      }
+    }
+  })
+}
+
+// 参标点击事件
+function joinBidsClick() {
+  // console.log(vipState, '是否是超级订阅用户')
+  // 单个参标点击事件
+  $('.icon-canbiao').unbind('click').on('click',function(e) {
+    // 登录判断
+    if (!loginflag) {
+      openLoginDig()
+      return
+    }
+    e.stopPropagation()
+    var $that = $(this)
+    var checked = $(this).hasClass('checked')
+    var checkedId =  $(this).attr('dataid')
+    if (checked) {
+      toastFn('如需终止参标,需要在详情页进行操作。', 800)
+    } else {
+      joinBidAction('in', checkedId, function(res) {
+        if (res.data && res.error_code == 0) {
+          toastFn('已参标,请前往我的参标项目列表查看', 1500)
+          $that.addClass('checked')
+        } else if(res.error_code == -1){
+          var msg = res.error_msg || '操作错误,请稍后重试'
+          toastFn(msg, 1500)
+        }
+      })
+    }
+  })
+}
+
+
+/********参标方法end********/
+
+
 /**
  * @date 2022/12/15 山川环境嵌入搜索
  * 山川应用嵌入环境 特殊处理

+ 6 - 13
src/web/staticres/pccss/pc-detail.css

@@ -229,7 +229,7 @@ a {
 }
 .com-collect {
   float: right;
-  margin-left: 18px;
+  margin-left: 12px;
   position: relative;
   font-size: 14px;
   cursor: pointer;
@@ -237,11 +237,11 @@ a {
 .icon-title-img {
   width: 20px;
   height: 20px;
-  margin-right: 4px;
+  margin-right: 4px !important;
 }
 .j-content .com-wxshare,
 .j-content .com-guanzhu,.j-content .com-icon {
-  margin-left: 18px !important;
+  margin-left: 12px !important;
 }
 
 .sub-info-container {
@@ -545,20 +545,13 @@ a{
   font-size: 14px;
   margin-left: 22px;
 }
-.com-collect{
-  float: right;
-  margin-left: 18px;
-  position: relative;
-  font-size: 14px;
-  cursor: pointer;
-}
 .icon-title-img{
   width: 20px;
   height: 20px;
-  margin-right: 4px;
+  margin-right: 4px !important;
 }
 .j-content .com-wxshare, .j-content .com-guanzhu,.j-content .com-icon{
-  margin-left: 18px!important;
+  margin-left: 12px!important;
 }
 /* 自定义标签弹框 */
 .tags-box{
@@ -1020,4 +1013,4 @@ a{
 }
 .third-party-verify-attention {
   margin: 10px 0;
-}
+}

+ 161 - 2
src/web/templates/big-member/wx/page_client_follow_detail.html

@@ -19,7 +19,10 @@
     <div id="jyKeepEntComponent">
         <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
     </div>
-    <div class="j-main prodetail" id="v-pro" v-cloak>
+    <div class="j-main prodetail" id="v-pro" v-cloak @click="doClosePopover">
+        <div class="currentTimeDiv" style="display: none;">
+          投标截止倒计时:${cbInfo.setTime}
+        </div>
         <div class="prodetailTop">
             <div class="prodetail_title">
                 ${this.$data.prolist.projectname}
@@ -70,6 +73,21 @@
                 <span class="j-icon icon-bells"></span>
             </template>
         </div>
+        <div class="refer_stand" v-if="cbInfo.canBiaoInfo.showStopParticipate || cbInfo.canBiaoInfo.showParticipate">
+          <div class="refer_name">
+            <div class="r-s-left" v-if="cbInfo.canBiaoInfo.userName">
+              <!-- <img src="{{Msg "seo" "cdn"}}/images/person_cb.png?v={{Msg "seo" "version"}}" alt=""> -->
+              <span>参标人:</span>
+              <span class="cb_name">${cbInfo.canBiaoInfo.userName}</span>
+            </div>
+          </div>
+          <div class="r-s-right" @click="setCanBiao($event)">
+            <img class="weicanbiao" v-if="cbInfo.canBiaoInfo.showParticipate" src="{{Msg "seo" "cdn"}}/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showParticipate" class="isCB">参标</span>
+            <img style="margin-left: .16rem;" class="canbiao" v-if="cbInfo.canBiaoInfo.showStopParticipate" src="{{Msg "seo" "cdn"}}/images/canbiao-red.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showStopParticipate" class="isCB">终止参标</span>
+          </div>
+        </div>
         <van-popup class="popupTime j-container" v-model="remindershow" round position="bottom">
             <div class="popupTime-header">
                 <div class="header-title">开标提醒</div>
@@ -190,7 +208,148 @@
                 </div>
             </div>
         </div>
-
+        <div class="bid_status prosummary" v-if="cbInfo.canBiaoInfo.showUpdate">
+          <div class="summary_title">
+            <h2 class="title_h2">投标状态更新</h2>
+            <span @click="setBidInfo()" v-show="editBtnStatus.show" class="actionBtn">${editBtnStatus.status == 1 ? '编辑' : '取消' }</span>
+          </div>
+          <div class="view-result-tip">
+            <span>想知道谁最有可能参标吗?</span>
+            <span @click="location.href='/big/wx/page/analysis_search'" style="text-decoration: underline;">点这里查看分析结果</span>
+          </div>
+          <van-form :readonly="editBtnStatus.status == 1" @submit="onSubmit">
+            <van-field
+              @click="bidTypePopup = (editBtnStatus.status != 1)"
+              required
+              readonly
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidType"
+              name="bidType"
+              label="投标类型"
+              placeholder="请选择投标类型"
+            ></van-field>
+            <van-field
+              @click="bidProject = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidStage"
+              name="bidStage"
+              readonly
+              :rows="rownum"
+              autosize
+              type="textarea"
+              label="投标项目阶段"
+              placeholder="请选择投标项目阶段"
+            ></van-field>
+            <van-field
+              @click="isBidPopup = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              placeholder="请选择是否中标"
+              readonly
+              v-model="bidParams.isWin"
+              name="isWin"
+              :label="showChannel? '渠道是否中标':'是否中标'"
+            ></van-field>
+            <div class="channel_module" v-if="showChannel">
+              <div class="acc-input-group">
+                <van-field type="textarea" autosize :rows="rownum" @input="doQueryAccEntName" placeholder="请输入渠道名称" v-model.trim="bidParams.channelName" name="channelName" label="渠道名称"></van-field>
+                <div class="popover-acc-input-group" v-show="showAccEntList">
+                  <div class="popover-acc-input-group--item" v-for="(item, index) in accEntList" v-bind:key="index" @click="doSelectEnt(item)">${item.value}</div>
+                </div>
+            </div>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入联系人姓名" v-model.trim="bidParams.channelPerson" name="channelPerson" label="联系人"></van-field>
+              <van-field maxlength="11" type="tel" placeholder="请输入联系电话" v-model.trim="bidParams.channelPhone" name="channelPhone" label="联系电话"></van-field>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入中标单位名称" v-model.trim="bidParams.winner" name="winner" label="中标单位"></van-field>
+            </div>
+            <van-button :disabled="showDisbaled" v-if="editBtnStatus.status != 1" class="submitBtn" round type="primary" native-type="submit">保存</van-button>
+          </van-form>
+        </div>
+        <div class="view_history" @click="getActionHistory()" v-if="cbInfo.isShowRefer">
+          <van-cell title="查看操作记录" is-link></van-cell>
+        </div>
+        <van-popup class="popupTime j-container" v-model="bidTypePopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">选择投标类型</div>
+              <div class="header-close" @click="bidTypePopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidType(1)">
+                <span>直接投标</span>
+                <img v-show="copyBidParams.bidType == 1" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidType(2)">
+                <span>渠道投标</span>
+                <img v-show="copyBidParams.bidType == 2" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="isBidPopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">
+                <span>是否中标</span>
+                <span @click="cancelSelect()" class="cancel_select">取消选择</span>
+              </div>
+              <div class="header-close" @click="isBidPopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidStatus(1)">
+                <span>是</span>
+                <img v-if="copyBidParams.isWin === 1" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidStatus(2)">
+                <span>否</span>
+                <img v-if="copyBidParams.isWin === 2" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="bidProject" round position="bottom">
+        <div class="popupTime-header">
+            <div class="header-title">投标项目阶段</div>
+            <div class="header-close" @click="BidProjectPopupClose()">
+                <span class="j-icon base-icon icon-delete-gray"></span>
+            </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <van-cell-group>
+            <van-cell
+              :class="{'cell_checked': item.checked}"
+              v-for="item in bidStageOptions"
+              :key="item.value"
+              :title="item.label"
+              :label-align="labelAlign"
+              icon-size="16px"
+              @click="onCellClick(item)"
+            >
+              <template #right-icon>
+                <van-checkbox v-model="item.checked" :name="item.value"/>
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+        <div class="j-footer">
+            <div class="j-button-group">
+              <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
+                <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
+            </div>
+        </div>
+    </van-popup>
         <van-dialog v-model:show="isExportDialogShow" title="发送邮箱地址" :show-confirm-button="false">
             <p class="p1">项目报告文件将以邮件的形式发送至您的邮箱</p>
             <div class="v-inpt isActive">

+ 9 - 0
src/web/templates/big-member/wx/page_client_follow_list.html

@@ -64,6 +64,15 @@
                                 <div class="squot" v-if="item.i_apppushunread!=0&&item.i_apppushunread!=null"></div>
                             </div>
                         </div>
+                        <div class="article-item-ft">
+                            <div class="placement"></div>
+                            <span class="ft-right-actions">
+                                <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                                    <span class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                                    <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                                </div>
+                            </span>
+                        </div>
                     </div>
                 </van-list>
             </div>

+ 673 - 2
src/web/templates/big-member/wx/page_pro_follow_detail.html

@@ -28,7 +28,10 @@
     <div id="jyKeepEntComponent">
         <keep-ent-component ref="vKeepComponent" @on-save-tag="onSaveTag" :bid="nowOpenBid" :first="false"></keep-ent-component>
     </div>
-    <div class="j-main prodetail" id="v-pro" v-cloak>
+    <div class="j-main prodetail" id="v-pro" v-cloak @click="doClosePopover">
+        <div class="currentTimeDiv" style="display: none;">
+          投标截止倒计时:${cbInfo.setTime}
+        </div>
         <div class="prodetailTop">
             <div class="prodetail_title">
                 ${this.$data.prolist.projectname}
@@ -76,6 +79,21 @@
                 <span class="j-icon icon-bells"></span>
             </template>
         </div>
+        <div class="refer_stand" v-if="cbInfo.canBiaoInfo.showStopParticipate || cbInfo.canBiaoInfo.showParticipate || cbInfo.canBiaoInfo.userName">
+          <div class="refer_name">
+            <div class="r-s-left" v-if="cbInfo.canBiaoInfo.userName">
+              <!-- <img src="{{Msg "seo" "cdn"}}/images/person_cb.png?v={{Msg "seo" "version"}}" alt=""> -->
+              <span>参标人:</span>
+              <span class="cb_name">${cbInfo.canBiaoInfo.userName}</span>
+            </div>
+          </div>
+          <div class="r-s-right" @click="setCanBiao($event)">
+            <img class="weicanbiao" v-if="cbInfo.canBiaoInfo.showParticipate" src="{{Msg "seo" "cdn"}}/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showParticipate" class="isCB weicanbiao">参标</span>
+            <img style="margin-left: .16rem;" class="canbiao" v-if="cbInfo.canBiaoInfo.showStopParticipate" src="{{Msg "seo" "cdn"}}/images/canbiao-red.png?v={{Msg "seo" "version"}}" alt="">
+            <span v-if="cbInfo.canBiaoInfo.showStopParticipate" class="isCB canbiao">终止参标</span>
+          </div>
+        </div>
         <van-popup class="popupTime j-container" v-model="remindershow" round position="bottom">
             <div class="popupTime-header">
                 <div class="header-title">开标提醒</div>
@@ -195,7 +213,148 @@
                 </div>
             </div>
         </div>
-
+        <div class="bid_status prosummary" v-if="cbInfo.canBiaoInfo.showUpdate">
+          <div class="summary_title">
+            <h2 class="title_h2">投标状态更新</h2>
+            <span @click="setBidInfo()" v-if="editBtnStatus.show" class="actionBtn">${editBtnStatus.status == 1 ? '编辑' : '取消' }</span>
+          </div>
+          <div class="view-result-tip">
+            <span>想知道谁最有可能参标吗?</span>
+            <span @click="location.href='/big/wx/page/analysis_search'" style="text-decoration: underline;">点这里查看分析结果</span>
+          </div>
+          <van-form :readonly="editBtnStatus.status == 1" @submit="onSubmit">
+            <van-field
+              @click="bidTypePopup = (editBtnStatus.status != 1)"
+              required
+              readonly
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidType"
+              name="bidType"
+              label="投标类型"
+              placeholder="请选择投标类型"
+            ></van-field>
+            <van-field
+              @click="bidProject = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              v-model="bidParams.bidStage"
+              name="bidStage"
+              readonly
+              :rows="rownum"
+              autosize
+              type="textarea"
+              label="投标项目阶段"
+              placeholder="请选择投标项目阶段"
+            ></van-field>
+            <van-field
+              @click="isBidPopup = (editBtnStatus.status != 1)"
+              :is-link="editBtnStatus.status != 1"
+              placeholder="请选择是否中标"
+              readonly
+              v-model="bidParams.isWin"
+              name="isWin"
+              :label="showChannel? '渠道是否中标':'是否中标'"
+            ></van-field>
+            <div class="channel_module" v-if="showChannel">
+              <div class="acc-input-group">
+                <van-field type="textarea" autosize :rows="rownum" @input="doQueryAccEntName" placeholder="请输入渠道名称" v-model.trim="bidParams.channelName" name="channelName" label="渠道名称"></van-field>
+                <div class="popover-acc-input-group" v-show="showAccEntList">
+                  <div class="popover-acc-input-group--item" v-for="(item, index) in accEntList" v-bind:key="index" @click="doSelectEnt(item)">${item.value}</div>
+                </div>
+              </div>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入联系人姓名" v-model.trim="bidParams.channelPerson" name="channelPerson" label="联系人"></van-field>
+              <van-field maxlength="11" type="tel" placeholder="请输入联系电话" v-model.trim="bidParams.channelPhone" name="channelPhone" label="联系电话"></van-field>
+              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入中标单位名称" v-model.trim="bidParams.winner" name="winner" label="中标单位"></van-field>
+            </div>
+            <van-button :disabled="showDisbaled" v-if="editBtnStatus.status != 1" class="submitBtn" round type="primary" native-type="submit">保存</van-button>
+          </van-form>
+        </div>
+        <div class="view_history" @click="getActionHistory()" v-if="cbInfo.isShowRefer">
+          <van-cell title="查看操作记录" is-link></van-cell>
+        </div>
+        <van-popup class="popupTime j-container" v-model="bidTypePopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">选择投标类型</div>
+              <div class="header-close" @click="bidTypePopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidType(1)">
+                <span>直接投标</span>
+                <img v-show="copyBidParams.bidType == 1" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidType(2)">
+                <span>渠道投标</span>
+                <img v-show="copyBidParams.bidType == 2" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="isBidPopup" round position="bottom">
+          <div class="popupTime-header">
+              <div class="header-title">
+                <span>是否中标</span>
+                <span @click="cancelSelect()" class="cancel_select">取消选择</span>
+              </div>
+              <div class="header-close" @click="isBidPopupClose()">
+                  <span class="j-icon base-icon icon-delete-gray"></span>
+              </div>
+          </div>
+          <div class="popupTime-main j-main">
+            <ul class="bid_ul">
+              <li class="bid_select" @click="selectBidStatus(1)">
+                <span>是</span>
+                <img v-if="copyBidParams.isWin === 1" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+              <li class="bid_select" @click="selectBidStatus(2)">
+                <span>否</span>
+                <img v-if="copyBidParams.isWin === 2" src="{{Msg "seo" "cdn"}}/images/wxkeyset/right.png?v={{Msg "seo" "version"}}" alt="" />
+              </li>
+            </ul>
+          </div>
+          <div class="j-footer">
+              <div class="j-button-group">
+                  <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
+              </div>
+          </div>
+      </van-popup>
+      <van-popup class="popupTime j-container" v-model="bidProject" round position="bottom">
+        <div class="popupTime-header">
+            <div class="header-title">投标项目阶段</div>
+            <div class="header-close" @click="BidProjectPopupClose()">
+                <span class="j-icon base-icon icon-delete-gray"></span>
+            </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <van-cell-group>
+            <van-cell
+              :class="{'cell_checked': item.checked}"
+              v-for="item in bidStageOptions"
+              :key="item.value"
+              :title="item.label"
+              :label-align="labelAlign"
+              icon-size="16px"
+              @click="onCellClick(item)"
+            >
+              <template #right-icon>
+                <van-checkbox v-model="item.checked" :name="item.value"/>
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+        <div class="j-footer">
+            <div class="j-button-group">
+              <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
+                <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
+            </div>
+        </div>
+    </van-popup>
         <van-dialog v-model:show="isExportDialogShow" title="发送邮箱地址" :show-confirm-button="false">
             <p class="p1">项目报告文件将以邮件的形式发送至您的邮箱</p>
             <div class="v-inpt isActive">
@@ -338,6 +497,58 @@
             isRequestIng:false,
             isExportDialogShow: false,
             cid: '', // 取消认领id
+            cbInfo: {
+              isShowRefer: false,
+              canBiaoInfo: {
+                showStopParticipate: false
+              },
+              setTime: '',
+              countdownTimer: null
+            },
+            bidTypePopup: false,
+            isBidPopup: false,
+            bidProject: false,
+            showBidType: true,
+            showChannel: false,
+            copyBidParams: {
+              bidType: '',
+              bidStage: '',
+              isWin: '',
+              channelName: '',
+              channelPerson: '',
+              channelPhone: '',
+              winner: '',
+              sid: ''
+            },
+            bidParams: {
+              bidType: '',
+              bidStage: '',
+              isWin: '',
+              channelName: '',
+              channelPerson: '',
+              channelPhone: '',
+              winner: '',
+              sid: ''
+            },
+            isWinBid: false,
+            checkedList: [],
+            formSchemaOptions: {
+              bidStage: [],
+              'bidStage-1': [],
+              checkedListMap: {
+                1: [],
+                2: []
+              }
+            },
+            showAccEntList: false,
+            accEntList: [],
+            labelAlign: 'left',
+
+            editBtnStatus: {
+              show: false,
+              status: 0
+            },
+            rownum: 1,
             proParams: {}
         },
         created() {
@@ -359,7 +570,11 @@
                 this.fid = JSON.parse(sessionStorage.getItem('bigvip-fid')).fid
                 this.sid = JSON.parse(sessionStorage.getItem('bigvip-fid')).sid
             }
+            this.getCanBiaoInfo()
             this.getProDetail()
+            this.getBidContent()
+            this.getOptionsInfo()
+            this.getHaveActionHistory()
         },
         mounted () {
           this.getShareParams()
@@ -390,9 +605,465 @@
                 } else {
                     return false
                 }
+            },
+            bidStageOptions: function () {
+              const result = this.formSchemaOptions['bidStage' + (this.copyBidParams.bidType == 1 ? '-1' : '')].map(option => ({
+                checked: this.checkedList.includes(option),
+                value: option,
+                label: option
+              }))
+              return result
+            },
+            showDisbaled: function () {
+              return this.bidParams.bidType === ''
             }
         },
         methods: {
+          doClosePopover () {
+            this.showAccEntList = false
+          },
+          // 重置投标阶段变更
+          cancelBidStage () {
+            const resetList = (this.formSchemaOptions.checkedListMap[this.copyBidParams.bidType] || []).map(v => v)
+            this.checkedList = resetList
+          },
+          doQueryAccEntName (str) {
+            // TODO 需添加防抖
+            this.showAccEntList = false
+            this.fetchChannelNameList(str, list => {
+              this.showAccEntList = list.length > 0
+              this.accEntList = list
+            })
+          },
+          doSelectEnt (item) {
+            this.setParams(this.bidParams, item)
+            this.setParams(this.copyBidParams, item)
+            this.showAccEntList = false
+          },
+          setParams(params, item) {
+            const { value, company_phone, legal_person } = item || {};
+            params.channelName = value || ''
+            // params.channelPhone = company_phone || ''
+            // params.channelPerson = legal_person || ''
+          },
+
+          /**
+           * 获取模糊渠道名称列表
+           * @param str
+           * @param cb
+           */
+          fetchChannelNameList (str, cb) {
+            const query = str.trim()
+            if (query.length < 2) {
+              return cb([])
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/bigmember/search/ent/association',
+              data: {
+                name: query
+              },
+              success: function (res) {
+                if (res.error_code == 0) {
+                  if (res.data) {
+                    const result = (res.data.list || []).map(v => {
+                      return {
+                        ...v,
+                        value: v.name
+                      }
+                    })
+                    cb(result)
+                  }
+                }
+              },
+              error: function (error) {
+                cb([])
+              }
+            })
+          },
+          // 获取选项
+          getOptionsInfo () {
+            const _this = this
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/setUpInfo',
+              contentType: 'application/json',
+              data: JSON.stringify({
+                sid: _this.sid
+              }),
+              success: function (res) {
+                if (res.error_code === 0) {
+                  const data = res.data || {}
+                  if (data?.bidType) {
+                    _this.formSchemaOptions.bidStage = data.bidType.find(v => v.name === '渠道投标').content || []
+                    _this.formSchemaOptions['bidStage-1'] = data.bidType.find(v => v.name === '直接投标').content || []
+                  }
+                }
+              }
+            })
+          },
+          // 是否中标取消选择
+          cancelSelect () {
+            this.bidParams.isWin = ''
+            this.copyBidParams.isWin = ''
+            this.bidParams.winner = ''
+            this.copyBidParams.winner = ''
+            this.isBidPopupClose()
+          },
+          // 查看操作记录
+          getActionHistory: function () {
+            location.href = '/jy_mobile/project/operatingRecord?sid=' + this.sid
+          },
+          // 选择是否中标
+          selectBidStatus: function(data) {
+            this.copyBidParams.isWin = data
+          },
+          saveStatus: function (str) {
+            switch (str) {
+              case '0':
+                if(this.bidParams.bidType) {
+                  if (!((this.bidParams.bidType.indexOf('直接') !== -1 && parseInt(this.copyBidParams.bidType) === 1) || (this.bidParams.bidType.indexOf('渠道') !== -1 && parseInt(this.copyBidParams.bidType) === 2))) {
+                    this.bidParams = {
+                      bidType: this.copyBidParams.bidType,
+                      bidStage: '',
+                      isWin: '',
+                      channelName: '',
+                      channelPerson: '',
+                      channelPhone: '',
+                      winner: '',
+                      sid: ''
+                    }
+                    this.copyBidParams = {
+                      bidType: this.copyBidParams.bidType,
+                      bidStage: '',
+                      isWin: '',
+                      channelName: '',
+                      channelPerson: '',
+                      channelPhone: '',
+                      winner: '',
+                      sid: ''
+                    }
+                    this.checkedList = []
+                  }
+                }
+                break;
+              case '1':
+                if (this.checkedList.length > 0) {
+                  this.copyBidParams.bidStage = this.checkedList.join('、')
+                } else {
+                  this.copyBidParams.bidStage = ''
+                }
+                break
+              default:
+                break;
+            }
+            const { channelName, channelPhone, channelPerson, winner } = this.bidParams || {};
+            this.copyBidParams.channelName = channelName || ''
+            this.copyBidParams.channelPhone = channelPhone || ''
+            this.copyBidParams.channelPerson = channelPerson || ''
+            this.copyBidParams.winner = winner || ''
+
+            Object.assign(this.bidParams, this.copyBidParams)
+            if (this.bidParams.bidType == 1) {
+              this.bidParams.bidType = '直接投标'
+              this.showChannel = false
+            } else if (this.bidParams.bidType == 2) {
+              this.bidParams.bidType = '渠道投标'
+              this.showChannel = true
+            }
+            // 带出中标单位
+            if (this.bidParams.isWin == 1) {
+              this.bidParams.isWin = '是'
+              const sWin = this.prodetail.projectInfo?.s_winner || ''
+              if (sWin && !winner) {
+                this.bidParams.winner = sWin
+              }
+            } else if (this.bidParams.isWin == 2) {
+              this.bidParams.isWin = '否'
+              this.bidParams.winner = ''
+            } else {
+              this.bidParams.isWin = ''
+              this.bidParams.winner = ''
+            }
+            this.bidTypePopupClose()
+            this.BidProjectPopupClose()
+            this.isBidPopupClose()
+          },
+          // 选择投标类型
+          selectBidType: function(data) {
+            this.copyBidParams.bidType = data
+            //  checkedList 切换时清空
+            if (data != this.copyBidParams.bidType) {
+              this.checkedList = []
+              this.copyBidParams.isWin = 0
+            }
+          },
+          // 查询是否有操作记录
+          getHaveActionHistory: function () {
+            const _this = this
+            const params = {
+              pageSize: 1,
+              sid: this.sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/records',
+              contentType: 'application/json',
+              data: JSON.stringify(params),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  let list = res.data.list
+                  if(!list) {list = []}
+                  if (list.length > 0) {
+                    _this.cbInfo.isShowRefer = true
+                  } else {
+                    _this.cbInfo.isShowRefer = false
+                  }
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+          // 获取投标状态信息
+          getBidContent: function () {
+            const _this = this
+            const params = {
+              sid: this.sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/content',
+              contentType: 'application/json',
+              data: JSON.stringify(params),
+              success: function(res) {
+                if(res.error_code === 0 && res.data) {
+                  if (Object.keys(res.data).length > 0) {
+                    _this.editBtnStatus.show = true
+                    _this.editBtnStatus.status = 1
+                    const { bidStage, bidType, channelName, channelPerson, channelPhone, isWin, winner} = res.data
+                    let getParams = {
+                      bidType: '',
+                      bidStage: '',
+                      isWin: '',
+                      channelName: channelName,
+                      channelPerson: channelPerson,
+                      channelPhone: channelPhone,
+                      winner: winner
+                    }
+                    if (bidStage && bidStage.length > 0) {
+                      _this.checkedList = bidStage
+                      getParams.bidStage = bidStage.join('、')
+                    }
+                    if (isWin == 1) {
+                      getParams.isWin = '是'
+                    } else if(isWin == 2) {
+                      getParams.isWin = '否'
+                    } else {
+                      getParams.isWin = ''
+                    }
+                    if(bidType == 1) {
+                      getParams.bidType = '直接投标'
+                      _this.showChannel = false
+                      _this.formSchemaOptions.checkedListMap[1] = [].concat(bidStage || [])
+                    } else {
+                      getParams.bidType = '渠道投标'
+                      _this.showChannel = true
+                      _this.formSchemaOptions.checkedListMap[2] = [].concat(bidStage || [])
+                    }
+                    if (res.data) {
+                      Object.assign(_this.copyBidParams, res.data)
+                    }
+                    _this.bidParams = getParams
+                  }
+                }
+              }
+            })
+          },
+          onSubmit: function() {
+            // 在这里处理表单提交逻辑
+            const _this = this
+            this.copyBidParams.bidType = parseInt(this.copyBidParams.bidType)
+            this.copyBidParams.isWin = this.copyBidParams.isWin ? parseInt(this.copyBidParams.isWin) : 0
+            // this.bidParams.winner = this.prodetail.s_winner
+            this.bidParams.sid = this.sid
+            const {channelName, channelPerson, channelPhone, winner, sid, bidStage, isWin } = this.bidParams
+            let tranWin = 0
+            if (isWin === '是') {
+              tranWin = 1
+            } else if (isWin === '否') {
+              tranWin = 2
+            } else {
+              tranWin = 0
+            }
+            const ajaxParams = {
+              bidType: parseInt(this.copyBidParams.bidType),
+              bidStage: bidStage ? bidStage.split('、') : [],
+              isWin: tranWin,
+              channelName: channelName,
+              channelPerson: channelPerson,
+              channelPhone: channelPhone,
+              winner: winner,
+              sid: sid
+            }
+            $.ajax({
+              type: 'POST',
+              url: '/jyapi/jybx/core/participate/updateBidStatus',
+              contentType: 'application/json',
+              data: JSON.stringify(ajaxParams),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  _this.$toast('保存成功')
+                  _this.editBtnStatus.show = true
+                  _this.editBtnStatus.status = 1
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+          onCellClick(data) {
+            if (this.checkedList.includes(data.value)) {
+              this.checkedList = this.checkedList.filter(v => v !== data.value)
+            } else {
+              this.checkedList.push(data.value)
+            }
+          },
+          // 设置倒计时
+          updateCountdown: function() {
+            if (!this.cbInfo.canBiaoInfo.bidEndTime) {
+              $('.currentTimeDiv').hide()
+              return
+            }
+            const targetTime = this.cbInfo.canBiaoInfo.bidEndTime * 1000
+            // const targetTime = 1694952304000
+            const now = new Date().getTime(); // 获取当前时间
+            const diff = targetTime - now; // 计算时间差
+            const seconds = Math.floor(diff / 1000); // 转换为秒数
+            // 计算天、小时、分钟、秒数
+            const days = Math.floor(seconds / (60 * 60 * 24));
+            const hours = Math.floor((seconds % (60 * 60 * 24)) / (60 * 60));
+            const minutes = Math.floor((seconds % (60 * 60)) / 60);
+            const remainingSeconds = seconds % 60;
+
+            // 将倒计时显示在页面上
+            this.cbInfo.setTime = `${days}天 ${hours}小时 ${minutes}分钟 ${remainingSeconds}秒`;
+
+            // 如果倒计时结束,清除定时器
+            if (diff < 0) {
+              clearInterval(this.cbInfo.countdownTimer);
+              if(this.cbInfo.canBiaoInfo.userName) {
+                $('.refer_stand .r-s-right').css('visibility', 'hidden')
+              } else {
+                $('.refer_stand .r-s-left').css('visibility', 'hidden')
+                this.cbInfo.canBiaoInfo.showStopParticipate = false
+              }
+              $('.currentTimeDiv').hide()
+            } else {
+              if(!this.cbInfo.canBiaoInfo.userName) {
+                $('.refer_stand .r-s-left').css('visibility', 'hidden')
+              }
+              $('.currentTimeDiv').show()
+            }
+          },
+          // 点击参标
+          setCanBiao: function (e) {
+            const rsRight = $(e.target).hasClass('r-s-right')
+            let weicanbiao = $(e.target).hasClass('weicanbiao')
+            if (rsRight) {
+              const showElem1 = $($(e.target).find('img')[0])
+              if(showElem1.is(':hidden')) {
+                weicanbiao = false
+              } else {
+                weicanbiao = true
+              }
+            }
+            const _this = this
+            const type = weicanbiao ? 'in' : 'out';
+            const url = '/jyapi/jybx/core/participate/'+ type + '/info'
+            const params = {
+              bidIds: this.sid
+            }
+            const outParams = {
+              bidIds: this.sid,
+              projectId: this.cbInfo.canBiaoInfo.projectId
+            }
+            $.ajax({
+              type: 'POST',
+              url: url,
+              contentType: 'application/json',
+              data: JSON.stringify(weicanbiao ? params : outParams),
+              success: function(res) {
+                if(res.error_code === 0) {
+                  if(res.data) {
+                    _this.getCanBiaoInfo()
+                    if (type === 'in') {
+                      _this.getHaveActionHistory()
+                      _this.$toast('已参标,请前往我的参标项目列表查看')
+                    }
+                    // 更新收藏列表
+                    const updateCBStatus = {
+                      id: _this.sid,
+                      value: type === 'in' ? 1 : 0
+                    }
+                    sessionStorage.setItem('actionCBInfo', JSON.stringify(updateCBStatus))
+                  }
+                } else {
+                  _this.$toast(res.error_msg)
+                }
+              }
+            })
+          },
+
+          // 获取参标状态
+          getCanBiaoInfo: function() {
+              const _this = this
+              const param = {
+                sid: this.sid
+              }
+              $.ajax({
+                type: 'POST',
+                url: '/jyapi/jybx/core/participate/info',
+                contentType: 'application/json',
+                data: JSON.stringify(param),
+                success: function(res) {
+                  let cbNameElem = $('.cb_name');
+                  if(res.error_code == 0) {
+                    const data = res.data;
+                    if (Object.keys(data).length > 0) {
+                      _this.cbInfo.canBiaoInfo = data
+                      _this.cbInfo.countdownTimer = setInterval(_this.updateCountdown, 1000);
+                      if (data.userName) {
+                        const newList = data.userName.split(',').map(item => item.trim()).filter(item => item)
+                        const userNameString = newList.length > 1 ? newList.slice(0,1).join(',') + '等' : newList.join(',')
+                        data.userName = userNameString
+                      }
+                    }
+                  }
+                }
+              })
+            },
+            // 编辑投标状态
+            setBidInfo: function () {
+              if (this.editBtnStatus.status == 1) {
+                this.editBtnStatus.status = 2
+              } else if (this.editBtnStatus.status == 2) {
+                this.editBtnStatus.status = 1
+                this.getBidContent()
+              }
+            },
+            // 关闭投标类型弹窗
+            bidTypePopupClose: function () {
+                this.bidTypePopup = false
+            },
+            // 关闭是否中标弹窗
+            isBidPopupClose: function () {
+              this.isBidPopup = false
+            },
+            // 关闭投标项目阶段弹窗
+            BidProjectPopupClose: function () {
+              this.bidProject = false
+            },
             getShareParams () {
               this.proParams = {
                 type: '2',

+ 95 - 3
src/web/templates/big-member/wx/page_pro_follow_list.html

@@ -16,7 +16,7 @@
     <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="{{Msg "seo" "cdn"}}/big-member/css/page_pro_follow_list.css?v={{Msg "seo" "version"}}" />
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/page_pro_follow_list.css?v={{Msg "seo" "version"}}' />
     <!--E-当前页面的css资源-->
 </head>
 <body>
@@ -67,6 +67,15 @@
                                 <div class="squot" v-if="item.i_apppushunread!=0&&item.i_apppushunread!=null"></div>
                             </div>
                         </div>
+                        <div class="article-item-ft">
+                            <div class="placement"></div>
+                            <span class="ft-right-actions">
+                                <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                                    <span class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                                    <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                                </div>
+                            </span>
+                        </div>
                     </div>
                 </van-list>
                 <div class="tip" v-if="!isbigvip">
@@ -144,7 +153,8 @@
             }
         },
         mounted () {
-            $(this.$refs.jList).scrollTop(this.scrollTop)
+          utils.iosBackRefresh()
+          $(this.$refs.jList).scrollTop(this.scrollTop)
         },
         methods: {
             recover: function () {
@@ -158,6 +168,7 @@
                         }
                         this.$data[key] = $data[key]
                     }
+                    this.checkCBStateChanged()
                     sessionStorage.removeItem(this.sessStorageKey)
                 }
                 return !!$data
@@ -253,6 +264,8 @@
                                       res.data.List[i].b_thirtydays = "jyovertime"
                                     }
                                 }
+                                _this.preSortList(res.data.List)
+                                _this.getCanBiaoStatus(res.data.List)
                                 _this.list = _this.list.concat(res.data.List)
                                 if(!res.data.hasNext){
                                     _this.loading = true
@@ -275,6 +288,30 @@
                     },
                 })
             },
+            checkCBStateChanged: function () {
+              var actionInfo = sessionStorage.getItem('actionCBInfo')
+              if (actionInfo) {
+                  var info = JSON.parse(actionInfo)
+                  this.list.forEach(function (item) {
+                      if (item.sid === info.id) {
+                          item.isCB.value = info.value
+                      }
+                  })
+              }
+            },
+            preSortList: function (list) {
+                var _this = this
+                list.forEach(function (item) {
+                    _this.preSortItem(item)
+                })
+            },
+            preSortItem: function (item) {
+                // 参标相关信息
+                item.isCB = {
+                    id: '',
+                    value: 0
+                }
+            },
             followView:function(fid,sid,item) {
                 if(item.i_apppushunread){
                     item.i_apppushunread = 0
@@ -404,7 +441,62 @@
                         loading.clear()
                     }
                 })
-            }
+            },
+            // 获取参标状态
+            getCanBiaoStatus: function (list) {
+                var idArr = list.map(function (item) {
+                    return item.sid
+                })
+                if (idArr.length > 0) {
+                    idArr = idArr.join(',')
+                } else {
+                    idArr = ''
+                }
+                var params = { ids: idArr }
+                $.ajax({
+                    url: '/jyapi/jybx/core/participate/show',
+                    type: 'POST',
+                    contentType: 'application/json',
+                    data: JSON.stringify(params),
+                    success: function (res) {
+                        if (res.error_code === 0 && Array.isArray(res.data)) {
+                            list.forEach(function (v) {
+                                res.data.forEach(function (m) {
+                                    if (v.sid === m.id) {
+                                        Object.assign(v.isCB, m)
+                                    }
+                                })
+                            })
+                        }
+                    }
+                })
+            },
+            // 参标操作
+            setCanBiaoStatus (item) {
+                if (item.isCB && item.isCB.value) {
+                    this.$toast('如需终止参标,请在详情页进行操作。')
+                    return
+                }
+                var _this = this
+                var params = { bidIds: item.sid }
+                $.ajax({
+                    url: '/jyapi/jybx/core/participate/in/info',
+                    type: 'POST',
+                    contentType: 'application/json',
+                    data: JSON.stringify(params),
+                    success: function (res) {
+                        if (res.error_code === 0 && res.data) {
+                            _this.$toast('已参标,请前往我的参标项目列表查看。')
+                            _this.$set(item, 'isCB', {
+                                id: item.sid,
+                                value: true
+                            })
+                        } else {
+                          _this.$toast(res.error_msg)
+                        }
+                    }
+                })
+            },
         }
     }
     var vueComponent = new Vue(vNode)

+ 1 - 0
src/web/templates/frontRouter/pc/collection/sess/index.html

@@ -196,6 +196,7 @@
                             </div>
                             <div class="append-container">
                                 <button class="bi-report-inject-button" :disabled="item.added" v-if="biEnv" @click.prevent.stop="biAddProject(item)">${ item.added ? '已添加' : '添加' }</button>
+                                <span class="j-icon i-canbiao" v-if="!biEnv && item.joinBid !== undefined" :class="item.joinBid ? 'icon-canbiao-active' : 'icon-canbiao'" @click.prevent.stop="joinBidAction(item)"></span>
                                 <span class="j-icon" v-if="!biEnv" :class="item.star ? 'icon-star-active' : 'icon-star'" @click.prevent.stop="unStarThis(item)"></span>
                             </div>
                         </div>

+ 19 - 8
src/web/templates/frontRouter/wx/collection/sess/index.html

@@ -18,6 +18,7 @@
     <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='{{Msg "seo" "cdn"}}/big-member/weixin/css/public.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
     <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}' />
 </head>
 <style>
@@ -110,27 +111,37 @@
               finished-text="没有更多了"
               @load="getList"
             >
-              <div class="collec_li" :class="{ visited: item.visited ,userpub:item.site === '剑鱼信息发布平台'}" v-for="(item, index) in listState.list" :key="index" @click="linkRouter(item)">
-                <div v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'" class="yhfb">用户发布</div>
+              <div class="collec_li" :class="{ visited: item.visited ,userpub:item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'}" v-for="(item, index) in listState.list" :key="index" @click="linkRouter(item)">
                 <div class="collec_head">
                   <div class="collec_title ellipsis-2 visited-hd">
-                    <span v-if="item.fileExists" style="color: #2ABED1;">[有附件] </span>
                     <div v-html="item.title" style="display: inline;"></div>
                   </div>
-                  <div class="collec_star" @click="collecClick(event,item._id)">
-                    <button class="bi-report-inject-button" :disabled="item.added" v-if="biEnv" @click.prevent.stop="biAddProject(item)">${ item.added ? '已添加' : '添加' }</button>
-                    <span class="shoucang" v-if="condition && !biEnv"></span>
-                    <!-- <span class="weishoucang" v-if="!condition"></span> -->
-                  </div>
                 </div>
                 <div class="collec_action">
                   <ul class="collec_tags">
+                    <li class="tag_active red visited-ft2" v-if="item.site === '剑鱼信息发布平台' || item.spidercode === 'a_jyxxfbpt_gg'">用户发布</li>
                     <li class="tag_active visited-ft" v-if="item.area&&item.area!==''">${item.area}</li>
                     <li class="tag_active visited-ft" v-if="item.buyerclass&&item.buyerclass!==''">${item.buyerclass}</li>
                     <li class="tag_active visited-ft" v-if="item.type&&item.type!==''">${item.type}</li>
                     <li class="tag_active visited-ft" v-if="item.bidamount&&item.bidamount!==''">${item.bidamount}</li>
+                    <li class="tag_active blue visited-ft2" v-if="item.fileExists">有附件</li>
                   </ul>
+                </div>
+                <div class="collec_ft">
                   <div class="collec_time visited-ft">${item.publishtime}</div>
+                  <span class="ft-right-actions">
+                    <div class="action-item action-canbiao" v-if="item.isCB.id"  @click.stop="setCanBiaoStatus(item)">
+                      <span style="margin-right: 0.08rem" class="j-icon base-icon" :class="{'icon-canbiao-red': item.isCB.value, 'icon-canbiao-blue': !item.isCB.value}"></span>
+                      <span class="label-icon">${ item.isCB.value ? '终止参标' : '参标'}</span>
+                    </div>
+                    <div class="action-item collec_star" @click="collecClick(event,item._id)">
+                      <button class="bi-report-inject-button" :disabled="item.added" v-if="biEnv" @click.prevent.stop="biAddProject(item)">${ item.added ? '已添加' : '添加' }</button>
+                      <span class="action-item" v-if="condition && !biEnv">
+                        <span class="shoucang" style="margin-right: 0.08rem"></span>
+                        已收藏
+                      </span>
+                    </div>
+                  </span>
                 </div>
               </div>
             </van-list>

+ 1622 - 1428
src/web/templates/pc/biddetail_rec.html

@@ -1,340 +1,377 @@
 <html  style="height: 100%">
 <head>
-	<title>{{.T.obj.title}} - 剑鱼标讯</title>
-	<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
-	<meta name="Keywords" content="{{.T.obj.keywords}}"/>
-	<meta name="Description" content="{{.T.obj.description}}"/>
-	<meta name="renderer" content="webkit">
-	<meta content="telephone=no" name="format-detection"/>
-	<meta content="light" theme="light" name="enable-header"/>
-	{{include "/common/pnc.html"}}
-	<link href="{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
-	<link href="{{Msg "seo" "cdn"}}/pccss/pc-detail.css?v={{Msg "seo" "version"}}2" rel="stylesheet">
-	<script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
-	<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}" />
-	<link href="//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/theme-chalk/index.css" rel="stylesheet" />
-	<link href='{{Msg "seo" "cdn"}}/css/collect-user-info.css?v={{Msg "seo" "version"}}' rel="stylesheet">
-	<link href='{{Msg "seo" "cdn"}}/common-module/nps-common/css/nps.css?v={{Msg "seo" "version"}}' rel="stylesheet">
-	<link href="{{Msg "seo" "cdn"}}/css/dev2/newBidSearch.css?v={{Msg "seo" "version"}}" rel="stylesheet">
-	<script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}"></script>
-	<script>
-		var id = {{.T.obj._id}};
-	</script>
-	<script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/pc_detail_tags.js?v={{Msg "seo" "version"}}"></script>
-	<style>
-		.tip-box {
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			align-items: center;
-			padding: 20px 35px;
-			background: #FFFFFF;
-			box-shadow: 0px 0px 28px 1px rgba(0, 0, 0, 0.07999999821186066);
-			border-radius: 8px 8px 8px 8px;
-			border: 1px solid #ECECEC;
-		}
-		.tip-text {
-			font-size: 16px;
-			font-family: Microsoft YaHei-Regular, Microsoft YaHei,sans-serif;
-			font-weight: 400;
-			color: #1D1D1D;
-			line-height: 24px;
-		}
-    .com-detail table tr{
-      border: 1px solid #EBEBEB;
-    }
-    .com-detail table tr td,.com-detail table th{
-      border-right: 1px solid #EBEBEB;
-      padding: 10px;
-    }
-    .yhfb{
-      background-color: rgba(255, 58, 32, 0.1);
-      padding:0 13px 2px 11px;
-      border-radius: 4px 0px 16px 0px;
-      height: 24px;
-      width: 80px;
-      line-height: 22px;
-      font-size: 14px;
-      color: #FF3A20;
-      position: absolute;
-      top: 0;
-      left: 0;
-      z-index: 99;
-    }
-    .tab3{
-      display: flex;
-      align-items: center;
-      text-align: center;
-    }
-    .tab3 .pubinfo{
-      margin-left: 86px;
-      width: 246px;
-      height: 24px;
-      background-color: #FFEDEC;
-      border-radius: 53px;
-      line-height: 24px;
-      font-weight: 400;
-      color: #FF3A20 ;
-      font-size: 14px;
-      padding-right: 25px;
-    }
-    .tab3 .pubinfo .btnn{
-      width: 80px;
-      height: 24px;
-      background: linear-gradient(180deg, #FF8787 0%, #FF5E5E 35%, #FF2E2E 68%, #FD4444 100%);
-      border-radius: 88px 53px 53px 0px;
-      color: #ffffff;
-      line-height: 24px;
-      position: absolute;
-      margin-left: 12px;
-      cursor: pointer;
-    }
-	</style>
+    <title>{{.T.obj.title}} - 剑鱼标讯</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
+    <meta name="Keywords" content="{{.T.obj.keywords}}"/>
+    <meta name="Description" content="{{.T.obj.description}}"/>
+    <meta name="renderer" content="webkit">
+    <meta content="telephone=no" name="format-detection"/>
+    <meta content="light" theme="light" name="enable-header"/>
+    {{include "/common/pnc.html"}}
+    <link href="{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link href="{{Msg "seo" "cdn"}}/pccss/pc-detail.css?v={{Msg "seo" "version"}}2" rel="stylesheet">
+    <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
+    <link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}" />
+    <link href="//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/theme-chalk/index.css" rel="stylesheet" />
+    <link href='{{Msg "seo" "cdn"}}/css/collect-user-info.css?v={{Msg "seo" "version"}}' rel="stylesheet">
+    <link href='{{Msg "seo" "cdn"}}/common-module/nps-common/css/nps.css?v={{Msg "seo" "version"}}' rel="stylesheet">
+    <link href="{{Msg "seo" "cdn"}}/css/dev2/newBidSearch.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+      var id = {{.T.obj._id}};
+    </script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/pc_detail_tags.js?v={{Msg "seo" "version"}}"></script>
+    <style>
+        .tip-box {
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+            padding: 20px 35px;
+            background: #FFFFFF;
+            box-shadow: 0px 0px 28px 1px rgba(0, 0, 0, 0.07999999821186066);
+            border-radius: 8px 8px 8px 8px;
+            border: 1px solid #ECECEC;
+        }
+        .tip-text {
+            font-size: 16px;
+            font-family: Microsoft YaHei-Regular, Microsoft YaHei,sans-serif;
+            font-weight: 400;
+            color: #1D1D1D;
+            line-height: 24px;
+        }
+        .com-detail table tr{
+            border: 1px solid #EBEBEB;
+        }
+        .com-detail table tr td,.com-detail table th{
+            border-right: 1px solid #EBEBEB;
+            padding: 10px;
+        }
+        .yhfb{
+            background-color: rgba(255, 58, 32, 0.1);
+            padding:0 13px 2px 11px;
+            border-radius: 4px 0px 16px 0px;
+            height: 24px;
+            width: 80px;
+            line-height: 22px;
+            font-size: 14px;
+            color: #FF3A20;
+            position: absolute;
+            top: 0;
+            left: 0;
+            z-index: 99;
+        }
+        .tab3{
+            display: flex;
+            align-items: center;
+            text-align: center;
+        }
+        .tab3 .pubinfo{
+            margin-left: 86px;
+            width: 246px;
+            height: 24px;
+            background-color: #FFEDEC;
+            border-radius: 53px;
+            line-height: 24px;
+            font-weight: 400;
+            color: #FF3A20 ;
+            font-size: 14px;
+            padding-right: 25px;
+        }
+        .tab3 .pubinfo .btnn{
+            width: 80px;
+            height: 24px;
+            background: linear-gradient(180deg, #FF8787 0%, #FF5E5E 35%, #FF2E2E 68%, #FD4444 100%);
+            border-radius: 88px 53px 53px 0px;
+            color: #ffffff;
+            line-height: 24px;
+            position: absolute;
+            margin-left: 12px;
+            cursor: pointer;
+        }
+        .sub-info-container{
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            position:relative;
+        }
+        .join-bid-countdown{
+            background: rgba(254, 115, 122, 0.16);
+            border-radius: 4px;
+            color: #FF3A20;
+            font-size: 12px;
+            padding: 3px 6px;
+        }
+        .tooltip-names{
+            padding:16px;
+            position: absolute;
+            background:rgba(0, 0, 0, .75);
+            color: #fff;
+            border-radius: 4px;
+            font-size: 12px;
+            line-height:18px;
+            top:30px;
+            left:80px;
+            max-width:300px;
+            opacity: 0;
+        }
+        .tooltip-names::before {
+            content: '';
+            position: absolute;
+            top:-10px;
+            width: 0;
+            height:0;
+            border-bottom:10px solid rgba(0, 0, 0, .75);
+            border-right:10px solid transparent;
+            border-left:10px solid transparent;
+        }
+        .join-bid-persons{
+            margin-right:16px;
+        }
+        .join-bid-persons:hover+.tooltip-names{
+            opacity: 1;
+        }
+    </style>
 </head>
 <body style="height: 100%">
 {{include "/common/pchead.html"}}
 <!-- 分享弹框 -->
 {{include "/common/shareboxDialog.html"}}
 <script type="text/javascript">
-	var _loop = false;
-	var refer = document.referrer;
-	if(refer.indexOf("NJ")>0){
-		$(".j-nav .j-nav-link:eq(3)").addClass("active");
-	}else{
-		$(".j-nav .j-nav-link:eq(2)").addClass("active");
-	}
-	//
-	function isWechat() {
-		var ua = navigator.userAgent.toLowerCase();
-		if(ua.match(/MicroMessenger/i)=="micromessenger"){
-			return true;
-		}else{
-			return false;
-		}
-	}
+  var _loop = false;
+  var refer = document.referrer;
+  if(refer.indexOf("NJ")>0){
+    $(".j-nav .j-nav-link:eq(3)").addClass("active");
+  }else{
+    $(".j-nav .j-nav-link:eq(2)").addClass("active");
+  }
+  //
+  function isWechat() {
+    var ua = navigator.userAgent.toLowerCase();
+    if(ua.match(/MicroMessenger/i)=="micromessenger"){
+      return true;
+    }else{
+      return false;
+    }
+  }
   //
   function isPCWeChat(){
-      var ua = window.navigator.userAgent.toLowerCase();
-      if(ua.match(/MicroMessenger/i) == 'micromessenger'){
-          var system = {
-              win: false,
-              mac: false
-          };
-          //检测平台
-          var p = navigator.platform;
-          system.win = p.indexOf("Win") == 0;
-          system.mac = p.indexOf("Mac") == 0;
-          if (system.win || system.mac) {
-              //alert("在微信PC端上打开内置浏览器");
-              return true
-          }else {
-              //alert("非微信PC端上打开内置浏览器");
-              return false
-          }
-  	}
+    var ua = window.navigator.userAgent.toLowerCase();
+    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
+      var system = {
+        win: false,
+        mac: false
+      };
+      //检测平台
+      var p = navigator.platform;
+      system.win = p.indexOf("Win") == 0;
+      system.mac = p.indexOf("Mac") == 0;
+      if (system.win || system.mac) {
+        //alert("在微信PC端上打开内置浏览器");
+        return true
+      }else {
+        //alert("非微信PC端上打开内置浏览器");
+        return false
+      }
+    }
   }
 </script>
 <div class="j-content" style="padding-top: 26px;">
-	<!-- 用户留资 -->
-	<div id="vue-collect-user-info"></div>
-	<div id="vue-collect-bid-info"></div>
-	<div class="main-content" style="width: 1200px; position: relative; margin: 0 auto">
-		<div class="biddetail-content" style="width:980px; margin-left:0px;">
-      {{if .T.obj.site}}
-      {{if eq .T.obj.site "剑鱼信息发布平台"}}
-      <div class="yhfb">用户发布</div>
-      {{end}}
-      {{end}}
-			<div class="com-title" id="com-title">
-				<!--			<span style="border-bottom:1px solid #2cb7ca">{{.T.obj.title}}</span>-->
-				{{.T.obj.title}}
-			</div>
-			<div class="com-statusbar" id="statusbar">
-				<!-- 自定义标签弹框 -->
-				<div class="tags-box" id="collectTags">
-					<div class="tags-inputs">
-						<div class="tag-input">
-							<div class="tag-labels"></div>
-							<input type="text" class="clear-input" maxlength="10" oninput="this.value=this.value.replace(/\s+/g,'')">
-							<div class="tag-placeholder">新增标签回车保存</div>
-						</div>
-						<div class="add-tag-button">添加并使用</div>
-					</div>
-					<div class="tags-list clearfix"></div>
-					<div class="tags-footer">
-						<div class="tags-button button-confirm">确认添加</div>
-						<div class="tags-button button-cancel">暂不添加</div>
-					</div>
-				</div>
-				<span class="com-collect" id="bidCollect">
-        <img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/collect.png' />
-        标讯收藏
-      </span>
-				<span class="com-collect" id="bidCollected" style="display: none;">
-        <img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/collected.png' />
-        标讯收藏
-      </span>
-				<script>
-					// 列表页收藏点击事件 百度统计
-					function collectBaiduEvent() {
-						try {
-							_hmt.push(['_trackEvent', '超级订阅-pc', 'click', '详情页标讯收藏按钮']);
-							console.log(_hmt,'_hmt')
-						} catch (e) {
-							console.log('未初始化百度统计')
-						}
-					}
-					// 查询是否已收藏
-					$.ajax({
-						type:'post',
-						url:'/publicapply/bidcoll/isColl?t=' + Date.now(),
-						data: {
-							bids: {{.T.obj._id}}
-					},
-					dataType:'json',
-							success: function(r){
-						if (r.data) {
-							r.data.forEach(function(item,index) {
-								if(item == {{.T.obj._id}}) {
-									$('#bidCollected').show()
-									$('#bidCollect').hide()
-								} else {
-									$('#bidCollected').hide()
-									$('#bidCollect').show()
-								}
-							})
-						}
-					}
-					})
-					// 收藏事件
-					$('#bidCollect').off('click').bind('click',function() {
-						collectBaiduEvent()
-						var top = (parseInt($(this).position().top) + 30 ) + 'px';
-						var bids = [{bid: {{.T.obj._id}}}]
-						vm.dialogTitle = '重要项目一键创建标签收藏!请完善个人信息,为您匹配精准服务'
-						// 查询是否需要用户留资料 不需要 则执行下一步回调(收藏标讯行为)
-						vm.isNeedSubmit('article_collection', function() {
-							collBidAction('C',bids,function(r) {
-								if (r.data) {
-									toastFn('收藏成功')
-									$('#bidCollected').show()
-									$('#bidCollect').hide()
-									$('#collectTags.tags-box').show().css({'top': top, 'right' : 0, 'left':'unset'})
-									getUserTags()
-								} else {
-									toastFn(r.error_msg)
-								}
-							})
-						})
-					})
-					// 取消收藏事件
-					$('#bidCollected').off('click').bind('click',function() {
-						collectBaiduEvent()
-						var bids = [{bid: {{.T.obj._id}}}]
-						collBidAction('R',bids,function(r) {
-							if (r.data) {
-								$('#bidCollected').hide()
-								$('.personal-tags').hide()
-								$('#bidCollect').show()
-								toastFn('已取消收藏',1000)
-							}
-						})
-					})
-					// 标签输入框事件
-					$('#collectTags.tags-box').click(function(e) {
-						e.stopPropagation()
-					})
+    <!-- 用户留资 -->
+    <div id="vue-collect-user-info"></div>
+    <div id="vue-collect-bid-info"></div>
+    <div class="main-content" style="width: 1200px; position: relative; margin: 0 auto">
+        <div class="biddetail-content" style="width:980px; margin-left:0px;">
+            {{if .T.obj.site}}
+            {{if eq .T.obj.site "剑鱼信息发布平台"}}
+            <div class="yhfb">用户发布</div>
+            {{end}}
+            {{end}}
+            <div class="com-title" id="com-title">
+                <!--			<span style="border-bottom:1px solid #2cb7ca">{{.T.obj.title}}</span>-->
+                {{.T.obj.title}}
+            </div>
+            <div class="com-statusbar" id="statusbar">
+                <!-- 自定义标签弹框 -->
+                <div class="tags-box" id="collectTags">
+                    <div class="tags-inputs">
+                        <div class="tag-input">
+                            <div class="tag-labels"></div>
+                            <input type="text" class="clear-input" maxlength="10" oninput="this.value=this.value.replace(/\s+/g,'')">
+                            <div class="tag-placeholder">新增标签回车保存</div>
+                        </div>
+                        <div class="add-tag-button">添加并使用</div>
+                    </div>
+                    <div class="tags-list clearfix"></div>
+                    <div class="tags-footer">
+                        <div class="tags-button button-confirm">确认添加</div>
+                        <div class="tags-button button-cancel">暂不添加</div>
+                    </div>
+                </div>
+                <span class="com-collect" id="bidCollect"><img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/collect.png' />标讯收藏</span>
+                <span class="com-collect" id="bidCollected" style="display: none;"><img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/collected.png' />标讯收藏</span>
+                <script>
+                  // 列表页收藏点击事件 百度统计
+                  function collectBaiduEvent() {
+                    try {
+                      _hmt.push(['_trackEvent', '超级订阅-pc', 'click', '详情页标讯收藏按钮']);
+                      console.log(_hmt,'_hmt')
+                    } catch (e) {
+                      console.log('未初始化百度统计')
+                    }
+                  }
+                  // 查询是否已收藏
+                  $.ajax({
+                    type:'post',
+                    url:'/publicapply/bidcoll/isColl?t=' + Date.now(),
+                    data: {
+                      bids: {{.T.obj._id}}
+                  },
+                  dataType:'json',
+                    success: function(r){
+                    if (r.data) {
+                      r.data.forEach(function(item,index) {
+                        if(item == {{.T.obj._id}}) {
+                          $('#bidCollected').show()
+                          $('#bidCollect').hide()
+                        } else {
+                          $('#bidCollected').hide()
+                          $('#bidCollect').show()
+                        }
+                      })
+                    }
+                  }
+                  })
+                  // 收藏事件
+                  $('#bidCollect').off('click').bind('click',function() {
+                    collectBaiduEvent()
+                    var top = (parseInt($(this).position().top) + 30 ) + 'px';
+                    var bids = [{bid: {{.T.obj._id}}}]
+                    vm.dialogTitle = '重要项目一键创建标签收藏!请完善个人信息,为您匹配精准服务'
+                    // 查询是否需要用户留资料 不需要 则执行下一步回调(收藏标讯行为)
+                    vm.isNeedSubmit('article_collection', function() {
+                      collBidAction('C',bids,function(r) {
+                        if (r.data) {
+                          toastFn('收藏成功')
+                          $('#bidCollected').show()
+                          $('#bidCollect').hide()
+                          $('#collectTags.tags-box').show().css({'top': top, 'right' : 0, 'left':'unset'})
+                          getUserTags()
+                        } else {
+                          toastFn(r.error_msg)
+                        }
+                      })
+                    })
+                  })
+                  // 取消收藏事件
+                  $('#bidCollected').off('click').bind('click',function() {
+                    collectBaiduEvent()
+                    var bids = [{bid: {{.T.obj._id}}}]
+                    collBidAction('R',bids,function(r) {
+                      if (r.data) {
+                        $('#bidCollected').hide()
+                        $('.personal-tags').hide()
+                        $('#bidCollect').show()
+                        toastFn('已取消收藏',1000)
+                      }
+                    })
+                  })
+                  // 标签输入框事件
+                  $('#collectTags.tags-box').click(function(e) {
+                    e.stopPropagation()
+                  })
 
-					$('#collectTags .tag-input').click(function(e) {
-						e.stopPropagation()
-						$(this).children('.tag-placeholder').hide()
-						$(this).children('input').focus()
-					})
-					// 标签输入框回车事件
-					$('#collectTags .tag-input .clear-input').keydown(function(event){
-						event.stopPropagation()
-						if (event.keyCode == 13) {
-							if (!$('.tags-box').is(':hidden')) {
-								$('#collectTags .tags-inputs .add-tag-button').trigger('click')
-							}
-						}
-					})
-					// 添加标签按钮事件
-					$('#collectTags .tags-inputs .add-tag-button').on('click', function () {
-						var input = $('#collectTags .tag-input .clear-input')
-						if(input.val().length >= 2 && input.val().length < 11) {
-							// ajax提交自定义标签
-							addTagsAjax(input.val())
-						}
-					})
-					// 标签输入框失去焦点事件
-					$('#collectTags .tag-input .clear-input').blur(function() {
-						if($('.tag-labels').children().length == 0 && $(this).val() == '') {
-							$('.tag-placeholder').show()
-						}
-					})
-					// 点击确定按钮,绑定标签
-					$('#collectTags .tags-footer .button-confirm').on('click', function () {
-						if (!$('#collectTags.tags-box').is(':hidden')){
-							var lids = ""
-							var lname = ""
-							$('#collectTags .tags-item.tags-active').each(function() {
-								if ($(this).attr('data-id')){
-									if(lids != ""){
-										lids += ",";
-									}
-									if(lname != "") {
-										lname+= ",";
-									}
-									lids += $(this).attr('data-id');
-									lname += $(this).text()
-								}
-							})
-							var params = {
-								lids: lids,
-								laction: 'S',
-								binfo: [
-									{ bid: {{.T.obj._id}} }
-						]
-						}
-							// 执行保存绑定标签操作
-							if (params.lids !== '') {
-								saveChooseTags(params, function () {
-									$('#collectTags .tags-footer .button-cancel').trigger('click')
-								})
-							}
-						}
-					})
-					$('#collectTags .tags-footer .button-cancel').on('click', function () {
-						$('.tags-box').hide(function() {
-							// 标签弹框消失时 清除上次选择的标签分类
-							activeTags = []
-							$('.tag-labels').empty()
-							$('.clear-input').val('')
-							$('.tags-list').find('.tags-item').removeClass('tags-active')
-							$('.tag-placeholder').show()
-						})
-					})
-					// 点击其他区域 隐藏其他筛选条件下拉框
-					// $(document).click(function() {
-					//   $('.tags-footer .button-cancel').trigger('click')
-					// })
-				</script>
+                  $('#collectTags .tag-input').click(function(e) {
+                    e.stopPropagation()
+                    $(this).children('.tag-placeholder').hide()
+                    $(this).children('input').focus()
+                  })
+                  // 标签输入框回车事件
+                  $('#collectTags .tag-input .clear-input').keydown(function(event){
+                    event.stopPropagation()
+                    if (event.keyCode == 13) {
+                      if (!$('.tags-box').is(':hidden')) {
+                        $('#collectTags .tags-inputs .add-tag-button').trigger('click')
+                      }
+                    }
+                  })
+                  // 添加标签按钮事件
+                  $('#collectTags .tags-inputs .add-tag-button').on('click', function () {
+                    var input = $('#collectTags .tag-input .clear-input')
+                    if(input.val().length >= 2 && input.val().length < 11) {
+                      // ajax提交自定义标签
+                      addTagsAjax(input.val())
+                    }
+                  })
+                  // 标签输入框失去焦点事件
+                  $('#collectTags .tag-input .clear-input').blur(function() {
+                    if($('.tag-labels').children().length == 0 && $(this).val() == '') {
+                      $('.tag-placeholder').show()
+                    }
+                  })
+                  // 点击确定按钮,绑定标签
+                  $('#collectTags .tags-footer .button-confirm').on('click', function () {
+                    if (!$('#collectTags.tags-box').is(':hidden')){
+                      var lids = ""
+                      var lname = ""
+                      $('#collectTags .tags-item.tags-active').each(function() {
+                        if ($(this).attr('data-id')){
+                          if(lids != ""){
+                            lids += ",";
+                          }
+                          if(lname != "") {
+                            lname+= ",";
+                          }
+                          lids += $(this).attr('data-id');
+                          lname += $(this).text()
+                        }
+                      })
+                      var params = {
+                        lids: lids,
+                        laction: 'S',
+                        binfo: [
+                          { bid: {{.T.obj._id}} }
+                    ]
+                    }
+                      // 执行保存绑定标签操作
+                      if (params.lids !== '') {
+                        saveChooseTags(params, function () {
+                          $('#collectTags .tags-footer .button-cancel').trigger('click')
+                        })
+                      }
+                    }
+                  })
+                  $('#collectTags .tags-footer .button-cancel').on('click', function () {
+                    $('.tags-box').hide(function() {
+                      // 标签弹框消失时 清除上次选择的标签分类
+                      activeTags = []
+                      $('.tag-labels').empty()
+                      $('.clear-input').val('')
+                      $('.tags-list').find('.tags-item').removeClass('tags-active')
+                      $('.tag-placeholder').show()
+                    })
+                  })
+                  // 点击其他区域 隐藏其他筛选条件下拉框
+                  // $(document).click(function() {
+                  //   $('.tags-footer .button-cancel').trigger('click')
+                  // })
+
+                </script>
 
-				<!--可直接在pc端关注项目 -->
-				<span class="com-guanzhu" id="followedProject" style="display: none">
+                <!--可直接在pc端关注项目 -->
+                <span class="com-guanzhu" id="followedProject" style="display: none">
 						<img class="icon-title-img" src="{{Msg "seo" "cdn"}}/images/focused.png">
                     	<font>已关注</font>
 					</span>
-				<span class="com-guanzhu" id="unfollowedProject" style="display: none;cursor: pointer;">
+                <span class="com-guanzhu" id="unfollowedProject" style="display: none;cursor: pointer;">
 						<img class="icon-title-img" src="{{Msg "seo" "cdn"}}/images/focus.png">
                     	<font>关注项目</font>
 					</span>
 
-				<script>
-					$(function(){
-						var followProjectId = ""
-						var doReq = false
+                <script>
+                  $(function(){
+                    var followProjectId = ""
+                    var doReq = false
 
 						$.post("/bigmember/follow/project/check",{sid:{{.T.obj._id}}},function(res){
 							if(res.data&&res.data.showFollow){
@@ -393,1214 +430,1371 @@
 					<img class="img" src="/biddetail/normal/qr/{{.T.obj._id}}" alt="微信分享">
 				</div>
       </span>
+                      <!-- 参标-->
+                <span class="com-collect" id="bidJoined" style="display: none;" onclick="joinBidAction('out')"><img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/canbiao-active.png'/>终止参标</span>
+                <span class="com-collect" id="bidJoin" onclick="joinBidAction('in')" style="display: none;"><img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/canbiao.png'/>参标</span>
       <span class="com-icon" id="share-colleague">
         <img class="icon-title-img" src="{{Msg "seo" "cdn"}}/images/share-colleague.png">转给同事
       </span>
 			</div>
 			<div class="sub-info-container">
+                <!--  参标详细信息-->
+                <div class="bin-join-info">
+                 <span>
+                     <span class="join-bid-persons" style="display:none;">
+                        <img class="icon-title-img" src='{{Msg "seo" "cdn"}}/images/person.png' />
+                        <span>参标人:</span>
+                        <span class="persons"></span>
+                     </span>
+                     <span class="tooltip-names"></span>
+                     <span class="join-bid-countdown" style="display:none;">
+                         投标截止倒计时:
+                         <span class="count-down"></span>
+                     </span>
+                 </span>
+                </div>
 				<div class="personal-tags" style="display: none;">
 					<div class="p-l-label">个人标签:</div>
 					<div class="p-l-content"></div>
 				</div>
 			</div>
-			<div class="cutline"></div>
-<!--			<div class="com-prebuilt mask-zz hidden" style="position:relative;filter: blur(4px)">-->
-			<div class="com-prebuilt hidden" style="position:relative;">
-				<div class="mask-zz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
-					<img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
-					<div class="mask-zz" style="position:absolute; left: 50%; top: 50%; margin-top: -110px;margin-left: -250px;width: 500px;height: 220px;background-color: white;z-index: 100;border-radius: 10px">
-						<div style="position: relative">
-							<img style="width: 100%;height: 100px;" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
-							<div id="tip-title" style="position: absolute;top: 50%;left: 50%; margin-top: -13px;transform: translateX(-50%);height: 26px;color: antiquewhite;font-size: 18px;">拟建项目抢先获知</div>
-						</div>
-						<div class="tip-box">
-							<div class="tip-text" style="margin-top: 12px">提前获取正在审批中的新项目,比招标信息更超前!</div>
-							<div class="tip-text">助您提前了解项目信息,把握重要商机!</div>
-							<button class="detail-nj-btn" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 20px;margin-top: 24px">免费体验</button>
-						</div>
-					</div>
-				</div>
-				<div class="mask-zzz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
-					<img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
-					<div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 500px;background-color: white;z-index: 100;border-radius: 10px">
-						<div style="position: relative">
-							<img style="width: 100%;height: 35%" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
-							<div style="position: absolute;top: 50%;left: 50%; margin-top: -13px;margin-left: -90px;width: 180px;height: 26px;color: antiquewhite;font-size: 16px;">想中标?提前介入很关键!</div>
-						</div>
-						<div class="tip-box">
-							<div class="tip-text">采购意向项目全公开,抢先获知采购项目需求,</div>
-							<div class="tip-text">提前主动介入,中标几率更高!</div>
-							<button class="detail-nj-btn" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 12px;margin-top: 10px">免费体验</button>
-						</div>
-					</div>
-				</div>
-				<div class="mask-zzz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
-					<img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
-					<div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 500px;background-color: white;z-index: 100;border-radius: 10px">
-						<div style="position: relative">
-							<img style="width: 100%;height: 35%" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
-							<div style="position: absolute;top: 50%;left: 50%; margin-top: -13px;margin-left: -90px;width: 180px;height: 26px;color: antiquewhite;font-size: 16px;">免费查看更多公告</div>
-						</div>
-						<div class="tip-box">
-							<div class="tip-text">请完善个人信息,获取更多免费查看公告权限</div>
-							<button class="detail-nj-btn  jyarticle_see3" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 12px;margin-top: 10px">立即解锁</button>
-						</div>
-					</div>
-				</div>
-			</div>
-			<div class="lead-btn-nj" style="color:#2cb7ca;margin:15px 0;display:none;"><div class="adv_tosieve"></div><div class="join" onclick="adv_statistics(this)"><a style="color:#fff;text-decoration:none" class="adv_tosieve-btn"></a></div></div>
-			{{if .T.obj.detail}}
-			<div class="recoveryfat" style="display:none;">
-				<div class="recoveryhead">
-					<div class="tab2 active" onclick="jumpTab('2')">公告摘要</div>
-					<div class="tab1" onclick="jumpTab('1')">公告正文</div>
-					<div class="tab3">
-            {{if .T.obj.site}}
-            {{if eq .T.obj.site "剑鱼信息发布平台"}}
-            {{if .T.obj.recommended_service}}
-            {{if eq .T.obj.recommended_service 1}}
-            <div class="pubinfo">
-              <span>该信息由用户发布,急寻供应商</span>
-              <span class="btnn">点击报名</span>
               <script>
-                $(".btnn").click(function(){
-                  //点击报名事件处理
-                  // vm.showForm = true
-                  var infoid = window.location.pathname.split("/")[3].split(".html")[0]
-                  vm.isNeedSubmit('peugeot_supplier_regist', function () {
-                    vm.showSuccess = true
-                  },"",infoid)
-                  vm.dialogTitleTop='供应商报名'
-                  vm.dialogTitle = '请完善您的个人信息,抢先对接采购单位'
+              /**
+               招标信息是否参标藏接口ajax
+               bids: String, // 招标信息id(多个用,号拼接) 必填
+               返回参数:
+               bool showParticipate = 1;// 是否显示参标按钮  true-显示  false-不显示
+               bool showStopParticipate = 2;// 是否显示终止参标参标按钮  true-显示  false-不显示
+               bool showTransfer = 3;// 转给同事按钮是否展示:true-展示 false-不展示
+               string userName = 4;//参标人姓名 逗号分割
+               string projectId = 5;// 项目id
+               int64 bidEndTime = 6 ;// 投标截止时间
+               int64 currentTime = 7 ;// 服务器当前时间
+               */
+              var _id = {{.T.obj._id}}
+              var countTimer = null
+              function getBidIsJoin () {
+                var paramsData = {
+                  sid: _id
+                }
+                $.ajax({
+                  type: 'post',
+                  contentType: "application/json",
+                  url: '/jyapi/jybx/core/participate/info?t=' + Date.now(),
+                  data: JSON.stringify(paramsData),
+                  dataType: 'json',
+                  success: function (r) {
+                    var data = r.data
+                    if (data && r.error_code == 0) {
+                      initBidJoinBtn()
+                      // 参标按钮显示
+                      if(data.showParticipate) {
+                        $('#bidJoin').show()
+                      }
+                      // 终止参标按钮显示
+                      if(data.showStopParticipate) {
+                        $('#bidJoined').show()
+                      }
+                      // 参标人
+                      if(data.userName) {
+                        var userName = ""
+                        $('.join-bid-persons').show()
+                        if(data.userName.split(',').length > 1) {
+                          userName = data.userName.split(',').slice(0, 1)  + ' 等'
+                          $('.tooltip-names').text(data.userName.replace(/,/g, "、"))
+                          $('.tooltip-names').show()
+                        } else {
+                          userName = data.userName
+                        }
+                       $('.join-bid-persons .persons').text(userName)
+                      } else {
+                        $('.join-bid-persons').hide()
+                      }
+                      if(countTimer) {
+                        clearInterval(countTimer)
+                      }
+                      // 开标倒计时
+                      var bidEndTime = data.bidEndTime ? data.bidEndTime * 1000 : null
+                      var currentTime = data.currentTime ?   data.currentTime * 1000 : Date.now()
+                      if(bidEndTime && bidEndTime > currentTime && bidEndTime > Date.now()) {
+                        $('.join-bid-countdown').show()
+                        var time = getCountDown(bidEndTime, currentTime)
+                        $('.join-bid-countdown .count-down').text(time)
+                        countTimer = setInterval(function () {
+                          currentTime += 1000
+                          if(bidEndTime > currentTime) {
+                            var time = getCountDown(bidEndTime, currentTime)
+                            $('.join-bid-countdown .count-down').text(time)
+                          } else {
+                            $('.join-bid-countdown').hide()
+                            $('.tooltip-names').hide()
+                            $('#bidJoined').hide()
+                            $('#bidJoin').hide()
+                          }
+                        }, 1000)
+                      }
+                    }
+                  }
+                })
+              }
+              // 初始化参标的一些操作显示项
+              function initBidJoinBtn() {
+                $('.join-bid-countdown').hide()
+                $('.tooltip-names').hide()
+                $('.join-bid-persons').hide()
+                $('#bidJoin').hide()
+                $('#bidJoined').hide()
+              }
+              getBidIsJoin()
+
+              /******参标********/
+              /**
+               * 参标、终止参标
+               * @param action in:参标;out:终止参标;transfer:划转
+               * @param bidIds 招标信息id(加密) 必传
+               * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传
+               * @param callback
+               */
+              function joinBidAction (action) {
+                var params = {
+                  bidIds: _id
+                }
+                $.ajax({
+                  type:'post',
+                  contentType: "application/json",
+                  url:'/jyapi/jybx/core/participate/' + action + '/info',
+                  data: JSON.stringify(params),
+                  dataType: 'json',
+                  success: function(r){
+                    if (r && r.data && r.error_code == 0) {
+                     if(action === 'out'){
+                       $('#bidJoin').show()
+                       $('#bidJoined').hide()
+                       toastFn('终止参标操作成功!')
+                     } else {
+                       toastFn('已参标,请前往我的参标项目列表查看。')
+                       $('#bidJoin').hide()
+                       $('#bidJoined').show()
+                     }
+                      getBidIsJoin()
+                    } else if(r.error_code == -1) {
+                      var msg = r.error_msg || '操作错误,请稍后重试'
+                      toastFn(msg)
+                    }
+                  }
                 })
-              </script>
+              }
+              // 计算倒计时
+              function getCountDown(eTime, sTime) {
+                var diffTime = eTime - sTime
+                var day = Math.floor(diffTime / 86400000)
+                var hour = Math.floor((diffTime / 3600000) % 24)
+                var min = Math.floor((diffTime / 60000) % 60)
+                var sec = Math.floor((diffTime / 1000) % 60)
+                hour = hour < 10 && hour > 0 ? '0' + hour : hour
+                min = min < 10 && min > 0 ? '0' + min : min
+                sec = sec < 10 && sec > 0 ? '0' + sec : sec
+                return (day > 0 ? day + '天' : '') + hour + '小时' + min + '分' + sec + '秒'
+              }
+            </script>
+            <div class="cutline"></div>
+            <!--			<div class="com-prebuilt mask-zz hidden" style="position:relative;filter: blur(4px)">-->
+            <div class="com-prebuilt hidden" style="position:relative;">
+                <div class="mask-zz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
+                    <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
+                    <div class="mask-zz" style="position:absolute; left: 50%; top: 50%; margin-top: -110px;margin-left: -250px;width: 500px;height: 220px;background-color: white;z-index: 100;border-radius: 10px">
+                        <div style="position: relative">
+                            <img style="width: 100%;height: 100px;" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
+                            <div id="tip-title" style="position: absolute;top: 50%;left: 50%; margin-top: -13px;transform: translateX(-50%);height: 26px;color: antiquewhite;font-size: 18px;">拟建项目抢先获知</div>
+                        </div>
+                        <div class="tip-box">
+                            <div class="tip-text" style="margin-top: 12px">提前获取正在审批中的新项目,比招标信息更超前!</div>
+                            <div class="tip-text">助您提前了解项目信息,把握重要商机!</div>
+                            <button class="detail-nj-btn" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 20px;margin-top: 24px">免费体验</button>
+                        </div>
+                    </div>
+                </div>
+                <div class="mask-zzz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
+                    <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
+                    <div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 500px;background-color: white;z-index: 100;border-radius: 10px">
+                        <div style="position: relative">
+                            <img style="width: 100%;height: 35%" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
+                            <div style="position: absolute;top: 50%;left: 50%; margin-top: -13px;margin-left: -90px;width: 180px;height: 26px;color: antiquewhite;font-size: 16px;">想中标?提前介入很关键!</div>
+                        </div>
+                        <div class="tip-box">
+                            <div class="tip-text">采购意向项目全公开,抢先获知采购项目需求,</div>
+                            <div class="tip-text">提前主动介入,中标几率更高!</div>
+                            <button class="detail-nj-btn" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 12px;margin-top: 10px">免费体验</button>
+                        </div>
+                    </div>
+                </div>
+                <div class="mask-zzz hidden" style="position:absolute; top:0;width: 900px;padding:0;height: 408px;background-color:white;z-index: 1;">
+                    <img style="width: 100%;height: 100%" src="/images/pc/pc_mh.png">
+                    <div class="mask-zzz" style="position:absolute; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0);width: 500px;background-color: white;z-index: 100;border-radius: 10px">
+                        <div style="position: relative">
+                            <img style="width: 100%;height: 35%" src='{{Msg "seo" "cdn"}}/images/pc/pc_zzt.png?v={{Msg "seo" "version"}}'>
+                            <div style="position: absolute;top: 50%;left: 50%; margin-top: -13px;margin-left: -90px;width: 180px;height: 26px;color: antiquewhite;font-size: 16px;">免费查看更多公告</div>
+                        </div>
+                        <div class="tip-box">
+                            <div class="tip-text">请完善个人信息,获取更多免费查看公告权限</div>
+                            <button class="detail-nj-btn  jyarticle_see3" style="background: #2CB7CA;color: white;border:none;width: 132px;height: 36px;border-radius: 6px;margin-bottom: 12px;margin-top: 10px">立即解锁</button>
+                        </div>
+                    </div>
+                </div>
             </div>
-            {{end}}
-            {{end}}
-            {{end}}
-            {{end}}
-          </div>
-					<div style="clear:none"></div>
-				</div>
-			</div>
-			<div class="tabfat">
-				<!-- 非<拟建项目>、<采购意向>基本信息表格 -->
-				<div id="tab2" style="display:none;">
-					<div class="baseInfo bid_base">
-						<span>基本信息</span>
-						<div class="bid_dev" style="position: relative;">
-							<span class="bid_dev_title">项目投标怎么报价?为你提供类似项目预算分析!</span>
-							<el-popover
-									popper-class="bidtrggirPover"
-									placement="bottom"
-									width="514"
-									title=""
-									:trigger="optionType">
+            <div class="lead-btn-nj" style="color:#2cb7ca;margin:15px 0;display:none;"><div class="adv_tosieve"></div><div class="join" onclick="adv_statistics(this)"><a style="color:#fff;text-decoration:none" class="adv_tosieve-btn"></a></div></div>
+            {{if .T.obj.detail}}
+            <div class="recoveryfat" style="display:none;">
+                <div class="recoveryhead">
+                    <div class="tab2 active" onclick="jumpTab('2')">公告摘要</div>
+                    <div class="tab1" onclick="jumpTab('1')">公告正文</div>
+                    <div class="tab3">
+                        {{if .T.obj.site}}
+                        {{if eq .T.obj.site "剑鱼信息发布平台"}}
+                        {{if .T.obj.recommended_service}}
+                        {{if eq .T.obj.recommended_service 1}}
+                        <div class="pubinfo">
+                            <span>该信息由用户发布,急寻供应商</span>
+                            <span class="btnn">点击报名</span>
+                            <script>
+                              $(".btnn").click(function(){
+                                //点击报名事件处理
+                                // vm.showForm = true
+                                var infoid = window.location.pathname.split("/")[3].split(".html")[0]
+                                vm.isNeedSubmit('peugeot_supplier_regist', function () {
+                                  vm.showSuccess = true
+                                },"",infoid)
+                                vm.dialogTitleTop='供应商报名'
+                                vm.dialogTitle = '请完善您的个人信息,抢先对接采购单位'
+                              })
+                            </script>
+                        </div>
+                        {{end}}
+                        {{end}}
+                        {{end}}
+                        {{end}}
+                    </div>
+                    <div style="clear:none"></div>
+                </div>
+            </div>
+            <div class="tabfat">
+                <!-- 非<拟建项目>、<采购意向>基本信息表格 -->
+                <div id="tab2" style="display:none;">
+                    <div class="baseInfo bid_base">
+                        <span>基本信息</span>
+                        <div class="bid_dev" style="position: relative;">
+                            <span class="bid_dev_title">项目投标怎么报价?为你提供类似项目预算分析!</span>
+                            <el-popover
+                                    popper-class="bidtrggirPover"
+                                    placement="bottom"
+                                    width="514"
+                                    title=""
+                                    :trigger="optionType">
 							<span class="bid_dev_btn" @click="linkroute" slot="reference">
 								<span class="bid_dev_text">投标决策分析</span>
 								<span class="bid_icon_arrow"></span>
 							</span>
-								<div id="bidhistory">
-									<div class="bidconhistory">
-										<!-- <span class="hyone_bid"></span> -->
-										<div  id="bidhtlist" style="overflow-y: auto;padding: 20px;">
-											<div class="bidthead">
-												<span style="font-size: 18px; color: #1d1d1d; line-height: 28px;">投标决策分析</span>
-												<ul class="bidtagul">
-													<li class="bidtaglist">中标企业预测</li>
-													<li class="bidtaglist">预算</li>
-													<li class="bidtaglist">单位类型</li>
-													<li class="bidtaglist">区域分布</li>
-													<li class="bidtaglist">评标专家</li>
-												</ul>
-											</div>
-											<div class="bidcontent">
-												<ul class="bidcon_ul" v-if="bidnum < 2">
-													<li class="bidcon_list" v-if="bidinfo.all_counts != 0">
-														<div class="bidcomputed">
-															<span class="bid_num" v-html="bidinfo.all_counts"></span>
-															<span class="bid_unit">个</span>
-														</div>
-														<div class="bidproject">类似项目</div>
-													</li>
-													<li class="bidcon_list" v-if="bidinfo.all_winners != 0">
-														<div class="bidcomputed">
-															<span class="bid_num" v-html="bidinfo.all_winners"></span>
-															<span class="bid_unit">个</span>
-														</div>
-														<div class="bidproject">热点中标企业</div>
-													</li>
-													<li class="bidcon_list" v-if="bidinfo.all_money != 0">
-														<div class="bidcomputed">
-															<span class="bid_num" v-html="bidinfo.all_money"></span>
-															<span class="bid_unit">万元</span>
-														</div>
-														<div class="bidproject">项目规模</div>
-													</li>
-													<li class="bidcon_list" v-if="bidinfo.all_counts == 0 || bidinfo.all_winners == 0 || bidinfo.all_money == 0">
-														<div class="bidcomputed">
-															<span class="bid_num" v-html="bidinfo.all_review_experts"></span>
-															<span class="bid_unit">万</span>
-														</div>
-														<div class="bidproject">评标专家</div>
-													</li>
-												</ul>
-												<div class="bid_tel">
-													<img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
-													<span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
-												</div>
-												<div class="bid_classfun">
-													<div class="classfun_list">
-														<img src="/images/blue-duihao.png" style="width: 20px;height: 20px;" alt="">
-														<span class="classs_text">类似项目帮多维度分析</span>
-													</div>
-													<div class="classfun_list">
-														<img src="/images/blue-duihao.png" style="width: 20px;height: 20px;" alt="">
-														<span class="classs_text">辅助投标策略及报价参考</span>
-													</div>
-												</div>
-											</div>
-											<div class="bidfoot">
-												<div class="bid_button_cancel bid_btn" @click="onlineQue">在线咨询</div>
-												<div class="bid_button_confirm bid_btn" @click="freeUse">免费体验</div>
-											</div>
-										</div>
-									</div>
-								</div>
-							</el-popover>
-							<el-dialog
-									:visible.sync="dialogVisible"
-									custom-class="bidpover"
-									:show-close="showClose"
-									width="532">
-								<div class="bid_header">
-									<div class="big_title">欢迎体验剑鱼大会员</div>
-									<div class="big_infor">请完善个人信息,免费辅助投标决策及报价参考!</div>
-								</div>
-								<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
-									<el-form-item label="姓名:" prop="name">
-										<el-input v-model="ruleForm.name" placeholder="请输入姓名"></el-input>
-									</el-form-item>
-									<el-form-item label="手机号:" prop="phone">
-										<el-input v-model="ruleForm.name" placeholder="请输入手机号"></el-input>
-									</el-form-item>
-									<el-form-item label="公司名称:" prop="company">
-										<el-input v-model="ruleForm.name" placeholder="请输入公司名称"></el-input>
-									</el-form-item>
-									<el-form-item label="职位:" prop="region">
-										<el-select v-model="ruleForm.region" placeholder="请选择活动区域">
-											<el-option label="区域一" value="shanghai"></el-option>
-											<el-option label="区域二" value="beijing"></el-option>
-										</el-select>
-									</el-form-item>
-									<el-button type="primary" @click="submitForm('ruleForm')">立即提交</el-button>
-									<!-- </el-form-item> -->
-								</el-form>
-							</el-dialog>
-						</div>
-					</div>
-					<div class="baseTable">
-						<table>
-							<tr>
-								<td class="tab-type">省份</td>
-								<td class="tab-cont">{{if eq .T.obj.area "A"}}全国{{else}}{{.T.obj.area}}{{end}}</td>
-								<td class="tab-type">城市</td>
-								<td class="tab-cont">{{.T.obj.city}}</td>
-							</tr>
-							<tr>
-								<td class="tab-type" style="padding-right: 0px;">招标代理机构</td>
-								<td class="tab-cont">
-									<div class="cont-cont">{{.T.obj.agency}}</div>
-									<div class="cont-recy" onclick="recoveryerr(this,'agency','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-								<td class="tab-type">项目名称</td>
-								<td class="tab-cont">
-									<div class="cont-cont">{{.T.obj.projectname}}</div>
-									<div class="cont-recy" onclick="recoveryerr(this,'projectname','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-							</tr>
-							<tr>
-								<td class="tab-type">采购单位</td>
-								<td class="tab-cont" style="position: relative;">
-									{{if or (or .T.isMember .T.isVip) .T.isEntniche }}
-                    {{if .T.isEntnicheNew}}
-                    <!-- 新商机管理用户跳商机管理采购单位画像 -->
-									  <div class="cont-cont portrait_img" href-data="/entpc/unit_portrayal/{{.T.obj.buyer}}" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
-                    {{else}}
-									  <div class="cont-cont portrait_img" href-data="/swordfish/page_big_pc/unit_portrayal/{{.T.obj.buyer}}" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
-									  {{end}}
-                    <div class="cont-recy" onclick="recoveryerr(this,'buyer','')">纠错</div>
-                    {{if or .T.isEntnicheNew .T.isEntService}}
-                    <div class="claim">{{if .T.obj.buyer}}认领{{end}}</div>
-                    {{else}}
-                    <div class="portrait_img only-text">{{if .T.obj.buyer}}立即查看{{end}}</div>
-                    {{end}}
-                    <div style="display:none;"></div>
-									{{else}}
-									<el-popover
-											popper-class="bidtrggirPover"
-											placement="bottom-start"
-											width="664"
-                      @show="getBuyerFreeData"
-											trigger="hover">
-										<div slot="reference">
-											<div class="cont-cont portrait_img no-show-tip" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
-											<div class="portrait_img only-text no-show-tip">{{if .T.obj.buyer}}立即查看{{end}}</div>
-										</div>
-										<div id="buyer-popover" class="portrait-popover">
-											<div class="bidconhistory">
-												<div style="overflow-y: auto;padding: 20px;">
-													<div class="bidthead" style="padding-bottom: 18px;border-bottom: 1px solid #ebebeb;">
-														<p style="font-size: 18px; color: #1d1d1d; line-height: 28px;">{{.T.obj.buyer}}</p>
-														<div class="buyer-subtitle">
+                                <div id="bidhistory">
+                                    <div class="bidconhistory">
+                                        <!-- <span class="hyone_bid"></span> -->
+                                        <div  id="bidhtlist" style="overflow-y: auto;padding: 20px;">
+                                            <div class="bidthead">
+                                                <span style="font-size: 18px; color: #1d1d1d; line-height: 28px;">投标决策分析</span>
+                                                <ul class="bidtagul">
+                                                    <li class="bidtaglist">中标企业预测</li>
+                                                    <li class="bidtaglist">预算</li>
+                                                    <li class="bidtaglist">单位类型</li>
+                                                    <li class="bidtaglist">区域分布</li>
+                                                    <li class="bidtaglist">评标专家</li>
+                                                </ul>
+                                            </div>
+                                            <div class="bidcontent">
+                                                <ul class="bidcon_ul" v-if="bidnum < 2">
+                                                    <li class="bidcon_list" v-if="bidinfo.all_counts != 0">
+                                                        <div class="bidcomputed">
+                                                            <span class="bid_num" v-html="bidinfo.all_counts"></span>
+                                                            <span class="bid_unit">个</span>
+                                                        </div>
+                                                        <div class="bidproject">类似项目</div>
+                                                    </li>
+                                                    <li class="bidcon_list" v-if="bidinfo.all_winners != 0">
+                                                        <div class="bidcomputed">
+                                                            <span class="bid_num" v-html="bidinfo.all_winners"></span>
+                                                            <span class="bid_unit">个</span>
+                                                        </div>
+                                                        <div class="bidproject">热点中标企业</div>
+                                                    </li>
+                                                    <li class="bidcon_list" v-if="bidinfo.all_money != 0">
+                                                        <div class="bidcomputed">
+                                                            <span class="bid_num" v-html="bidinfo.all_money"></span>
+                                                            <span class="bid_unit">万元</span>
+                                                        </div>
+                                                        <div class="bidproject">项目规模</div>
+                                                    </li>
+                                                    <li class="bidcon_list" v-if="bidinfo.all_counts == 0 || bidinfo.all_winners == 0 || bidinfo.all_money == 0">
+                                                        <div class="bidcomputed">
+                                                            <span class="bid_num" v-html="bidinfo.all_review_experts"></span>
+                                                            <span class="bid_unit">万</span>
+                                                        </div>
+                                                        <div class="bidproject">评标专家</div>
+                                                    </li>
+                                                </ul>
+                                                <div class="bid_tel">
+                                                    <img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
+                                                    <span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
+                                                </div>
+                                                <div class="bid_classfun">
+                                                    <div class="classfun_list">
+                                                        <img src="/images/blue-duihao.png" style="width: 20px;height: 20px;" alt="">
+                                                        <span class="classs_text">类似项目帮多维度分析</span>
+                                                    </div>
+                                                    <div class="classfun_list">
+                                                        <img src="/images/blue-duihao.png" style="width: 20px;height: 20px;" alt="">
+                                                        <span class="classs_text">辅助投标策略及报价参考</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="bidfoot">
+                                                <div class="bid_button_cancel bid_btn" @click="onlineQue">在线咨询</div>
+                                                <div class="bid_button_confirm bid_btn" @click="freeUse">免费体验</div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </el-popover>
+                            <el-dialog
+                                    :visible.sync="dialogVisible"
+                                    custom-class="bidpover"
+                                    :show-close="showClose"
+                                    width="532">
+                                <div class="bid_header">
+                                    <div class="big_title">欢迎体验剑鱼大会员</div>
+                                    <div class="big_infor">请完善个人信息,免费辅助投标决策及报价参考!</div>
+                                </div>
+                                <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+                                    <el-form-item label="姓名:" prop="name">
+                                        <el-input v-model="ruleForm.name" placeholder="请输入姓名"></el-input>
+                                    </el-form-item>
+                                    <el-form-item label="手机号:" prop="phone">
+                                        <el-input v-model="ruleForm.name" placeholder="请输入手机号"></el-input>
+                                    </el-form-item>
+                                    <el-form-item label="公司名称:" prop="company">
+                                        <el-input v-model="ruleForm.name" placeholder="请输入公司名称"></el-input>
+                                    </el-form-item>
+                                    <el-form-item label="职位:" prop="region">
+                                        <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
+                                            <el-option label="区域一" value="shanghai"></el-option>
+                                            <el-option label="区域二" value="beijing"></el-option>
+                                        </el-select>
+                                    </el-form-item>
+                                    <el-button type="primary" @click="submitForm('ruleForm')">立即提交</el-button>
+                                    <!-- </el-form-item> -->
+                                </el-form>
+                            </el-dialog>
+                        </div>
+                    </div>
+                    <div class="baseTable">
+                        <table>
+                            <tr>
+                                <td class="tab-type">省份</td>
+                                <td class="tab-cont">{{if eq .T.obj.area "A"}}全国{{else}}{{.T.obj.area}}{{end}}</td>
+                                <td class="tab-type">城市</td>
+                                <td class="tab-cont">{{.T.obj.city}}</td>
+                            </tr>
+                            <tr>
+                                <td class="tab-type" style="padding-right: 0px;">招标代理机构</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont">{{.T.obj.agency}}</div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'agency','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                                <td class="tab-type">项目名称</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont">{{.T.obj.projectname}}</div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'projectname','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="tab-type">采购单位</td>
+                                <td class="tab-cont" style="position: relative;">
+                                    {{if or (or .T.isMember .T.isVip) .T.isEntniche }}
+                                    {{if .T.isEntnicheNew}}
+                                    <!-- 新商机管理用户跳商机管理采购单位画像 -->
+                                    <div class="cont-cont portrait_img" href-data="/entpc/unit_portrayal/{{.T.obj.buyer}}" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
+                                    {{else}}
+                                    <div class="cont-cont portrait_img" href-data="/swordfish/page_big_pc/unit_portrayal/{{.T.obj.buyer}}" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
+                                    {{end}}
+                                    <div class="cont-recy" onclick="recoveryerr(this,'buyer','')">纠错</div>
+                                    {{if or .T.isEntnicheNew .T.isEntService}}
+                                    <div class="claim">{{if .T.obj.buyer}}认领{{end}}</div>
+                                    {{else}}
+                                    <div class="portrait_img only-text">{{if .T.obj.buyer}}立即查看{{end}}</div>
+                                    {{end}}
+                                    <div style="display:none;"></div>
+                                    {{else}}
+                                    <el-popover
+                                            popper-class="bidtrggirPover"
+                                            placement="bottom-start"
+                                            width="664"
+                                            @show="getBuyerFreeData"
+                                            trigger="hover">
+                                        <div slot="reference">
+                                            <div class="cont-cont portrait_img no-show-tip" tip-data="查看采购单位画像">{{.T.obj.buyer}} </div>
+                                            <div class="portrait_img only-text no-show-tip">{{if .T.obj.buyer}}立即查看{{end}}</div>
+                                        </div>
+                                        <div id="buyer-popover" class="portrait-popover">
+                                            <div class="bidconhistory">
+                                                <div style="overflow-y: auto;padding: 20px;">
+                                                    <div class="bidthead" style="padding-bottom: 18px;border-bottom: 1px solid #ebebeb;">
+                                                        <p style="font-size: 18px; color: #1d1d1d; line-height: 28px;">{{.T.obj.buyer}}</p>
+                                                        <div class="buyer-subtitle">
                               <span style="margin-right: 32px;">
                                 <i class="area-icon"></i>所在地:
                                 <span v-html="buyerInfo.province"></span>
                                 <span v-html="buyerInfo.city"></span>
                               </span>
-															<span><i class="buyer-icon"></i>采购单位类型: <span v-html="buyerInfo.buyerclass"></span></span>
-														</div>
-													</div>
-													<div class="bidcontent">
-														<div class="clearfix buyer-info">
-															<div class="buyer-info-item">
+                                                            <span><i class="buyer-icon"></i>采购单位类型: <span v-html="buyerInfo.buyerclass"></span></span>
+                                                        </div>
+                                                    </div>
+                                                    <div class="bidcontent">
+                                                        <div class="clearfix buyer-info">
+                                                            <div class="buyer-info-item">
                                 <span class="b-i-value">
                                   <strong v-html="buyerInfo.biddingCount"></strong>
                                   <span v-if="buyerInfo.biddingCount != '--'">条</span>
                                 </span>
-																<span class="b-i-label">招标动态</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">招标动态</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                                 <span class="b-i-value">
                                   <strong v-html="buyerInfo.contactCount"></strong>
                                   <span v-if="buyerInfo.contactCount != '--'">个</span>
                                 </span>
-																<span class="b-i-label">历史联系人</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">历史联系人</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                                 <span class="b-i-value">
                                   <strong v-html="buyerInfo.project_count"></strong>
                                   <span v-if="buyerInfo.project_count != '--'">个</span>
                                 </span>
-																<span class="b-i-label">采购项目数量</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">采购项目数量</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                                 <span class="b-i-value">
                                   <strong v-html="buyerInfo.bidamount_count"></strong>
                                   <span v-if="buyerInfo.bidamount_count != '--'"  v-html="buyerInfo.unit"></span>
                                 </span>
-                                <span class="b-i-label">采购规模</span>
-                              </div>
-                            </div>
-                            <div class="bid_tel">
-                              <img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
-                              <span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
-                            </div>
-                            <div class="contacts" v-if="buyerInfo && buyerInfo.contactList">
-                              <p class="contacts-title">采购单位通讯录</p>
-                              <p class="contacts-list" v-for="item in buyerInfo.contactList">
-                                <span class="c-l-time" v-if="item.date">成交时间:<span v-html="item.date"></span></span>
-                                <span class="c-l-way" v-if="item.contact">联系方式:<span v-html="item.contact"></span></span>
-                              </p>
-                            </div>
-                          </div>
-                          <div class="bidfoot">
-                            <div class="bid_button_cancel bid_btn" @click="window.open('/swordfish/page_big_pc/unit_portrayal/{{.T.obj.buyer}}')">查看详情</div>
-                            <!-- <div class="bid_button_confirm bid_btn" @click="goCollect('article_buyer_portrait')">一键开通</div> -->
-                            <div class="bid_button_confirm bid_btn" @click="location.href= '/swordfish/page_big_pc/free/svip/buy'">一键开通</div>
-                          </div>
-                        </div>
-                      </div>
+                                                                <span class="b-i-label">采购规模</span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="bid_tel">
+                                                            <img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
+                                                            <span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
+                                                        </div>
+                                                        <div class="contacts" v-if="buyerInfo && buyerInfo.contactList">
+                                                            <p class="contacts-title">采购单位通讯录</p>
+                                                            <p class="contacts-list" v-for="item in buyerInfo.contactList">
+                                                                <span class="c-l-time" v-if="item.date">成交时间:<span v-html="item.date"></span></span>
+                                                                <span class="c-l-way" v-if="item.contact">联系方式:<span v-html="item.contact"></span></span>
+                                                            </p>
+                                                        </div>
+                                                    </div>
+                                                    <div class="bidfoot">
+                                                        <div class="bid_button_cancel bid_btn" @click="window.open('/swordfish/page_big_pc/unit_portrayal/{{.T.obj.buyer}}')">查看详情</div>
+                                                        <!-- <div class="bid_button_confirm bid_btn" @click="goCollect('article_buyer_portrait')">一键开通</div> -->
+                                                        <div class="bid_button_confirm bid_btn" @click="location.href= '/swordfish/page_big_pc/free/svip/buy'">一键开通</div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </el-popover>
+                                    {{end}}
+                                </td>
+                                <td class="tab-type" style="padding-right: 9px;">采购联系人</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont">{{.T.obj.buyerperson}}</div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'buyerperson','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="tab-type">采购电话</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont buyertel">{{.T.obj.buyertel}}</div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'buyertel','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                                <td class="tab-type piddingfour" id="tdbudget"></td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont"></div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'budget','')"></div>
+                                    <div style="display:none;"></div>
+                                </td>
+                            </tr>
+                            <tr id="baselast" style="display:none;">
+                                <td class="tab-type">拟定单一来源采购供应商</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont">{{.T.obj.winner}}</div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'winner','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                                <td class="tab-type"></td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont"></div>
+                                    <div class="cont-recy"></div>
+                                    <div style="display:none;"></div>
+                                </td>
+                            </tr>
+                        </table>
                     </div>
-                  </el-popover>
-                  {{end}}
-								</td>
-								<td class="tab-type" style="padding-right: 9px;">采购联系人</td>
-								<td class="tab-cont">
-									<div class="cont-cont">{{.T.obj.buyerperson}}</div>
-									<div class="cont-recy" onclick="recoveryerr(this,'buyerperson','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-							</tr>
-							<tr>
-								<td class="tab-type">采购电话</td>
-								<td class="tab-cont">
-									<div class="cont-cont buyertel">{{.T.obj.buyertel}}</div>
-									<div class="cont-recy" onclick="recoveryerr(this,'buyertel','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-								<td class="tab-type piddingfour" id="tdbudget"></td>
-								<td class="tab-cont">
-									<div class="cont-cont"></div>
-									<div class="cont-recy" onclick="recoveryerr(this,'budget','')"></div>
-									<div style="display:none;"></div>
-								</td>
-							</tr>
-							<tr id="baselast" style="display:none;">
-								<td class="tab-type">拟定单一来源采购供应商</td>
-								<td class="tab-cont">
-									<div class="cont-cont">{{.T.obj.winner}}</div>
-									<div class="cont-recy" onclick="recoveryerr(this,'winner','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-								<td class="tab-type"></td>
-								<td class="tab-cont">
-									<div class="cont-cont"></div>
-									<div class="cont-recy"></div>
-									<div style="display:none;"></div>
-								</td>
-							</tr>
-						</table>
-					</div>
-					<div class="baseInfo" id="bidInfoTitle" style="display:none;">中标信息</div>
-					<div class="baseTable" id="bidInfoCont" style="display:none;">
-						<table>
-							<tr>
-								<td class="tab-type">中标单位</td>
-								<td class="bid-cont tab-cont " style="position: relative;">
-									{{if or (or .T.isMember .T.isVip) .T.isEntniche }}
-									<div>
-                     {{ range $index, $value := .T.obj.winnerMap }}
-                    <span style='position: relative;'>
+                    <div class="baseInfo" id="bidInfoTitle" style="display:none;">中标信息</div>
+                    <div class="baseTable" id="bidInfoCont" style="display:none;">
+                        <table>
+                            <tr>
+                                <td class="tab-type">中标单位</td>
+                                <td class="bid-cont tab-cont " style="position: relative;">
+                                    {{if or (or .T.isMember .T.isVip) .T.isEntniche }}
+                                    <div>
+                                        {{ range $index, $value := .T.obj.winnerMap }}
+                                        <span style='position: relative;'>
                     <span class="cont-cont portrait_img winners" {{if  $value}} tip-data="查看企业画像"{{end}}>{{$index}}</span>
                     <span class="winner-point">、</span>
                     </span>
-                     {{ end }}
-                      <div class="cont-recy" onclick="recoveryerr(this,'winner','')">纠错</div>
-  										<div style="display:none;"></div>
-									</div>
-									{{else}}
-									<el-popover
-											popper-class="bidtrggirPover"
-											placement="bottom-start"
-											width="664"
-											trigger="hover">
-										<div slot="reference">
-                     {{ range $index, $value := .T.obj.winnerMap }}
-											<span class="cont-cont portrait_img no-show-tip winners"  @mouseenter="setMouseover('{{$value}}')">{{$index}}</span>
-                      <span class='winner-point'>、</span>
-                      {{end}}
-										</div>
-										<div id="winner-popover" class="portrait-popover">
-											<div class="bidconhistory">
-												<div style="overflow-y: auto;padding: 20px;">
-													<div class="bidthead" style="padding-bottom: 18px;border-bottom: 1px solid #ebebeb;">
-														<p  v-if="winnerInfo.company_name"  v-html="winnerInfo.company_name" style="font-size: 18px; color: #1d1d1d; line-height: 28px;"></p>
-														<div class="buyer-subtitle">
+                                        {{ end }}
+                                        <div class="cont-recy" onclick="recoveryerr(this,'winner','')">纠错</div>
+                                        <div style="display:none;"></div>
+                                    </div>
+                                    {{else}}
+                                    <el-popover
+                                            popper-class="bidtrggirPover"
+                                            placement="bottom-start"
+                                            width="664"
+                                            trigger="hover">
+                                        <div slot="reference">
+                                            {{ range $index, $value := .T.obj.winnerMap }}
+                                            <span class="cont-cont portrait_img no-show-tip winners"  @mouseenter="setMouseover('{{$value}}')">{{$index}}</span>
+                                            <span class='winner-point'>、</span>
+                                            {{end}}
+                                        </div>
+                                        <div id="winner-popover" class="portrait-popover">
+                                            <div class="bidconhistory">
+                                                <div style="overflow-y: auto;padding: 20px;">
+                                                    <div class="bidthead" style="padding-bottom: 18px;border-bottom: 1px solid #ebebeb;">
+                                                        <p  v-if="winnerInfo.company_name"  v-html="winnerInfo.company_name" style="font-size: 18px; color: #1d1d1d; line-height: 28px;"></p>
+                                                        <div class="buyer-subtitle">
                             <span style="margin-right: 32px;" v-if="winnerInfo.status">
                               <span class="ent-status"  v-html="winnerInfo.status"></span>
                             </span>
-															<span v-if="winnerInfo.type" class="ent-type" v-html="winnerInfo.type"></span>
-														</div>
-													</div>
-													<div class="bidcontent">
-														<div class="clearfix buyer-info">
-															<div class="buyer-info-item">
+                                                            <span v-if="winnerInfo.type" class="ent-type" v-html="winnerInfo.type"></span>
+                                                        </div>
+                                                    </div>
+                                                    <div class="bidcontent">
+                                                        <div class="clearfix buyer-info">
+                                                            <div class="buyer-info-item">
                               <span class="b-i-value">
                                 <strong v-html="winnerInfo.biddingCount"></strong>
                                 <span v-if="winnerInfo.biddingCount != '--'">条</span>
                               </span>
-																<span class="b-i-label">项目动态</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">项目动态</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                               <span class="b-i-value">
                                 <strong v-html="winnerInfo.contactCount"></strong>
                                 <span v-if="winnerInfo.contactCount != '--'">个</span>
                               </span>
-																<span class="b-i-label">历史联系人</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">历史联系人</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                               <span class="b-i-value">
                                 <strong v-html="winnerInfo.project_count"></strong>
                                 <span v-if="winnerInfo.project_count != '--'">个</span>
                               </span>
-																<span class="b-i-label">项目数量</span>
-															</div>
-															<div class="buyer-info-item">
+                                                                <span class="b-i-label">项目数量</span>
+                                                            </div>
+                                                            <div class="buyer-info-item">
                               <span class="b-i-value">
                                 <strong v-html="winnerInfo.bidamount_count"></strong>
                                 <span v-if="winnerInfo.bidamount_count != '--'"  v-html="winnerInfo.unit"></span>
                               </span>
-																<span class="b-i-label">项目金额</span>
-															</div>
-														</div>
-														<div class="bid_tel">
-															<img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
-															<span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
-														</div>
-														<div class="contacts" v-if="winnerInfo && winnerInfo.contactList">
-															<p class="contacts-title">历史项目联系方式</p>
-															<p class="contacts-list" v-for="item in winnerInfo.contactList">
-																<span class="c-l-time" v-if="item.date">成交时间:<span v-html="item.date"></span></span>
-																<span class="c-l-way" v-if="item.contact">联系方式:<span v-html="item.contact"></span></span>
-															</p>
-														</div>
-													</div>
-													<div class="bidfoot">
-														<div class="bid_button_cancel bid_btn" @click="window.open(`/swordfish/page_big_pc/svip/ent_ser_portrait/${winnerInfo.entid}`)">查看详情</div>
-														<div class="bid_button_confirm bid_btn" @click="goCollect('article_ent_portrait')">一键预约</div>
-													</div>
-												</div>
-											</div>
-										</div>
-									</el-popover>
-									{{end}}
-								</td>
-                 <tbody>
-								<td class="tab-type piddingfour">中标金额(元)</td>
-								<td class="tab-cont">
-									<div class="cont-cont" id="bidamount"></div>
-									<div class="cont-recy" onclick="recoveryerr(this,'bidamount','')">纠错</div>
-									<div style="display:none;"></div>
-								</td>
-                  </tbody>
-							</tr>
-							<tr class="winnertel" style="display:none;position: relative">
-                <tbody>
-                  <td style="position: absolute;right: 54px;margin-top:12px;font-size: 14px;display:none;color:#888;" id="tel_source"></td>
-                </tbody>
-								<td class="tab-type">联系方式</td>
-								<td class="tab-cont" style="border-right: none;">
-                  <div class="cont-cont"><span id="winnertel"></span></div>
+                                                                <span class="b-i-label">项目金额</span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="bid_tel">
+                                                            <img src="/images/tel.png" style="width: 20px;height: 20px;" alt="">
+                                                            <span class="bid_phonetext">咨询 400-108-6670 了解更多</span>
+                                                        </div>
+                                                        <div class="contacts" v-if="winnerInfo && winnerInfo.contactList">
+                                                            <p class="contacts-title">历史项目联系方式</p>
+                                                            <p class="contacts-list" v-for="item in winnerInfo.contactList">
+                                                                <span class="c-l-time" v-if="item.date">成交时间:<span v-html="item.date"></span></span>
+                                                                <span class="c-l-way" v-if="item.contact">联系方式:<span v-html="item.contact"></span></span>
+                                                            </p>
+                                                        </div>
+                                                    </div>
+                                                    <div class="bidfoot">
+                                                        <div class="bid_button_cancel bid_btn" @click="window.open(`/swordfish/page_big_pc/svip/ent_ser_portrait/${winnerInfo.entid}`)">查看详情</div>
+                                                        <div class="bid_button_confirm bid_btn" @click="goCollect('article_ent_portrait')">一键预约</div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </el-popover>
+                                    {{end}}
+                                </td>
+                                <tbody>
+                                <td class="tab-type piddingfour">中标金额(元)</td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont" id="bidamount"></div>
+                                    <div class="cont-recy" onclick="recoveryerr(this,'bidamount','')">纠错</div>
+                                    <div style="display:none;"></div>
+                                </td>
+                                </tbody>
+                            </tr>
+                            <tr class="winnertel" style="display:none;position: relative">
+                                <tbody>
+                                <td style="position: absolute;right: 54px;margin-top:12px;font-size: 14px;display:none;color:#888;" id="tel_source"></td>
+                                </tbody>
+                                <td class="tab-type">联系方式</td>
+                                <td class="tab-cont" style="border-right: none;">
+                                    <div class="cont-cont"><span id="winnertel"></span></div>
 
-								</td>
-								<!-- <td class="tab-type piddingfour"></td>
-								<td class="tab-cont">
-									<div class="cont-cont"></div>
-									<div class="cont-recy"></div>
-									<div style="display:none;"></div>
-								</td> -->
-							</tr>
-						</table>
-					</div>
-				</div>
-				<!-- 超前项目(<拟建项目>、<采购意向>)基本信息表格 -->
-				<div id="advanced-project-table" v-cloak>
-					<table class="advanced-table" v-show="tableShow">
-						<caption>基本信息</caption>
-						<tbody>
-							<tr>
-								<td class="t-label">项目名称</td>
-								<td class="t-text" v-text="tableInfo.projectname"></td>
-								<td class="t-label">省份</td>
-								<td class="t-text" v-text="tableInfo.area"></td>
-							</tr>
-							<tr>
-								<td class="t-label">业主单位</td>
-								<td class="t-text tab-cont table-content-wrapper owner">
-									<template v-if="isEntnicheNew || isEntService">
-										<div
-											v-show="ownerEnable"
-											:href-data="'/entpc/unit_portrayal/' + tableInfo.owner"
-											v-text="tableInfo.owner"
-											tip-data="查看业主单位画像"
-											class="cont-cont portrait_img fl"></div>
-										<div class="claim claim-no fr" v-if="ownerEnable">认领</div>
-									</template>
-									<template v-else>
-										<div
-											v-show="ownerEnable"
-											:href-data="'/swordfish/page_big_pc/unit_portrayal/' + tableInfo.owner"
-											v-text="tableInfo.owner"
-											tip-data="查看业主单位画像"
-											class="cont-cont portrait_img fl"></div>
-										<div class="portrait_img only-text fr" v-if="ownerEnable">立即查看</div>
-									</template>
-								</td>
-								<td class="t-label">业主类型</td>
-								<td class="t-text" v-text="tableInfo.buyerclass"></td>
-							</tr>
-							<tr>
-								<td class="t-label">总投资</td>
-								<td class="t-text" v-text="tableInfo.total_investment"></td>
-								<td class="t-label">建设年限</td>
-								<td class="t-text" v-text="tableInfo.projectperiod"></td>
-							</tr>
-							<tr>
-								<td class="t-label">建设地点</td>
-								<td class="t-text whole-line" colspan="3" v-text="tableInfo.projectaddr"></td>
-							</tr>
-							<tr>
-								<td class="t-label">审批机关</td>
-								<td class="t-text" v-text="tableInfo.approvedept"></td>
-								<td class="t-label">审批事项</td>
-								<td class="t-text" v-text="tableInfo.approvecontent"></td>
-							</tr>
-							<tr>
-								<td class="t-label">审批代码</td>
-								<td class="t-text" v-text="tableInfo.approvecode"></td>
-								<td class="t-label">批准文号</td>
-								<td class="t-text" v-text="tableInfo.approvenumber"></td>
-							</tr>
-							<tr>
-								<td class="t-label">审批时间</td>
-								<td class="t-text" v-text="tableInfo.approvetime"></td>
-								<td class="t-label">审批结果</td>
-								<td class="t-text" v-text="tableInfo.approvestatus"></td>
-							</tr>
-							<tr>
-								<td class="t-label">建设内容</td>
-								<td class="t-text whole-line" colspan="3" v-text="tableInfo.project_scale"></td>
-							</tr>
-						</tbody>
-					</table>
-				</div>
-				<div class="explain" style="display:none;">*以上摘要信息由剑鱼标讯智能提取,仅供参考。如有误差,请联系客服进行处理。</div>
-				<div class="clearfix center-ad-container center-card-container" style="display:none;">
-					<!-- 大会员用户引流语 -->
-					{{if .T.isMember}}
-					<div class="center-card-item lead-btn" style="display: none;">
-						<div class="adv_tosieve cci-title"></div>
-						<div class="join" onclick="adv_statistics(this)">
-							<a class="adv_tosieve-btn cci-text cci-light suffix-right"></a>
-						</div>
-					</div>
-					{{else}}
-					<!-- 非大会员用户引流语 -->
-					<div class="center-card-item not-bigmember-slogan" style="display: none">
-						<div class="cci-title slogan-text"></div>
-						<div class="cci-content">
-							<span class="cci-text cci-light suffix-right free-btn">免费体验</span>
-							<span class="cci-text cci-dark suffix-right more-btn">了解更多</span>
-						</div>
-					</div>
-					{{end}}
-					<!-- 不判断身份都显示 -->
-					<div class="center-card-item third-party-verification">
-						<div class="cci-title">招投标必备,剑鱼认证服务</div>
-						<div class="cci-content">
-							<a class="cci-text cci-light suffix-right third-party-apply-for-button">申请认证</a>
-							<a class="cci-text cci-dark suffix-right learn-more" href="/swordfish/frontPage/enterpriseCertificatio/free/index" target="_blank">了解更多</a>
-						</div>
-					</div>
-				</div>
-				<div id="tab1">
-					<div class="com-detail">
-						{{Html (Regexp (Regexp (Regexp (Regexp (Regexp (Regexp .T.obj.detail "(\\n|\\\\n)\\s+" "\n") "(\\n|\\\\n)+" "<br/>") "<td>\\s*$" "") "<tr>\\s*$" "") "<tbody>\\s*$" "") "<table>\\s*$" "")}}
-					</div>
-				</div>
-			</div>
-			{{end}}
-			{{if .T.obj.projectinfo.attachments}}
-			<div class="preb-enclosure hidden">
-				<div class="preb-enno"><img src="{{Msg "seo" "cdn"}}/images/wx/enclosure.png"/>附件(1个)</div>
-			</div>
-			{{end}}
-			<div class="pdf-div hidden"></div>
-			{{if .T.isVip}}
-			<div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_viporiginaltext">
-				{{else}}
-				<div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_getoriginaltext">
-					{{end}}
-					<a target="_blank" class="com-original hidden">
-						<img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
-					</a>
-					<!--#onekey{padding:8px 40px;}-->
-					<!--<div class="onekey" data-toggle="modal" data-target="#myModal">一键报告排版问题</div>-->
-					<!--<div class="clicklike hidden">
-				<div class="jyuseful">
-					<img src="{{Msg "seo" "cdn"}}/images/praise_no.png"/>
-					<span class="hidden">{{if .T.obj.i_upno}}{{.T.obj.i_upno}}{{else}}0{{end}}</span>
-				</div>
-				<div class="jyuseless hidden">
-					<img src="{{Msg "seo" "cdn"}}/images/praise_yes.png"/>
-					<span class="hidden">{{if .T.obj.i_downno}}{{.T.obj.i_downno}}{{else}}0{{end}}</span>
-				</div>
-			</div>-->
-		</div>
-			<!--大会员附件下载 -->
-			<div id="attach-list" style="margin: 40px 0px;display: none">
-				<div>
-          <span style="font-weight: 400;font-size: 16px">附件下载</span>
-          <span class="free-download">免费下载1次</span>
-          <span class="super-vip-show" style="display:none;">
+                                </td>
+                                <!-- <td class="tab-type piddingfour"></td>
+                                <td class="tab-cont">
+                                    <div class="cont-cont"></div>
+                                    <div class="cont-recy"></div>
+                                    <div style="display:none;"></div>
+                                </td> -->
+                            </tr>
+                        </table>
+                    </div>
+                </div>
+                <!-- 超前项目(<拟建项目>、<采购意向>)基本信息表格 -->
+                <div id="advanced-project-table" v-cloak>
+                    <table class="advanced-table" v-show="tableShow">
+                        <caption>基本信息</caption>
+                        <tbody>
+                        <tr>
+                            <td class="t-label">项目名称</td>
+                            <td class="t-text" v-text="tableInfo.projectname"></td>
+                            <td class="t-label">省份</td>
+                            <td class="t-text" v-text="tableInfo.area"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">业主单位</td>
+                            <td class="t-text tab-cont table-content-wrapper owner">
+                                <template v-if="isEntnicheNew || isEntService">
+                                    <div
+                                            v-show="ownerEnable"
+                                            :href-data="'/entpc/unit_portrayal/' + tableInfo.owner"
+                                            v-text="tableInfo.owner"
+                                            tip-data="查看业主单位画像"
+                                            class="cont-cont portrait_img fl"></div>
+                                    <div class="claim claim-no fr" v-if="ownerEnable">认领</div>
+                                </template>
+                                <template v-else>
+                                    <div
+                                            v-show="ownerEnable"
+                                            :href-data="'/swordfish/page_big_pc/unit_portrayal/' + tableInfo.owner"
+                                            v-text="tableInfo.owner"
+                                            tip-data="查看业主单位画像"
+                                            class="cont-cont portrait_img fl"></div>
+                                    <div class="portrait_img only-text fr" v-if="ownerEnable">立即查看</div>
+                                </template>
+                            </td>
+                            <td class="t-label">业主类型</td>
+                            <td class="t-text" v-text="tableInfo.buyerclass"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">总投资</td>
+                            <td class="t-text" v-text="tableInfo.total_investment"></td>
+                            <td class="t-label">建设年限</td>
+                            <td class="t-text" v-text="tableInfo.projectperiod"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">建设地点</td>
+                            <td class="t-text whole-line" colspan="3" v-text="tableInfo.projectaddr"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">审批机关</td>
+                            <td class="t-text" v-text="tableInfo.approvedept"></td>
+                            <td class="t-label">审批事项</td>
+                            <td class="t-text" v-text="tableInfo.approvecontent"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">审批代码</td>
+                            <td class="t-text" v-text="tableInfo.approvecode"></td>
+                            <td class="t-label">批准文号</td>
+                            <td class="t-text" v-text="tableInfo.approvenumber"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">审批时间</td>
+                            <td class="t-text" v-text="tableInfo.approvetime"></td>
+                            <td class="t-label">审批结果</td>
+                            <td class="t-text" v-text="tableInfo.approvestatus"></td>
+                        </tr>
+                        <tr>
+                            <td class="t-label">建设内容</td>
+                            <td class="t-text whole-line" colspan="3" v-text="tableInfo.project_scale"></td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="explain" style="display:none;">*以上摘要信息由剑鱼标讯智能提取,仅供参考。如有误差,请联系客服进行处理。</div>
+                <div class="clearfix center-ad-container center-card-container" style="display:none;">
+                    <!-- 大会员用户引流语 -->
+                    {{if .T.isMember}}
+                    <div class="center-card-item lead-btn" style="display: none;">
+                        <div class="adv_tosieve cci-title"></div>
+                        <div class="join" onclick="adv_statistics(this)">
+                            <a class="adv_tosieve-btn cci-text cci-light suffix-right"></a>
+                        </div>
+                    </div>
+                    {{else}}
+                    <!-- 非大会员用户引流语 -->
+                    <div class="center-card-item not-bigmember-slogan" style="display: none">
+                        <div class="cci-title slogan-text"></div>
+                        <div class="cci-content">
+                            <span class="cci-text cci-light suffix-right free-btn">免费体验</span>
+                            <span class="cci-text cci-dark suffix-right more-btn">了解更多</span>
+                        </div>
+                    </div>
+                    {{end}}
+                    <!-- 不判断身份都显示 -->
+                    <div class="center-card-item third-party-verification">
+                        <div class="cci-title">招投标必备,剑鱼认证服务</div>
+                        <div class="cci-content">
+                            <a class="cci-text cci-light suffix-right third-party-apply-for-button">申请认证</a>
+                            <a class="cci-text cci-dark suffix-right learn-more" href="/swordfish/frontPage/enterpriseCertificatio/free/index" target="_blank">了解更多</a>
+                        </div>
+                    </div>
+                </div>
+                <div id="tab1">
+                    <div class="com-detail">
+                        {{Html (Regexp (Regexp (Regexp (Regexp (Regexp (Regexp .T.obj.detail "(\\n|\\\\n)\\s+" "\n") "(\\n|\\\\n)+" "<br/>") "<td>\\s*$" "") "<tr>\\s*$" "") "<tbody>\\s*$" "") "<table>\\s*$" "")}}
+                    </div>
+                </div>
+            </div>
+            {{end}}
+            {{if .T.obj.projectinfo.attachments}}
+            <div class="preb-enclosure hidden">
+                <div class="preb-enno"><img src="{{Msg "seo" "cdn"}}/images/wx/enclosure.png"/>附件(1个)</div>
+            </div>
+            {{end}}
+            <div class="pdf-div hidden"></div>
+            {{if .T.isVip}}
+            <div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_viporiginaltext">
+                {{else}}
+                <div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_getoriginaltext">
+                    {{end}}
+                    <a target="_blank" class="com-original hidden">
+                        <img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
+                    </a>
+                    <!--#onekey{padding:8px 40px;}-->
+                    <!--<div class="onekey" data-toggle="modal" data-target="#myModal">一键报告排版问题</div>-->
+                    <!--<div class="clicklike hidden">
+                <div class="jyuseful">
+                    <img src="{{Msg "seo" "cdn"}}/images/praise_no.png"/>
+                    <span class="hidden">{{if .T.obj.i_upno}}{{.T.obj.i_upno}}{{else}}0{{end}}</span>
+                </div>
+                <div class="jyuseless hidden">
+                    <img src="{{Msg "seo" "cdn"}}/images/praise_yes.png"/>
+                    <span class="hidden">{{if .T.obj.i_downno}}{{.T.obj.i_downno}}{{else}}0{{end}}</span>
+                </div>
+            </div>-->
+                </div>
+                <!--大会员附件下载 -->
+                <div id="attach-list" style="margin: 40px 0px;display: none">
+                    <div>
+                        <span style="font-weight: 400;font-size: 16px">附件下载</span>
+                        <span class="free-download">免费下载1次</span>
+                        <span class="super-vip-show" style="display:none;">
             <span class="file-count-tip">本月剩余:  <i class="file-count"></i>个</span>
             <img class="file-icon-help" src="/images/help-b.png" alt="">
             <span class="concat-kf recharge-new">立即充值</span>
           </span>
-          <span class="free-go-open" style="display:none;">
+                        <span class="free-go-open" style="display:none;">
             <span>如需下载更多附件,请开通超级订阅</span>
             <a class="concat-kf go-open-btn" href="/swordfish/page_big_pc/free/svip/buy">去开通>> </a>
           </span>
-        </div>
-				<div class="download-list" style="margin-top: 20px">
-				</div>
-      </div>
-      <div id="third-party-verify-attention" class="third-party-verify-attention" style="display:none;">
-        <span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
-      </div>
-		<center class="reward text-align">
-			<br><div>打赏</div>
-		</center>
-		{{if .T.obj.urltop}}<a class="trs" style="color:white"> </a>{{end}}
-	</div>
-	<div class="exposure-content-right--group">
-    <div onclick="adv_statistics(this)" adv_name="PC快照页-右部" class="exposure-content-right" id="B1" style="cursor: default;">
-      <!--通过下方脚本注入-->
-    </div>
-    <div onclick="adv_statistics(this)" adv_name="PC快照页-右部" class="exposure-content-right" id="B1-Medical">
-      <!--通过下方脚本注入-->
-    </div>
-    <script>
-      /**
-       * @date 2022-10-15
-       * 原有右侧曝光广告位区域,业务逻辑已无从确认
-       * 从代码逻辑上包含排除非启用状态广告(新版已通过Ad 函数支持无需前端判断)、随机展示一个广告
-       */
-			{{$s:=(Ad "jy-pccontent-right" -1 .Host)}}
-      var ADList={{$s}};
-      var ExcludeList = ""
-      if (ADList.length>0){
-        for (var i=0;i<ADList.length;i++ ){
-          if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
-            break;
-          }
-          var random=Math.floor(Math.random()*ADList.length);
-          if (ExcludeList.indexOf(random)>-1){
-            continue;
-          }
-          var AD=ADList[random];
-          if (AD.o_extend != undefined) {
-            var nowTime = new Date().getTime();
-            if (AD.o_extend.startTime!=undefined){
-              var stArr = AD.o_extend.startTime.split("-");
-              if (stArr.length==6){
-                var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
-                var stTime = new Date(stStr.replace(/-/g, '/')).getTime();
-                //未开始
-                if (stTime>nowTime){
-                  if (ExcludeList!=""){
-                    ExcludeList +="-"
-                  }
-                  ExcludeList = ExcludeList+ random
-                  continue
-                }
-              }
-            }
-            if (AD.o_extend.endTime!=undefined){
-              var etArr = AD.o_extend.endTime.split("-");
-              if (etArr.length==6){
-                var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
-                var etTime = new Date(etStr.replace(/-/g, '/')).getTime();
-                //已结束
-                if (etTime<nowTime){
-                  if (ExcludeList!=""){
-                    ExcludeList +="-"
+                    </div>
+                    <div class="download-list" style="margin-top: 20px">
+                    </div>
+                </div>
+                <div id="third-party-verify-attention" class="third-party-verify-attention" style="display:none;">
+                    <span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
+                </div>
+                <center class="reward text-align">
+                    <br><div>打赏</div>
+                </center>
+                {{if .T.obj.urltop}}<a class="trs" style="color:white"> </a>{{end}}
+            </div>
+            <div class="exposure-content-right--group">
+                <div onclick="adv_statistics(this)" adv_name="PC快照页-右部" class="exposure-content-right" id="B1" style="cursor: default;">
+                    <!--通过下方脚本注入-->
+                </div>
+                <div onclick="adv_statistics(this)" adv_name="PC快照页-右部" class="exposure-content-right" id="B1-Medical">
+                    <!--通过下方脚本注入-->
+                </div>
+                <script>
+                  /**
+                   * @date 2022-10-15
+                   * 原有右侧曝光广告位区域,业务逻辑已无从确认
+                   * 从代码逻辑上包含排除非启用状态广告(新版已通过Ad 函数支持无需前端判断)、随机展示一个广告
+                   */
+                  {{$s:=(Ad "jy-pccontent-right" -1 .Host)}}
+                  var ADList={{$s}};
+                  var ExcludeList = ""
+                  if (ADList.length>0){
+                    for (var i=0;i<ADList.length;i++ ){
+                      if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
+                        break;
+                      }
+                      var random=Math.floor(Math.random()*ADList.length);
+                      if (ExcludeList.indexOf(random)>-1){
+                        continue;
+                      }
+                      var AD=ADList[random];
+                      if (AD.o_extend != undefined) {
+                        var nowTime = new Date().getTime();
+                        if (AD.o_extend.startTime!=undefined){
+                          var stArr = AD.o_extend.startTime.split("-");
+                          if (stArr.length==6){
+                            var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
+                            var stTime = new Date(stStr.replace(/-/g, '/')).getTime();
+                            //未开始
+                            if (stTime>nowTime){
+                              if (ExcludeList!=""){
+                                ExcludeList +="-"
+                              }
+                              ExcludeList = ExcludeList+ random
+                              continue
+                            }
+                          }
+                        }
+                        if (AD.o_extend.endTime!=undefined){
+                          var etArr = AD.o_extend.endTime.split("-");
+                          if (etArr.length==6){
+                            var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
+                            var etTime = new Date(etStr.replace(/-/g, '/')).getTime();
+                            //已结束
+                            if (etTime<nowTime){
+                              if (ExcludeList!=""){
+                                ExcludeList +="-"
+                              }
+                              ExcludeList = ExcludeList+ random
+                              continue
+                            }
+                          }
+                        }
+                      }
+                      var ADHtml = "";
+                      if(AD.s_pic){
+                        if(AD.s_link){
+                          ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
+                        }
+                        ADHtml += "<img id='pc-article-content-right' src='"+AD.s_pic+"'>";
+                        if(AD.s_link){
+                          ADHtml += "</a>";
+                        }
+                      }else {
+                        ADHtml += AD.s_script;
+                      }
+                      $("#B1").html(ADHtml);
+                      break;
+                    }
                   }
-                  ExcludeList = ExcludeList+ random
-                  continue
-                }
-              }
-            }
-          }
-          var ADHtml = "";
-          if(AD.s_pic){
-              if(AD.s_link){
-                  ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
-              }
-              ADHtml += "<img id='pc-article-content-right' src='"+AD.s_pic+"'>";
-              if(AD.s_link){
-                  ADHtml += "</a>";
-              }
-          }else {
-              ADHtml += AD.s_script;
-          }
-          $("#B1").html(ADHtml);
-          break;
-        }
-      }
-      /**
-       * @date 2022-10-15
-       * 医疗卫生标签额外新增右侧曝光广告位区域
-       */
+                  /**
+                   * @date 2022-10-15
+                   * 医疗卫生标签额外新增右侧曝光广告位区域
+                   */
 
-      function addIndustryExclusive () {
-        {{$s_medical:=(Ad "jy-pccontent-right--medical" -1 .Host)}}
-        var ADListOfMedical = {{$s_medical}} || []
-        var waitAppendHtml = ''
+                  function addIndustryExclusive () {
+                    {{$s_medical:=(Ad "jy-pccontent-right--medical" -1 .Host)}}
+                    var ADListOfMedical = {{$s_medical}} || []
+                    var waitAppendHtml = ''
 
-        /**
-         * ADListOfMedical.forEach(function (item) {
-         *         waitAppendHtml += `
-         *         <div onclick="adv_statistics(this)" adv_name="${item.s_remark}" class="exposure-content-right" data-has-link="${Boolean(item.s_link)}">
-         *             <a dataHref="${item.s_link}"> <img src="${item.s_pic}"> </a>
-         *             <img src="${item.s_pic}">
-         *         </div>
-         *       `
-         *  })
-         */
-        ADListOfMedical.forEach(function (item) {
-          waitAppendHtml += "\n        <div onclick=\"adv_statistics(this)\" adv_name=\"".concat(item.s_remark, "\" class=\"exposure-content-right\" data-has-link=\"").concat(Boolean(item.s_link), "\">\n            <a dataHref=\"").concat(item.s_link, "\"> <img src=\"").concat(item.s_pic, "\"> </a>\n            <img src=\"").concat(item.s_pic, "\">\n        </div>\n      ");
-        });
+                    /**
+                     * ADListOfMedical.forEach(function (item) {
+                     *         waitAppendHtml += `
+                     *         <div onclick="adv_statistics(this)" adv_name="${item.s_remark}" class="exposure-content-right" data-has-link="${Boolean(item.s_link)}">
+                     *             <a dataHref="${item.s_link}"> <img src="${item.s_pic}"> </a>
+                     *             <img src="${item.s_pic}">
+                     *         </div>
+                     *       `
+                     *  })
+                     */
+                    ADListOfMedical.forEach(function (item) {
+                      waitAppendHtml += "\n        <div onclick=\"adv_statistics(this)\" adv_name=\"".concat(item.s_remark, "\" class=\"exposure-content-right\" data-has-link=\"").concat(Boolean(item.s_link), "\">\n            <a dataHref=\"").concat(item.s_link, "\"> <img src=\"").concat(item.s_pic, "\"> </a>\n            <img src=\"").concat(item.s_pic, "\">\n        </div>\n      ");
+                    });
 
-        $('#B1').after(waitAppendHtml)
-      }
+                    $('#B1').after(waitAppendHtml)
+                  }
 
-      try {
-        if (goTemplateData.params.obj.indadd === 'YLWS' || goTemplateData.params.obj.industry === '医疗卫生') {
-          addIndustryExclusive()
-        }
-      } catch (e) {}
-		</script>
-		<div class="_29p15mchdsg" style="margin-top: 12px"></div>
+                  try {
+                    if (goTemplateData.params.obj.indadd === 'YLWS' || goTemplateData.params.obj.industry === '医疗卫生') {
+                      addIndustryExclusive()
+                    }
+                  } catch (e) {}
+                </script>
+                <div class="_29p15mchdsg" style="margin-top: 12px"></div>
 
-			</div>
-			<!--去掉一键报告排版问题-->
-			<!--<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
-	    <div class="modal-dialog" style="width: 458px">
-	        <div class="modal-content" style="width: 458px;margin: auto;height: 300px;">
-	            <div class="modal-header">
-	                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-	                <h4 class="modal-title" id="myModalLabel" style="font-size:14px;">请描述排版存在的问题(非必填)</h4>
-	            </div>
-	            <div class="modal-body" style="height: 181px;">
-					<textarea class="form-control noresize" id="onekey-value" rows="6" maxlength="200"></textarea>
-				</div>
-	            <div class="modal-footer">
-	                <button type="button" class="btn" id="onekey">提交</button>
-	            </div>
-	        </div>
-	    </div>
-	</div>-->
-    <!--S-- NPS评分 --S-->
-    <div id="nps-container"></div>
-    <!--E-- NPS评分 --E-->
-			<div class="otherinfo">
-				<!--同一个项目的其他招标信息-->
-				{{if .T.projectOther}}
-				<div class="com-title">
-					{{if .T.obj.projectname}}{{.T.obj.projectname}}{{else if .T.obj.projectcode}}{{.T.obj.projectcode}}{{end}}<front>的其他信息</front>
-				</div>
-				<ul>
-					{{range $k,$v := .T.projectOther}}
-					<li>
-						<div class="com-index">{{$v.index}}.</div>
-						<div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
-						<div class="com-status">
-							{{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
-							{{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
-							{{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
-							{{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
-						</div>
-					</li>
-					{{end}}
-				</ul>
-				{{end}}
-				<!--同一个业主最近的其他招标信息-->
-				{{if .T.buyerOther}}
-				<div class="com-title">{{.T.obj.buyer}}<front>的其他信息</front></div>
-				<ul>
-					{{range $k,$v := .T.buyerOther}}
-					<li>
-						<div class="com-index">{{$v.index}}.</div>
-						<div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
-						<div class="com-status">
-							{{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
-							{{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
-							{{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
-							{{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
-						</div>
-					</li>
-					{{end}}
-				</ul>
-				{{end}}
-				<!--同一中标人最近中标的其他信息-->
-				{{if .T.winnerOther}}
-				<div class="com-title">{{.T.obj.winner}}<front>的其他信息</front></div>
-				<ul>
-					{{range $k,$v := .T.winnerOther}}
-					<li>
-						<div class="com-index">{{$v.index}}.</div>
-						<div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
-						<div class="com-status">
-							{{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
-							{{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
-							{{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
-							{{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
-						</div>
-					</li>
-					{{end}}
-				</ul>
-				{{end}}
-			</div>
-		</div>
-		<div   onclick="adv_statistics(this)" adv_name="PC快照页-底部"  class="adv-pccontent-bottom" id="B2" style="cursor:default;">
-			<script>
-				{{$s:=(Ad "jy-pccontent-bottom" -1 .Host)}}
-				var ADList={{$s}};
-				var ExcludeList = ""
-				if (ADList.length>0){
-					for (var i=0;i<ADList.length;i++ ){
-						if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
-							break;
-						}
-						var random=Math.floor(Math.random()*ADList.length);
-						if (ExcludeList.indexOf(random)>-1){
-							continue;
-						}
-						var AD=ADList[random];
-						if (AD.o_extend != undefined) {
-							var nowTime = new Date().getTime();
-							if (AD.o_extend.startTime!=undefined){
-								var stArr = AD.o_extend.startTime.split("-");
-								if (stArr.length==6){
-									var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
-									var stTime = new Date(stStr.replace(/-/g, '/')).getTime();
-									//未开始
-									if (stTime>nowTime){
-										if (ExcludeList!=""){
-											ExcludeList +="-"
-										}
-										ExcludeList = ExcludeList+ random
-										continue
-									}
-								}
-							}
-							if (AD.o_extend.endTime!=undefined){
-								var etArr = AD.o_extend.endTime.split("-");
-								if (etArr.length==6){
-									var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
-									var etTime = new Date(etStr.replace(/-/g, '/')).getTime();
-									//已结束
-									if (etTime<nowTime){
-										if (ExcludeList!=""){
-											ExcludeList +="-"
-										}
-										ExcludeList = ExcludeList+ random
-										continue
-									}
-								}
-							}
-						}
-						var ADHtml = "";
-						if(AD.s_pic){
-							if(AD.s_link){
-								ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
-							}
-							ADHtml += "<img id='pc-article-content-bottom' src='"+AD.s_pic+"'>";
-							if(AD.s_link){
-								ADHtml += "</a>";
-							}
-						}else {
-							ADHtml += AD.s_script;
-						}
-						$("#B2").html(ADHtml);
-						break;
-					}
-				}
-			</script>
-		</div>
-    <!-- 商机管理认领-自定义标签弹框 -->
-    <div class="tags-box" id="entNicheTags">
-      <div class="tags-inputs">
-        <div class="tag-input">
-          <div class="tag-labels"></div>
-          <input type="text" class="clear-input" maxlength="10" oninput="this.value=this.value.replace(/\s+/g,'')">
-          <div class="tag-placeholder">新增标签回车保存</div>
+            </div>
+            <!--去掉一键报告排版问题-->
+            <!--<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+        <div class="modal-dialog" style="width: 458px">
+            <div class="modal-content" style="width: 458px;margin: auto;height: 300px;">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    <h4 class="modal-title" id="myModalLabel" style="font-size:14px;">请描述排版存在的问题(非必填)</h4>
+                </div>
+                <div class="modal-body" style="height: 181px;">
+                    <textarea class="form-control noresize" id="onekey-value" rows="6" maxlength="200"></textarea>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn" id="onekey">提交</button>
+                </div>
+            </div>
+        </div>
+    </div>-->
+            <!--S-- NPS评分 --S-->
+            <div id="nps-container"></div>
+            <!--E-- NPS评分 --E-->
+            <div class="otherinfo">
+                <!--同一个项目的其他招标信息-->
+                {{if .T.projectOther}}
+                <div class="com-title">
+                    {{if .T.obj.projectname}}{{.T.obj.projectname}}{{else if .T.obj.projectcode}}{{.T.obj.projectcode}}{{end}}<front>的其他信息</front>
+                </div>
+                <ul>
+                    {{range $k,$v := .T.projectOther}}
+                    <li>
+                        <div class="com-index">{{$v.index}}.</div>
+                        <div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
+                        <div class="com-status">
+                            {{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
+                            {{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
+                            {{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
+                            {{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
+                        </div>
+                    </li>
+                    {{end}}
+                </ul>
+                {{end}}
+                <!--同一个业主最近的其他招标信息-->
+                {{if .T.buyerOther}}
+                <div class="com-title">{{.T.obj.buyer}}<front>的其他信息</front></div>
+                <ul>
+                    {{range $k,$v := .T.buyerOther}}
+                    <li>
+                        <div class="com-index">{{$v.index}}.</div>
+                        <div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
+                        <div class="com-status">
+                            {{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
+                            {{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
+                            {{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
+                            {{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
+                        </div>
+                    </li>
+                    {{end}}
+                </ul>
+                {{end}}
+                <!--同一中标人最近中标的其他信息-->
+                {{if .T.winnerOther}}
+                <div class="com-title">{{.T.obj.winner}}<front>的其他信息</front></div>
+                <ul>
+                    {{range $k,$v := .T.winnerOther}}
+                    <li>
+                        <div class="com-index">{{$v.index}}.</div>
+                        <div class="com-title"><a href="/article/content/{{$v._id}}.html{{if $v.industry}}?industry={{$v.industry}}{{end}}" target="_blank">{{$v.title}}</a></div>
+                        <div class="com-status">
+                            {{if $v.area}}<span class="com-area"><a href="/list/area/{{$v.areaadd}}.html">{{$v.area}}</a></span>{{end}}
+                            {{if $v.type}}<span class="com-type"><a href="/list/stype/{{$v.stypeadd}}.html">{{$v.type}}</a></span>{{end}}
+                            {{if $v.industry}}<span class="com-industry"><a href="/list/industry/{{$v.indadd}}.html">{{$v.industry}}</a></span>{{end}}
+                            {{if $v.publishtime}}<span class="com-time" data-value="{{$v.pbtime}}"><i class="glyphicon bofangjilu"></i>{{$v.publishtime}}</span>{{end}}
+                        </div>
+                    </li>
+                    {{end}}
+                </ul>
+                {{end}}
+            </div>
+        </div>
+        <div   onclick="adv_statistics(this)" adv_name="PC快照页-底部"  class="adv-pccontent-bottom" id="B2" style="cursor:default;">
+            <script>
+              {{$s:=(Ad "jy-pccontent-bottom" -1 .Host)}}
+              var ADList={{$s}};
+              var ExcludeList = ""
+              if (ADList.length>0){
+                for (var i=0;i<ADList.length;i++ ){
+                  if (ExcludeList!=""&&ExcludeList.split("-").length==ADList.length){
+                    break;
+                  }
+                  var random=Math.floor(Math.random()*ADList.length);
+                  if (ExcludeList.indexOf(random)>-1){
+                    continue;
+                  }
+                  var AD=ADList[random];
+                  if (AD.o_extend != undefined) {
+                    var nowTime = new Date().getTime();
+                    if (AD.o_extend.startTime!=undefined){
+                      var stArr = AD.o_extend.startTime.split("-");
+                      if (stArr.length==6){
+                        var stStr = stArr[0]+"-"+stArr[1]+"-"+stArr[2]+" "+stArr[3]+":"+stArr[4]+":"+stArr[5]
+                        var stTime = new Date(stStr.replace(/-/g, '/')).getTime();
+                        //未开始
+                        if (stTime>nowTime){
+                          if (ExcludeList!=""){
+                            ExcludeList +="-"
+                          }
+                          ExcludeList = ExcludeList+ random
+                          continue
+                        }
+                      }
+                    }
+                    if (AD.o_extend.endTime!=undefined){
+                      var etArr = AD.o_extend.endTime.split("-");
+                      if (etArr.length==6){
+                        var etStr = etArr[0]+"-"+etArr[1]+"-"+etArr[2]+" "+etArr[3]+":"+etArr[4]+":"+etArr[5]
+                        var etTime = new Date(etStr.replace(/-/g, '/')).getTime();
+                        //已结束
+                        if (etTime<nowTime){
+                          if (ExcludeList!=""){
+                            ExcludeList +="-"
+                          }
+                          ExcludeList = ExcludeList+ random
+                          continue
+                        }
+                      }
+                    }
+                  }
+                  var ADHtml = "";
+                  if(AD.s_pic){
+                    if(AD.s_link){
+                      ADHtml += "<a dataHref='"+AD.s_link+"' target='_blank'>";
+                    }
+                    ADHtml += "<img id='pc-article-content-bottom' src='"+AD.s_pic+"'>";
+                    if(AD.s_link){
+                      ADHtml += "</a>";
+                    }
+                  }else {
+                    ADHtml += AD.s_script;
+                  }
+                  $("#B2").html(ADHtml);
+                  break;
+                }
+              }
+            </script>
+        </div>
+        <!-- 商机管理认领-自定义标签弹框 -->
+        <div class="tags-box" id="entNicheTags">
+            <div class="tags-inputs">
+                <div class="tag-input">
+                    <div class="tag-labels"></div>
+                    <input type="text" class="clear-input" maxlength="10" oninput="this.value=this.value.replace(/\s+/g,'')">
+                    <div class="tag-placeholder">新增标签回车保存</div>
+                </div>
+                <div class="add-tag-button">添加并使用</div>
+            </div>
+            <div class="tags-list clearfix"></div>
+            <div class="tags-footer">
+                <div class="tags-button button-confirm">确认添加</div>
+                <div class="tags-button button-cancel">暂不添加</div>
+            </div>
         </div>
-        <div class="add-tag-button">添加并使用</div>
-      </div>
-      <div class="tags-list clearfix"></div>
-      <div class="tags-footer">
-        <div class="tags-button button-confirm">确认添加</div>
-        <div class="tags-button button-cancel">暂不添加</div>
-      </div>
     </div>
-	</div>
-	<div id="popup" class="pop-up poperr">
-		<div class="pop-head" id="pop-head">
-			<span>标出正确的项目名称</span>
-			<img src="{{Msg "seo" "cdn"}}/images/t-close.png"/>
-		</div>
-		<div class="pop-cont">
-			<div class="pop-text">
-				<input id="pop-textarea" type="text" class="form-control"/>
-			</div>
-			<div class="pop-botton">提交</div>
-		</div>
-		<div class="rec-null" style="display:none;">
-			<div class="null-head">提示</div>
-			<div class="null-cont">确认为空?</div>
-			<div class="null-feet">
-				<span class="null-yes">是</span><span class="null-no">否</span>
-			</div>
-		</div>
-	</div>
-  <div class="third-party-popover-content-template" style="display: none">
-    <div class="third-party popover-content-header">
-      <div class="p-c-h-title">剑鱼认证服务</div>
-      <div class="p-c-h-content">
-        <div class="p-c-h-c-list">
-          <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;认监委官网可查</div>
-          <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;认证品类齐全</div>
-          <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;量身定制方案</div>
+    <div id="popup" class="pop-up poperr">
+        <div class="pop-head" id="pop-head">
+            <span>标出正确的项目名称</span>
+            <img src="{{Msg "seo" "cdn"}}/images/t-close.png"/>
+        </div>
+        <div class="pop-cont">
+            <div class="pop-text">
+                <input id="pop-textarea" type="text" class="form-control"/>
+            </div>
+            <div class="pop-botton">提交</div>
+        </div>
+        <div class="rec-null" style="display:none;">
+            <div class="null-head">提示</div>
+            <div class="null-cont">确认为空?</div>
+            <div class="null-feet">
+                <span class="null-yes">是</span><span class="null-no">否</span>
+            </div>
         </div>
-        <div>招投标必备 · 品牌提升 · 奖励补贴 · 吸引投资</div>
-        <div>ISO体系认证丨信用评定丨服务体系认证丨其他认证证书</div>
-      </div>
     </div>
-    <div class="third-party popover-content-main bidcontent">
-      <div class="bid_tel">
-        <img src="/images/tel.png" alt="" style="width: 20px; height: 20px;">
-        <span class="bid_phonetext">咨询 $tel 了解更多</span>
-      </div>
-      <div class="p-c-m-content">
-        <div class="p-c-m-content-l bid_classfun">
-          <div class="classfun_list">
-            <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
-            <span class="classs_text">体系认证:品牌提升,投标加分,提升企业竞争力</span>
-          </div>
-          <div class="classfun_list">
-            <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
-            <span class="classs_text">信用认证:企业信用名片,招投标必备</span>
-          </div>
-          <div class="classfun_list">
-            <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
-            <span class="classs_text">服务体系认证:实力认证,竞争有优势</span>
-          </div>
+    <div class="third-party-popover-content-template" style="display: none">
+        <div class="third-party popover-content-header">
+            <div class="p-c-h-title">剑鱼认证服务</div>
+            <div class="p-c-h-content">
+                <div class="p-c-h-c-list">
+                    <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;认监委官网可查</div>
+                    <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;认证品类齐全</div>
+                    <div class="p-c-h-c-item"><span class="icon-verify-checked"></span>&nbsp;&nbsp;量身定制方案</div>
+                </div>
+                <div>招投标必备 · 品牌提升 · 奖励补贴 · 吸引投资</div>
+                <div>ISO体系认证丨信用评定丨服务体系认证丨其他认证证书</div>
+            </div>
         </div>
-        <div class="p-c-m-content-r">
-          <div class="t-p-verify-customer-qr" title="客服企业微信二维码">
-            <img alt="客服企业微信二维码" />
-          </div>
-          <div class="p-c-m-c-r-text">添加客服微信<br />备注认证服务</div>
+        <div class="third-party popover-content-main bidcontent">
+            <div class="bid_tel">
+                <img src="/images/tel.png" alt="" style="width: 20px; height: 20px;">
+                <span class="bid_phonetext">咨询 $tel 了解更多</span>
+            </div>
+            <div class="p-c-m-content">
+                <div class="p-c-m-content-l bid_classfun">
+                    <div class="classfun_list">
+                        <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
+                        <span class="classs_text">体系认证:品牌提升,投标加分,提升企业竞争力</span>
+                    </div>
+                    <div class="classfun_list">
+                        <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
+                        <span class="classs_text">信用认证:企业信用名片,招投标必备</span>
+                    </div>
+                    <div class="classfun_list">
+                        <img src="/images/blue-duihao.png" alt="" style="width: 20px; height: 20px;">
+                        <span class="classs_text">服务体系认证:实力认证,竞争有优势</span>
+                    </div>
+                </div>
+                <div class="p-c-m-content-r">
+                    <div class="t-p-verify-customer-qr" title="客服企业微信二维码">
+                        <img alt="客服企业微信二维码" />
+                    </div>
+                    <div class="p-c-m-c-r-text">添加客服微信<br />备注认证服务</div>
+                </div>
+            </div>
+        </div>
+        <div class="third-party popover-content-footer bidfoot">
+            <a class="bid_button_cancel bid_btn" href="/swordfish/frontPage/enterpriseCertificatio/free/index" target="_blank">了解详情</a>
+            <div class="bid_button_confirm bid_btn third-party-apply-for-button">申请认证</div>
         </div>
-      </div>
     </div>
-    <div class="third-party popover-content-footer bidfoot">
-      <a class="bid_button_cancel bid_btn" href="/swordfish/frontPage/enterpriseCertificatio/free/index" target="_blank">了解详情</a>
-      <div class="bid_button_confirm bid_btn third-party-apply-for-button">申请认证</div>
+    {{include "/common/pcbottom.html"}}
+    <!--支付二维码-->
+    <div class="payQRcode">
+        <div class="mark"></div>
+        <div class="reward-dialog">
+            <img src="{{Msg "seo" "cdn"}}/images/reward-close.png" class="reward-close">
+            <front>请微信扫码</front><br>
+            <img src="/jypay/weixin/reward/qr/{{.T.obj._id}}" class="qrcode">
+        </div>
     </div>
-  </div>
-	{{include "/common/pcbottom.html"}}
-	<!--支付二维码-->
-	<div class="payQRcode">
-		<div class="mark"></div>
-		<div class="reward-dialog">
-			<img src="{{Msg "seo" "cdn"}}/images/reward-close.png" class="reward-close">
-			<front>请微信扫码</front><br>
-			<img src="/jypay/weixin/reward/qr/{{.T.obj._id}}" class="qrcode">
-		</div>
-	</div>
-	<!--<script type="text/javascript">
+    <!--<script type="text/javascript">
 var ucbs_source="pc_rec",ucbsId="{{.T.obj.ucbsId}}";
 </script>
 <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/ucbs.js?v={{Msg "seo" "version"}}"></script>-->
-  <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.7.14/vue.min.js></script>
-	<script src=//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/index.js></script>
-  {{include "/common/bidLeaveInfo.html"}}
-	<script src='{{Msg "seo" "cdn"}}/common-module/selector/js/china_area.js?v={{Msg "seo" "version"}}'></script>
-	<script src='{{Msg "seo" "cdn"}}/common-module/selector/js/static-data.js?v={{Msg "seo" "version"}}'></script>
-	<script src='{{Msg "seo" "cdn"}}/common-module/selector/js/powerMap.js?v={{Msg "seo" "version"}}'></script>
-	<script src="{{Msg "seo" "cdn"}}/js/pc-collect-bid-info.js?v={{Msg "seo" "version"}}"></script>
-	<script src="{{Msg "seo" "cdn"}}/js/pc-collect-user-info.js?v={{Msg "seo" "version"}}"></script>
-	<script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/pc_entniche_tags.js?v={{Msg "seo" "version"}}"></script>
-	<script type="text/javascript" src='{{Msg "seo" "cdn"}}/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
-  <script>
-		// 广告点击事件
-		var IframeOnClick = {
-			resolution: 200,
-			iframes: [],
-			interval: null,
-			Iframe: function() {
-				this.element = arguments[0];
-				this.cb = arguments[1];
-				this.hasTracked = false;
-			},
-			track: function(element, cb) {
-				this.iframes.push(new this.Iframe(element, cb));
-				var _this = this;
-				this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);
-			},
-			checkClick: function() {
-				if (document.activeElement) {
-					var activeElement = document.activeElement;
-					for (var i in this.iframes) {
-						if (activeElement === this.iframes[i].element) { // user is in this Iframe
-							if (this.iframes[i].hasTracked == false) {
-								this.iframes[i].cb.apply(window, []);
-								this.iframes[i].hasTracked = true;
-								$.ajax({
-									type: 'POST',
-									url: '/publicapply/adLeague/click',
-									data: {
-										client: 'PC',
-										id: 'ad3',
-										position: '公告详情页右侧'
-									},
-									success: function(res) {
-										// console.log(res)
-									}
-								})
-							}
-						} else {
-							this.iframes[i].hasTracked = false;
-						}
-					}
-				}
-			}
-		};
-	</script>
-	<script type="text/javascript">
-    var pathname = location.pathname
-    var entService = pathname.indexOf('entservice') !== -1
-	var canRead = location.href.indexOf('mailprivate') > -1 || {{.T.canRead}} || entService
-    // 免费用户每日查看三次
-    checkunPreBuildCanRead()
-    // 非拟建采购意向 是否展示遮罩
-    function checkunPreBuildCanRead () {
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.7.14/vue.min.js></script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/element-ui/2.15.7/lib/index.js></script>
+    {{include "/common/bidLeaveInfo.html"}}
+    <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/china_area.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/static-data.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/selector/js/powerMap.js?v={{Msg "seo" "version"}}'></script>
+    <script src="{{Msg "seo" "cdn"}}/js/pc-collect-bid-info.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/js/pc-collect-user-info.js?v={{Msg "seo" "version"}}"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/pc_entniche_tags.js?v={{Msg "seo" "version"}}"></script>
+    <script type="text/javascript" src='{{Msg "seo" "cdn"}}/common-module/nps-common/js/nps.js?v={{Msg "seo" "version"}}'></script>
+    <script>
+      // 广告点击事件
+      var IframeOnClick = {
+        resolution: 200,
+        iframes: [],
+        interval: null,
+        Iframe: function() {
+          this.element = arguments[0];
+          this.cb = arguments[1];
+          this.hasTracked = false;
+        },
+        track: function(element, cb) {
+          this.iframes.push(new this.Iframe(element, cb));
+          var _this = this;
+          this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);
+        },
+        checkClick: function() {
+          if (document.activeElement) {
+            var activeElement = document.activeElement;
+            for (var i in this.iframes) {
+              if (activeElement === this.iframes[i].element) { // user is in this Iframe
+                if (this.iframes[i].hasTracked == false) {
+                  this.iframes[i].cb.apply(window, []);
+                  this.iframes[i].hasTracked = true;
+                  $.ajax({
+                    type: 'POST',
+                    url: '/publicapply/adLeague/click',
+                    data: {
+                      client: 'PC',
+                      id: 'ad3',
+                      position: '公告详情页右侧'
+                    },
+                    success: function(res) {
+                      // console.log(res)
+                    }
+                  })
+                }
+              } else {
+                this.iframes[i].hasTracked = false;
+              }
+            }
+          }
+        }
+      };
+    </script>
+    <script type="text/javascript">
+      var pathname = location.pathname
+      var entService = pathname.indexOf('entservice') !== -1
+      var canRead = location.href.indexOf('mailprivate') > -1 || {{.T.canRead}} || entService
+      // 免费用户每日查看三次
+      checkunPreBuildCanRead()
+      // 非拟建采购意向 是否展示遮罩
+      function checkunPreBuildCanRead () {
         if(!(goTemplateData.params.obj.subtype == '采购意向' || goTemplateData.params.obj.subtype == '拟建') && !canRead) {
-            $('#tip-title').text('免费查看更多公告')
-            $(".tip-box .tip-text").eq(0).text('请完善个人信息,获取更多免费查看公告权限')
-            $(".tip-box .tip-text").eq(1).text('')
-            $(".tip-box .detail-nj-btn").text('立即解锁')
-            $(".tabfat").hide()
-            $(".recoveryfat").hide()
-            $("#attach-list").hide()
-            $(".com-statusbar").hide()
+          $('#tip-title').text('免费查看更多公告')
+          $(".tip-box .tip-text").eq(0).text('请完善个人信息,获取更多免费查看公告权限')
+          $(".tip-box .tip-text").eq(1).text('')
+          $(".tip-box .detail-nj-btn").text('立即解锁')
+          $(".tabfat").hide()
+          $(".recoveryfat").hide()
+          $("#attach-list").hide()
+          $(".com-statusbar").hide()
         }
-    }
-
-        //是否显示遮罩层
-        function checkShowDialog (res) {
-            // 企业级用户不显示广告
-            if (entService) {
-                $('.lead-btn-nj').show()
-                $('.tabfat').show()
-                $(".recoveryfat").show()
-                $('.free-download').hide()
-                getFileData()
-                return
-            }
-            var bidmember = res.data.member
-            var entniche = res.data.entniche
-            var vip = res.data.vip
-            var privatedata = res.data.privatedata
-            var subType = goTemplateData.params.obj.subtype
-            // 免费用户每日查看三次
-            if (subType == '采购意向') {
-                $('#tip-title').text('项目提前介入,中标更轻松')
-                $(".tip-box .tip-text").eq(0).text('提前1-3个月获取项目信息,及早介入准备更充分')
-                $(".tip-box .tip-text").eq(1).text('')
-                $(".detail-nj-btn").text("点击进入")
-            }
-            if(subType == "拟建") {
-                $('#tip-title').text('超前项目抢先知,中标更容易')
-                $(".tip-box .tip-text").eq(0).text('提前3-12个月获取审批中的新项目,超前项目抢先介入,商机提前掌控。')
-                $(".tip-box .tip-text").eq(1).text('')
-                $(".detail-nj-btn").text("点击进入")
-            }
+      }
 
-            checkunPreBuildCanRead()
-            if (!canRead && !privatedata){
-                $(".com-prebuilt").removeClass("hidden");
-                $(".com-prebuilt").css('height', '408px')
-                $('.original-text').hide()
-                $(".mask-zz").removeClass("hidden");
-                $(".tabfat").remove()
-                $(".recoveryfat").remove()
-                $("#attach-list").remove()
-            } else {
-                getFileData()
-                $(".com-prebuilt").css('height', 'unset')
-            }
+      //是否显示遮罩层
+      function checkShowDialog (res) {
+        // 企业级用户不显示广告
+        if (entService) {
+          $('.lead-btn-nj').show()
+          $('.tabfat').show()
+          $(".recoveryfat").show()
+          $('.free-download').hide()
+          getFileData()
+          return
         }
-
-		$.ajax({
-			type: 'POST',
-			url: '/publicapply/bidcoll/power',
-			success: function(res) {
-				if(res.error_code == 0) {
-					checkShowDialog(res)
-					if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
-						(window.slotbydup = window.slotbydup || []).push({
-							id: "u6603896",
-							container: "_29p15mchdsg",
-							async: true,
-						});
-							getAjaxAdv()
-							var frames = document.getElementById("iframeu6603896_0");
-							//console.log(frames, 'frames')
-							IframeOnClick.track(frames, function() {
-								jQuery(document).click();
-							});
-					}
-				}
-			},
-			error: function(err) {
-				console.log(err)
-			}
-		})
-		function getAjaxAdv () {
-			$.ajax({
-				type: 'POST',
-				url: '/publicapply/adLeague/exposure',
-				data: {
-					client: 'PC',
-					id: 'ad3',
-					position: '公告详情页右侧'
-				},
-				success: function(res) {
-					// console.log(res)
-				}
-			})
-		}
-	</script>
-	<!-- 多条广告如下脚本只需引入一次 -->
-	<script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" >
-	</script>
-  <script src='{{Msg "seo" "cdn"}}/common-module/mainSearch/js/third-party-verify.js?v={{Msg "seo" "version"}}'></script>
-  <script src='{{Msg "seo" "cdn"}}/public-pc/js/article-content.js?v={{Msg "seo" "version"}}'></script>
-  <script src='{{Msg "seo" "cdn"}}/common-module/mainSearch/js/advanced-project-table.js?v={{Msg "seo" "version"}}'></script>
-  <script src='{{Msg "seo" "cdn"}}/common-module/chat/jy-chat-mini.umd.js?auto=false&v={{Msg "seo" "version"}}'></script>
-  <script>
-    $(function () {
-      var cdnPrefix = (window.goTemplateData && window.goTemplateData.cdn) || ''
-      function initChat () {
-        if (window.innerWidth === 0) {
-          return setTimeout(function() {
-            initChat()
-          }, 200)
+        var bidmember = res.data.member
+        var entniche = res.data.entniche
+        var vip = res.data.vip
+        var privatedata = res.data.privatedata
+        var subType = goTemplateData.params.obj.subtype
+        // 免费用户每日查看三次
+        if (subType == '采购意向') {
+          $('#tip-title').text('项目提前介入,中标更轻松')
+          $(".tip-box .tip-text").eq(0).text('提前1-3个月获取项目信息,及早介入准备更充分')
+          $(".tip-box .tip-text").eq(1).text('')
+          $(".detail-nj-btn").text("点击进入")
         }
-        try {
-          window.__initChatPlugin({
-            CDN: cdnPrefix,
-            checkUserPower: function (state) {
-              if (!state.hasLogin) {
-                openLoginDig()
-                return false
-              }
-              else if (!state.hasPower) {
-                window.open('/aiChatWait')
-                return false
-              }
-              return true
-            },
-          })
-        } catch (e) {
-          console.warn(e)
+        if(subType == "拟建") {
+          $('#tip-title').text('超前项目抢先知,中标更容易')
+          $(".tip-box .tip-text").eq(0).text('提前3-12个月获取审批中的新项目,超前项目抢先介入,商机提前掌控。')
+          $(".tip-box .tip-text").eq(1).text('')
+          $(".detail-nj-btn").text("点击进入")
+        }
+
+        checkunPreBuildCanRead()
+        if (!canRead && !privatedata){
+          $(".com-prebuilt").removeClass("hidden");
+          $(".com-prebuilt").css('height', '408px')
+          $('.original-text').hide()
+          $(".mask-zz").removeClass("hidden");
+          $(".tabfat").remove()
+          $(".recoveryfat").remove()
+          $("#attach-list").remove()
+        } else {
+          getFileData()
+          $(".com-prebuilt").css('height', 'unset')
         }
       }
-      initChat()
-      $('#share-colleague').on('click', function(){
-        sharebox_Dialog.showNewuserDialog = true
+
+      $.ajax({
+        type: 'POST',
+        url: '/publicapply/bidcoll/power',
+        success: function(res) {
+          if(res.error_code == 0) {
+            checkShowDialog(res)
+            if(!res.data.entniche && !res.data.member && res.data.vip <= 0) {
+              (window.slotbydup = window.slotbydup || []).push({
+                id: "u6603896",
+                container: "_29p15mchdsg",
+                async: true,
+              });
+              getAjaxAdv()
+              var frames = document.getElementById("iframeu6603896_0");
+              //console.log(frames, 'frames')
+              IframeOnClick.track(frames, function() {
+                jQuery(document).click();
+              });
+            }
+          }
+        },
+        error: function(err) {
+          console.log(err)
+        }
       })
-      // 分享弹框 数据注入
-      const pagedata = {{.T.obj}} ;
-      const stype = extractString(pagedata.urlpath)
-      sharebox_Dialog.sendData({pageData:pagedata, title:pagedata.title, desc:'标讯信息', link:window.location.href, type:'biddetail_rec',code:1,id:pagedata._id,stype:stype});
-      function extractString(str) {
-        const regex = /\/article\/(.*?)\//;
-        const match = str.match(regex);
-        return match ? match[1] : null;
+      function getAjaxAdv () {
+        $.ajax({
+          type: 'POST',
+          url: '/publicapply/adLeague/exposure',
+          data: {
+            client: 'PC',
+            id: 'ad3',
+            position: '公告详情页右侧'
+          },
+          success: function(res) {
+            // console.log(res)
+          }
+        })
       }
-    })
-  </script>
-  <!--百度统计start-->
-{{include "/common/baiducc.html"}}
-<!--百度统计end-->
+    </script>
+    <!-- 多条广告如下脚本只需引入一次 -->
+    <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" >
+    </script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/mainSearch/js/third-party-verify.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/public-pc/js/article-content.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/mainSearch/js/advanced-project-table.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/chat/jy-chat-mini.umd.js?auto=false&v={{Msg "seo" "version"}}'></script>
+    <script>
+      $(function () {
+        var cdnPrefix = (window.goTemplateData && window.goTemplateData.cdn) || ''
+        function initChat () {
+          if (window.innerWidth === 0) {
+            return setTimeout(function() {
+              initChat()
+            }, 200)
+          }
+          try {
+            window.__initChatPlugin({
+              CDN: cdnPrefix,
+              checkUserPower: function (state) {
+                if (!state.hasLogin) {
+                  openLoginDig()
+                  return false
+                }
+                else if (!state.hasPower) {
+                  window.open('/aiChatWait')
+                  return false
+                }
+                return true
+              },
+            })
+          } catch (e) {
+            console.warn(e)
+          }
+        }
+        initChat()
+        $('#share-colleague').on('click', function(){
+          sharebox_Dialog.showNewuserDialog = true
+        })
+        // 分享弹框 数据注入
+        const pagedata = {{.T.obj}} ;
+        const stype = extractString(pagedata.urlpath)
+        sharebox_Dialog.sendData({pageData:pagedata, title:pagedata.title, desc:'标讯信息', link:window.location.href, type:'biddetail_rec',code:1,id:pagedata._id,stype:stype});
+        function extractString(str) {
+          const regex = /\/article\/(.*?)\//;
+          const match = str.match(regex);
+          return match ? match[1] : null;
+        }
+      })
+    </script>
+    <!--百度统计start-->
+    {{include "/common/baiducc.html"}}
+    <!--百度统计end-->
 </body>
 </html>
 

+ 2 - 1
src/web/templates/pc/classifylist.html

@@ -1,6 +1,7 @@
 <html>
 <head>
-<title>{{if eq .T.seoarea ""}}{{.T.seotitle}}招标信息_剑鱼标讯,专业招标大数据服务平台{{else}}{{.T.seotitle}}招标信息_剑鱼标讯,专业招标大数据服务平台{{end}}</title>
+<!--<title>剑鱼标讯官网_{{if eq .T.seoarea ""}}{{.T.seotitle}}招标信息_剑鱼标讯,专业招标大数据服务平台{{else}}{{.T.seotitle}}招标信息_剑鱼标讯,专业招标大数据服务平台{{end}}</title>-->
+<title>剑鱼标讯官网_{{if eq .T.seostype ""}}{{.T.seotitle}}招标信息{{else}}{{.T.seotitle}}{{end}}</title>
 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
 <meta name="Keywords" content="{{if eq .T.seoarea ""}}{{if eq .T.industry ""}}{{.T.seokeywords}}{{else}}{{.T.industry}}{{end}}{{else}}{{.T.seokeywords}}招标信息,{{.T.seokeywords}}招标公告,{{.T.seokeywords}}中标公告,{{.T.seokeywords}}招标采购,{{.T.seokeywords}}招标网{{end}}"/>
 <meta name="Description" content="{{if eq .T.seoarea ""}}{{if eq .T.industry ""}}{{.T.seodption}}{{else}}剑鱼标讯提供{{.T.industry}}全行业招标信息搜索查询、订阅推送和数据定制化服务,每天实时更新{{.T.industry}}相关的招标信息,随时随地免费查看。{{end}}{{else}}剑鱼标讯{{.T.seodption}}专栏,提供全行业最新的{{.T.seodption}}招标信息、{{.T.seodption}}招标公告、{{.T.seodption}}中标公告和{{.T.seodption}}招标采购等内容,强大的搜索查询功能,支持多条件筛选,让招投标更轻松。{{end}}"/>

+ 2 - 2
src/web/templates/pc/dataExport_sieve.html

@@ -1028,7 +1028,7 @@
           <table v-if="dataType === '2'" class="d_gj thead_gj" cellspacing="0" cellpadding="0">
             <tr>
               <td :rowspan="item.rowspan" :colspan="item.colspan" v-for="(item, index) in title" :key="index">
-                <span v-if="index===13&&dataType === '2'||index===14&&dataType === '2'">${item.title}<br/>(万元)</span>
+                <span v-if="index===14&&dataType === '2'||index===15&&dataType === '2'">${item.title}<br/>(万元)</span>
                 <span v-else>${item.title}</span>
               </td>
             </tr>
@@ -1081,7 +1081,7 @@
         <table v-if="dataType === '2'" id="d_gj" class="d_gj" cellspacing="0" cellpadding="0">
             <tr id="firstTrGj">
               <td :rowspan="item.rowspan" :colspan="item.colspan" v-for="(item, index) in title" :key="index">
-                <span v-if="index===13&&dataType === '2'||index===14&&dataType === '2'">${item.title}<br/>(万元)</span>
+                <span v-if="index===14&&dataType === '2'||index===15&&dataType === '2'">${item.title}<br/>(万元)</span>
                 <span v-else>${item.title}</span>
               </td>
             </tr>

+ 29 - 1
src/web/templates/pc/supsearch.html

@@ -158,7 +158,7 @@
     moveEnd(oInput)
 
     $(".working").show();
-    
+
     // fix: 回车调用2次beforeSubmit方法
     // $('.searchname').keydown(function(e){
     //     if(e.keyCode == "13"){
@@ -2299,6 +2299,34 @@ function collBidAction (baction, binfo, callback) {
     }
   })
 }
+
+/******参标********/
+/**
+ * 参标、终止参标
+ * @param action in:参标;out:终止参标;transfer:划转
+ * @param bidIds 招标信息id(加密) 必传
+ * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传
+ * @param callback
+ */
+function joinBidAction (action, bidIds, callback) {
+  var params = {
+    bidIds: bidIds
+  }
+  $.ajax({
+    type:'post',
+    contentType: "application/json",
+    url:'/jyapi/jybx/core/participate/' + action + '/info',
+    data: JSON.stringify(params),
+    dataType: 'json',
+    success: function(r){
+      if (r) {
+        callback && callback(r)
+      }
+    }
+  })
+}
+
+
 function checkTagDisabled () {
   if (activeTags.length >= 3) {
     // 禁用标签

+ 140 - 6
src/web/templates/weixin/wxinfocontent_rec.html

@@ -88,7 +88,7 @@ pre {
 }
 .toolbar{
 	font-size: 13px;
-	margin:10px 16px 16px;
+	margin:10px 16px 0;
 }
 .toolbar i{
 	margin-right: 2px;
@@ -410,10 +410,6 @@ pre {
 	font-size: 16px;
 	top: 3px;
 }
-.toolbar{
-	font-size: 13px;
-	margin:10px 16px 25px;
-}
 .toolbar i{
 	margin-right: 2px;
 }
@@ -431,7 +427,7 @@ pre {
 	top: 2px;
 }
 .time_label {
-    margin-top: 10px;
+    margin: .2rem 0 .32rem;
     display: flex;
     align-items: center;
     justify-content: space-between;
@@ -1035,6 +1031,19 @@ body .loading_ p span {
       </div>
     </div>
 		</div>
+    <div class="refer_stand">
+      <div class="r-s-left">
+        <!-- <img src="{{Msg "seo" "cdn"}}/images/person.png?v={{Msg "seo" "version"}}" alt=""> -->
+        <span>参标人:</span>
+        <span class="cb_name"></span>
+      </div>
+      <div class="r-s-right">
+        <img style="display: none;" class="weicanbiao" src="{{Msg "seo" "cdn"}}/images/canbiao.png?v={{Msg "seo" "version"}}" alt="">
+        <span style="display: none;" class="isCB weicanbiao">参标</span>
+        <img style="display: none; margin-left: .16rem;" class="canbiao" src="{{Msg "seo" "cdn"}}/images/canbiao-red.png?v={{Msg "seo" "version"}}" alt="">
+        <span style="display: none;" class="isCB canbiao">终止参标</span>
+      </div>
+    </div>
 	</div>
 
 	<div class="newuser hidden">
@@ -1984,6 +1993,131 @@ function openFileDown (url) {
   // }
 }
 
+// 查询项目是否可以参标
+// function getCanCanBiao () {
+//       const params = {
+//         ids: id
+//       }
+//       $.ajax({
+//         type: 'POST',
+//         url: '/jyapi/jybx/core/participate/show',
+//         contentType: 'application/json',
+//         data: JSON.stringify(params),
+//         success: function(res) {
+//           if(res.error_code === 0) {
+//             if (res.data) {
+//               getCanBiaoInfo()
+//             } else {
+//               $('.refer_stand').hide()
+//             }
+//           } else {
+//             EasyAlert.show(res.error_msg)
+//           }
+//         }
+//       })
+//     }
+
+    // 点击参标
+    $('.refer_stand .r-s-right').on('click', function(e) {
+      const rsRight = $(e.target).hasClass('r-s-right')
+      let weicanbiao = $(e.target).hasClass('weicanbiao')
+      if (rsRight) {
+        const showElem1 = $($(e.target).find('img')[0])
+        if(showElem1.is(':hidden')) {
+          weicanbiao = false
+        } else {
+          weicanbiao = true
+        }
+      }
+      const type = weicanbiao ? 'in' : 'out';
+      const url = '/jyapi/jybx/core/participate/'+ type + '/info'
+      const params = {
+        bidIds: id
+      }
+      const outParams = {
+        projectIds: canBiaoInfo.projectId
+      }
+      $.ajax({
+        type: 'POST',
+        url: url,
+        contentType: 'application/json',
+        data: JSON.stringify(weicanbiao ? params : outParams),
+        success: function(res) {
+          if(res.error_code === 0) {
+            if(res.data) {
+              getCanBiaoInfo()
+              if (type === 'in') {
+                EasyAlert.show('已参标,请前往我的参标项目列表查看')
+              }
+              // 更新收藏列表
+              const updateCBStatus = {
+                id: id,
+                value: type === 'in' ? 1 : 0
+              }
+              sessionStorage.setItem('actionCBInfo', JSON.stringify(updateCBStatus))
+            }
+          } else {
+            EasyAlert.show(res.error_msg)
+          }
+        }
+      })
+    })
+
+    // 获取参标状态
+    function getCanBiaoInfo () {
+      const param = {
+        sid: id
+      }
+      $.ajax({
+        type: 'POST',
+        url: '/jyapi/jybx/core/participate/info',
+        contentType: 'application/json',
+        data: JSON.stringify(param),
+        success: function(res) {
+          if(res.error_code == 0) {
+            const data = res.data;
+            const cbNameElem = $('.cb_name');
+            const isCBElem = $('.isCB');
+            if (Object.keys(data).length > 0) {
+              window.canBiaoInfo = data
+              if (data.userName) {
+                const newList = data.userName.split(',').map(item => item.trim()).filter(item => item)
+                const userNameString = newList.length > 1 ? newList.slice(0,1).join(',') + '等' : newList.join(',')
+                data.userName = userNameString
+                $('.r-s-left').css('visibility', 'inherit')
+                cbNameElem.html(data.userName);
+              } else {
+                $('.r-s-left').css('visibility', 'hidden')
+              }
+              if (data.showStopParticipate) {
+                $('.canbiao').show();
+                $('.isCB.canbiao').show()
+              } else {
+                $('.canbiao').hide();
+                $('.isCB.canbiao').hide()
+              }
+              if (data.showParticipate) {
+                $('.weicanbiao').show();
+                $('.isCB.weicanbiao').show()
+              } else {
+                $('.weicanbiao').hide();
+                $('.isCB.weicanbiao').hide()
+              }
+              if (!data.showStopParticipate && !data.showParticipate && !data.userName) {
+                $('.refer_stand').hide()
+              }
+            } else {
+              $('.refer_stand').hide()
+            }
+          } else {
+            $('.refer_stand').hide()
+          }
+        }
+      })
+    }
+
+    getCanBiaoInfo()
+
 // 附件下载展示
 function andownload() {
     $.ajax({

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików