Explorar el Código

Merge branch 'dev4.5.8.9' of http://192.168.3.207:8080/qmx/jy into dev4.5.8.9

yangfeng hace 3 años
padre
commit
1c3461657b
Se han modificado 100 ficheros con 2327 adiciones y 1852 borrados
  1. 0 1
      src/db.json
  2. 3 3
      src/jfw/front/pcIndex.go
  3. 57 40
      src/jfw/front/shorturl.go
  4. 8 4
      src/jfw/front/supsearch.go
  5. 34 13
      src/jfw/front/swordfish.go
  6. 29 20
      src/jfw/modules/app/src/app/front/shorturl.go
  7. 5 3
      src/jfw/modules/app/src/app/front/swordfish.go
  8. 28 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/set_infotype.js
  9. 22 7
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js
  10. 4 4
      src/jfw/modules/app/src/web/staticres/jyapp/css/appbutton.css
  11. 1 1
      src/jfw/modules/app/src/web/staticres/jyapp/css/searchindex.css
  12. 102 1
      src/jfw/modules/app/src/web/staticres/jyapp/js/common.js
  13. 131 38
      src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js
  14. 77 16
      src/jfw/modules/app/src/web/staticres/jyapp/js/searchindex.js
  15. 3 1
      src/jfw/modules/app/src/web/staticres/jyapp/js/track/track.js
  16. 3 2
      src/jfw/modules/app/src/web/staticres/jyapp/js/track/track.umd.min.js
  17. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_add.html
  18. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_balance.html
  19. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_result.html
  20. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_search.html
  21. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ai_unit.html
  22. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_analysis_filter.html
  23. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_analysis_result.html
  24. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_analysis_search.html
  25. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bid_balance.html
  26. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bid_recharge.html
  27. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bid_use_intro.html
  28. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bigVip_detail.html
  29. 2 2
      src/jfw/modules/app/src/web/templates/big-member/page_big_subscribe.html
  30. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bigvip_subreport_month.html
  31. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bigvip_subreport_week.html
  32. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_bigvip_viewpage.html
  33. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_buy_commit.html
  34. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_contrast.html
  35. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_demo.html
  36. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ent_follow.html
  37. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ent_follow_search.html
  38. 0 1
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  39. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait_change.html
  40. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_forecast_detail.html
  41. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html
  42. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_free_contrast_trial.html
  43. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_full.html
  44. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_init.html
  45. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_land_setting.html
  46. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_landingPage.html
  47. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_landingPage_old.html
  48. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_main_root.html
  49. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ontrial_commit.html
  50. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_ontrial_landingPage.html
  51. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_aiForecastPack.html
  52. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_member.html
  53. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_orderdetail_subAccount.html
  54. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_potential_cor.html
  55. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_potential_cor_list.html
  56. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_detail.html
  57. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_pro_follow_list.html
  58. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_push_setting_detail.html
  59. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_push_settings.html
  60. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_report_detail_month.html
  61. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_report_detail_week.html
  62. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  63. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_voucher_center.html
  64. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_write_infor.html
  65. 4 0
      src/jfw/modules/app/src/web/templates/common/js.html
  66. 6 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_subType.html
  67. 0 1
      src/jfw/modules/app/src/web/templates/dataPack/index.html
  68. 5 1
      src/jfw/modules/app/src/web/templates/dataPack/recharge.html
  69. 0 1
      src/jfw/modules/app/src/web/templates/dataPack/recordList.html
  70. 23 4
      src/jfw/modules/app/src/web/templates/vipsubscribe/messageType.html
  71. 134 58
      src/jfw/modules/app/src/web/templates/weixin/historypush.html
  72. 2 2
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  73. 153 29
      src/jfw/modules/app/src/web/templates/weixin/search/tabSearch.html
  74. 2 2
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  75. 21 7
      src/jfw/modules/common/src/qfw/util/bidsearch/search.go
  76. 101 0
      src/jfw/modules/entsesearch/src/web/staticres/jylab/entsesearch/js/common.js
  77. 100 0
      src/jfw/modules/followent/src/web/staticres/jylab/followent/js/common.js
  78. 3 1
      src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go
  79. 20 0
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  80. 1 0
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  81. 11 11
      src/jfw/modules/weixin/src/config.json
  82. 21 6
      src/web/staticres/big-member/js/utils.js
  83. 120 1
      src/web/staticres/common-module/collection/css/index.css
  84. 30 2
      src/web/staticres/common-module/collection/js/date-mobile.js
  85. 52 3
      src/web/staticres/common-module/collection/js/money-mobile.js
  86. 5 11
      src/web/staticres/common-module/collection/js/notice-mobile.js
  87. 0 701
      src/web/staticres/common-module/collection/js/utils.js
  88. 45 1
      src/web/staticres/common-module/data-pack/css/recharge.css
  89. 39 3
      src/web/staticres/common-module/data-pack/js/recharge.js
  90. 359 69
      src/web/staticres/common-module/ent-search/ent-search-template.js
  91. 276 1
      src/web/staticres/common-module/ent-search/ent-search-template.prefixer.css
  92. 21 7
      src/web/staticres/common-module/public/js/utils.js
  93. 4 4
      src/web/staticres/css/wxbutton.css
  94. 1 1
      src/web/staticres/css/wxsearch.css
  95. 48 1
      src/web/staticres/dataExport/css/datapackage_order.css
  96. 0 701
      src/web/staticres/demo-member/js/utils.js
  97. 5 0
      src/web/staticres/frontRouter/pc/my_data_packet/js/index-pc.js
  98. 100 0
      src/web/staticres/js/common.js
  99. 59 16
      src/web/staticres/js/ent-search-index-pc.js
  100. 1 1
      src/web/staticres/js/index_content.js

+ 0 - 1
src/db.json

@@ -68,6 +68,5 @@
 			"maxOpenConns": 5,
 			"maxIdleConns": 5
 	    }
-
     }
 }

+ 3 - 3
src/jfw/front/pcIndex.go

@@ -151,7 +151,7 @@ func GetNewArticle(typ int) (list []map[string]interface{}) {
 	if l, ok := redis.Get("other", rediskey).([]interface{}); ok && l != nil && len(l) > 0 {
 		list = util.ObjArrToMapArr(l)
 	} else {
-		_, _, lists := bidsearch.GetPcBidSearchData("", "", "", subtype, "", "", "", "", "", "", "", 1, bidsearch.SearchPageSize_PC, false, nil, bidSearch_field_1)
+		_, _, lists := bidsearch.GetPcBidSearchData("", "", "", subtype, "", "", "", "", "", "", "", 1, bidsearch.SearchPageSize_PC, false, nil, bidSearch_field_1, "")
 		if lists != nil && len(*lists) > 5 {
 			*lists = (*lists)[0:6]
 			for _, v := range *lists {
@@ -160,7 +160,7 @@ func GetNewArticle(typ int) (list []map[string]interface{}) {
 				delete(v, "toptype")
 				delete(v, "s_subscopeclass")
 				tmpdate := v["publishtime"]
-				v["publishtime"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate.(float64)), 0))
+				v["publishtime"] = util.Int64All(tmpdate.(float64))
 				if v["budget"] != nil {
 					v["budget"] = ConversionMoeny(v["budget"])
 				} else if v["bidamount"] != nil {
@@ -415,7 +415,7 @@ func (f *PcIndex) SearchResult(at, name string) error {
 
 			} else {
 				//关键词
-				_, _, datas = bidsearch.GetPcBidSearchData(keywords, "", "", "", key_industry, "", "", "", "", "", "", 0, bidsearch.SearchPageSize_PC, false, nil, bidSearch_field_1)
+				_, _, datas = bidsearch.GetPcBidSearchData(keywords, "", "", "", key_industry, "", "", "", "", "", "", 0, bidsearch.SearchPageSize_PC, false, nil, bidSearch_field_1, "")
 				if datas != nil && len(*datas) > limitcount {
 					*datas = (*datas)[0:limitcount]
 				}

+ 57 - 40
src/jfw/front/shorturl.go

@@ -12,6 +12,7 @@ import (
 	. "mongodb"
 	"net/url"
 	"qfw/util"
+	"qfw/util/elastic"
 
 	"qfw/util/jy"
 	"qfw/util/redis"
@@ -265,28 +266,36 @@ func (s *Short) Article(stype, id string) error {
 
 			s.T["obj"] = obj
 			if obj["entidlist"] != nil { //大会员中标企业跳转至画像
-				winner := util.ObjToString(obj["winner"])
-				s_winner := util.ObjToString(obj["s_winner"])
-				idObjs, _ := obj["entidlist"].([]interface{})
-				winnerId := ""
-				if names := strings.Split(s_winner, ","); len(names) > 1 {
-					index := 0
-					for i := 0; i < len(names); i++ {
-						if names[i] == winner {
-							index = i
-							break
+				if winner := util.ObjToString(obj["winner"]); winner != "" {
+					//临时更改为企业名称查询企业id
+					rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"bool":{"should":[{"term":{"company_name":"%s"}},{"term":{"hname":"%s"}}],"minimum_should_match":1}},"_source":["name","_id","capital","company_phone"],"size":1}`, winner, winner))
+					if rData != nil && len(*rData) == 1 {
+						if entId := util.ObjToString((*rData)[0]["_id"]); entId != "" {
+							obj["entId"] = util.EncodeArticleId2ByCheck(util.ObjToString((*rData)[0]["_id"]))
 						}
 					}
-					if len(idObjs) > index {
-						winnerId = util.ObjToString(idObjs[index])
-					}
-				} else { //中标企业仅一个
-					if len(idObjs) > 0 {
-						winnerId = util.ObjToString(idObjs[0])
-					}
-				}
-				if winnerId != "" {
-					obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+					//s_winner := util.ObjToString(obj["s_winner"])
+					//idObjs, _ := obj["entidlist"].([]interface{})
+					//winnerId := ""
+					//if names := strings.Split(s_winner, ","); len(names) > 1 {
+					//	index := 0
+					//	for i := 0; i < len(names); i++ {
+					//		if names[i] == winner {
+					//			index = i
+					//			break
+					//		}
+					//	}
+					//	if len(idObjs) > index {
+					//		winnerId = util.ObjToString(idObjs[index])
+					//	}
+					//} else { //中标企业仅一个
+					//	if len(idObjs) > 0 {
+					//		winnerId = util.ObjToString(idObjs[0])
+					//	}
+					//}
+					//if winnerId != "" {
+					//	obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+					//}
 				}
 			}
 			if from_userid != "" && se.Decode4Hex(from_userid) != "" && from_userid != userId && util.ObjToString(obj["subtype"]) != "拟建" { //分享开打的
@@ -365,28 +374,36 @@ func (s *Short) Article(stype, id string) error {
 					s.SetSession("projectname", obj["projectname"])
 				}
 				if obj["entidlist"] != nil { //大会员中标企业跳转至画像
-					winner := util.ObjToString(obj["winner"])
-					s_winner := util.ObjToString(obj["s_winner"])
-					idObjs, _ := obj["entidlist"].([]interface{})
-					winnerId := ""
-					if names := strings.Split(s_winner, ","); len(names) > 1 {
-						index := 0
-						for i := 0; i < len(names); i++ {
-							if names[i] == winner {
-								index = i
-								break
+					if winner := util.ObjToString(obj["winner"]); winner != "" {
+						//临时更改为企业名称查询企业id
+						rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"bool":{"should":[{"term":{"company_name":"%s"}},{"term":{"hname":"%s"}}],"minimum_should_match":1}},"_source":["name","_id","capital","company_phone"],"size":1}`, winner, winner))
+						if rData != nil && len(*rData) == 1 {
+							if entId := util.ObjToString((*rData)[0]["_id"]); entId != "" {
+								obj["entId"] = util.EncodeArticleId2ByCheck(util.ObjToString((*rData)[0]["_id"]))
 							}
 						}
-						if len(idObjs) > index {
-							winnerId = util.ObjToString(idObjs[index])
-						}
-					} else { //中标企业仅一个
-						if len(idObjs) > 0 {
-							winnerId = util.ObjToString(idObjs[0])
-						}
-					}
-					if winnerId != "" {
-						obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+						//s_winner := util.ObjToString(obj["s_winner"])
+						//idObjs, _ := obj["entidlist"].([]interface{})
+						//winnerId := ""
+						//if names := strings.Split(s_winner, ","); len(names) > 1 {
+						//	index := 0
+						//	for i := 0; i < len(names); i++ {
+						//		if names[i] == winner {
+						//			index = i
+						//			break
+						//		}
+						//	}
+						//	if len(idObjs) > index {
+						//		winnerId = util.ObjToString(idObjs[index])
+						//	}
+						//} else { //中标企业仅一个
+						//	if len(idObjs) > 0 {
+						//		winnerId = util.ObjToString(idObjs[0])
+						//	}
+						//}
+						//if winnerId != "" {
+						//	obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+						//}
 					}
 				}
 

+ 8 - 4
src/jfw/front/supsearch.go

@@ -113,7 +113,7 @@ func (p *Pcsearch) ProposedProject() error {
 	if len(s_word) > 0 {
 		status = 2
 		var count int64
-		count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, "", "", "", "", "", "", "", 0, bidsearch.SearchPageSize_PC, true, nil, bidSearch_field_1)
+		count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, "", "", "", "", "", "", "", 0, bidsearch.SearchPageSize_PC, true, nil, bidSearch_field_1, "")
 		listSize := 0
 		if list != nil {
 			listSize = len(*list)
@@ -248,6 +248,8 @@ func (p *Pcsearch) PcSearchIndex() error {
 	//高级筛选 仅vip用户可查询
 	var hasBuyerTel, hasWinnerTel string = "", "" //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
 	var buyerclass string = ""                    //采购单位类别
+	var notkey string = ""                        //排除词
+
 	selectType := p.GetString("selectType")
 	if selectType == "" {
 		selectType = "title,content"
@@ -274,6 +276,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 	if isPayedUser {
 		buyerclass = p.GetString("buyerclass")
 		hasBuyerTel, hasWinnerTel = p.GetString("buyertel"), p.GetString("winnertel")
+		notkey = p.GetString("notkey")
 	} else {
 		//时间自定义选择默认是vip 大会员 等权限
 		if len(strings.Split(publishtime, "_")) == 2 {
@@ -292,7 +295,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 	secondKWS := ""
 	if len(s_word) > 0 || len(industry) > 0 {
 		status = 2
-		count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, bidsearch.SearchPageSize_PC, true, queryItems, bidSearch_field_1)
+		count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, bidsearch.SearchPageSize_PC, true, queryItems, bidSearch_field_1, notkey)
 		listSize := 0
 		if list != nil {
 			listSize = len(*list)
@@ -309,7 +312,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 			if secondSearch {
 				secondKWS = jy.HttpEs(s_word, "ik_smart", public.DbConf.Elasticsearch.Main.Address)
 				findfields := `"title"`
-				qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass))
+				qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass), notkey)
 				secRel := elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, 0, 2*bidsearch.SearchPageSize_PC, 0, false)
 				if secRel != nil {
 					public.BidListConvert(industry, secRel)
@@ -391,6 +394,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 		p.T["buyerclass"] = buyerclass
 		p.T["buyertel"] = hasBuyerTel
 		p.T["winnertel"] = hasWinnerTel
+		p.T["notkey"] = notkey
 		p.SetSession("paramkey", b_word)
 		switch publishtime {
 		case "lately-7":
@@ -451,7 +455,7 @@ func Newbids(p string) []interface{} {
 		}
 
 		for i := 0; i < 10; i++ {
-			_, list = getLastNewsData("", "", "", subtype, "", "", "", "", "", "", "Y", intns[i], true, false)
+			_, list = getLastNewsData("", "", "", subtype, "", "", "", "", "", "", "Y", intns[i], true, false, "")
 			for k, v := range *list {
 				v["k"] = (k + 1) + i*50
 				t := time.Unix(util.Int64All(v["publishtime"]), 0)

+ 34 - 13
src/jfw/front/swordfish.go

@@ -112,6 +112,7 @@ func (m *Front) PcAjaxReq() {
 	//高级筛选 仅vip用户可查询
 	var hasBuyerTel, hasWinnerTel string = "", "" //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
 	var buyerclass string = ""                    //采购单位类别
+	var notkey string = ""                        //排除词
 
 	vipStatus := jy.GetVipState(public.Mysql, public.MQFW, userId)
 	isPayedUser := vipStatus.IsPayedUser()
@@ -119,6 +120,7 @@ func (m *Front) PcAjaxReq() {
 	if isPayedUser {
 		buyerclass = m.GetString("buyerclass")
 		hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
+		notkey = m.GetString("notkey")
 	} else {
 		//时间自定义选择默认是vip 大会员 等权限
 		if len(strings.Split(publishtime, "_")) == 2 {
@@ -151,7 +153,7 @@ func (m *Front) PcAjaxReq() {
 	if len(s_word) > 0 || len(industry) > 0 {
 		if reqType == "filter" {
 			if status == 1 {
-				count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, bidsearch.SearchPageSize_PC, true, queryItems, field)
+				count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, bidsearch.SearchPageSize_PC, true, queryItems, field, notkey)
 			}
 		} else if reqType == "bidSearch" {
 			//全文检索限制
@@ -166,7 +168,7 @@ func (m *Front) PcAjaxReq() {
 				if limitFlag {
 					if start == 0 {
 						limit_count := public.Lst.TotalPage * bidsearch.SearchPageSize_PC
-						count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, limit_count, true, queryItems, field)
+						count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, 0, limit_count, true, queryItems, field, notkey)
 						if totalPage > int64(public.Lst.TotalPage) {
 							totalPage = int64(public.Lst.TotalPage)
 						}
@@ -175,7 +177,7 @@ func (m *Front) PcAjaxReq() {
 						}
 					}
 				} else {
-					count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, start, bidsearch.SearchPageSize_PC, true, queryItems, field)
+					count, totalPage, list = bidsearch.GetPcBidSearchData(s_word, area, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, start, bidsearch.SearchPageSize_PC, true, queryItems, field, notkey)
 				}
 				listSize := 0
 				if list != nil {
@@ -192,7 +194,7 @@ func (m *Front) PcAjaxReq() {
 					if secondSearch {
 						secondKWS = jy.HttpEs(s_word, "ik_smart", public.DbConf.Elasticsearch.Main.Address)
 						findfields := `"title"`
-						qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass))
+						qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass), notkey)
 						secRel := elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, 0, 2*bidsearch.SearchPageSize_PC, 0, false)
 						if secRel != nil {
 							public.BidListConvert(industry, secRel)
@@ -223,7 +225,7 @@ func (m *Front) PcAjaxReq() {
 				})
 			}
 		} else if reqType == "lastNews" {
-			_, list = getLastNewsData(s_word, area, publishtime, subtype, industry, minprice, maxprice, buyerclass, hasBuyerTel, hasWinnerTel, tabularflag, start, false, true)
+			_, list = getLastNewsData(s_word, area, publishtime, subtype, industry, minprice, maxprice, buyerclass, hasBuyerTel, hasWinnerTel, tabularflag, start, false, true, "")
 		}
 	}
 	if list != nil && len(*list) > 0 {
@@ -276,10 +278,10 @@ func (m *Front) PcAjaxReq() {
 	})
 }
 
-func getLastNewsData(searchvalue, area, publishtime, subtype, industry, minprice, maxprice, buyerclass, hasBuyerTel, hasWinnerTel, tabularflag string, start int, isGetCount bool, highlight bool) (count int64, list *[]map[string]interface{}) {
+func getLastNewsData(searchvalue, area, publishtime, subtype, industry, minprice, maxprice, buyerclass, hasBuyerTel, hasWinnerTel, tabularflag string, start int, isGetCount bool, highlight bool, notkey string) (count int64, list *[]map[string]interface{}) {
 	//最新招标信息
 	findfields := `"title"`
-	qstr := bidsearch.GetSearchQuery(searchvalue, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass))
+	qstr := bidsearch.GetSearchQuery(searchvalue, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(area, publishtime, subtype, "", buyerclass), notkey)
 	if isGetCount {
 		count = elastic.Count(INDEX, TYPE, qstr)
 	}
@@ -447,6 +449,7 @@ func (m *Front) WxsearchlistPaging() {
 			//高级筛选 仅vip用户可查询
 			var hasBuyerTel, hasWinnerTel string = "", "" //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
 			var buyerclass string = ""                    //采购单位类别
+			var notkey string = ""                        //排除词
 
 			vipStatus := jy.GetVipState(public.Mysql, public.MQFW, userId)
 			isPayedUser := vipStatus.IsPayedUser()
@@ -454,6 +457,7 @@ func (m *Front) WxsearchlistPaging() {
 			if isPayedUser {
 				buyerclass = m.GetString("buyerclass")
 				hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
+				notkey = m.GetString("notkey")
 			} else {
 				//时间自定义选择默认是vip 大会员 等权限
 				if len(strings.Split(publishtime, "_")) == 2 {
@@ -474,10 +478,10 @@ func (m *Front) WxsearchlistPaging() {
 				s_word := ""
 				if limitFlag {
 					if pageNum == 1 {
-						list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, pageNum, public.Lst.TotalPage*bidsearch.SearchPageSize_WX, queryItems, filed)
+						list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, pageNum, public.Lst.TotalPage*bidsearch.SearchPageSize_WX, queryItems, filed, notkey)
 					}
 				} else {
-					list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, pageNum, bidsearch.SearchPageSize_WX, queryItems, filed)
+					list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, "", buyerclass, hasBuyerTel, hasWinnerTel, pageNum, bidsearch.SearchPageSize_WX, queryItems, filed, notkey)
 				}
 				listSize := 0
 				if list != nil {
@@ -1645,8 +1649,16 @@ func SearhWebContentblog(querymap map[string]string) (*[]map[string]interface{},
 			res[i]["releasetime"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate1.(float64)), 0))
 			reltime := time.Unix(util.Int64All(tmpdate1.(float64)), 0)
 			res[i]["time"] = reltime.Format(util.Date_Short_Layout) //首页展示
-			res[i]["s_pic"] = config.Seoconfig["jyadd"].(string) + res[i]["s_pic"].(string)
-			res[i]["s_pic1"] = config.Seoconfig["jyadd"].(string) + res[i]["s_pic1"].(string)
+			s_pic, _ := res[i]["s_pic"].(string)
+			if s_pic != "" {
+				s_pic = config.Seoconfig["jyadd"].(string) + s_pic
+			}
+			res[i]["s_pic"] = s_pic
+			s_pic1, _ := res[i]["s_pic1"].(string)
+			if s_pic1 != "" {
+				s_pic1 = config.Seoconfig["jyadd"].(string) + s_pic1
+			}
+			res[i]["s_pic1"] = s_pic1
 			res[i]["_id"] = se.EncodeString(res[i]["_id"].(string))
 		}
 	}
@@ -1713,7 +1725,7 @@ func (f *Front) Jybdetail(_id string) error {
 		f.T["data"] = retlist
 	} else {
 		id := se.DecodeString(_id)
-		r := elastic.GetByIdField("content", "content", id, `"_id","s_title","l_createdate","s_pic","s_author","s_editorname","s_contenttype","praise","releasetime","s_subcontent","s_url","s_content","s_source","s_keywords","s_description","s_contenttype"`)
+		r := elastic.GetByIdField("content", "content", id, `"_id","s_title","l_createdate","s_pic","s_author","s_editorname","s_contenttype","praise","releasetime","s_subcontent","s_url","s_content","s_source","s_keywords","s_description","s_contenttype","s_pic1"`)
 		if r != nil {
 			tmpdate1, _ := (*r)["l_createdate"]
 			(*r)["l_createdate"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate1.(float64)), 0))
@@ -1721,7 +1733,16 @@ func (f *Front) Jybdetail(_id string) error {
 			(*r)["releasetime"] = util.TimeDiff(time.Unix(util.Int64All(tmpdate2.(float64)), 0))
 			(*r)["s_content"] = template.HTML((*r)["s_content"].(string))
 			(*r)["_id"] = se.EncodeString((*r)["_id"].(string))
-			(*r)["s_pic"] = (*r)["s_pic"].(string)
+			s_pic, _ := (*r)["s_pic"].(string)
+			if s_pic != "" {
+				s_pic = config.Seoconfig["jyadd"].(string) + s_pic
+			}
+			(*r)["s_pic"] = s_pic
+			s_pic1, _ := (*r)["s_pic1"].(string)
+			if s_pic1 != "" {
+				s_pic1 = config.Seoconfig["jyadd"].(string) + s_pic1
+			}
+			(*r)["s_pic1"] = s_pic1
 		}
 		f.DisableHttpCache()
 		redis.Put("other", "jyblog_"+_id, r, 2*60*60)

+ 29 - 20
src/jfw/modules/app/src/app/front/shorturl.go

@@ -4,6 +4,7 @@ import (
 	"database/sql"
 	"fmt"
 	"jfw/config"
+	"qfw/util/elastic"
 	"strconv"
 	"strings"
 	"time"
@@ -153,28 +154,36 @@ func (s *Short) Article(stype, id string) error {
 		obj["industry"] = industry
 		obj["ucbsId"] = util.EncodeArticleId2ByCheck("ucbs#" + userId + "#" + id)
 		if obj["entidlist"] != nil { //大会员中标企业跳转至画像
-			winner := util.ObjToString(obj["winner"])
-			s_winner := util.ObjToString(obj["s_winner"])
-			idObjs, _ := obj["entidlist"].([]interface{})
-			winnerId := ""
-			if names := strings.Split(s_winner, ","); len(names) > 1 {
-				index := 0
-				for i := 0; i < len(names); i++ {
-					if names[i] == winner {
-						index = i
-						break
+			if winner := util.ObjToString(obj["winner"]); winner != "" {
+				//临时更改为企业名称查询企业id
+				rData := elastic.Get("qyxy", "qyxy", fmt.Sprintf(`{"query":{"bool":{"should":[{"term":{"company_name":"%s"}},{"term":{"hname":"%s"}}],"minimum_should_match":1}},"_source":["name","_id","capital","company_phone"],"size":1}`, winner, winner))
+				if rData != nil && len(*rData) == 1 {
+					if entId := util.ObjToString((*rData)[0]["_id"]); entId != "" {
+						obj["entId"] = util.EncodeArticleId2ByCheck(util.ObjToString((*rData)[0]["_id"]))
 					}
 				}
-				if len(idObjs) > index {
-					winnerId = util.ObjToString(idObjs[index])
-				}
-			} else { //中标企业仅一个
-				if len(idObjs) > 0 {
-					winnerId = util.ObjToString(idObjs[0])
-				}
-			}
-			if winnerId != "" {
-				obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+				//s_winner := util.ObjToString(obj["s_winner"])
+				//idObjs, _ := obj["entidlist"].([]interface{})
+				//winnerId := ""
+				//if names := strings.Split(s_winner, ","); len(names) > 1 {
+				//	index := 0
+				//	for i := 0; i < len(names); i++ {
+				//		if names[i] == winner {
+				//			index = i
+				//			break
+				//		}
+				//	}
+				//	if len(idObjs) > index {
+				//		winnerId = util.ObjToString(idObjs[index])
+				//	}
+				//} else { //中标企业仅一个
+				//	if len(idObjs) > 0 {
+				//		winnerId = util.ObjToString(idObjs[0])
+				//	}
+				//}
+				//if winnerId != "" {
+				//	obj["entId"] = util.EncodeArticleId2ByCheck(winnerId)
+				//}
 			}
 		}
 		s.T["userId"] = se.Encode2Hex(userId) //加密用户userid

+ 5 - 3
src/jfw/modules/app/src/app/front/swordfish.go

@@ -266,6 +266,7 @@ func (m *Front) WxsearchlistPaging() {
 			//高级筛选 仅vip用户可查询
 			var hasBuyerTel, hasWinnerTel string = "", "" //是否有采购单位电话、是否有中标单位电话 y:有 n:没有
 			buyerclass := ""                              //采购单位类别
+			var notkey string = ""                        //排除词
 
 			vipStatus := jy.GetVipState(public.Mysql, public.MQFW, userid)
 			isPayedUser := vipStatus.IsPayedUser()
@@ -273,6 +274,7 @@ func (m *Front) WxsearchlistPaging() {
 			if isPayedUser {
 				buyerclass = m.GetString("buyerclass")
 				hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
+				notkey = m.GetString("notkey")
 			} else {
 				//时间自定义选择默认是vip 大会员 等权限
 				if len(strings.Split(publishtime, "_")) == 2 {
@@ -301,10 +303,10 @@ func (m *Front) WxsearchlistPaging() {
 				s_word := ""
 				if limitFlag {
 					if pageNum == 1 {
-						list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel, pageNum, public.Lst.TotalPage*bidsearch.SearchPageSize_APP, queryItems, feld)
+						list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel, pageNum, public.Lst.TotalPage*bidsearch.SearchPageSize_APP, queryItems, feld, notkey)
 					}
 				} else {
-					list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel, pageNum, bidsearch.SearchPageSize_APP, queryItems, feld)
+					list, b_word, a_word, s_word = bidsearch.GetWxsearchlistData(searchvalue, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel, pageNum, bidsearch.SearchPageSize_APP, queryItems, feld, notkey)
 				}
 				listSize := 0
 				if list != nil {
@@ -321,7 +323,7 @@ func (m *Front) WxsearchlistPaging() {
 					if secondSearch {
 						secondKWS = jy.HttpEs(s_word, "ik_smart", public.DbConf.Elasticsearch.Main.Address)
 						findfields := `"title"`
-						qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(scope, publishtime, subtype, winner, buyerclass))
+						qstr := bidsearch.GetSearchQuery(secondKWS, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, bidsearch.GetBidSearchQuery(scope, publishtime, subtype, winner, buyerclass), notkey)
 						secRel = elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, feld, 0, 2*bidsearch.SearchPageSize_APP, 0, false)
 						if secRel != nil && len(*secRel) > 0 {
 							public.BidListConvert(industry, secRel)

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

@@ -20,9 +20,35 @@ var vNode = {
             },
             {
                 name: '招标预告',
-                value: '预告',
+                value: '',
                 level: 1,
-                children: []
+                children: [
+                    {
+                        name: '预告',
+                        value: '预告',
+                        level: 2,
+                    },
+                    {
+                        name: '预审',
+                        value: '预审',
+                        level: 2,
+                    },
+                    {
+                        name: '预审结果',
+                        value: '预审结果',
+                        level: 2,
+                    },
+                    {
+                        name: '论证意见',
+                        value: '论证意见',
+                        level: 2,
+                    },
+                    {
+                        name: '需求公示',
+                        value: '需求公示',
+                        level: 2,
+                    },
+                ]
             },
             {
                 name: '招标公告',

+ 22 - 7
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/utils.js

@@ -1,5 +1,5 @@
 /**
- * utils.js v0.0.1
+ * utils.js
  * 各类js工具函数
  */
 
@@ -90,10 +90,15 @@ var popupTip = {
     }
 }
 
+var versionChangeLog = {
+    '0.0.1': 'init',
+    '0.0.2': 'utils.dateFromNow 函数逻辑修改,具体修改内容查看函数注释'
+}
+
 
 var utils = {
     // utils版本号
-    version: '0.0.1',
+    version: '0.0.2',
     isWeiXinBrowser: navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1,
     isAndroid: navigator.userAgent.toLowerCase().indexOf('android') !== -1,
     isIos: /iphone|ipod|ipad|ios/.test(navigator.userAgent.toLowerCase()),
@@ -425,10 +430,10 @@ var utils = {
         }
     },
     /**
-     * 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
+     * 时间戳转换 多少秒、多少分、多少小时前  昨天以及昨天之前的显示年月日(今年的时间不显示年份)
      * @param {Date} originTime 要转换的时间对象(或者时间戳)
      */
-    dateFromNow: function (originTime) {
+    dateFromNow: function (originTime, useOld) {
         if (!originTime) return
         // 原始时间 - 传入的时间戳
         var originTimeStamp = +new Date(originTime)
@@ -454,8 +459,18 @@ var utils = {
         }
 
         var timeString = ''
-        if (diffTimeStampAbsS > days11) {
-            // 大于10天,则使用正常日期显示
+        // 10天前
+        var tenDaysAgo = diffTimeStampAbsS > days11
+        // 是否是当天
+        var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+        var condition = !isCurrentDay
+        if (useOld) {
+            condition = tenDaysAgo
+        }
+
+        if (condition) {
+            // 不是当天,则使用正常日期显示
             var originDate = new Date(originTimeStamp)
             var nowDate = new Date()
             // 是否同年
@@ -464,7 +479,7 @@ var utils = {
             var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
             timeString = originDate.pattern(patternString)
         } else {
-            for (var i = 0; i < 7; i++) {
+            for (var i = 0; i < dataMap.number.length; i++) {
                 var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
                 if (inm != 0) {
                     timeString = inm + dataMap.zh[i] + postfix

+ 4 - 4
src/jfw/modules/app/src/web/staticres/jyapp/css/appbutton.css

@@ -55,11 +55,11 @@
 .j-button-confirm,
 .j-button-cancel {
   width: 48%!important;
-  height: 0.8rem!important;
+  height: 0.88rem!important;
   line-height: 0.8rem;
   font-size: 0.32rem!important;
   text-align: center;
-  border-radius: 0.16rem;
+  border-radius: 0.08rem!important;
 }
 .j-button-confirm[disabled]{
   background-color: #87DFE9;
@@ -82,11 +82,11 @@
   justify-content: center;
   /* flex: 1; */
   width: 48%!important;
-  height: 0.8rem!important;
+  height: 0.88rem!important;
   line-height: 0.8rem;
   font-size: 0.32rem!important;
   text-align: center;
-  border-radius: 0.16rem;
+  border-radius: 0.08rem!important;
   flex: none!important;
 }
 .j-button-confirm1[disabled]{

+ 1 - 1
src/jfw/modules/app/src/web/staticres/jyapp/css/searchindex.css

@@ -3626,7 +3626,7 @@ body{
 }
 .p13 .home .top .home_search .home_search_left span {
     color: #C0C4CC;
-    font-size: 16px;
+    font-size: 14px;
 }
 .p13 .home_search.fixed-top .jy_sprite_main.sprite_home_search {
     width: 0.4rem;

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

@@ -661,7 +661,9 @@ $(function () {
   //	});
   //	if(!mySysIsIos()){
   try {
-    afterPageInit();
+    if (location.href.indexOf('/follow/set/list') == -1) {
+      afterPageInit();
+    }
     //发送渠道统计
     sendChannelSign();
   } catch (e) {
@@ -733,7 +735,106 @@ var Verification = {
     return /^[1][3-9][0-9]{9}$/.test(value);
   }
 }
+// 部分页面没有全局工具函数
+if (typeof utils !== 'object') {
+  utils = {}
+}
+Date.prototype.pattern = function (fmt) {
+  if (!fmt) return ''
+  var o = {
+    'y+': this.getFullYear(),
+    'M+': this.getMonth() + 1, // 月份
+    'd+': this.getDate(), // 日
+    // 12小时制
+    'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
+    // 24小时制
+    'H+': this.getHours(), // 小时
+    'm+': this.getMinutes(), // 分
+    's+': this.getSeconds(), // 秒
+    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+    'S': this.getMilliseconds(), // 毫秒
+    'E+': this.getDay(), // 周
+  };
+  var week = {
+    '0': '日',
+    '1': '一',
+    '2': '二',
+    '3': '三',
+    '4': '四',
+    '5': '五',
+    '6': '六'
+  };
+  if (/(y+)/.test(fmt)) {
+    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
+  }
+  if (/(E+)/.test(fmt)) {
+    fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
+    this.getDay() + '']);
+  }
+  for (var k in o) {
+    if (new RegExp('(' + k + ')').test(fmt)) {
+      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
+          .length)));
+    }
+  }
+  return fmt;
+}
+utils.dateFromNow = function (originTime, useOld) {
+  if (!originTime) return
+  // 原始时间 - 传入的时间戳
+  var originTimeStamp = +new Date(originTime)
+  // 当前时间戳
+  var nowTimeStamp = +new Date()
+  // 时间戳相差多少
+  var diffTimeStamp = nowTimeStamp - originTimeStamp
+
+  var postfix = diffTimeStamp > 0 ? '前' : '后'
+  // 求绝对值 ms(毫秒)
+  var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
+  var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
+
+  // 10天的秒数
+  var days11 = 11 * 24 * 60 * 60
+  // var dataMap = {
+  //     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
+  //     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
+  // }
+  var dataMap = {
+    zh: ['天', '小时', '分钟', '秒'],
+    number: [24 * 60 * 60, 60 * 60, 60, 1]
+  }
+
+  var timeString = ''
+  // 10天前
+  var tenDaysAgo = diffTimeStampAbsS > days11
+  // 是否是当天
+  var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+  var condition = !isCurrentDay
+  if (useOld) {
+    condition = tenDaysAgo
+  }
 
+  if (condition) {
+    // 不是当天,则使用正常日期显示
+    var originDate = new Date(originTimeStamp)
+    var nowDate = new Date()
+    // 是否同年
+    var sameYear = originDate.getFullYear() === nowDate.getFullYear()
+    // 如果是当年,则不显示年
+    var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
+    timeString = originDate.pattern(patternString)
+  } else {
+    for (var i = 0; i < dataMap.number.length; i++) {
+      var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
+      if (inm != 0) {
+        timeString = inm + dataMap.zh[i] + postfix
+        break
+      }
+    }
+  }
+  return timeString
+}
 //计算时差
 function timeDiff (date) {
   var date1 = date;//开始时间

+ 131 - 38
src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js

@@ -56,10 +56,31 @@ var vm = new Vue({
         keytimer: '',
         noticetimer: ''
       },
+      // 选择项value显示内容
+      moreFiltersText: {
+        cateItem: '',
+        keywordItem: '',
+        noticeItem: ''
+      },
+      moreFiltersTextCache: {
+        cateItem: '',
+        keywordItem: '',
+        noticeItem: ''
+      },
+      moreFiltersShow: {
+        cateItem: false, // 采购单位类型
+        keywordItem: false, // 关键词
+        noticeItem: false, // 公告类型
+      },
       iosMeauStyle: false,
       goUpText: ''
     }
   },
+  computed: {
+    selectedMoreCancelDisabled: function () {
+      return !(this.buyerclass || this.key || this.subtype)
+    }
+  },
   created () {
     this.getHasWeekMonthData()
     this.getUserRoot()
@@ -88,6 +109,33 @@ var vm = new Vue({
     this.addEventListerWeb()
   },
   methods: {
+    showDialog: function (conf) {
+      var defaultConf = {
+        title: '提示',
+        message: 'message',
+        className: 'j-confirm-dialog',
+        overlayClass: 'j-overlay',
+        showConfirmButton: true,
+        showCancelButton: true,
+        confirmButtonText: '确定',
+        confirmButtonColor: '#2abed1'
+      }
+      if (conf) {
+        Object.assign(defaultConf, conf)
+      }
+      return this.$dialog.confirm(defaultConf)
+    },
+    // 显示去开通超级订阅弹框
+    showSuperVipDialog: function () {
+      this.showDialog({
+        title: '开通超级订阅',
+        message: '立享更多搜索权限\n寻找商机更精准',
+        confirmButtonText: '去开通',
+        className: 'j-confirm-dialog text-center super-vip-dialog',
+      }).then(function () {
+        topay()
+      }).catch(function() {})
+    },
     addEventListerWeb: function() {
       let _this = this
       //监听浏览器tab切换,以便在tab切换之后,页面隐藏的时候,把弹幕停止
@@ -102,7 +150,7 @@ var vm = new Vue({
       }, false);
     },
     recover: function () {
-      var excludeKey = ['sessStorageKey']
+      var excludeKey = ['sessStorageKey', 'moreFiltersShow']
       var $data = sessionStorage.getItem(this.sessStorageKey)
       if ($data) {
           $data = JSON.parse($data)
@@ -128,10 +176,8 @@ var vm = new Vue({
           }
           // 采购单位类型
           if(res.buyerclass != '') {
-            setTimeout(() => {
-              $('.cateText').html(res.tagText.cateText)
-            })
             this.selectCateList = res.buyerclass.split(',')
+            this.moreFiltersText.cateItem = this.selectCateList.length
           }
           // 行业
           if(res.subscopeclass != '') {
@@ -142,17 +188,13 @@ var vm = new Vue({
           }
           // 关键词
           if(res.key != '') {
-            setTimeout(() => {
-              $('.keywordText').html(res.tagText.keywordText)
-            })
             this.selectKeyWordList = res.key.split(',')
+            this.moreFiltersText.keywordItem = this.selectKeyWordList.length
           }
           // 公告类型
           if(res.subtype != '') {
-            setTimeout(() => {
-              $('.noticeText').html(res.tagText.noticeText)
-            })
             this.selectNoticeList = res.subtype.split(',')
+            this.moreFiltersText.noticeItem = this.selectNoticeList.length
           }
           sessionStorage.removeItem(this.sessStorageKey)
       }
@@ -182,6 +224,17 @@ var vm = new Vue({
     close: function() {
       this.iosMeauStyle = false
     },
+    calcSelected: function (which) {
+      return this.moreFiltersText[which] || '全部'
+    },
+    moreFiltersItemShow: function (which, text) {
+      this.goUpText = text
+      if (this.screenShow) {
+        this.moreFiltersShow[which] = true
+      } else {
+        this.showSuperVipDialog()
+      }
+    },
     // 订阅推送消息展示数据
     setPushTime: function(time) {
       console.log(time)
@@ -235,8 +288,29 @@ var vm = new Vue({
         }
       })
     },
+    selectedMoreConfirmed: function () {
+      this.$refs.moreDropdownItems.toggle(false)
+      if (this.screenShow) {
+        this.buyerclass = this.moreFiltersTextCache.cateItem
+        this.key = this.moreFiltersTextCache.keywordItem
+        this.subtype = this.moreFiltersTextCache.noticeItem
+        this.doSearch()
+      }
+    },
+    selectedMoreCancel: function () {
+      this.cancel({ name: 'cateItem' })
+      this.cancel({ name: 'keywordItem' })
+      this.cancel({ name: 'noticeItem' })
+      this.$refs.moreDropdownItems.toggle(false)
+
+      if (this.screenShow) {
+        this.buyerclass = ''
+        this.key = ''
+        this.subtype = ''
+        this.doSearch()
+      }
+    },
     confirm: function(data){
-      console.log(data)
       if(data.name === 'dateItem'){
         const timeRange = {
           start: (data.data.start / 1000).toFixed(0),
@@ -275,6 +349,9 @@ var vm = new Vue({
             break
           }
         }
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'areaCityItem'){
         var areaCityRes = data.data
         var count = data.count
@@ -298,22 +375,28 @@ var vm = new Vue({
           this.area = obj.p.join(',')
           this.city = obj.c.join(',')
         }
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'industryItem'){
         $('.industryText').html(data.t)
         this.tagText.industryText = data.t
         this.subscopeclass = data.data.join(',')
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'cateItem'){
-        $('.cateText').html('采购单位' + data.t)
-        this.tagText.cateText = '采购单位' + data.t
-        this.buyerclass = data.data.join(',')
+        this.moreFiltersText.cateItem = data.t
+        this.moreFiltersTextCache.cateItem = data.data.join(',')
+        this.moreFiltersShow.cateItem = false
       } else if(data.name === 'keywordItem'){
-        $('.keywordText').html(data.t)
-        this.tagText.keywordText = data.t
-        this.key = data.data.join(',')
+        this.moreFiltersText.keywordItem = data.t.replace('关键词', '')
+        this.moreFiltersTextCache.keywordItem = data.data.join(',')
+        this.moreFiltersShow.keywordItem = false
       } else if(data.name === 'noticeItem'){
-        $('.noticeText').html(data.t)
-        this.tagText.noticeText = data.t
-        this.subtype = data.data.join(',')
+        this.moreFiltersText.noticeItem = data.t.replace('公告类型', '')
+        this.moreFiltersTextCache.noticeItem = data.data.join(',')
+        this.moreFiltersShow.noticeItem = false
       } else if(data.name === 'rootItem'){
         try {
           _hmt.push(['_trackEvent','超级订阅-app', 'click', '推送列表页' + this.goUpText + '-去开通']);
@@ -324,13 +407,8 @@ var vm = new Vue({
       } else {
         return console.log('暂无数据')
       }
-      this.setToggle()
-      setTimeout(()=>{
-        this.getAjaXParams()
-      }, 500)
     },
     cancel: function(data){
-      console.log(data)
       if(data.name === 'dateItem'){
         this.time = ''
         this.tagText.timeText = '时间'
@@ -338,32 +416,49 @@ var vm = new Vue({
         this.selectDate.end = ''
         this.selectDate.exact = 'all'
         this.setTimer.datetimer = new Date().getTime()
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'areaCityItem'){
         this.area = ''
         this.city = ''
         $('.areaText').html('地区')
         this.setTimer.areatimer = new Date().getTime()
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'industryItem'){
         this.subscopeclass = ''
         $('.industryText').html('行业')
         this.setTimer.industrytimer = new Date().getTime()
+
+        this.setToggle()
+        this.doSearch()
       } else if(data.name === 'cateItem'){
-        this.buyerclass = ''
-        $('.cateText').html('采购单位')
+        this.selectCateList = []
+        this.moreFiltersTextCache.cateItem = ''
+        this.moreFiltersText.cateItem = ''
         this.setTimer.catetimer = new Date().getTime()
+        this.moreFiltersShow.cateItem = false
       } else if(data.name === 'keywordItem'){
-        this.key = ''
-        $('.keywordText').html('关键词')
+        this.selectKeyWordList = []
+        this.moreFiltersTextCache.keywordItem = ''
+        this.moreFiltersText.keywordItem = ''
         this.setTimer.keytimer = new Date().getTime()
+        this.moreFiltersShow.keywordItem = false
       } else if(data.name === 'noticeItem'){
-        this.subtype = ''
-        $('.noticeText').html('公告类型')
+        this.selectNoticeList = []
+        this.moreFiltersTextCache.noticeItem = ''
+        this.moreFiltersText.noticeItem = ''
         this.setTimer.noticetimer = new Date().getTime()
+        this.moreFiltersShow.noticeItem = false
+      } else if(data.name === 'rootItem') {
+        this.setToggle()
       }
-      this.setToggle()
-      setTimeout(()=>{
-        this.getAjaXParams()
-      }, 500)
+    },
+    doSearch: function (delay) {
+      delay = delay || 500
+      setTimeout(this.getAjaXParams, delay)
     },
     getAjaXParams: function() {
       ajaxFun(this.time, this.area, this.city, this.subscopeclass, this.buyerclass, this.key, this.subtype)
@@ -372,9 +467,7 @@ var vm = new Vue({
       this.$refs.dateItem.toggle(false)
       this.$refs.areaCityItem.toggle(false)
       this.$refs.industryItem.toggle(false)
-      this.$refs.cateItem.toggle(false)
-      this.$refs.keywordItem.toggle(false)
-      this.$refs.noticeItem.toggle(false)
+      this.$refs.moreDropdownItems.toggle(false)
     }
   }
 })

+ 77 - 16
src/jfw/modules/app/src/web/staticres/jyapp/js/searchindex.js

@@ -107,6 +107,53 @@ var MoneyUnit = {
   }
 }
 
+function getDefaultRangeForLocal () {
+  function changeDefaultForSearchRange (type, key, value) {
+    var prefixForKey = 'mainSearchRangeFor'
+    if (type === 'set') {
+      localStorage.setItem(prefixForKey + key, value)
+    } else {
+      return localStorage.getItem(prefixForKey + key)
+    }
+  }
+  var tempList = []
+  if (changeDefaultForSearchRange('get', 'Title') == 'true') {
+    tempList.push('title')
+  }
+  if (changeDefaultForSearchRange('get', 'Content') == 'true') {
+    tempList.push('content')
+  }
+  if (!tempList.length) {
+    tempList = ['title', 'content']
+  }
+  return tempList.join(',')
+}
+function showSearchTipForTimeRange () {
+  var tempDom = $("#supersearchPage #hasNoData_tiptext>font:eq(0)")
+  var tipMap = {
+    'thisyear': '近一年',
+    'lately-7': '近7天',
+    'lately-30': '近30天'
+  }
+  var tempStr = ''
+  var defaultRange =  sessionStorage.superSearch_publishtime || SuperSearch.reqParam.publishtime || 'thisyear'
+  if (tipMap[defaultRange]) {
+      tempStr = tipMap[defaultRange]
+  } else {
+    var tempTimeList = defaultRange.split('_')
+    if (tempTimeList[0]) {
+      tempStr = new Date(tempTimeList[0] * 1000).pattern('yyyy/MM/dd')
+    }
+    if (tempTimeList[1]) {
+      if (tempStr.length) {
+        tempStr += '-'
+      }
+      tempStr += new Date(tempTimeList[1] * 1000).pattern('yyyy/MM/dd')
+    }
+  }
+  tempDom.find('span').text(tempStr)
+  tempDom.show();
+}
 var SuperSearch = {
   // 筛选企业信息
   filterWin: {},
@@ -135,7 +182,7 @@ var SuperSearch = {
     "subtype": "",
     "scope": "",
     "publishtime": "thisyear",
-    "selectType": "title,content",
+    "selectType": getDefaultRangeForLocal(),
     "minprice":"",
     "maxprice":"",
     "industry":"",
@@ -228,13 +275,22 @@ var SuperSearch = {
     });
     //筛选菜单展示or隐藏
     $("#supersearchPage").on("tap" , "#clickFilter", function(){
+      // 企业搜索
+      if ($(".tabs-nav .active").index() === 1 && $("#search-header-input").val().trim() != '') {
+        $("#supersearchPage input[name=super_searchinput]").blur();
+        window.isKeyDownToEntSearch = true
+        if (vEntSearchComponent) {
+          vEntSearchComponent.toggleEntShow(true)
+        }
+        return
+      }
       if ($(this).text().trim() !== '筛选' || $("#search-header-input").val().trim() === '') {
         return
       }
       $("#supersearchPage input[name=super_searchinput]").blur();
-      if (vMainSearchComponent) {
-        vMainSearchComponent.toggleEntShow(true)
-      }
+      // if (vMainSearchComponent) {
+      //   vMainSearchComponent.toggleEntShow(true)
+      // }
       return;
       hideTab();
       SuperSearch.inputBlur();
@@ -296,6 +352,15 @@ var SuperSearch = {
     });
     //提交查询
     $("#supersearchPage").on('click', "#clickFilter",function(){
+      // 企业搜索
+      if ($(".tabs-nav .active").index() === 1 && $("#search-header-input").val().trim() != '') {
+        $("#supersearchPage input[name=super_searchinput]").blur();
+        window.isKeyDownToEntSearch = true
+        if (vEntSearchComponent) {
+          vEntSearchComponent.toggleEntShow(true)
+        }
+        return
+      }
       if ($(this).text().trim() !== '搜索' || $("#search-header-input").val().trim() === '') {
         return
       }
@@ -810,7 +875,7 @@ var SuperSearch = {
       "subtype": "",
       "scope": "",
       "publishtime": "thisyear",
-      "selectType": "title,content",
+      "selectType": getDefaultRangeForLocal(),
       "minprice":"",
       "maxprice":"",
       "industry":"",
@@ -896,7 +961,7 @@ var SuperSearch = {
       if (isMaxHeight < defaultHeight) {
         isMaxHeight = defaultHeight
       }
-      $("#supersearchPage .app-layout-content-b #wrapper").css({height: isMaxHeight, 'overflow-y': 'auto'})
+      $("#supersearchPage .app-layout-content-b #wrapper").css({height: isMaxHeight - 44, 'overflow-y': 'auto'})
       $(".loading_").hide();
       $("#supersearchPage #working").addClass("hidden");
       $("#wrapper").css('opacity', 'unset')
@@ -1226,7 +1291,7 @@ var SuperSearch = {
     $("#supersearchPage .app-layout-content-b #wrapper").css({height: nowClientHeight, 'overflow-y': 'auto'})
     // 切换显示
     $("#supersearchPage .tabs-box").addClass("hidden")
-    $("#supersearchPage #clickFilter").text('筛选')
+    $("#supersearchPage #clickFilter").text('搜索')
     // 隐藏table 查看更多
     $("#wrapper .shade_table").css("display","none");
     $("#supersearchPage #working").removeClass("hidden");
@@ -1325,7 +1390,7 @@ var SuperSearch = {
           }else if (data.status==-2){
             $("#supersearchPage #hasNoData_tiptext>font:eq(2)").show();
           }else{
-            $("#supersearchPage #hasNoData_tiptext>font:eq(0)").show();
+            showSearchTipForTimeRange()
           }
           if($(".newdialog .tab-box .sub-search-title").find("li.active").attr('dataVal')=="searchtitle"){
             $("#supersearchPage #allSearchModel").show();
@@ -1468,11 +1533,7 @@ var SuperSearch = {
       var tdf = list[i].publishtime;
       var fullTime="";
       if(tdf){
-        var thisTime=new Date(Number(tdf+"000"))
-        var month=(thisTime.getMonth()+1)>=10?(thisTime.getMonth()+1):"0"+(thisTime.getMonth()+1);
-        var date=(thisTime.getDate())>=10?(thisTime.getDate()):"0"+(thisTime.getDate());
-        fullTime=thisTime.getFullYear()+"<br>"+month+date;
-        tdf = timeDiff(new Date(Number(tdf+"000")));
+        tdf = utils.dateFromNow(tdf * 1000)
         if(tdf != null){
           tdf='<span><i class="jyapp-icon jyapp-icon-bofangjilu" style="color:#7a7a7a;margin-right:2px;"></i>'+tdf+'</span>'
         }
@@ -1580,7 +1641,7 @@ var SuperSearch = {
         var diff = "";
         if(projectinfo&&projectinfo.approvetime){
           approvetime = projectinfo.approvetime.replace(/-/g,"/");
-          diff = timeDiff(new Date(approvetime));
+          diff = utils.dateFromNow(approvetime);
         }
         var industry = "";
         if(projectinfo&&projectinfo.industry){
@@ -2060,7 +2121,7 @@ var SuperSearch = {
         }else if(sessionStorage.superSearch_hasNoData_tiptext=="-2"){
           $("#supersearchPage #hasNoData_tiptext>font:eq(2)").show();
         }else{
-          $("#supersearchPage #hasNoData_tiptext>font:eq(0)").show();
+          showSearchTipForTimeRange()
         }
         if(sessionStorage.superSearch_allSearchModel_isshow=="true"){
           $("#supersearchPage #allSearchModel").show();
@@ -2672,7 +2733,7 @@ var SuperSearch = {
         //时间
         var publishtime = _list["publishtime"];
         if(publishtime&&Number(publishtime)>=1000000){
-          publishtime = timeDiff(new Date(Number(publishtime+"000")));
+          publishtime = utils.dateFromNow(Number(publishtime+"000"));
         }else{
           publishtime = ""
         }

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

@@ -1351,4 +1351,6 @@ function initGlobal() {
   })
 }
 
-initGlobal()
+if (localStorage.getItem('env') !== 'development') {
+  initGlobal()
+}

+ 3 - 2
src/jfw/modules/app/src/web/staticres/jyapp/js/track/track.umd.min.js

@@ -179,5 +179,6 @@ function initGlobal() {
     checkDiffDateTn.start()
   })
 }
-
-initGlobal()
+if (localStorage.getItem('env') !== 'development') {
+  initGlobal()
+}

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

@@ -890,6 +890,6 @@
     }
     var aiAdd = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -251,6 +251,6 @@
     }
     var balance = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -422,6 +422,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -530,6 +530,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -206,6 +206,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -119,6 +119,6 @@
 <!--E-当前页面的资源-->
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/analysis_filter.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -295,6 +295,6 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/chart_options.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/analysis_result.js?v={{Msg "seo" "version"}}'></script>
 <!--小于100行同css,减少请求数-->
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -285,6 +285,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -272,6 +272,6 @@
     }
     var balance = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -312,6 +312,6 @@
     }
     var voucher = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -62,7 +62,7 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
 <!--E-当前页面的资源-->
 {{include "/big-member/commonjs.html"}}
-{{include "/common/baiducc.html"}}
+
 <script>
     var vNode = {
         delimiters: ['${', '}'],

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

@@ -138,6 +138,6 @@
     <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js> </script>
     {{include "/big-member/commonjs.html"}}
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/bigvip_detail.js?v={{Msg "seo" "version"}}'></script>
-    {{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -106,7 +106,7 @@
                             </div>
                             <div class="pro_time">
                                 <!-- <span class="j-icon icon-bell"></span> -->
-                                <span class="aftertime">${new Date(item.publishtime*1000).pattern('yyyy/MM/dd')}</span>
+                                <span class="aftertime">${item.publishtime ? utils.dateFromNow(item.publishtime * 1000) : ''}</span>
                             </div>
                         </div>
                     </div>
@@ -142,7 +142,7 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/big_subscribe.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 
 </body>
 </html>

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

@@ -136,6 +136,6 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js> </script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/bigvip_subreport_month.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -136,6 +136,6 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js> </script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/bigvip_subreport_week.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -474,6 +474,6 @@
   		</div>
 		</span>
 	</div>
-	{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -629,7 +629,7 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -306,6 +306,6 @@
         })
     })
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -190,6 +190,6 @@
     }
     LogPage()
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -107,6 +107,6 @@
 {{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}}/jyapp/big-member/js/ent_follow.js?v={{Msg "seo" "mod_version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -110,6 +110,6 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/ent_follow_search.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -446,7 +446,6 @@
   </script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/ent_portrait.js?v={{Msg "seo" "version"}}'>
   </script>
-  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

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

@@ -213,6 +213,6 @@ var vNode = {
 var vueComponent = new Vue(vNode)
 </script>
 
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -343,6 +343,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -357,6 +357,6 @@
     }
     var forecastList =new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -78,6 +78,6 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/contrast_trial.js?v={{Msg "seo" "version"}}'></script>
 <!--<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/check-bind-phone.js?v={{Msg "seo" "version"}}'></script>-->
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -401,7 +401,7 @@
 
 
 </script>
-{{include "/common/baiducc.html"}}
+
 <!--<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>-->
 
 </body>

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

@@ -138,6 +138,6 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/page_init.js?v={{Msg "seo" "version"}}'></script>
 <!--E-当前页面的资源-->
 
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -382,6 +382,6 @@
     }
     var components =  new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -674,7 +674,7 @@
         }
         getOfflineMessageCount()
     </script>
-    {{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -306,7 +306,7 @@
             location.href = "/jyapp/free/customer"
         })
     </script>
-    {{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -136,7 +136,7 @@
     {{include "/big-member/commonjs.html"}}
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/main_root_data.js?v={{Msg "seo" "version"}}'></script>
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/main_root.js?v={{Msg "seo" "version"}}'></script>
-    {{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -113,7 +113,7 @@
     {{include "/big-member/commonjs.html"}}
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/ontrial-commit.js?v={{Msg "seo" "version"}}'></script>
     <!--<script src='{{Msg "seo" "cdn"}}/js/check-bind-phone.js?v={{Msg "seo" "version"}}'></script>-->
-    {{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -215,7 +215,7 @@
             location.href = './ontrial_commit'
         })
     </script>
-    {{include "/common/baiducc.html"}}
+
 </body>
 
 </html>

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

@@ -472,4 +472,4 @@
         $("body").append('<div id="showImgDiv" onclick="$(this).remove()" style="overflow-y:scroll;display: flex;background: #00000070;height: 100%;width: 100%;position: absolute;z-index: 9999;padding: .5rem;top: 0px;box-sizing: border-box;align-items: center;"><img src="' + imgSrc + '"></div>')
     }
 </script>
-{{include "/common/baiducc.html"}}
+

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

@@ -549,4 +549,4 @@
         $(".page.pinch-zoom-parent").css("display", "").css("z-index", "999")
     }
 </script>
-{{include "/common/baiducc.html"}}
+

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

@@ -454,4 +454,4 @@
         $("body").append('<div id="showImgDiv" onclick="$(this).remove()" style="overflow-y:scroll;display: flex;background: #00000070;height: 100%;width: 100%;position: absolute;z-index: 9999;padding: .5rem;top: 0px;box-sizing: border-box;align-items: center;"><img src="' + imgSrc + '"></div>')
     }
 </script>
-{{include "/common/baiducc.html"}}
+

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

@@ -111,6 +111,6 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/potential_cor.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -270,6 +270,6 @@
 <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
 {{include "/big-member/commonjs.html"}}
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/potential_cor_list.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -621,6 +621,6 @@
     }
     new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -302,6 +302,6 @@
     }
     var vueComponent = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -132,6 +132,6 @@
 <script>
     var vueComponent = new Vue(pushDetailSettingConf)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -91,6 +91,6 @@
 <script>
     var vueComponent = new Vue(pushSettingVueConf)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -488,6 +488,6 @@
 <!-- mock数据(与后端返回数据结构一致) 联调后可删除 -->
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/month-report-example.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/report_detail_month.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -339,6 +339,6 @@
 <!-- mock数据(与后端返回数据结构一致) 联调后可删除 -->
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/mock.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/report_detail_week.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -396,6 +396,6 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/history-project.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/unit_portrayal.js?v={{Msg "seo" "version"}}'></script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -312,6 +312,6 @@
     }
     var voucher = new Vue(vNode)
 </script>
-{{include "/common/baiducc.html"}}
+
 </body>
 </html>

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

@@ -300,5 +300,5 @@ function freesubmit() {
     }
 </script>
 <!--百度统计end-->
-{{include "/common/baiducc.html"}}
+
 </html>

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

@@ -4,5 +4,9 @@
 <script>
   if (typeof window._jyGlobal !== 'object') { window._jyGlobal = {} }
   try { window._jyGlobal.baseURL = {{Msg "seo" "buryingPointUrl"}} } catch (e) { window._jyGlobal.baseURL = '' }
+  // 屏蔽console.log输出, 如需查看手动 localStorage.setItem('env', 'development') 刷新页面
+  if (localStorage.getItem('env') !== 'development') {
+      console.log = function () {}
+  }
 </script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/track/track.umd.min.js?v={{Msg "seo" "mod_version"}}'></script>

+ 6 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_subType.html

@@ -112,7 +112,12 @@
                     </li>
                     <li>
                     <dl>
-                    <dt class="question" data-value="预告">招标预告</dt>
+                      <dt data-value="预告">招标预告</dt>
+                      <dd>预告</dd>
+                      <dd>预审</dd>
+                      <dd>预审结果</dd>
+                      <dd>论证意见</dd>
+                      <dd>需求公示</dd>
                     </dl>
                     </li>
                     <li>

+ 0 - 1
src/jfw/modules/app/src/web/templates/dataPack/index.html

@@ -124,7 +124,6 @@
   <!--E-当前页面的资源-->
   {{include "/big-member/commonjs.html"}}
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/data-pack/js/index.js?v={{Msg "seo" "version"}}'></script>
-  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

+ 5 - 1
src/jfw/modules/app/src/web/templates/dataPack/recharge.html

@@ -43,6 +43,11 @@
                 <van-icon name="question-o" @click="showQuestion"></van-icon>
               </div>
             </div>
+            <div class="order-phone-group" :class="{ error: !validatorPhonePass }">
+              <label for="order_phone">手机号码</label>
+              <input id="order_phone" v-model="userInfo.phone" autocomplete='off' placeholder='请输入手机号码' maxlength='11' type='tel' />
+              <p class="error-message">手机号码输入错误</p>
+            </div>
             <div class="notes-to-buy">
               购买须知:<br />
               1、数据流量包是数据自助导出充值服务,最低1000条起充,仅针对线上自助充值使用(与线下企业数据充值账户不可共享);<br />
@@ -114,7 +119,6 @@
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/coupon/js/pay-order-template.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/data-pack/js/recharge.js?v={{Msg "seo" "version"}}'></script>
   <!--E-当前页面的资源-->
-  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

+ 0 - 1
src/jfw/modules/app/src/web/templates/dataPack/recordList.html

@@ -77,7 +77,6 @@
   <!--E-当前页面的资源-->
   {{include "/big-member/commonjs.html"}}
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/my_data_export/js/index.js?v={{Msg "seo" "version"}}'></script>
-  {{include "/common/baiducc.html"}}
 </body>
 
 </html>

+ 23 - 4
src/jfw/modules/app/src/web/templates/vipsubscribe/messageType.html

@@ -102,7 +102,12 @@
                 </li>
                 <li>
                     <dl>
-                        <dt dataValue="预告">招标预告</dt>
+                        <dt>招标预告</dt>
+                        <dd>预告</dd>
+                        <dd>预审</dd>
+                        <dd>预审结果</dd>
+                        <dd>论证意见</dd>
+                        <dd>需求公示</dd>
                     </dl>
                 </li>
                 <li>
@@ -155,12 +160,14 @@
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "mod_version"}}"></script>
     <script>
+		var hasZBYG = ''
 		var hasZBGG = ""
 		var hasZBJG = ""
 		var hasZBXYXX = ""
 		var hasStr = ""
         function hasActive(){
             var arr = "";
+			hasZBYG = ''
 			hasZBGG = ""
 			hasZBJG = ""
 			hasZBXYXX = ""
@@ -168,6 +175,12 @@
             $(".list ul li dl dd").each(function(index){
                 if($(this).hasClass('active')){
                     arr = arr + "," + $(this).text()
+					if ($(this).prevAll("dt").text()=="招标预告") {
+						if (hasZBYG) {
+							hasZBYG += '、'
+						}
+						hasZBYG += $(this).text()
+					}
 					if($(this).prevAll("dt").text()=="招标公告"){
 						if(hasZBGG!=""){
 							hasZBGG+="、"
@@ -189,9 +202,9 @@
                 }
             })
             $(".list ul li dl dt").each(function(index){
-                if($(this).hasClass('active')&&($(this).text()=="招标预告"||$(this).text()=="拟建项目")){
+                if($(this).hasClass('active')&&$(this).text()=="拟建项目"){
                     arr = arr + "," + $(this).attr("dataValue")
-					if($(this).text()=="招标预告"||$(this).text()=="拟建项目"){
+					if($(this).text()=="拟建项目"){
 						if (hasStr!=""){
 							hasStr += "、"
 						}
@@ -228,7 +241,13 @@
 		//
 		function getChecked(){
 			hasActive();
-			if (hasZBGG!=""||hasZBJG!=""|hasZBXYXX!=""){
+			if (hasZBYG || hasZBGG!=""||hasZBJG!=""|hasZBXYXX!=""){
+				if(hasZBYG){
+					if(hasStr != ""){
+						hasStr +="、"
+					}
+					hasStr+="招标预告 ("+hasZBYG+")"
+				}
 				if(hasZBGG!=""){
 					if(hasStr != ""){
 						hasStr +="、"

+ 134 - 58
src/jfw/modules/app/src/web/templates/weixin/historypush.html

@@ -23,6 +23,13 @@
         .weui-mask{
           z-index: 99999;
         }
+
+        .van-dialog,
+        .j-popup,
+        .j-overlay {
+            z-index: 99999!important;
+        }
+        
         .jymobile-setting-dialog .weui-dialog__hd{
           text-align: center !important;
         }
@@ -73,15 +80,20 @@
         .iosMeau{
             height: 100%;
         }
-       .app-layout-content-b {
+        .app-layout-content-b {
             height: calc(100vh - 70px);
-            /* height: auto; */
             overflow: hidden;
-       }
-       #dropDownItemGroup .van-dropdown-item__content {
-         max-height: 70vh;
-         overflow: hidden;
-       }
+        }
+        .collection .van-dropdown-menu__item {
+           flex: 1;
+           padding-left: 0;
+           padding-right: 0;
+        }
+        .collection .van-dropdown-item:nth-of-type(4) .van-dropdown-item__content {
+            max-height: unset;
+            overflow: unset;
+            height: 100%;
+        }
     </style>
 </head>
 <body class="p13" id="viperSuper" style="background: #fff;overflow: hidden;">
@@ -129,14 +141,14 @@
         <div class="_header collection" id="select-meau">
             <!-- 筛选条件 -->
             <div class="filter_tab">
-                    <van-dropdown-menu style="width: auto;overflow-x: auto;"  >
+                    <van-dropdown-menu style="width: 100%;" :close-on-click-outside="false">
                         <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" :title="tagText.timeText"  ref="dateItem" @open="open('时间')" @close="close">
                             <date-component type="only-picker" :key="setTimer.datetimer" @cancel="cancel" @confirm="confirm" :selectdate="selectDate"/>
                         </van-dropdown-item>
-                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" ref="areaCityItem" @open="open('地区')" @close="close">
+                        <van-dropdown-item :disabled="!screenShow" get-container="#dropDownItemGroup" :lazy-render="false" ref="areaCityItem" @open="open('地区')" @close="close">
                             <template #title>
                                 <span v-if="screenShow" class="areaText">地区</span>
-                                <span v-if="!screenShow" class="rootstyletitle">
+                                <span v-if="!screenShow" class="rootstyletitle" @click="showSuperVipDialog">
                                     <span>地区</span>
                                     <span class="root_open">开通</span>
                                 </span>
@@ -144,10 +156,10 @@
                             <area-city-mobile :key="setTimer.areatimer" v-if="screenShow" @cancel="cancel" @confirm="confirm" ref="areaCitySelector"></area-city-mobile>
                             <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
-                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" ref="industryItem" @open="open('行业')" @close="close">
+                        <van-dropdown-item :disabled="!screenShow" get-container="#dropDownItemGroup" :lazy-render="false" ref="industryItem" @open="open('行业')" @close="close">
                             <template #title>
                                 <span v-if="screenShow" class="industryText">行业</span>
-                                <span v-if="!screenShow" class="rootstyletitle">
+                                <span v-if="!screenShow" class="rootstyletitle" @click="showSuperVipDialog">
                                     <span>行业</span>
                                     <span class="root_open">开通</span>
                                 </span>
@@ -155,42 +167,104 @@
                             <industry-component :key="setTimer.industrytimer" v-if="screenShow" @cancel="cancel" @confirm="confirm" :selectindustrylist="selectIndustryList"></industry-component>
                             <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
-                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false"  ref="cateItem" @open="open('采购单位')" @close="close">
-                            <template #title>
-                                <span v-if="screenShow" class="cateText">采购单位</span>
-                                <span v-if="!screenShow" class="rootstyletitle">
-                                    <span>采购单位</span>
-                                    <span class="root_open">开通</span>
-                                </span>
-                            </template>
-                            <cate-component @cancel="cancel" v-if="screenShow" @confirm="confirm" :key="setTimer.catetimer" :selectcatelist="selectCateList"></cate-component>
-                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
+                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" ref="moreDropdownItems" @open="open('更多筛选')" @close="close">
+                            <template #title>更多筛选</template>
+                            <div class="filter-list-container j-container">
+                                <div class="j-main">
+                                    <van-cell-group>
+                                        <van-cell :value="'已选:' + calcSelected('cateItem')" center is-link @click="moreFiltersItemShow('cateItem', '采购单位')">
+                                            <template #title>
+                                                <span v-if="screenShow" class="cateText">采购单位类型</span>
+                                                <span v-else class="rootstyletitle">
+                                                    <span>采购单位类型</span>
+                                                    <span class="root_open">开通</span>
+                                                </span>
+                                            </template>
+                                        </van-cell>
+                                        <van-cell :value="'已选:' + calcSelected('keywordItem')" center is-link @click="moreFiltersItemShow('keywordItem', '关键词')">
+                                            <template #title>
+                                                <span v-if="screenShow" class="keywordText">关键词</span>
+                                                <span v-else class="rootstyletitle">
+                                                    <span>关键词</span>
+                                                    <span class="root_open">开通</span>
+                                                </span>
+                                            </template>
+                                        </van-cell>
+                                        <van-cell :value="'已选:' + calcSelected('noticeItem')" center is-link @click="moreFiltersItemShow('noticeItem', '公告类型')">
+                                            <template #title>
+                                                <span v-if="screenShow" class="noticeText">公告类型</span>
+                                                <span v-else class="rootstyletitle">
+                                                    <span>公告类型</span>
+                                                    <span class="root_open">开通</span>
+                                                </span>
+                                            </template>
+                                        </van-cell>
+                                    </van-cell-group>
+                                </div>
+                                <div class="j-footer j-button-group">
+                                    <button class="j-button-cancel" :disabled="selectedMoreCancelDisabled" @click="selectedMoreCancel">重置</button>
+                                    <button class="j-button-confirm" @click="selectedMoreConfirmed">确认</button>
+                                </div>
+                            </div>
                         </van-dropdown-item>
-                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" title="关键词" ref="keywordItem" @open="open('关键词')" @close="close">
-                            <template #title>
-                                <span v-if="screenShow" class="keywordText">关键词</span>
-                                <span v-if="!screenShow" class="rootstyletitle">
-                                    <span>关键词</span>
-                                    <span class="root_open">开通</span>
-                                </span>
-                            </template>
+                    </van-dropdown-menu>
+                </div>
+                <div class="screen"></div>
+                <!-- popup * 3 -->
+                <van-popup
+                    v-model="moreFiltersShow.cateItem"
+                    closeable
+                    round
+                    position="bottom"
+                    close-icon="clear"
+                    class="j-popup collection"
+                    overlay-class="j-overlay"
+                    :style="{ height: '60%' }"
+                    get-container="body">
+                    <div class="j-container">
+                        <div class="popup-header header-title">采购单位类型</div>
+                        <div class="j-main">
+                            <cate-component @cancel="cancel" v-if="screenShow" @confirm="confirm" :key="setTimer.catetimer" :selectcatelist="selectCateList"></cate-component>
+                            <root-component v-else @cancel="cancel" @confirm="confirm"></root-component>
+                        </div>
+                    </div>
+                </van-popup>
+                <van-popup
+                    v-model="moreFiltersShow.keywordItem"
+                    closeable
+                    round
+                    position="bottom"
+                    close-icon="clear"
+                    class="j-popup collection"
+                    overlay-class="j-overlay"
+                    :style="{ height: '60%' }"
+                    get-container="body">
+                    <div class="j-container">
+                        <div class="popup-header header-title">关键词</div>
+                        <div class="j-main">
                             <keyword-component :key="setTimer.keytimer" @cancel="cancel" v-if="screenShow" @confirm="confirm"  :selectkeywordlist="selectKeyWordList"></keyword-component>
                             <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
-                        </van-dropdown-item>
-                        <van-dropdown-item get-container="#dropDownItemGroup" :lazy-render="false" title="公告类型" ref="noticeItem" @open="open('公告类型')" @close="close">
-                            <template #title>
-                                <span v-if="screenShow" class="noticeText">公告类型</span>
-                                <span v-if="!screenShow" class="rootstyletitle">
-                                    <span>公告类型</span>
-                                    <span class="root_open">开通</span>
-                                </span>
-                            </template>
+                        </div>
+                    </div>
+                </van-popup>
+                <van-popup
+                    v-model="moreFiltersShow.noticeItem"
+                    closeable
+                    round
+                    position="bottom"
+                    close-icon="clear"
+                    class="j-popup collection"
+                    overlay-class="j-overlay"
+                    :style="{ height: '60%' }"
+                    get-container="body">
+                    <div class="j-container">
+                        <div class="popup-header header-title">公告类型</div>
+                        <div class="j-main">
                             <notice-component :key="setTimer.noticetimer" @cancel="cancel" v-if="screenShow" @confirm="confirm" :selectnoticelist="selectNoticeList"></notice-component>
                             <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
-                        </van-dropdown-item>
-                    </van-dropdown-menu>
-                </div>
-                <div class="screen"></div>
+                        </div>
+                    </div>
+                </van-popup>
             </div>
         </div>
         <div class="color_top" style="display:none;"></div>
@@ -887,27 +961,29 @@
       });
     }
   }
-  //
+
 function extend(i){
-window.listScroll = function() {
-  if (i==0){
+  window.listScroll = function() {
+    if (i==0){
       var nowT = $(".listcontent").scrollTop()
       if (nowT > 0) {
+        if (nowT > 50) {
+          // 修复非超级订阅用户,但是大会员会用户。在筛选结果只有4条数据时候滚动产生的无限循环
+          // 无限循环触发条件:nowT<50,设置高度,触发scroll事件,nowT<50 ...以此无限循环触发
           $(".header_header").css({height: (60 - nowT) +'px'})
-          if (nowT > 50) {
-              $(".header_header").hide();
-        $(".switch").fadeIn();
-          }else{
-        $(".header_header").show();
-        $(".switch").fadeOut();
-      }
+          $(".header_header").hide();
+          $(".switch").fadeIn();
+        }else{
+          $(".header_header").show();
+          $(".switch").fadeOut();
+        }
       } else {
-          $(".header_header").css({height: (60) +'px'})
-          $(".header_header").show()
-      $(".switch").fadeOut();
+        $(".header_header").css({height: (60) +'px'})
+        $(".header_header").show()
+        $(".switch").fadeOut();
       }
+    }
   }
- }
 }
   //下拉刷新
   function reloadFirstPage(me) {
@@ -1125,7 +1201,7 @@ function hasNoData() {
           var showdateTable = ""
 
           if (obj.publishtime) {
-              showdateList = timeDiff(new Date(Number(obj.publishtime + "000")));
+              showdateList = utils.dateFromNow(obj.publishtime * 1000);
               showdateTable = formatDate(obj.publishtime)
               if (showdateList != null) {
                   showdateList = '<span><i class="jyapp-icon jyapp-icon-bofangjilu" style="color:#7a7a7a;margin-right:2px;"></i>' + showdateList + '</span>'

+ 2 - 2
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -129,7 +129,7 @@
         <div class="home_search fixed-top">
             <div class="home_search_left inp-search">
                 <div class="jy_sprite_main sprite_home_search icon_search"></div>
-                <span>示例:税务局 软件</span>
+                <span>多个关键词用空格隔开,如:税务局 软件</span>
             </div>
         </div>
     </div>
@@ -150,7 +150,7 @@
                     <div class="home_search_left inp-search">
                         <div class="jy_sprite_main sprite_home_search icon_search"></div>
                         <!--	                    <img class="icon_search" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/search/home_search.png?v={{Msg "seo" "version"}}" alt="">-->
-                        <span>示例:税务局 软件</span>
+                        <span>多个关键词用空格隔开,如:税务局 软件</span>
                     </div>
                 </div>
                 <div class="home_banner">

+ 153 - 29
src/jfw/modules/app/src/web/templates/weixin/search/tabSearch.html

@@ -563,6 +563,31 @@
             transform: rotate(20deg);
         }
     }
+    #feedback button {
+        width: 3.3rem;
+        height: 0.8rem;
+        border-radius: 0.08rem;
+        font-size: 0.32rem;
+        font-family: PingFang SC, PingFang SC-Medium;
+        font-weight: 500;
+        text-align: CENTER;
+        color: #2abed1;
+        line-height: 0.8rem;
+        background: transparent;
+        border: 1px solid #2ABED1;
+        margin-top: 0.96rem;
+    }
+    #hasNoData_tiptext .tip-text-for-group {
+        font-size: 0.3rem;
+        font-family: PingFang SC, PingFang SC-Medium;
+        font-weight: 500;
+        text-align: center;
+        color: #5f5e64;
+        line-height: 0.44rem;
+    }
+    #hasNoData_tiptext .tip-text-for-group .tip-text-for-search {
+        color: #2ABED1;
+    }
 </style>
 
 <!--S-Loading-->
@@ -577,7 +602,7 @@
     </div>
     <form data-name="input-clear-box" class="search-header-box" action="javascript:return true">
         <span class="j-icon base-icon icon-search"></span>
-        <input id="search-header-input" name="super_searchinput" type="search" placeholder="税务局软件">
+        <input id="search-header-input" name="super_searchinput" type="search" placeholder="多个关键词用空格隔开">
         <div class="padding-icon">
             <span class="j-icon base-icon icon-delete-gray"></span>
         </div>
@@ -611,7 +636,7 @@
                 <div id="v-ent-search-group" :key="entSearchKey"  class="v-ent-search-group" v-cloak>
                     <div v-show="showEntSearch">
                         <van-tabs @click="onClickTabs" :ellipsis="false" line-height="0" v-model="activeTabIndex">
-                            <van-tab v-for="(tab, index) in entTabs"  :key="tab.title">
+                            <van-tab v-for="(tab, index) in getTabs"  :key="tab.title">
                                 <template #title>
                                     <div class="ent-search-tab-item" :class="{'ent-p-select': isSelectConditionTabs[index], 'ent-p-close': !showPop, 'ent-p-disabled': tab.disabled}" v-show="tab.title">
                                         <span>@@ tab.title @@</span>
@@ -624,15 +649,25 @@
                                 </template>
                             </van-tab>
                         </van-tabs>
+                        <div v-show="showPopForArea" class="popForArea">
+                            <div @click="togglePopForArea(false)" style="z-index: 2033;" class="van-overlay"></div>
+                            <div class="van-popup van-popup--bottom j-container" style="z-index: 2034;max-height: 80%;">
+                                <div class="area-pop-title-group">
+                                    <span>请选择中标区域</span>
+                                    <div class="padding-icon" @click="togglePopForArea(false)"><i class="j-icon base-icon icon-delete-gray"></i></div>
+                                </div>
+                                <area-component class="j-main" :multiple="false" ref="areaRadioComponent" @cancel="onCancelArea" @confirm="onConfirmArea" @select="updateScrollTop"></area-component>
+                            </div>
+                        </div>
                         <div v-show="showPop" class="jy-diy-pop ent-search-pop">
                             <div @click="togglePop(false)" class="van-overlay"></div>
-                            <div class="van-popup">
-                                <div class="popup-content">
+                            <div class="van-popup"  :class="{'j-container': isMoreContent}">
+                                <div class="popup-content" :class="{'j-main': isMoreContent}">
                                     <div class="wait-buy-tip-group" v-if="isWaitBuy">
                                         <h3>您暂无使用权限</h3>
                                         <p>开通超级订阅,全国企业随手查,<br>搜索信息更高效!</p>
                                     </div>
-                                    <div class="condition-select-group" :class="{more: isMoreSelect}" v-show="!isWaitBuy && conditionMap[activeTabIndex]">
+                                    <div class="condition-select-group" :class="{more: isMoreSelect}" v-show="!isWaitBuy && !isMoreContent && conditionMap[activeTabIndex]">
                                         <div class="condition-select-item" @click="onSelectItem(item, activeTabIndex)" v-for="(item,i) in conditionMap[activeTabIndex]" :class="{checked: item.checked, 'disabled': item.disabled}">
                                             <div class="row-item-group">
                                                 <span>@@item.title@@</span>
@@ -647,8 +682,22 @@
                                         </div>
                                     </div>
                                     <area-component ref="areaComponent" @select="updateScrollTop" v-show="activeTabIndex === 2"></area-component>
-                                    <money-component :radio="false" :tags="moneyTags" ref="moneyComponent"  v-show="activeTabIndex === 3"></money-component>
-                                    <area-component :multiple="false" ref="areaRadioComponent" @select="updateScrollTop" v-show="!isWaitBuy && activeTabIndex === 6"></area-component>
+                                    <money-component :radio="false" :all="true" :tags="moneyTags" ref="moneyComponent"  v-show="activeTabIndex === 3"></money-component>
+                                    <div class="more-popup-content" v-show="isMoreContent">
+                                        <div class="select-more-tag-group" @click="onSelectMoreGroup(item)"  v-for="(item,i) in moreContentList" :class="{'row-group': !conditionMap[item]}">
+                                            <div class="select-tag-title">
+                                                @@entTabs[item].title@@
+                                                <div class="disabled-tag"  v-if="entTabs[item].disabled === true">开通</div>
+                                            </div>
+                                            <div class="select-tag-content" v-if="conditionMap[item]">
+                                                <div class="select-more-tag-item" @click.stop="onSelectMoreItem(item, tags, ii)" v-for="(tags,ii) in conditionMap[item]" :class="{active: tags.checked}">@@tags.title@@</div>
+                                            </div>
+                                            <div class="select-area-content" v-else>
+                                                已选:@@conditionStrMap.biddingArea || '全国'@@
+                                                <van-icon name="arrow"></van-icon>
+                                            </div>
+                                        </div>
+                                    </div>
                                 </div>
                                 <div class="pop-bottom" v-show="!isWaitBuy && isMoreSelect">
                                     <van-button type="default" @click="resetCondition">重置</van-button>
@@ -740,7 +789,7 @@
         <div id="v-search-group" :key="searchComponentKey" class="v-ent-search-group" v-cloak>
             <div v-show="showEntSearch">
                 <van-tabs @click="onClickTabs" :ellipsis="false" line-height="0" v-model="activeTabIndex">
-                    <van-tab v-for="(tab, index) in entTabs"  :key="tab.title">
+                    <van-tab v-for="(tab, index) in getTabs"  :key="tab.title">
                         <template #title>
                             <div class="ent-search-tab-item" :class="{'ent-p-select': isSelectConditionTabs[index], 'ent-p-close': !showPop, 'ent-p-disabled': tab.disabled}" v-show="!tab.hide && tab.title">
                                 <span>@@ tab.title @@</span>
@@ -752,14 +801,25 @@
                             </div>
                         </template>
                     </van-tab>
-                    <div v-show="isShowScrollIcon" class="tip-icon-box-bg">
-                        <div class="tip-icon-box"></div>
-                    </div>
                 </van-tabs>
+                <div v-show="showPopForMore" class="popForArea">
+                    <div @click="togglePopForMore(false)" style="z-index: 2033;" class="van-overlay"></div>
+                    <div class="van-popup van-popup--bottom j-container" style="z-index: 2034;max-height: 80%;height: auto;">
+                        <div class="area-pop-title-group">
+                            <span v-show="showPopTitle == '类型'">请选择信息类型</span>
+                            <span v-show="showPopTitle == '采购单位'">请选择采购单位类型</span>
+                            <div class="padding-icon" @click="togglePopForMore(false)"><i class="j-icon base-icon icon-delete-gray"></i></div>
+                        </div>
+                        <div class="collection j-main">
+                            <cate-component @cancel="cancelCatePop" @confirm="confirmCatePop" v-show="showPopTitle == '采购单位'" :key="'cate' + cateComponentKey" ref="cateComponent"></cate-component>
+                            <notice-component @cancel="cancelNoticePop" @confirm="confirmNoticePop" v-show="showPopTitle == '类型'"  :key="'notice' + noticeComponentKey" ref="noticeComponent"></notice-component>
+                        </div>
+                    </div>
+                </div>
                 <div v-show="showPop" class="jy-diy-pop ent-search-pop">
                     <div @click="togglePop(false)" class="van-overlay"></div>
-                    <div class="van-popup">
-                        <div class="popup-content">
+                    <div class="van-popup"  :class="{'j-container': isMoreContent}">
+                        <div class="popup-content" :class="{'j-main': isMoreContent}">
                             <div class="wait-buy-tip-group" v-if="isWaitBuy">
                                 <h3>您暂无使用权限</h3>
                                 <p>开通超级订阅,全国企业随手查,<br>搜索信息更高效!</p>
@@ -779,14 +839,70 @@
                                 </div>
                             </div>
                             <div class="collection">
-                                <industry-component v-show="isActiveForTab['行业']" :key="'industry' + industryComponentKey" ref="industryComponent"></industry-component>
-                                <date-component :times="times" :rootopen="!conditionMap[1][4].disabled" :selectdate="selectDate" v-show="isActiveForTab['时间']" :key="'date' + dateComponentKey" ref="dateComponent"></date-component>
-                                <notice-component v-show="isActiveForTab['类型']" :key="'notice' + noticeComponentKey" ref="noticeComponent"></notice-component>
-                                <cate-component v-show="!isWaitBuy && isActiveForTab['采购单位']" :key="'cate' + cateComponentKey" ref="cateComponent"></cate-component>
+                                <industry-component v-show="activeTabIndex == 2" :key="'industry' + industryComponentKey" ref="industryComponent"></industry-component>
                             </div>
-                            <area-component ref="areaComponent" @select="updateScrollTop" v-show="isActiveForTab['地区']"></area-component>
-                            <money-component extra="万元" :tags="moneyTags" ref="moneyComponent"  v-show="isActiveForTab['金额']"></money-component>
-                            <div v-show="isActiveForTab['中标企业']" style="min-height: 4.8rem">
+                            <div class="more-popup-content" v-show="isMoreContent">
+                                <div class="select-more-tag-group">
+                                    <div class="select-tag-title">
+                                        金额
+                                    </div>
+                                    <div class="select-tag-content">
+                                        <money-component :diy="true" extra="万元" :tags="moneyTags" ref="moneyComponent"  ></money-component>
+                                    </div>
+                                </div>
+                                <div class="select-more-tag-group">
+                                    <div class="select-tag-title">
+                                        时间
+                                    </div>
+                                    <div class="select-tag-content collection">
+                                        <date-component :diy="true" :times="times" :rootopen="!conditionMap[1][4].disabled" :selectdate="selectDate" :key="'date' + dateComponentKey" ref="dateComponent"></date-component>
+                                    </div>
+                                </div>
+                                <div class="select-more-tag-group row-group" @click="onSelectMoreGroup(6, '类型')">
+                                    <div class="select-tag-title">
+                                         信息类型
+                                    </div>
+                                    <div class="select-area-content">
+                                        已选:@@getSelectSubType@@
+                                        <van-icon name="arrow"></van-icon>
+                                    </div>
+                                </div>
+                                <div class="select-more-tag-group row-group" @click="onSelectMoreGroup(8, '采购单位')">
+                                    <div class="select-tag-title">
+                                        采购单位类型
+                                        <div class="disabled-tag" v-if="entTabs[8].disabled === true">开通</div>
+                                    </div>
+                                    <div class="select-area-content">
+                                        已选:@@getSelectCate@@
+                                        <van-icon name="arrow"></van-icon>
+                                    </div>
+                                </div>
+                                <div class="select-more-tag-group" @click="onSelectMoreGroup(item, entTabs[item].title)"  v-for="(item,i) in moreContentList" :class="{'row-group': !conditionMap[item]}">
+                                    <div class="select-tag-title">
+                                        @@entTabs[item].title@@
+                                        <div class="disabled-tag"  v-if="entTabs[item].disabled === true">开通</div>
+                                    </div>
+                                    <div class="select-tag-content" v-if="conditionMap[item]">
+                                        <div class="select-more-tag-item" @click.stop="onSelectMoreItem(item, tags, ii)" v-for="(tags,ii) in conditionMap[item]" :class="{active: tags.checked}">@@tags.title@@</div>
+                                    </div>
+                                </div>
+                                <div class="select-more-tag-group" @click="onSelectMoreGroup(11, '排除词')">
+                                    <div class="select-tag-title">
+                                        排除词
+                                        <div class="disabled-tag" v-if="entTabs[11].disabled === true">开通</div>
+                                    </div>
+                                    <div class="select-tag-content input-group" :class="{stop: entTabs[11].disabled === true}">
+                                        <van-field
+                                                v-model="notkeyInput"
+                                                placeholder="搜索结果不希望包含的关键词"
+                                                maxlength="10"
+                                                show-word-limit
+                                        ></van-field>
+                                    </div>
+                                </div>
+                            </div>
+                            <area-component ref="areaComponent" @select="updateScrollTop" v-show="activeTabIndex == 3"></area-component>
+                            <div v-show="showPopTitle == '中标企业'" style="min-height: 4.8rem">
                                 <ul class="ent-search-list-box" id="select-win-list"></ul>
                                 <form data-name="input-clear-box" class="search-win-box" action="javascript:return true">
                                     <input type="search" id="search-win-input" placeholder="输入中标企业名称">
@@ -1343,15 +1459,14 @@
         </div>
         <div style="font-size:16px;color:#1d1d1d;">
 				<span id="hasNoData_tiptext">
-					<font>没有找到和该关键词匹配的信息</font>
+					<font class="tip-text-for-group">对不起,没有找到 <span class="tip-text-for-search">近一年</span> 相关匹配的信息,修改时间范围或换个搜索词试试吧</font>
 					<font style="display: none;">抱歉!由于系统繁忙暂时无法进行搜索,请1分钟后再试!</font>
 					<font style="display: none;">抱歉!由于系统繁忙暂时无法进行搜索,请稍后再试!</font>
 				</span><br>
 <!--            <div style="display:none;" id="allSearchModel">试试<span style="color:#2cb7ca;text-decoration:underline;line-height: 30px">全文搜索</span></div>-->
         </div>
         <div class="text-center" id="feedback" style="width:100%;">
-            <div class="jy_sprite_main sprite_jyyjfk" style="transform: scale(1.21);margin-top: 15px;"></div>
-            <!--				<img style="width: 200px;margin-top: 15px;" src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/images/wx/jyyjfk.png?v={{Msg "seo" "version"}}">-->
+            <button>意见反馈</button>
         </div>
     </div>
     <div class="easypopup" id="nijianTip">
@@ -1382,7 +1497,7 @@
 <!--E-页面-->
 
 <!--S-脚本-->
-<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/mainSearch/js/utils.js'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js'></script>
 <script>
 
     function ajaxQueryAssociateList (data, callback) {
@@ -1444,6 +1559,10 @@
             vEntSearchComponent.toggleEntShow(false)
           }
         }
+        if (vMainSearchComponent) {
+            vMainSearchComponent.toggleEntTabShow(false)
+            vMainSearchComponent.toggleEntShow(false)
+        }
         window.isKeyDownToEntSearch = false
         var nowIndex = $(".tabs-box .tabs-nav .active").index()
         var nowInput = $("#search-header-input").val().trim()
@@ -1513,8 +1632,11 @@
         var isNewPage = $("#selLable").hasClass('hidden') && $("#super_search").hasClass('hidden')
         console.log(!isNewPage && isSearchList, '显示筛选/搜索')
         if (!isNewPage && isSearchList) {
-            $("#clickFilter").text('筛选')
+            $("#clickFilter").text('搜索')
             $(".app-layout-content-b .tabs-box").addClass('hidden')
+            if (vMainSearchComponent) {
+                vMainSearchComponent.toggleEntTabShow(true)
+            }
             // sessionStorage.removeItem('isSearchListPage')
         } else {
             $("#clickFilter").text('搜索')
@@ -1643,17 +1765,19 @@
         $(".tabs-nav div").on('click', function () {
             $(this).addClass('active').siblings().removeClass('active')
             var nowIndex = $(this).index()
-            var tipArr = ['税务局软件', '企业名称', '采购单位名称']
+            var tipArr = ['多个关键词用空格隔开', '企业名称', '采购单位名称']
             $("#search-header-input").attr('placeholder', tipArr[nowIndex])
             $(".tabs-content > .tabs-content-page").eq(nowIndex).addClass('active').siblings().removeClass('active')
             if (nowIndex !== 0) {
                 var type = nowIndex === 1 ? 'ent' : 'buyer'
+                $(".search-header-box").addClass('m-r')
                 if (nowIndex !== 1) {
-                  $(".search-header-box").removeAttr("action")
+                    $(".search-header-box").removeAttr("action")
+                    $(".search-header-box").next().hide()
                 } else {
-                  $(".search-header-box").attr("action", "javascript:return true")
+                    $(".search-header-box").attr("action", "javascript:return true")
+                    $(".search-header-box").next().show()
                 }
-                $(".search-header-box").addClass('m-r').next().hide()
                 createSearchResultList()
             } else {
                 $(".search-header-box").removeClass('m-r').attr("action", "javascript:return true").next().show()

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

@@ -306,7 +306,7 @@
                         <script>
                             var l_publishtime = {{.T.obj.l_publishtime}};
                             if(l_publishtime != ""){
-                                var tdf = timeDiff(new Date(Number(l_publishtime+"000")))
+                                var tdf = utils.dateFromNow(Number(l_publishtime+"000"))
                                 if(tdf != null){
                                     // document.write("<div class='timebefore_vip'><i class='glyphicon bofangjilu'></i>"+tdf+"</div>");
                                     document.write("<div class='timebefore_vip'>"+tdf+"</div>");
@@ -387,7 +387,7 @@
                         <script>
                             var l_publishtime = {{.T.obj.l_publishtime}};
                             if(l_publishtime != ""){
-                                var tdf = timeDiff(new Date(Number(l_publishtime+"000")))
+                                var tdf = utils.dateFromNow(Number(l_publishtime+"000"))
                                 if(tdf != null){
                                     document.write("<span class='timebefore'>"+tdf+"</span>");
                                 }

+ 21 - 7
src/jfw/modules/common/src/qfw/util/bidsearch/search.go

@@ -3,6 +3,7 @@ package bidsearch
 import (
 	"fmt"
 	"jfw/public"
+	"log"
 	"qfw/util"
 	"qfw/util/elastic"
 	"qfw/util/jy"
@@ -30,7 +31,7 @@ const (
 )
 
 //GetWxsearchlistData 移动端招标信息搜索
-func GetWxsearchlistData(keywords, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel string, pageNum, pageSize int, selectTypeArr []string, field string) (list *[]map[string]interface{}, b_word, a_word, s_word string) {
+func GetWxsearchlistData(keywords, scope, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel string, pageNum, pageSize int, selectTypeArr []string, field, notkey string) (list *[]map[string]interface{}, b_word, a_word, s_word string) {
 	var hightlightContent bool = false //是否高亮正文
 	for _, v := range selectTypeArr {
 		if v == "detail" {
@@ -48,7 +49,7 @@ func GetWxsearchlistData(keywords, scope, publishtime, subtype, industry, minpri
 	} else {
 		findfields = fmt.Sprintf(`"%s"`, strings.Join(selectTypeArr, "\",\""))
 	}
-	qstr := GetSearchQuery(s_word, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, GetBidSearchQuery(scope, publishtime, subtype, winner, buyerclass))
+	qstr := GetSearchQuery(s_word, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, GetBidSearchQuery(scope, publishtime, subtype, winner, buyerclass), notkey)
 	if hightlightContent { //全文搜索
 		list = elastic.GetAllByNgram(INDEX, TYPE, qstr, `"detail"`, bidSearch_sort, field, (pageNum-1)*pageSize, pageSize, 100, true)
 	} else { //标题搜索
@@ -64,7 +65,7 @@ func GetWxsearchlistData(keywords, scope, publishtime, subtype, industry, minpri
 }
 
 //GetPcBidSearchData pc端招标信息搜索
-func GetPcBidSearchData(searchvalue, area, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel string, start, pageSize int, isGetCount bool, selectTypeArr []string, field string) (count, totalPage int64, list *[]map[string]interface{}) {
+func GetPcBidSearchData(searchvalue, area, publishtime, subtype, industry, minprice, maxprice, winner, buyerclass, hasBuyerTel, hasWinnerTel string, start, pageSize int, isGetCount bool, selectTypeArr []string, field, notkey string) (count, totalPage int64, list *[]map[string]interface{}) {
 	var findfields string
 	var hightlightContent bool = false //是否高亮正文
 	for _, v := range selectTypeArr {
@@ -78,7 +79,7 @@ func GetPcBidSearchData(searchvalue, area, publishtime, subtype, industry, minpr
 	} else {
 		findfields = fmt.Sprintf(`"%s"`, strings.Join(selectTypeArr, "\",\""))
 	}
-	qstr := GetSearchQuery(searchvalue, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, GetBidSearchQuery(area, publishtime, subtype, winner, buyerclass))
+	qstr := GetSearchQuery(searchvalue, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, GetBidSearchQuery(area, publishtime, subtype, winner, buyerclass), notkey)
 	if isGetCount && qstr != "" && start == 0 {
 		count = elastic.Count(INDEX, TYPE, qstr)
 	}
@@ -191,7 +192,7 @@ func GetBidSearchQuery(area, publishtime, subtype, winner, buyerclass string) st
 	return query
 }
 
-func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, mustquery string) (qstr string) {
+func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, findfields, mustquery, notkey string) (qstr string) {
 	multi_match := `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s]}}`
 	query := `{"query":{"bool":{"must":[%s],"must_not":[%s]}}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
@@ -205,10 +206,10 @@ func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinne
 		musts = append(musts, mustquery)
 	}
 	if keyword != "" {
-		multi_match = fmt.Sprintf(multi_match, "%s", findfields)
+		keyword_multi_match := fmt.Sprintf(multi_match, "%s", findfields)
 		shoulds := []string{}
 		for _, v := range strings.Split(keyword, "+") {
-			shoulds = append(shoulds, fmt.Sprintf(multi_match, elastic.ReplaceYH(v)))
+			shoulds = append(shoulds, fmt.Sprintf(keyword_multi_match, elastic.ReplaceYH(v)))
 		}
 		musts = append(musts, fmt.Sprintf(elastic.NgramMust, strings.Join(shoulds, ",")))
 	}
@@ -260,6 +261,19 @@ func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinne
 			musts = append(musts, fmt.Sprintf(query_missing, "winnertel"))
 		}
 	}
+	if notkey = strings.TrimSpace(notkey); notkey != "" {
+		notkey_multi_match := fmt.Sprintf(multi_match, "%s", findfields)
+		notkey_must_not := []string{}
+		for _, v := range strings.Split(notkey, " ") {
+			v = strings.TrimSpace(v)
+			if v == "" {
+				continue
+			}
+			notkey_must_not = append(notkey_must_not, fmt.Sprintf(notkey_multi_match, elastic.ReplaceYH(v)))
+		}
+		must_not = append(must_not, fmt.Sprintf(query_bool_should, strings.Join(notkey_must_not, ",")))
+	}
 	qstr = fmt.Sprintf(query, strings.Join(musts, ","), strings.Join(must_not, ","))
+	log.Println(qstr)
 	return
 }

+ 101 - 0
src/jfw/modules/entsesearch/src/web/staticres/jylab/entsesearch/js/common.js

@@ -38,6 +38,107 @@ var EasyPopup = function(id){
 		$("#"+this.id).fadeOut();
 	}
 }
+// 部分页面没有全局工具函数
+if (typeof utils !== 'object') {
+	utils = {}
+}
+Date.prototype.pattern = function (fmt) {
+	if (!fmt) return ''
+	var o = {
+		'y+': this.getFullYear(),
+		'M+': this.getMonth() + 1, // 月份
+		'd+': this.getDate(), // 日
+		// 12小时制
+		'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
+		// 24小时制
+		'H+': this.getHours(), // 小时
+		'm+': this.getMinutes(), // 分
+		's+': this.getSeconds(), // 秒
+		'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+		'S': this.getMilliseconds(), // 毫秒
+		'E+': this.getDay(), // 周
+	};
+	var week = {
+		'0': '日',
+		'1': '一',
+		'2': '二',
+		'3': '三',
+		'4': '四',
+		'5': '五',
+		'6': '六'
+	};
+	if (/(y+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
+	}
+	if (/(E+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
+		this.getDay() + '']);
+	}
+	for (var k in o) {
+		if (new RegExp('(' + k + ')').test(fmt)) {
+			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
+				.length)));
+		}
+	}
+	return fmt;
+}
+utils.dateFromNow = function (originTime, useOld) {
+	if (!originTime) return
+	// 原始时间 - 传入的时间戳
+	var originTimeStamp = +new Date(originTime)
+	// 当前时间戳
+	var nowTimeStamp = +new Date()
+	// 时间戳相差多少
+	var diffTimeStamp = nowTimeStamp - originTimeStamp
+
+	var postfix = diffTimeStamp > 0 ? '前' : '后'
+	// 求绝对值 ms(毫秒)
+	var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
+	var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
+
+	// 10天的秒数
+	var days11 = 11 * 24 * 60 * 60
+	// var dataMap = {
+	//     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
+	//     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
+	// }
+	var dataMap = {
+		zh: ['天', '小时', '分钟', '秒'],
+		number: [24 * 60 * 60, 60 * 60, 60, 1]
+	}
+
+	var timeString = ''
+	// 10天前
+	var tenDaysAgo = diffTimeStampAbsS > days11
+	// 是否是当天
+	var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+	var condition = !isCurrentDay
+	if (useOld) {
+		condition = tenDaysAgo
+	}
+
+	if (condition) {
+		// 不是当天,则使用正常日期显示
+		var originDate = new Date(originTimeStamp)
+		var nowDate = new Date()
+		// 是否同年
+		var sameYear = originDate.getFullYear() === nowDate.getFullYear()
+		// 如果是当年,则不显示年
+		var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
+		timeString = originDate.pattern(patternString)
+	} else {
+		for (var i = 0; i < dataMap.number.length; i++) {
+			var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
+			if (inm != 0) {
+				timeString = inm + dataMap.zh[i] + postfix
+				break
+			}
+		}
+	}
+	return timeString
+}
+
 //计算时差
 function timeDiff(date){
 	var date1 = date;//开始时间

+ 100 - 0
src/jfw/modules/followent/src/web/staticres/jylab/followent/js/common.js

@@ -39,6 +39,106 @@ var EasyPopup = function(id){
 		$("#"+this.id).fadeOut();
 	}
 }
+// 部分页面没有全局工具函数
+if (typeof utils !== 'object') {
+	utils = {}
+}
+Date.prototype.pattern = function (fmt) {
+	if (!fmt) return ''
+	var o = {
+		'y+': this.getFullYear(),
+		'M+': this.getMonth() + 1, // 月份
+		'd+': this.getDate(), // 日
+		// 12小时制
+		'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
+		// 24小时制
+		'H+': this.getHours(), // 小时
+		'm+': this.getMinutes(), // 分
+		's+': this.getSeconds(), // 秒
+		'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+		'S': this.getMilliseconds(), // 毫秒
+		'E+': this.getDay(), // 周
+	};
+	var week = {
+		'0': '日',
+		'1': '一',
+		'2': '二',
+		'3': '三',
+		'4': '四',
+		'5': '五',
+		'6': '六'
+	};
+	if (/(y+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
+	}
+	if (/(E+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
+		this.getDay() + '']);
+	}
+	for (var k in o) {
+		if (new RegExp('(' + k + ')').test(fmt)) {
+			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
+				.length)));
+		}
+	}
+	return fmt;
+}
+utils.dateFromNow = function (originTime, useOld) {
+	if (!originTime) return
+	// 原始时间 - 传入的时间戳
+	var originTimeStamp = +new Date(originTime)
+	// 当前时间戳
+	var nowTimeStamp = +new Date()
+	// 时间戳相差多少
+	var diffTimeStamp = nowTimeStamp - originTimeStamp
+
+	var postfix = diffTimeStamp > 0 ? '前' : '后'
+	// 求绝对值 ms(毫秒)
+	var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
+	var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
+
+	// 10天的秒数
+	var days11 = 11 * 24 * 60 * 60
+	// var dataMap = {
+	//     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
+	//     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
+	// }
+	var dataMap = {
+		zh: ['天', '小时', '分钟', '秒'],
+		number: [24 * 60 * 60, 60 * 60, 60, 1]
+	}
+
+	var timeString = ''
+	// 10天前
+	var tenDaysAgo = diffTimeStampAbsS > days11
+	// 是否是当天
+	var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+	var condition = !isCurrentDay
+	if (useOld) {
+		condition = tenDaysAgo
+	}
+
+	if (condition) {
+		// 不是当天,则使用正常日期显示
+		var originDate = new Date(originTimeStamp)
+		var nowDate = new Date()
+		// 是否同年
+		var sameYear = originDate.getFullYear() === nowDate.getFullYear()
+		// 如果是当年,则不显示年
+		var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
+		timeString = originDate.pattern(patternString)
+	} else {
+		for (var i = 0; i < dataMap.number.length; i++) {
+			var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
+			if (inm != 0) {
+				timeString = inm + dataMap.zh[i] + postfix
+				break
+			}
+		}
+	}
+	return timeString
+}
 //计算时差
 function timeDiff(date){
 	var date1 = date;//开始时间

+ 3 - 1
src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go

@@ -526,12 +526,14 @@ func getCurrEntCount(entName, entPhone string) int {
 
 //根据筛选id获取筛选条件
 func getSearchValueById(filterId string) (searchMap map[string]interface{}) {
-	filter, _ := util.MQFW.FindById("export_search", filterId, `{"industry":1,"publishtime":1,"area":1}`)
+	filter, _ := util.MQFW.FindById("export_search", filterId, `{"industry":1,"publishtime":1,"area":1,"comeinfrom":1}`)
 	if filter != nil && len(*filter) > 0 {
 		searchMap = make(map[string]interface{})
 		searchMap["industry"] = (*filter)["industry"]
 		searchMap["publishtime"] = (*filter)["publishtime"]
 		searchMap["area"] = (*filter)["area"]
+		searchMap["id"] = qutil.SE.Encode2Hex(filterId)
+		searchMap["comeinfrom"] = (*filter)["comeinfrom"]
 	}
 	return
 }

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

@@ -26,6 +26,7 @@ type DataExportPay struct {
 	createOrder xweb.Mapper `xweb:"/dataExport/createOrder"` //移动端创建订单
 	//vipDailyDataExport        xweb.Mapper `xweb:"/dataExport/vipDaily"`        //大会员数据包数据导出
 	//vipDailyDataExportSuccess xweb.Mapper `xweb:"/dataExport/vipDailySuccess"` //大会员数据包导出生成是否成功
+	historyById xweb.Mapper `xweb:"/dataExport/historyById"` //历史条件
 }
 
 var reg *regexp.Regexp //匹配特殊字符
@@ -253,6 +254,25 @@ func (p *DataExportPay) GetPrice() {
 	})
 }
 
+//根据id获取导出条件
+func (p *DataExportPay) HistoryById() {
+	id := p.GetString("id")
+	id = qutil.SE.Decode4Hex(id)
+	if id != "" {
+		data, _ := util.MQFW.FindById("export_search", id, nil)
+		if data != nil {
+			delete(*data, "_id")
+			delete(*data, "comeintime")
+			delete(*data, "comeinfrom")
+			delete(*data, "s_openid")
+			delete(*data, "s_userid")
+		}
+		p.ServeJson(data)
+		return
+	}
+	p.ServeJson(map[string]interface{}{})
+}
+
 //
 //func (this *DataExportPay) VipDailyDataExport() {
 //	userId, _ := this.GetSession("userId").(string)

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

@@ -90,6 +90,7 @@ func (this *DataExportPack) CreateOrder() {
 			"service_status": 0,
 			"user_nickname":  nickname,
 			"user_openid":    openId,
+			"user_phone":     this.GetString("order_phone"),
 			"order_code":     orderCode,
 			"product_type":   "数据流量包",
 			"create_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),

+ 11 - 11
src/jfw/modules/weixin/src/config.json

@@ -1,26 +1,26 @@
 {
-    "mongodbServers": "127.0.0.1:27080",
+    "mongodbServers": "192.168.3.206:27080",
     "mongodbPoolSize": "5",
     "mongodbName": "qfw",
   	"mongodblog": {
-			"address": "127.0.0.1:27090",
+			"address": "192.168.3.206:27090",
 	 		"size": 5,
 	 		"dbName": "qfw",
 			"replSet": "",
 			"userName": "admin",
 			"password": "123456"
 	},
-    "redisServers": "sso=127.0.0.1:1712,other=127.0.0.1:1712,jyop_other=127.0.0.1:1712,push=127.0.0.1:1712,wxtoken=127.0.0.1:1712",
-    "redisLogin": "login=127.0.0.1:1712",
+    "redisServers": "sso=192.168.3.206:1712,other=192.168.3.206:1712,jyop_other=192.168.3.206:1712,push=192.168.3.206:1712,wxtoken=192.168.3.206:1712",
+    "redisLogin": "login=192.168.3.206:1712",
     "weixinport": "82",
     "weixinrpcport": "8083",
     "webrpcport": "127.0.0.1:8084",
     "jyop_webrpcport": "127.0.0.1:8012",
-    "webdomain": "https://web-ws.jydev.jianyu360.com",
-    "appid":"wx5b1c6e7cc4dac0e4",
-    "appsecret":"b026103ffebd2291b3edb7a269612112",
-    "apptoken": "top2022top2022",
-    "proxysess": "https://web-ws.jydev.jianyu360.com/front/sess/%s",
+    "webdomain": "https://wcj.jydev.jianyu360.com",
+    "appid":"wx76e1309b01a7b17e",
+    "appsecret":"dd00e71cb2370432d9de848b674eb8e7",
+    "apptoken": "top2020top2020",
+    "proxysess": "https://wcj.jydev.jianyu360.com/front/sess/%s",
     "followCompany": 10,
     "welcomemsg": "用剑鱼标讯,所有功能完全免费,\n和传统的会员制说再见!\n\n<a href='%s'>点击这里</a>设置关键词,或直接回复“订阅 关键词”,如“订阅 教学设备”,您将随时随地接收招标信息!\n\n剑鱼标讯,让投标无限可能!",
     "tpl_subscribe_push_id": "IY_RWWzMlwDK6hcd6RAzTec6qre8n5r8PNOOUM_hgk0",
@@ -66,8 +66,8 @@
         "project_fail": "抱歉!无法添加项目“%s”,<a href='%s'>因为您关注的项目,达到了系统上限,您可以点击此处删除多余的项目,然后重新添加。</a>"
     },
     "vipSubscribeReply": {
-        "href": "/swordfish/SingleLogin?toHref=/front/vipsubscribe/introducePage",
-        "content": "<a href='%s'>点击立即体验超级订阅。</a>"
+        "href": "/swordfish/SingleLogin?toHref=/front/vipsubscribe/vipsubscribe_new",
+        "content": "<a href='%s'>点击立即购买超级订阅。</a>"
     },
     "structureData": {
         "href": "/swordfish/SingleLogin?toHref=/front/structed/index?adv_from=wx_reply",

+ 21 - 6
src/web/staticres/big-member/js/utils.js

@@ -1,5 +1,5 @@
 /**
- * utils.js v0.0.1
+ * utils.js
  * 各类js工具函数
  */
 
@@ -74,9 +74,14 @@ Number.prototype.fixed = function(len){
     return Math.round(this*num) / num
 }
 
+var versionChangeLog = {
+    '0.0.1': 'init',
+    '0.0.2': 'utils.dateFromNow 函数逻辑修改,具体修改内容查看函数注释'
+}
+
 var utils = {
     // utils版本号
-    version: '0.0.1',
+    version: '0.0.2',
     isWeiXinBrowser: navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1,
     isAndroid: navigator.userAgent.toLowerCase().indexOf('android') !== -1,
     isIos: /iphone|ipod|ipad|ios/.test(navigator.userAgent.toLowerCase()),
@@ -408,10 +413,10 @@ var utils = {
         }
     },
     /**
-     * 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
+     * 时间戳转换 多少秒、多少分、多少小时前  昨天以及昨天之前的显示年月日(今年的时间不显示年份)
      * @param {Date} originTime 要转换的时间对象(或者时间戳)
      */
-    dateFromNow: function (originTime) {
+    dateFromNow: function (originTime, useOld) {
         if (!originTime) return
         // 原始时间 - 传入的时间戳
         var originTimeStamp = +new Date(originTime)
@@ -437,7 +442,17 @@ var utils = {
         }
 
         var timeString = ''
-        if (diffTimeStampAbsS > days11) {
+        // 10天前
+        var tenDaysAgo = diffTimeStampAbsS > days11
+        // 是否是当天
+        var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+        var condition = !isCurrentDay
+        if (useOld) {
+            condition = tenDaysAgo
+        }
+        // 是否是当天
+        if (condition) {
             // 大于10天,则使用正常日期显示
             var originDate = new Date(originTimeStamp)
             var nowDate = new Date()
@@ -447,7 +462,7 @@ var utils = {
             var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
             timeString = originDate.pattern(patternString)
         } else {
-            for (var i = 0; i < 7; i++) {
+            for (var i = 0; i < dataMap.number.length; i++) {
                 var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
                 if (inm != 0) {
                     timeString = inm + dataMap.zh[i] + postfix

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

@@ -5,6 +5,105 @@
 * Browsers: iOS >= 7,Android >= 4
 */
 
+/* vant-reset */
+.van-dialog {
+    width: 6rem;
+    border-radius: .16rem;
+}
+.van-dialog__header {
+    font-weight: 700;
+    font-size: 18px;
+    line-height: 26px;
+    color: #171826;
+}
+.van-dialog__content {
+    padding: .16rem .6rem;
+}
+.van-dialog__message {
+    padding-left: 0;
+    padding-right: 0;
+    font-size: .3rem;
+    line-height: .44rem;
+    color: #5F5E64;
+}
+.van-dialog .van-button {
+    font-size: 18px;
+    line-height: 26px;
+}
+
+.van-dialog  .van-button--default {
+    color: #171826;
+}
+
+.van-toast {
+    max-width: 4.2rem;
+    line-height: 1.6;
+}
+
+/* vant-custom */
+.j-confirm-dialog {
+    border-radius: 8px;
+}
+.j-confirm-dialog .van-dialog__message {
+    font-size: .32rem;
+    color: #171826;
+    line-height: .48rem;
+    text-align: left;
+}
+.j-confirm-dialog.text-center .van-dialog__message {
+    text-align: center;
+}
+.j-confirm-dialog .van-button {
+    font-size: .36rem;
+    color: #171826;
+    line-height: .52rem;
+}
+
+/* popup */
+.j-popup .van-popup__close-icon {
+    top: .48rem;
+}
+.j-popup .popup-header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 1.28rem;
+    padding: 0 .32rem;
+}
+.j-popup .header-title {
+    font-size: .4rem;
+    color: #171826;
+}
+.j-popup .select-group {
+    padding-left: .32rem;
+}
+.j-popup .select-item {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0.24rem 0.32rem;
+    padding-left: 0;
+    font-size: 0.28rem;
+    line-height: 0.4rem;
+    color: #5f5e64;
+}
+.j-popup .select-item .j-icon {
+    opacity: 0;
+    transform: opacity .5s ease;
+}
+.j-popup .select-item.active {
+    color: #2abed1;
+}
+.j-popup .select-item.active .j-icon {
+    opacity: 1;
+}
+.j-popup .select-item:not(:last-of-type) {
+    border-bottom: 0.5px solid rgba(0, 0, 0, 0.05);
+}
+.j-popup.collection .unitTab {
+    height: 100%;
+}
+
 .collection{
     width: 100%;
 }
@@ -844,6 +943,7 @@
     background: #2abed1;
     border-radius: .08rem;
 }
+.area-card-item .root_open,
 .customTime .root_open{
     padding: .04rem .12rem;
     border: 1px solid #fb483d;
@@ -937,4 +1037,23 @@
     font-size: .28rem;
     line-height: .4rem;
     color: #2ABED1;
-}
+}
+
+/* 订阅页面第四个占满全屏的filter-tab */
+.filter-list-container .van-cell {
+    height: 1.08rem;
+    font-size: .28rem;
+}
+.filter-list-container .van-cell .van-cell__value {
+    font-size: .26rem;
+}
+.filter-list-container .van-cell:not(:last-of-type) {
+    border-bottom: 1px solid rgba(0,0,0,0.05);
+}
+.filter-list-container .rootstyletitle {
+    height: .48rem;
+}
+
+.super-vip-dialog .van-dialog__message {
+    color: #5f5e64;
+}

+ 30 - 2
src/web/staticres/common-module/collection/js/date-mobile.js

@@ -3,12 +3,16 @@ var dateComponentTemplate = `
   <div class="dateTags j-main" v-if="type === 'more-picker'">
       <div class="timeTag">
           <div class="area-card-item" :class="{active:item.selected==true}" v-for="(item, index) in timeSelectList" :key="index" @click="selectFixedDate(item)">{{item.name}}</div>
+          <div v-show="diy" class="area-card-item diy-item" :class="{active:dateStyle==true}"  @click="dateShowEvent">
+                自定义
+                <span class="root_open" v-if="!rootopen">开通</span>
+          </div>
       </div>
       <div class="customTime">
         <span class="customTime-title">自定义时间</span>
         <span class="root_open" v-if="!rootopen">开通</span>
       </div>
-      <div class="timePicker" @click="dateShowEvent" :class="{clickactive:dateStyle==true}">
+      <div v-show="getShowDiyInput" class="timePicker" @click.self="dateShowEvent" :class="{clickactive:dateStyle==true}">
         <van-field @focus="getStratFocus" v-model="dateTimePickerState.startPlaceHolder" placeholder="开始时间"></van-field>
         <div class="line"></div>
         <van-field @focus="getEndFocus" v-model="dateTimePickerState.endPlaceHolder" placeholder="结束时间"></van-field>
@@ -129,6 +133,10 @@ var dateComponent = {
       type: Boolean,
       default: true
     },
+    "diy": {
+      type: Boolean,
+      default: false
+    },
     'times': {
       type: Array,
       default: function () {
@@ -183,6 +191,11 @@ var dateComponent = {
     }
     this.setState()
   },
+  computed: {
+    getShowDiyInput () {
+      return this.diy ? this.dateStyle : true
+    }
+  },
   methods: {
     setState () {
       // {
@@ -355,7 +368,19 @@ var dateComponent = {
         this.dateStyle = true
         this.datePicker.startshow = true
       } else {
-        this.getWeixin()
+        if (this.diy) {
+          var _this = this
+          this.$dialog.close()
+          this.$dialog.confirm({
+            title: '开通超级订阅',
+            message: '立享更多搜索权限<br>寻找商机更精准',
+            className: 'ent-search-dialog center-text',
+            overlayClass: 'z-2030',
+            confirmButtonText: '去开通',
+          }).then(function () {
+            _this.getWeixin()
+          }).catch(function () {});
+        }
       }
     },
     formatter: function(type, val) {
@@ -389,6 +414,7 @@ var dateComponent = {
     },
     getStratFocus: function() {
       if(this.rootopen) {
+        this.datePicker.startshow = true
         document.activeElement.blur()
       } else {
         this.getWeixin()
@@ -414,11 +440,13 @@ var dateComponent = {
     resetStart: function() {
       this.datePicker.startshow = false
       this.dateTimePickerState.startPlaceHolder = ''
+      this.dateTimePickerState.start = ''
     },
     // 重置结束时间
     resetEnd: function() {
       this.datePicker.endshow = false
       this.dateTimePickerState.endPlaceHolder = ''
+      this.dateTimePickerState.end = ''
     },
     // 选择开始时间弹窗确认按钮
     onStartConfirm:function() {

+ 52 - 3
src/web/staticres/common-module/collection/js/money-mobile.js

@@ -99,13 +99,14 @@ var moneyComponentTemplate = `<div class="j-container">
 <div class="money-component-group j-main">
     <div class="select-tag-group">
         <div class="select-tag-item" :class="{active:item.selected==true}" v-for="(item, index) in selectTags" :key="index" @click="selectFixedTag(item)">{{item.name}}</div>
+        <div v-show="diy" class="select-tag-item" :class="{active: inputSelected==true}" @click="selectInput(true)">自定义</div>
     </div>
-    <div class="select-picker-group" @click="selectInput(false)" :class="{'click-active':inputSelected==true}">
-      <van-field :formatter="formatterDigit" @blur="formatInput" @click.stop="selectInput(true)" type="digit" v-model.number="inputMap.start" :placeholder="placeholder">
+    <div v-show="getShowDiyInput" class="select-picker-group" @click="selectInput(false)" :class="{'click-active':inputSelected==true}">
+      <van-field :formatter="formatterDigit" @focus="toggleInput(true)" @blur="formatInput" @click.stop="selectInput(true)" type="digit" v-model.number="inputMap.start" :placeholder="placeholder">
         <template #extra><span class="extra-text-tip">{{extra}}</span></template>
       </van-field>
       <div class="line"></div>
-      <van-field :formatter="formatterDigit" @blur="formatInput" @click.stop="selectInput(true)" type="digit" v-model.number="inputMap.end" :placeholder="placeholder">
+      <van-field :formatter="formatterDigit" @focus="toggleInput(true)" @blur="formatInput" @click.stop="selectInput(true)" type="digit" v-model.number="inputMap.end" :placeholder="placeholder">
         <template #extra><span class="extra-text-tip">{{extra}}</span></template>
       </van-field>
     </div>
@@ -127,6 +128,14 @@ var moneyComponent = {
       type: Boolean,
       default: true
     },
+    all: {
+      type: Boolean,
+      default: false
+    },
+    diy: {
+      type: Boolean,
+      default: false
+    },
     tags: {
       type: Array,
       default: function () {
@@ -163,6 +172,11 @@ var moneyComponent = {
   mounted () {
     $('head').append(tempMoneyStyleComponent)
   },
+  computed: {
+    getShowDiyInput () {
+      return this.diy ? this.inputSelected : true
+    }
+  },
   methods: {
     formatInput () {
       if (String(this.inputMap.start).length && String(this.inputMap.end).length) {
@@ -175,6 +189,7 @@ var moneyComponent = {
           end: maxN
         }
       }
+      this.toggleInput(false)
     },
     formatterDigit (value) {
       return value.replace(/\D/g, '').replace(/^0+/g, '0')
@@ -197,12 +212,45 @@ var moneyComponent = {
         return resultList.join(',')
       }
     },
+    checkAllStatus (item) {
+      if (this.all) {
+        if (item.name === '不限') {
+          this.resetSelected()
+          item.selected = true
+        } else {
+          this.selectTags[0].selected = this.getState() == ''
+        }
+      }
+    },
+    toggleInput (type) {
+      var parentDom = $("#v-search-group .more-popup-content")
+      var childDom = $("#v-search-group .more-popup-content .select-more-tag-group")
+      if (type) {
+        parentDom.css({
+          height: childDom.height() + 20,
+          overflow: 'hidden',
+          position: 'fixed',
+          top: '120px'
+        })
+      } else {
+        parentDom.css({
+          height: 'auto',
+          overflow: 'unset',
+          position: 'unset',
+          top: 'unset'
+        })
+      }
+    },
     selectInput (type) {
       if (this.radio) {
         this.resetSelected()
         this.inputSelected = true
       } else {
         this.inputSelected = type ? type : !this.inputSelected
+        this.checkAllStatus({
+          name: '自定义',
+          selected: false
+        })
       }
     },
     selectFixedTag: function(item) {
@@ -213,6 +261,7 @@ var moneyComponent = {
         item.selected = true
       } else {
         item.selected = !item.selected
+        this.checkAllStatus(item)
       }
     },
     resetSelected (type) {

+ 5 - 11
src/web/staticres/common-module/collection/js/notice-mobile.js

@@ -99,7 +99,11 @@ var noticeComponent = {
         },
         {
           "招标预告": [
-            "招标预告"
+            "预告",
+            "预审",
+            "预审结果",
+            "论证意见",
+            "需求公示",
           ]
         },
         {
@@ -167,13 +171,6 @@ var noticeComponent = {
                   bool = false
                 })
               }
-            } else if(data == '预告') {
-              if(Object.keys(item)[0] == '招标预告') {
-                item[Object.keys(item)[0]].forEach(function(d) {
-                  d.type = true
-                  bool = false
-                })
-              }
             }
           });
         })
@@ -295,9 +292,6 @@ var noticeComponent = {
             if (data.name === '拟建项目') {
               str = '拟建'
               noticeArr.push(str)
-            } else if(data.name === '招标预告') {
-              str = '预告'
-              noticeArr.push(str)
             } else {
               str = data.name
               noticeArr.push(str)

+ 0 - 701
src/web/staticres/common-module/collection/js/utils.js

@@ -1,701 +0,0 @@
-/**
- * utils.js v0.0.1
- * 各类js工具函数
- */
-
-/*
-   * 时间格式化函数(将时间格式化为,2019年08月12日,2019-08-12,2019/08/12的形式)
-   *
-   *
-   *   pattern参数(想要什么格式的数据就传入什么格式的数据)
-   *     · 'yyyy-MM-dd'  ---> 输出如2019-09-20
-   *     · 'yyyy-MM-dd hh:mm'  --->  输出如2019-09-20 08:20
-   *     · 'yyyy-MM-dd HH:mm:ss'  --->  输出如2019-09-20 18:20:23
-   *     · 'yyyy/MM/dd'  --->  输出如2019/09/20
-   *     · 'yyyy年MM月dd日'  --->  输出如2019年09月20日
-   *     · 'yyyy年MM月dd日 hh时mm分'  --->  输出如2019年09月20日 08时20分
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒'  --->  输出如2019年09月20日 08时20分23秒
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒 EE'  --->  输出如2019年09月20日 08时20分23秒 周二
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒 EEE'  --->  输出如2019年09月20日 08时20分23秒 星期二
-   *
-   *  参考: https://www.cnblogs.com/mr-wuxiansheng/p/6296646.html
-   */
-Date.prototype.pattern = function (fmt) {
-    if (!fmt) return ''
-    var o = {
-        'y+': this.getFullYear(),
-        'M+': this.getMonth() + 1, // 月份
-        'd+': this.getDate(), // 日
-        // 12小时制
-        'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
-        // 24小时制
-        'H+': this.getHours(), // 小时
-        'm+': this.getMinutes(), // 分
-        's+': this.getSeconds(), // 秒
-        'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
-        'S': this.getMilliseconds(), // 毫秒
-        'E+': this.getDay(), // 周
-    };
-    var week = {
-        '0': '日',
-        '1': '一',
-        '2': '二',
-        '3': '三',
-        '4': '四',
-        '5': '五',
-        '6': '六'
-    };
-    if (/(y+)/.test(fmt)) {
-        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
-    }
-    if (/(E+)/.test(fmt)) {
-        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
-            this.getDay() + '']);
-    }
-    for (var k in o) {
-        if (new RegExp('(' + k + ')').test(fmt)) {
-            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
-                .length)));
-        }
-    }
-    return fmt;
-}
-/*  挂载到Number原型上,格式化小数用tofixed会造成位数不够补零的情况(处理不让自动补零)
-    栗子: 不是number类型的需要转一下
-        Number('').fixed()
-        Number('213412DDD').fixed()
-        1234.152354.fixed()
-        1234.152354.fixed(2)
-        1234.152354.fixed(10)
-*/
-Number.prototype.fixed = function(len){
-    len = isNaN(len)?  0 : len
-    var num = Math.pow(10,len)
-    return Math.round(this*num) / num
-}
-
-var utils = {
-    // utils版本号
-    version: '0.0.1',
-    isWeiXinBrowser: navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1,
-    isAndroid: navigator.userAgent.toLowerCase().indexOf('android') !== -1,
-    isIos: /iphone|ipod|ipad|ios/.test(navigator.userAgent.toLowerCase()),
-    // 传入你要获取的参数的名字
-    getParam: function (name) {
-        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
-        var r = window.location.search.substr(1).match(reg); //获取url中'?'符后的字符串并正则匹配
-
-        var context = '';
-        if (r != null) context = r[2];
-        // 释放变量
-        reg = null;
-        r = null;
-        return context == null || context == '' || context == 'undefined' ? '' : context;
-    },
-    // 取[m, n]随机数
-    getRandomNumber: function (min, max) {
-        return Math.floor(Math.random() * (max - min + 1) + min);
-    },
-    // 获取唯一的uuid
-    // https://www.kancloud.cn/ifeng/js100/622666
-    getRandomUuid: function () {
-        var s = [];
-        var hexDigits = "0123456789abcdef";
-        for (var i = 0; i < 36; i++) {
-            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
-        }
-        s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
-        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
-        s[8] = s[13] = s[18] = s[23] = "-";
-
-        var uuid = s.join("");
-        return uuid;
-    },
-    // 获取随机字符串
-    // 不传参数则获取长度不固定的字符串
-    getRandomString: function (len) {
-        var randomString = '';
-        if (len) {
-            /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
-            var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
-            var maxPos = $chars.length;
-            for (i = 0; i < len; i++) {
-                randomString += $chars.charAt(Math.floor(Math.random() * maxPos));
-            }
-        } else {
-            // Math.random()  生成随机数字, eg: 0.123456
-            // .toString(36)  转化成36进制 : "0.4fzyo82mvyr"
-            // .substring(2)  去掉前面两位 : "yo82mvyr"
-            // .slice(-8)  截取最后八位 : "yo82mvyr"
-            randomString = Math.random().toString(36).substring(2)
-        }
-        return randomString;
-    },
-    // FROM: https://www.jianshu.com/p/90ed8b728975
-    // 比较两个对象是否相等
-    // 返回true为相等,返回false为不相等
-    deepCompare: function (x, y) {
-        var i, l, leftChain, rightChain;
-        function compare2Objects(x, y) {
-            var p;
-            // remember that NaN === NaN returns false
-            // and isNaN(undefined) returns true
-            if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {
-                return true;
-            }
-
-            // Compare primitives and functions.
-            // Check if both arguments link to the same object.
-            // Especially useful on the step where we compare prototypes
-            if (x === y) {
-                return true;
-            }
-
-            // Works in case when functions are created in constructor.
-            // Comparing dates is a common scenario. Another built-ins?
-            // We can even handle functions passed across iframes
-            if ((typeof x === 'function' && typeof y === 'function') ||
-                (x instanceof Date && y instanceof Date) ||
-                (x instanceof RegExp && y instanceof RegExp) ||
-                (x instanceof String && y instanceof String) ||
-                (x instanceof Number && y instanceof Number)) {
-                return x.toString() === y.toString();
-            }
-
-            // At last checking prototypes as good as we can
-            if (!(x instanceof Object && y instanceof Object)) {
-                return false;
-            }
-
-            if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {
-                return false;
-            }
-
-            if (x.constructor !== y.constructor) {
-                return false;
-            }
-
-            if (x.prototype !== y.prototype) {
-                return false;
-            }
-
-            // Check for infinitive linking loops
-            if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {
-                return false;
-            }
-
-            // Quick checking of one object being a subset of another.
-            // todo: cache the structure of arguments[0] for performance
-            for (p in y) {
-                if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
-                    return false;
-                } else if (typeof y[p] !== typeof x[p]) {
-                    return false;
-                }
-            }
-
-            for (p in x) {
-                if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
-                    return false;
-                } else if (typeof y[p] !== typeof x[p]) {
-                    return false;
-                }
-
-                switch (typeof (x[p])) {
-                    case 'object':
-                    case 'function':
-
-                        leftChain.push(x);
-                        rightChain.push(y);
-
-                        if (!compare2Objects(x[p], y[p])) {
-                            return false;
-                        }
-
-                        leftChain.pop();
-                        rightChain.pop();
-                        break;
-
-                    default:
-                        if (x[p] !== y[p]) {
-                            return false;
-                        }
-                        break;
-                }
-            }
-
-            return true;
-        }
-
-        if (arguments.length < 1) {
-            return true; //Die silently? Don't know how to handle such case, please help...
-            // throw "Need two or more arguments to compare";
-        }
-
-        for (i = 1, l = arguments.length; i < l; i++) {
-
-            leftChain = []; //Todo: this can be cached
-            rightChain = [];
-
-            if (!compare2Objects(arguments[0], arguments[i])) {
-                return false;
-            }
-        }
-
-        return true;
-    },
-    // 判断变量是否是数组
-    isArray: function (o){
-        return Object.prototype.toString.call(o) == '[object Array]';
-    },
-    // 数组对象根据某一个值进行从小到大冒泡排序
-    // arr 数组
-    // value 字符串
-    bSort: function (arr, value) {
-        var len = arr.length;
-        for (var i = 0; i < len - 1; i++) {
-            for (var j = 0; j < len - 1 - i; j++) {
-                // 相邻元素两两对比,元素交换,大的元素交换到后面
-                if (arr[j][value] > arr[j + 1][value]) {
-                    var temp = arr[j];
-                    arr[j] = arr[j + 1];
-                    arr[j + 1] = temp;
-                }
-            }
-        }
-        return arr;
-    },
-    // 数组去重
-    unique: function (arr) {
-        if (!this.isArray(arr)) {
-            console.log('type error!')
-            return
-        }
-        var array = [];
-        for (var i = 0; i < arr.length; i++) {
-            if (array .indexOf(arr[i]) === -1) {
-                array .push(arr[i])
-            }
-        }
-        return array
-    },
-    // 数组乱序
-    shuffle: function (arr) {
-        var targetArr = JSON.parse(JSON.stringify(arr || []))
-        var hitArr = []
-        var len = targetArr.length
-        for (var i = 0; i < len; i++) {
-            // 获取随机下标
-            var index = Math.floor(Math.random() * targetArr.length)
-            hitArr.push(targetArr[index])
-            targetArr.splice(index, 1)
-        }
-        return hitArr.concat(targetArr)
-    },
-    // 解决ios返回不刷新页面的问题
-    iosBackRefresh: function () {
-        var isPageHide = false;
-        window.addEventListener('pageshow', function () {
-            if (isPageHide) {
-                location.reload();
-            }
-        });
-        window.addEventListener('pagehide', function () {
-            isPageHide = true;
-        });
-    },
-    // ios返回调用函数
-    iosBackInvoke: function (callback) {
-        var isPageHide = false;
-        window.addEventListener('pageshow', function () {
-            if (isPageHide) {
-                callback && callback();
-            }
-        });
-        window.addEventListener('pagehide', function () {
-            isPageHide = true;
-        });
-    },
-    /**
-     * 格式化金钱的函数
-     * @param {number} s 金额必传
-     * @param {int:0-100} n 保留小数的位数(int:0-100)
-     */
-    formatMoney: function (s, n) {
-        if (n === undefined) {
-            n = -1
-        } else {
-            n = n > 0 && n <= 20 ? n : 2;
-        }
-        var intS = parseInt(s)
-        var point = '.'
-        var left;
-        var right;
-        s = parseFloat((s + '').replace(/[^\d\.-]/g, ''))
-        // 没传n,默认(如果为整数,则不保留小数。如果为浮点数,则保留两位小数)
-        if (n === -1) {
-            if (s === intS) {
-                n = 0
-                right = ''
-                point = ''
-            } else {
-                n = 2
-                s = s.toFixed(n);
-                right = s.split('.')[1];
-            }
-            s = s + ''
-            left = s.split('.')[0].split('').reverse();
-        } else {
-            s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
-            left = s.split('.')[0].split('').reverse();
-            right = s.split('.')[1];
-        }
-
-        t = '';
-        for (i = 0; i < left.length; i++) {
-            t += left[i] + ((i + 1) % 3 == 0 && (i + 1) != left.length ? ',' : '');
-        }
-
-        var money = t.split('').reverse().join('') + point + right;
-        return money;
-    },
-    // 金额大写,链接:https://juejin.im/post/5a2a7a5051882535cd4abfce
-    // upDigit(1682) result:"人民币壹仟陆佰捌拾贰元整"
-    // upDigit(-1693) result:"欠壹仟陆佰玖拾叁元整"
-    upPrice: function (n) {
-        var fraction = ['角', '分', '厘']
-        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
-        var unit = [
-            ['元', '万', '亿'],
-            ['', '拾', '佰', '仟']
-        ]
-        // var head = n < 0 ? '欠人民币' : '人民币'
-        var head = ''
-        n = Math.abs(n)
-        var s = ''
-        for (var i = 0; i < fraction.length; i++) {
-            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '')
-        }
-        s = s || '整'
-        n = Math.floor(n)
-        for (var i = 0; i < unit[0].length && n > 0; i++) {
-            var p = ''
-            for (var j = 0; j < unit[1].length && n > 0; j++) {
-                p = digit[n % 10] + unit[1][j] + p
-                n = Math.floor(n / 10)
-            }
-            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s
-            // s = p + unit[0][i] + s;
-        }
-        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
-    },
-    // 手机号中间4位加*
-    addConfusionForTel: function (tel) {
-        var reg = /^(\d{3})\d{4}(\d{4})$/
-        return tel.replace(reg, '$1****$2')
-    },
-    // 手机号加空格
-    addSpaceForTel: function (tel) {
-        var regMap = {
-            isConfuse: /^(\d{3})\*{4}(\d{4})$/,
-            addSpace: /^(\d{3})(\d{4})(\d{4})$/
-        }
-        var confusion = regMap.isConfuse.test(tel)
-        if (confusion) {
-            return tel.replace(regMap.isConfuse, '$1 **** $2')
-        } else {
-            return tel.replace(regMap.addSpace, '$1 $2 $3')
-        }
-    },
-    /**
-     * 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
-     * @param {Date} originTime 要转换的时间对象(或者时间戳)
-     */
-    dateFromNow: function (originTime) {
-        if (!originTime) return
-        // 原始时间 - 传入的时间戳
-        var originTimeStamp = +new Date(originTime)
-        // 当前时间戳
-        var nowTimeStamp = +new Date()
-        // 时间戳相差多少
-        var diffTimeStamp = nowTimeStamp - originTimeStamp
-
-        var postfix = diffTimeStamp > 0 ? '前' : '后'
-        // 求绝对值 ms(毫秒)
-        var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
-        var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
-
-        // 10天的秒数
-        var days11 = 11 * 24 * 60 * 60
-        // var dataMap = {
-        //     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
-        //     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
-        // }
-        var dataMap = {
-            zh: ['天', '小时', '分钟', '秒'],
-            number: [24 * 60 * 60, 60 * 60, 60, 1]
-        }
-
-        var timeString = ''
-        if (diffTimeStampAbsS > days11) {
-            // 大于10天,则使用正常日期显示
-            var originDate = new Date(originTimeStamp)
-            var nowDate = new Date()
-            // 是否同年
-            var sameYear = originDate.getFullYear() === nowDate.getFullYear()
-            // 如果是当年,则不显示年
-            var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
-            timeString = originDate.pattern(patternString)
-        } else {
-            for (var i = 0; i < 7; i++) {
-                var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
-                if (inm != 0) {
-                    timeString = inm + dataMap.zh[i] + postfix
-                    break
-                }
-            }
-        }
-        return timeString
-    },
-    /**
-     * 输入框获取焦点,隐藏底部固定按钮方法
-     * @param {Array} inputs 传入输入框的DOM对象
-     * @param {Object} footer 按键弹起要隐藏的footer的 DOM对象
-     */
-    inputFocusHideFooter: function (inputs, footer) {
-        var isShowBtn = function (f) {
-            if (f) {
-                footer.style.display = ''
-            } else {
-                footer.style.display = 'none'
-            }
-        }
-
-        // ios监听输入框的软键盘弹起和收起事件
-        if (this.isIos) {
-            inputs.forEach(function (item) {
-                item.addEventListener('focus', function () {
-                    console.log('IOS 键盘弹出')
-                    // IOS 键盘弹起后操作
-                    isShowBtn(false)
-                }, false)
-
-                // IOS 键盘收起:IOS 点击输入框以外区域或点击收起按钮,输入框都会失去焦点,键盘会收起,
-                item.addEventListener('blur', function () {
-                    console.log('IOS 键盘收起')
-                    // IOS 键盘收起后操作
-                    isShowBtn(true)
-                })
-            })
-        }
-
-        // Android 键盘收起:Android 键盘弹起或收起页面高度会发生变化,以此为依据获知键盘收起
-        if (this.isAndroid) {
-            var clientHeight = document.documentElement.clientHeight || document.body.clientHeight
-            window.addEventListener('resize', function () {
-                var nowClientHeight = document.documentElement.clientHeight || document.body.clientHeight
-                if (clientHeight > nowClientHeight) {
-                    // 键盘弹出的事件处理
-                    console.log('Android 键盘弹出')
-                    isShowBtn(false)
-                } else {
-                    console.log('Android 键盘收起')
-                    // 键盘收起的事件处理
-                    isShowBtn(true)
-                }
-            }, false)
-        }
-    },
-    /**
-     * 通用关键字高亮替换
-     * @param {String} value 要高亮的字符串
-     * @param {String|Array} oldChar 要被替换的字符串(或数组)
-     * @param {String|Array} newChar 要替换成的字符串(或数组)
-     *
-     * 比如:要将 - `剑鱼标讯工具函数` 字符串中的 `工具` 高亮
-     * 则此时 value -> `剑鱼标讯工具函数`
-     *        oldChar -> `工具`
-     *        newChar -> `<span class="highlight-text">工具</span>`
-     *
-     * 批量高亮-----
-     * 比如:要将 - `剑鱼标讯工具函数` 字符串中的 `工具` `剑鱼` 高亮
-     * 则此时 value -> `剑鱼标讯工具函数批量高亮`
-     *        oldChar -> ['工具', '剑鱼']
-     *        newChar -> ['<span class="highlight-text">', '</span>']
-     *
-     *   注意:此时newChar为一个长度为2的数组,数组中为高亮标签的起始标签和结束标签
-     *
-     */
-    replaceKeyword: function (value, oldChar, newChar) {
-        var _this = this
-        if (!oldChar || !newChar) return value
-        // oldChar的字符串数组,用来循环替换
-        var oldCharArr = []
-
-        if (this.isArray(oldChar)) {
-            oldCharArr = oldChar.concat()
-        } else {
-            oldCharArr.push(oldChar)
-        }
-
-        // 数组去重
-        oldCharArr = this.unique(oldCharArr)
-
-        try {
-            oldCharArr.forEach(function (item) {
-                // 去空格之后为空字符串,则直接跳过当前替换
-                if (item.replace(/\s+/g, '')) {
-                    var oc = item
-                    oc = oc.replace(/\$/g, '\\$')
-                        .replace(/\(/g, '\\(')
-                        .replace(/\)/g, '\\)')
-                        .replace(/\*/g, '\\*')
-                        .replace(/\+/g, '\\+')
-                        .replace(/\./g, '\\.')
-                        .replace(/\[/g, '\\[')
-                        .replace(/\]/g, '\\]')
-                        .replace(/\?/g, '\\?')
-                        .replace(/\\/g, '\\')
-                        .replace(/\//g, '\\/')
-                        .replace(/\^/g, '\\^')
-                        .replace(/\{/g, '\\{')
-                        .replace(/\}/g, '\\}')
-                        .replace(/\|/g, '\\|')
-
-                    if (_this.isArray(newChar)) {
-                        // 批量高亮
-                        var tempV = value
-                        value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar[0] + oc + newChar[1])
-                        if (value === tempV && oc.indexOf('+') !== -1) {
-                          var splitReg = oc.split('\\+')
-                          splitReg.map(function (v) {
-                            value = value.replace(new RegExp('('+v+')', 'gmi'), newChar[0] + v + newChar[1])
-                          })
-                        }
-                    } else {
-                        // 普通单个高亮
-                        value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar)
-                    }
-                }
-            })
-        } catch (e) {
-            console.log(e)
-            return value
-        }
-        return value
-    },
-    /**
-     * 批量删除sessionStorage中的数据
-     * @param {RegExp} reg 传入一个要匹配的正则表达式
-     */
-    clearBatchSessionStorage: function (reg) {
-        if (sessionStorage) {
-            var sessKeys = Object.keys(sessionStorage)
-            sessKeys.forEach(function (item) {
-                if (reg.test(item)) {
-                    sessionStorage.removeItem(item)
-                }
-            })
-        }
-    },
-    /**
-     * 获取图片原始宽高
-     * @param {Image/Object} img
-     * @param {Function} callback
-     */
-    getImgNaturalDimensions: function (img, callback) {
-        var naturalSize = {}
-        if (img.naturalWidth && img.naturalHeight) { // 现代浏览器
-            naturalSize.with = img.naturalWidth
-            naturalSize.height = img.naturalHeight
-        } else { // IE6/7/8
-            var image = new Image()
-            image.src = img.src
-            image.onload = function() {
-                naturalSize.with = image.width
-                naturalSize.height = image.height
-                callback && callback(naturalSize)
-            }
-        }
-        return naturalSize
-    },
-    moneyUnit: function (num, type, lv) {
-        if (num === '' || num == null || num == undefined || isNaN(num)) return ''
-        var levelArr = ['元', '万元', '亿元', '万亿元']
-        if (type === void 0) {
-            type = 'string';
-        }
-
-        if (lv === void 0) {
-            lv = 0;
-        }
-
-        if (num === 0) {
-            if (type === 'string') {
-                return '0';
-            }
-
-            if (type === 'lv') {
-                return levelArr[lv];
-            }
-
-            if (type === 'number') {
-                return 0;
-            }
-
-            if (type === 'index') {
-                return lv;
-            }
-        }
-
-        var result = num / Math.pow(10000, lv);
-
-        if (result > 10000 && lv < 2) {
-            return this.moneyUnit(num, type, lv + 1)
-        } else {
-            if (type === 'string') {
-                return String(Math.floor(result * 100) / 100).replace('.00', '') + levelArr[lv];
-            }
-
-            if (type === 'lv') {
-                return levelArr[lv];
-            }
-
-            if (type === 'index') {
-                return lv;
-            }
-
-            if (type === 'number') {
-                return String(Math.floor(result * 100) / 100).replace('.00', '');
-            }
-        }
-    },
-    /**
-     * 防抖
-     * @param {Function} func 函数
-     * @param {Number} delay 延时间隔 默认 200ms
-     * @param {Boolean} immediate 是否首次执行
-     */
-    debounce: function (func, delay, immediate){
-        var timer = null;
-        delay = delay || 200
-        return function() {
-            var context = this;
-            var args = arguments;
-            if(timer) clearTimeout(timer);
-            if(immediate){
-                var doNow = !timer;
-                timer = setTimeout(function(){
-                    timer = null;
-                },delay);
-                if(doNow){
-                    func.apply(context,args);
-                }
-            }else{
-                timer = setTimeout(function(){
-                    func.apply(context,args);
-                },delay);
-            }
-        }
-    }
-}

+ 45 - 1
src/web/staticres/common-module/data-pack/css/recharge.css

@@ -13,7 +13,7 @@
 }
 
 .spec-list-container {
-  margin-top: .16rem;
+  margin: .16rem 0;
   padding: .32rem;
   background-color: #fff;
 }
@@ -158,3 +158,47 @@
 .question-tip .content-text {
   line-height: .38rem;
 }
+
+.order-phone-group {
+  /* margin: .24rem; */
+  padding: 8px 16px;
+  color: #5F5E64;
+  font-size: 15px;
+  line-height: 22px;
+  letter-spacing: 0px;
+  text-align: left;
+  box-sizing: border-box;
+  background-color: #fff;
+  border-radius: 8px;
+}
+.order-phone-group label {
+  display: inline-block;
+  min-width: 80px;
+  padding: 8px 0;
+}
+.order-phone-group.error input {
+  color: #FB483D;
+}
+.order-phone-group.error p {
+  display: block;
+}
+.order-phone-group input {
+  padding: 8px 0;
+  color: #5F5E64;
+  font-size: 16px;
+  line-height: 24px;
+  letter-spacing: 0px;
+  text-align: left;
+}
+.order-phone-group input::placeholder {
+  color: #C0C4CC;
+}
+.order-phone-group p {
+  display: none;
+  color: #FB483D;
+  font-size: 12px;
+  line-height: 18px;
+  letter-spacing: 0px;
+  text-align: left;
+  margin-top: 2px;
+}

+ 39 - 3
src/web/staticres/common-module/data-pack/js/recharge.js

@@ -4,6 +4,9 @@ var vm = new Vue({
   data: function () {
     return {
       sessKey: '$data-data-pack-recharge',
+      userInfo: {
+        phone: ''
+      },
       priceInfo: {},
       price: {
         before: 0, // 优惠前价格
@@ -74,6 +77,14 @@ var vm = new Vue({
       }
     }
   },
+  computed: {
+    // 手机号校验是否通过
+    validatorPhonePass: function () {
+      var phone = this.userInfo.phone
+      if (!phone) return true
+      return /^1\d{10}$/.test(phone)
+    },
+  },
   watch: {
     'charge.count': function () {
       this.sortPrice()
@@ -82,11 +93,15 @@ var vm = new Vue({
     specActive: function () {
       this.sortPrice()
       this.calcPrice()
-    }
+    },
+    validatorPhonePass: function () {
+      this.checkStatus()
+    },
   },
   created: function () {
     var restore = this.restoreState()
     if (!restore) {
+      this.getUserInfo()
       this.getGoodsList()
     }
   },
@@ -143,6 +158,18 @@ var vm = new Vue({
         }
       })
     },
+    getUserInfo: function () {
+      var _this = this
+      $.ajax({
+        url: '/jypay/user/getAccountInfo?t=' + Date.now(),
+        type: 'GET',
+        success: function (res) {
+          if (res && res.error_code === 0) {
+            Object.assign(_this.userInfo, res.data)
+          }
+        }
+      })
+    },
     // 根据请求返回值初始化页面参数
     initPageInfo: function () {
       var info = this.priceInfo
@@ -246,12 +273,18 @@ var vm = new Vue({
     },
     checkSubmitStatus: function (checkStatus) {
       this.bottomConf.checkboxStatus = checkStatus
-      return checkStatus
+      return checkStatus && this.validatorPhonePass
     },
     // 保证mounted之后执行
     checkConfirmButtonDisabled: function () {
       this.$refs.couponRef.submitStatus = !this.bottomConf.checkboxStatus
     },
+    // 调用此方法,即可检测当前页面表单是否满足条件(可计算出提交按钮是否可用)
+    checkStatus: function () {
+      // 此处取反,因为在调用couponRef.chooseCheckbox时候,会对checkbox再次取反
+      this.bottomConf.checkboxStatus = !this.bottomConf.checkboxStatus
+      this.$refs.couponRef.chooseCheckbox()
+    },
     readEvent: function () {
       this.savePageState()
       if (utils.isWeiXinBrowser) {
@@ -272,7 +305,8 @@ var vm = new Vue({
       var packId = this.getPickId()
       var data = {
         packId: packId,
-        lotteryId: this.$refs.couponRef.coupon.userLotteryId
+        lotteryId: this.$refs.couponRef.coupon.userLotteryId,
+        order_phone: this.userInfo.phone
       }
       $.ajax({
         url: '/subscribepay/dataExportPack/createOrder',
@@ -306,6 +340,7 @@ var vm = new Vue({
       if ($data) {
         $data = JSON.parse($data)
         Object.assign(this.priceInfo, $data.priceInfo)
+        Object.assign(this.userInfo, $data.userInfo)
         Object.assign(this.price, $data.price)
         this.specActive = $data.specActive
         Object.assign(this.charge, $data.charge)
@@ -320,6 +355,7 @@ var vm = new Vue({
     savePageState: function () {
       var data = {
         priceInfo: this.priceInfo,
+        userInfo: this.userInfo,
         price: this.price,
         specActive: this.specActive,
         charge: this.charge,

+ 359 - 69
src/web/staticres/common-module/ent-search/ent-search-template.js

@@ -145,6 +145,11 @@ var vEntSearchComponent = new Vue({
       showPop: false,
       showUpTip: false,
       moneyTags: [
+        {
+          name: '不限',
+          value: '',
+          selected: true
+        },
         {
           name: '100万以内',
           value: '0-100',
@@ -246,6 +251,11 @@ var vEntSearchComponent = new Vue({
           }
         ],
         4: [
+          {
+            title: '全部',
+            checked: true,
+            key: 'A,B,C,D'
+          },
           {
             title: '有限责任公司',
             checked: false,
@@ -268,6 +278,11 @@ var vEntSearchComponent = new Vue({
           }
         ],
         5: [
+          {
+            title: '全部',
+            checked: true,
+            key: 'A,B,C,D'
+          },
           {
             title: '存续(在营、开业、在业)',
             checked: false,
@@ -291,7 +306,7 @@ var vEntSearchComponent = new Vue({
         ],
         7: [
           {
-            title: '全部单位类型',
+            title: '不限',
             checked: true,
             key: ''
           },
@@ -318,7 +333,7 @@ var vEntSearchComponent = new Vue({
         ],
         8: [
           {
-            title: '全部联系方式',
+            title: '不限',
             checked: true,
             key: ''
           },
@@ -332,16 +347,16 @@ var vEntSearchComponent = new Vue({
             checked: false,
             key: '2'
           },
-          {
-            title: '电子邮箱',
-            checked: false,
-            key: '3'
-          },
-          {
-            title: '无联系方式',
-            checked: false,
-            key: '4'
-          }
+          // {
+          //   title: '电子邮箱',
+          //   checked: false,
+          //   key: '3'
+          // },
+          // {
+          //   title: '无联系方式',
+          //   checked: false,
+          //   key: '4'
+          // }
         ]
       },
       conditionStrMap: {
@@ -364,7 +379,9 @@ var vEntSearchComponent = new Vue({
         6: false,
         7: false,
         8: false
-      }
+      },
+      moreContentList: [4,5,6,7,8],
+      showPopForArea: false
     }
   },
   computed: {
@@ -375,9 +392,19 @@ var vEntSearchComponent = new Vue({
         return v.key
       }).join(',')
     },
+    getTabs () {
+      var tempList = this.entTabs.slice(0, 4)
+      tempList.push({
+        title: '更多筛选'
+      })
+      return tempList
+    },
     isMoreSelect () {
       return this.activeTabIndex < 7
     },
+    isMoreContent () {
+      return this.activeTabIndex === 4
+    },
     isWaitBuy () {
       return this.entTabs[this.activeTabIndex].disabled
     }
@@ -409,7 +436,7 @@ var vEntSearchComponent = new Vue({
       return ''
     },
     changeConditionStrMap (i, type) {
-      this.isSelectConditionTabs[i] = type
+      this.isSelectConditionTabs[(i > 4 ? 4: i)] = type
       switch (i) {
         case 1 : {
           this.conditionStrMap.matchType = this.getMoreListToStr(1)
@@ -550,15 +577,43 @@ var vEntSearchComponent = new Vue({
       this.list = []
       this.onLoad()
     },
+    onCancelArea (tempParams) {
+      this.resetValueForData(6)
+      if (tempParams && tempParams.data) {
+        this.conditionStrMap.biddingArea = tempParams.data[0]
+      }
+      this.togglePopForArea(false)
+    },
+    onConfirmArea (tempParams) {
+      if (tempParams && tempParams.data) {
+        this.conditionStrMap.biddingArea = tempParams.data[0]
+      }
+      this.togglePopForArea(false)
+    },
     resetCondition () {
-      this.resetValueForData(this.activeTabIndex)
+      var _this = this
+      if (this.activeTabIndex === 4) {
+        this.moreContentList.forEach(function (v) {
+          _this.resetValueForData(v)
+          _this.changeConditionStrMap(v, false)
+        })
+      } else {
+        this.resetValueForData(this.activeTabIndex)
+        this.changeConditionStrMap(this.activeTabIndex, false)
+      }
       this.togglePop(false)
-      this.changeConditionStrMap(this.activeTabIndex, false)
       this.doQueryList()
     },
     submitCondition () {
       console.log('submit', this.activeTabIndex)
-      this.changeConditionStrMap(this.activeTabIndex, true)
+      var _this = this
+      if (this.activeTabIndex === 4) {
+        this.moreContentList.forEach(function (v) {
+          _this.changeConditionStrMap(v, true)
+        })
+      } else {
+        this.changeConditionStrMap(this.activeTabIndex, true)
+      }
       this.togglePop(false)
       this.doQueryList()
     },
@@ -609,19 +664,65 @@ var vEntSearchComponent = new Vue({
       this.togglePop(!(name === this.beforeTabIndex && this.showPop))
       this.beforeTabIndex = name
     },
+    getNowAllCheckStatus (index) {
+      var nowLength = this.conditionMap[index].map(function (v) {
+        return v.checked
+      }).slice(1,).filter(function(v) {
+        return v
+      }).length
+      var allLength = this.conditionMap[index].length - 1
+      return nowLength === 0 || allLength === nowLength
+    },
+    recoverAllCheckForIndex (index) {
+      this.conditionMap[index].forEach(function (v) {
+        v.checked = false
+      })
+    },
+    togglePopForArea (status) {
+      this.showPopForArea = status
+    },
+    onSelectMoreGroup (index) {
+      if (this.entTabs[index].disabled) {
+        return this.showBuyTip()
+      }
+      if (index === 6) {
+          this.togglePopForArea(true)
+      }
+    },
+    onSelectMoreItem (index, tags, tagIndex) {
+      if (this.entTabs[index].disabled) {
+        return this.showBuyTip()
+      }
+      var isMoreCheck = index < 7
+      var isMoreAllCheck = tagIndex === 0
+      if (isMoreCheck && !isMoreAllCheck) {
+          this.conditionMap[index][0].checked = false
+          tags.checked = !tags.checked
+          if (this.getNowAllCheckStatus(index)) {
+            this.recoverAllCheckForIndex(index)
+            this.conditionMap[index][0].checked = true
+          }
+      } else {
+        this.recoverAllCheckForIndex(index)
+        tags.checked = true
+      }
+    },
+    showBuyTip () {
+      var _this = this
+      this.$dialog.close()
+      this.$dialog.confirm({
+        title: '开通超级订阅',
+        message: '立享更多搜索权限<br>寻找商机更精准',
+        className: 'ent-search-dialog center-text',
+        overlayClass: 'z-2030',
+        confirmButtonText: '去开通',
+      }).then(function () {
+        _this.goUpBuyPage('会员选项-去开通')
+      }).catch(function () {});
+    },
     onSelectItem (item, index) {
       if (item.disabled) {
-        var _this = this
-        this.$dialog.close()
-        this.$dialog.confirm({
-          message: '该条件为会员选项,请升级为会员服务',
-          className: 'ent-search-dialog',
-          overlayClass: 'z-2030',
-          confirmButtonText: '去升级',
-        }).then(function () {
-          _this.goUpBuyPage('会员选项-去升级')
-        }).catch(function () {});
-        return
+        return this.showBuyTip()
       }
       if (index < 7) {
         item.checked = !item.checked
@@ -672,6 +773,28 @@ var vEntSearchComponent = new Vue({
   }
 })
 
+function changeDefaultForSearchRange (type, key, value) {
+  var prefixForKey = 'mainSearchRangeFor'
+  if (type === 'set') {
+    localStorage.setItem(prefixForKey + key, value)
+  } else {
+    return localStorage.getItem(prefixForKey + key)
+  }
+}
+function getDefaultRangeForLocal () {
+  var tempList = []
+  if (changeDefaultForSearchRange('get', 'Title') == 'true') {
+    tempList.push('title')
+  }
+  if (changeDefaultForSearchRange('get', 'Content') == 'true') {
+    tempList.push('content')
+  }
+  if (!tempList.length) {
+    tempList = ['title', 'content']
+  }
+  return tempList.join(',')
+}
+
 var vMainSearchComponent = new Vue({
   el: '#v-search-group',
   components: {
@@ -691,7 +814,7 @@ var vMainSearchComponent = new Vue({
       showUpTip: false,
       moneyTags: [
         {
-          name: '不限',
+          name: '全部',
           value: '',
           selected: true
         }
@@ -740,16 +863,16 @@ var vMainSearchComponent = new Vue({
           title: '行业'
         },
         {
-          title: '金额'
+          title: '地区'
         },
          {
           title: '时间'
         },
         {
-          title: '地区'
+          title: '金额'
         },
         {
-          title: '类型'
+          title: '类型',
         },
         {
           title: '中标企业',
@@ -766,6 +889,10 @@ var vMainSearchComponent = new Vue({
         {
           title: '采购单位联系方式',
           disabled: true
+        },
+        {
+          title: '排除词',
+          disabled: true
         }
       ],
       statusEnum: ['存续', '吊销', '停业', '撤销'],
@@ -774,12 +901,12 @@ var vMainSearchComponent = new Vue({
         1: [
           {
             title: '标题搜索',
-            checked: true,
+            checked: (changeDefaultForSearchRange('get', 'Title') != 'false'),
             key: 'title'
           },
           {
             title: '正文搜索',
-            checked: true,
+            checked: (changeDefaultForSearchRange('get', 'Content') != 'false'),
             key: 'content'
           },
           {
@@ -809,35 +936,45 @@ var vMainSearchComponent = new Vue({
           }
         ],
         9: [
+          {
+            title: '不限',
+            checked: true,
+            key: ''
+          },
           {
             title: '有联系方式',
             checked: false,
             key: 'y'
           },
-          {
-            title: '无联系方式',
-            checked: false,
-            key: 'n'
-          }
+          // {
+          //   title: '无联系方式',
+          //   checked: false,
+          //   key: 'n'
+          // }
         ],
         10: [
+          {
+            title: '不限',
+            checked: true,
+            key: ''
+          },
           {
             title: '有联系方式',
             checked: false,
             key: 'y'
           },
-          {
-            title: '无联系方式',
-            checked: false,
-            key: 'n'
-          }
+          // {
+          //   title: '无联系方式',
+          //   checked: false,
+          //   key: 'n'
+          // }
         ]
       },
       conditionStrMap: {
         subtype: '',
         scope: '',
         publishtime: 'thisyear',
-        selectType: 'title,content',
+        selectType: getDefaultRangeForLocal(),
         minprice: '',
         maxprice: '',
         industry: '',
@@ -845,6 +982,21 @@ var vMainSearchComponent = new Vue({
         winner: '',
         winnertel: '',
         buyertel: '',
+        notkey: ''
+      },
+      conditionStrMapForMore: {
+        subtype: '',
+        scope: '',
+        publishtime: 'thisyear',
+        selectType: getDefaultRangeForLocal(),
+        minprice: '',
+        maxprice: '',
+        industry: '',
+        buyerclass: '',
+        winner: '',
+        winnertel: '',
+        buyertel: '',
+        notkey: ''
       },
       isShowScrollIcon: true,
       industryComponentKey: new Date().getTime(),
@@ -862,10 +1014,24 @@ var vMainSearchComponent = new Vue({
         8: false,
         9: false,
         10: false
-      }
+      },
+      moreContentList: [9, 10],
+      showPopTitle: '',
+      showPopForMore: false,
+      notkeyInput: '',
     }
   },
   computed: {
+    isMoreContent () {
+      return this.activeTabIndex === 4
+    },
+    getTabs () {
+      var tempList = this.entTabs.slice(0, 4)
+      tempList.push({
+        title: '更多筛选'
+      })
+      return tempList
+    },
     getMatchType () {
       return this.condition1.filter(function (v) {
         return v.checked
@@ -879,19 +1045,96 @@ var vMainSearchComponent = new Vue({
     isWaitBuy () {
       return this.entTabs[this.activeTabIndex].disabled
     },
-    isActiveForTab () {
-      var activeTabs = {}
-      var _this = this
-      this.entTabs.forEach(function (v, index) {
-        activeTabs[v.title] = index === _this.activeTabIndex
-      })
-      return activeTabs
-    },
     getActiveTabTitle () {
       return this.entTabs[this.activeTabIndex].title
+    },
+    getSelectSubType () {
+      var nowSelectLength = this.conditionStrMapForMore.subtype.split(',').filter(function (v) {
+        return v
+      }).length
+      var isAll = false
+      if (this.$refs.noticeComponent && this.$refs.noticeComponent.checkedAll) {
+        isAll = true
+      }
+      if (nowSelectLength <= 0 || isAll) {
+        return '全部'
+      }
+      return nowSelectLength + '个'
+    },
+    getSelectCate () {
+      var nowSelectLength = this.conditionStrMapForMore.buyerclass.split(',').filter(function (v) {
+        return v
+      }).length
+      var isAll = false
+      if (this.$refs.cateComponent && this.$refs.cateComponent.checkedAll) {
+        isAll = true
+      }
+      if (nowSelectLength <= 0 || isAll) {
+        return '全部'
+      }
+      return nowSelectLength + '个'
     }
   },
   methods: {
+    togglePopForMore (type) {
+      this.showPopForMore = type
+    },
+    cancelCatePop (tempParams) {
+      if (tempParams && tempParams.data) {
+        this.conditionStrMapForMore.buyerclass = tempParams.data.join(',')
+      } else {
+        this.conditionStrMapForMore.buyerclass = ''
+      }
+      this.togglePopForMore(false)
+      this.cateComponentKey = new Date().getTime()
+    },
+    confirmCatePop (tempParams) {
+      if (tempParams && tempParams.data) {
+        this.conditionStrMapForMore.buyerclass = tempParams.data.join(',')
+      } else {
+        this.conditionStrMapForMore.buyerclass = ''
+      }
+      this.togglePopForMore(false)
+    },
+    cancelNoticePop (tempParams) {
+      if (tempParams && tempParams.data) {
+        this.conditionStrMapForMore.subtype = tempParams.data.join(',')
+      } else {
+        this.conditionStrMapForMore.subtype = ''
+      }
+      this.togglePopForMore(false)
+      this.noticeComponentKey = new Date().getTime()
+    },
+    confirmNoticePop (tempParams) {
+      if (tempParams && tempParams.data) {
+        this.conditionStrMapForMore.subtype = tempParams.data.join(',')
+      } else {
+        this.conditionStrMapForMore.subtype = ''
+      }
+      this.togglePopForMore(false)
+    },
+    recoverAllCheckForIndex (index) {
+      this.conditionMap[index].forEach(function (v) {
+        v.checked = false
+      })
+    },
+    onSelectMoreItem (index, tags, tagIndex) {
+      if (this.entTabs[index].disabled) {
+        return this.showBuyTip()
+      }
+      this.recoverAllCheckForIndex(index)
+      tags.checked = true
+    },
+    onSelectMoreGroup (index, title) {
+      if (this.entTabs[index].disabled) {
+        return this.showBuyTip()
+      }
+      if (index != 6 && index != 8) {
+        return
+      }
+      this.showPopTitle = title
+      this.togglePopForMore(true)
+    },
     checkNowPower () {
       var tempPower = window.jyUserPower
       var resultPower = false
@@ -905,6 +1148,7 @@ var vMainSearchComponent = new Vue({
       this.entTabs[8].disabled = type
       this.entTabs[9].disabled = type
       this.entTabs[10].disabled = type
+      this.entTabs[11].disabled = type
 
       // 搜索范围权限调整
       this.conditionMap[1][2].disabled = type
@@ -990,6 +1234,13 @@ var vMainSearchComponent = new Vue({
           console.log(tempParams)
           if (tempParams && tempParams.data) {
             if (tempParams.data.start === '' && tempParams.data.end === '') {
+              this.selectDate = {
+                startDate: '',
+                endDate: '',
+                exact: 'lastYear'
+              }
+              this.conditionStrMap.publishtime = 'thisyear'
+              this.dateComponentKey = new Date().getTime()
               return
             }
             var tempDate = tempParams.data.exact
@@ -1019,7 +1270,7 @@ var vMainSearchComponent = new Vue({
             this.selectDate = {
               startDate: '',
               endDate: '',
-              exact: 'all'
+              exact: 'lastYear'
             }
             this.conditionStrMap.publishtime = ''
           }
@@ -1094,6 +1345,12 @@ var vMainSearchComponent = new Vue({
           this.conditionStrMap.buyertel = this.getMoreListToStr(10)
           break
         }
+        case '排除词': {
+          if (!type) {
+            this.notkeyInput =  ''
+          }
+          this.conditionStrMap.notkey = this.notkeyInput
+        }
       }
     },
     goUpBuyPage (originName) {
@@ -1205,15 +1462,34 @@ var vMainSearchComponent = new Vue({
       // this.onLoad()
     },
     resetCondition () {
-      this.resetValueForData(this.activeTabIndex)
+      var _this = this
+      if (this.activeTabIndex === 4) {
+        [4,5,6,7,8,9,10,11].forEach(function (v) {
+          _this.resetValueForData(v)
+          _this.changeConditionStrMap(v, false)
+        })
+      } else {
+        this.resetValueForData(this.activeTabIndex)
+        this.changeConditionStrMap(this.activeTabIndex, false)
+      }
       this.togglePop(false)
-      this.changeConditionStrMap(this.activeTabIndex, false)
+      this.togglePopForMore(false)
       this.doQueryList(false)
     },
     submitCondition () {
       console.log('submit', this.activeTabIndex)
-      this.changeConditionStrMap(this.activeTabIndex, true)
+      changeDefaultForSearchRange('set', 'Title', this.conditionMap[1][0].checked)
+      changeDefaultForSearchRange('set', 'Content', this.conditionMap[1][1].checked)
+      var _this = this
+      if (this.activeTabIndex === 4) {
+        [4,5,6,7,8,9,10,11].forEach(function (v) {
+          _this.changeConditionStrMap(v, true)
+        })
+      } else {
+        this.changeConditionStrMap(this.activeTabIndex, true)
+      }
       this.togglePop(false)
+      this.togglePopForMore(false)
       this.doQueryList(true)
     },
     resetValueForData (key) {
@@ -1275,18 +1551,22 @@ var vMainSearchComponent = new Vue({
         })
       }
     },
+    showBuyTip () {
+      var _this = this
+      this.$dialog.close()
+      this.$dialog.confirm({
+        title: '开通超级订阅',
+        message: '立享更多搜索权限<br>寻找商机更精准',
+        className: 'ent-search-dialog center-text',
+        overlayClass: 'z-2030',
+        confirmButtonText: '去开通',
+      }).then(function () {
+        _this.goUpBuyPage('会员选项-去开通')
+      }).catch(function () {});
+    },
     onSelectItem (item, index) {
       if (item.disabled) {
-        var _this = this
-        this.$dialog.close()
-        this.$dialog.confirm({
-          message: '该条件为会员选项,请升级为会员服务',
-          className: 'ent-search-dialog',
-          overlayClass: 'z-2030',
-          confirmButtonText: '去升级',
-        }).then(function () {
-          _this.goUpBuyPage('会员选项-去升级')
-        }).catch(function () {});
+        this.showBuyTip()
         return
       }
       if (index < 8) {
@@ -1301,6 +1581,14 @@ var vMainSearchComponent = new Vue({
     },
     togglePop (type) {
       this.checkNowPower()
+      var _this = this
+      this.$nextTick(function () {
+        if (type) {
+          _this.fixedScroll()
+        } else {
+          _this.removeFixedScroll()
+        }
+      })
       this.showPop = type
       if (!type) {
         this.toggleEntShow(false)
@@ -1310,9 +1598,11 @@ var vMainSearchComponent = new Vue({
       Object.assign(vMainSearchComponent.$data, vMainSearchComponent.$options.data())
       this.searchComponentKey = new Date().getTime()
     },
+    toggleEntTabShow (type) {
+      this.showEntSearch = type
+    },
     toggleEntShow (type) {
       this.checkNowPower()
-      this.showEntSearch = type
       if (type) {
         this.activeTabIndex = Number(this.beforeTabIndex)
         this.togglePop(true)

+ 276 - 1
src/web/staticres/common-module/ent-search/ent-search-template.prefixer.css

@@ -9,8 +9,13 @@
     display: block !important;
     background-color: #f5f6f7;
 }
+.v-ent-search-group .van-tabs.van-tabs--line .van-tab:nth-child(1) {
+    display: none;
+}
 .v-ent-search-group .van-tabs.van-tabs--line .van-tab {
     padding: 0;
+    width: 25%;
+    max-width: 25%;
 }
 
 .v-ent-search-group .ent-search-item {
@@ -295,10 +300,271 @@
     opacity: 0;
 }
 
+.van-dialog.ent-search-dialog.center-text .van-dialog__content .van-dialog__message {
+    text-align: center;
+}
+
 .v-ent-search-group .an-icon-box .icon-triangle-down {
     opacity: 1;
 }
 
+.v-ent-search-group .input-group .van-cell.van-field .van-field__word-limit{
+    position: absolute;
+    top: 0;
+    right: 0;
+    margin: 0;
+    line-height: 0.64rem;
+    color: #9b9ca3;
+}
+.v-ent-search-group .input-group .van-cell.van-field .van-field__body{
+    height: 100%;
+}
+.v-ent-search-group .input-group .van-cell.van-field:focus-within {
+    border-color: #2abed1;
+}
+.v-ent-search-group .input-group.stop {
+    pointer-events: none;
+}
+.v-ent-search-group .input-group {
+    width: 100%;
+}
+.v-ent-search-group .input-group .van-cell.van-field{
+    height: 0.64rem;
+    background: #ffffff;
+    border: 1px solid rgba(0,0,0,0.10);
+    border-radius: 0.08rem;
+    padding: 0 0.24rem;
+}
+
+
+.v-ent-search-group .more-popup-content .timeTag {
+    flex-wrap: wrap;
+}
+.v-ent-search-group .more-popup-content .timeTag .area-card-item.diy-item .root_open {
+    width: 0.64rem;
+    height: 0.32rem;
+    border: 0.02rem solid #FB483D;
+    box-sizing: border-box;
+    border-radius: 0.16rem;
+    font-family: PingFang SC;
+    font-style: normal;
+    font-weight: 500;
+    text-align: center;
+    font-size: 0.2rem;
+    line-height: 0.32rem;
+    color: #FB483D;
+    margin: 0 0.04rem;
+    padding: 0;
+    margin-left: 0.08rem;
+}
+.v-ent-search-group .more-popup-content .timeTag .area-card-item.diy-item {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    width: auto;
+}
+
+.v-ent-search-group .more-popup-content .timeTag .area-card-item.active::after,
+.v-ent-search-group .more-popup-content .select-tag-group .select-tag-item.active::after {
+    content: unset;
+}
+.v-ent-search-group .more-popup-content .select-tag-group .select-tag-item.active,
+.v-ent-search-group .more-popup-content .timeTag .area-card-item.active,
+.v-ent-search-group .more-popup-content .select-more-tag-group .select-more-tag-item.active {
+    color: #2abed1;
+    background: #e8fafd;
+}
+.v-ent-search-group .more-popup-content  .timePicker.clickactive::after,
+.v-ent-search-group .more-popup-content  .money-component-group .select-picker-group::after {
+    content: unset;
+}
+.v-ent-search-group .more-popup-content .j-container {
+    height: auto;
+}
+.v-ent-search-group .more-popup-content .money-component-group {
+    min-height: auto;
+    flex: unset;
+    padding:0;
+}
+.v-ent-search-group .more-popup-content  .money-component-group .select-picker-group .van-cell:focus-within {
+    border-color: #2abed1;
+}
+.v-ent-search-group .more-popup-content  .money-component-group .select-picker-group {
+    padding: 0;
+    background: transparent;
+    height: auto;
+    margin-top: 0;
+    margin-bottom: 0.32rem;
+}
+.v-ent-search-group .more-popup-content .dateTags .timePicker {
+    background: transparent;
+    height: auto;
+    padding: 0;
+    padding-bottom: 0.32rem;
+}
+.v-ent-search-group .more-popup-content .dateTags .customTime {
+    display: none;
+}
+.v-ent-search-group .more-popup-content .dateTags .timeTag {
+    padding-top: 0;
+    padding-bottom: 0.08rem;
+}
+.v-ent-search-group .more-popup-content .dateTags {
+    height: auto;
+    padding: 0;
+}
+.v-ent-search-group .more-popup-content .money-component-group .select-tag-group {
+    padding-top: 0;
+    padding-bottom: 0.08rem;
+}
+
+.v-ent-search-group .more-popup-content .timeTag .area-card-item
+.v-ent-search-group .more-popup-content .money-component-group .select-tag-group .select-tag-item {
+    margin-right: 0.24rem;
+}
+.v-ent-search-group .more-popup-content .timeTag .area-card-item,
+.v-ent-search-group .more-popup-content .select-tag-group .select-tag-item,
+.v-ent-search-group .more-popup-content .select-more-tag-group .select-more-tag-item {
+    display: inline-block;
+    font-size: 0.26rem;
+    font-weight: 500;
+    text-align: center;
+    color: #5f5e64;
+    line-height: 0.4rem;
+    padding: 0.12rem 0.22rem;
+    background: #f5f6f7;
+    border-radius: 0.08rem;
+    margin-bottom: 0.24rem;
+    margin-right: 0.16rem;
+    transition: all 0.2s;
+    min-width: auto;
+    height: 0.64rem;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group .select-tag-title {
+    font-family: PingFang SC, PingFang SC-Medium;
+    font-weight: 500;
+    text-align: left;
+    color: #171826;
+    line-height: 0.48rem;
+    font-size: 0.28rem;
+    margin-top: 0.32rem;
+    margin-bottom: 0.16rem;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group .select-tag-content {
+    margin-bottom: -0.08rem;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group.row-group .select-area-content .van-icon {
+    font-size: 0.28rem;
+    margin-left: 0.2rem;
+    font-weight: bold;
+    color: #c0c4cc;
+}
+
+.v-ent-search-group .popForArea  .j-footer {
+    padding-left: 0;
+    padding-right: 0;
+}
+.v-ent-search-group .popForArea  .select-area-box .van-index-bar__sidebar {
+    top: 48%;
+}
+.v-ent-search-group .popForArea  .van-index-bar__index--active {
+    color: inherit;
+}
+.v-ent-search-group .popForArea .van-popup {
+    border-top-left-radius: 0.24rem;
+    border-top-right-radius: 0.24rem;
+
+}
+
+.v-ent-search-group .popForArea .area-pop-title-group  {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+    flex-direction: row;
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+    padding-top: 0.44rem;
+    padding-bottom: 0.24rem;
+    padding-left: 0.32rem;
+}
+.v-ent-search-group .popForArea .area-pop-title-group .padding-icon {
+    padding: 0.08rem 0.32rem;
+    display: inline-block;
+}
+.v-ent-search-group .popForArea .area-pop-title-group span {
+    font-size: 0.4rem;
+    font-family: PingFang SC, PingFang SC-Medium;
+    font-weight: 500;
+    text-align: left;
+    color: #171826;
+    line-height: 0.6rem;
+}
+
+.v-ent-search-group .more-popup-content .select-more-tag-group.row-group .select-area-content {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+    flex-direction: row;
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+    font-size: 0.26rem;
+    font-family: PingFang SC, PingFang SC-Medium;
+    font-weight: 500;
+    text-align: right;
+    color: #9b9ca3;
+    line-height: 0.28rem;
+    margin-top: 0.32rem;
+    margin-bottom: 0.16rem;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group.row-group {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+    flex-direction: row;
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group:last-child {
+    border-bottom-color: transparent;
+}
+.v-ent-search-group .more-popup-content .select-more-tag-group {
+    font-family: PingFang SC, PingFang SC-Medium;
+    border-bottom: 1px solid rgba(0,0,0,0.05);
+    padding: 0 0.32rem;
+    padding-bottom: 0.16rem;
+}
+
+.v-ent-search-group .more-popup-content .select-more-tag-group .disabled-tag {
+    display: inline-block;
+}
+
+.v-ent-search-group .more-popup-content {
+
+}
+
 .v-ent-search-group .ent-search-tab-item {
     display: -webkit-box;
     display: -webkit-flex;
@@ -319,9 +585,10 @@
     font-size: 0.28rem;
     line-height: 0.4rem;
     color: #5F5E64;
-    padding: 0.24rem 0.38rem;
+    padding: 0.24rem 0;
 }
 
+.v-ent-search-group .more-popup-content .disabled-tag,
 .v-ent-search-group .ent-search-tab-item .disabled-tag,
 .v-ent-search-group .condition-select-item.disabled .disabled-tag {
     display: none;
@@ -376,6 +643,11 @@
     color: #5F5E64;
 }
 
+.v-ent-search-group .van-tabs__nav--complete {
+    padding-left: 0;
+    padding-right: 0;
+}
+
 .v-ent-search-group .van-tab--active .ent-search-tab-item.ent-p-close .icon-triangle-up {
     opacity: 0;
 }
@@ -415,6 +687,9 @@
     z-index: 2021;
 }
 
+.v-ent-search-group .jy-diy-pop .popup-content.j-main {
+    max-height: unset;
+}
 .v-ent-search-group .jy-diy-pop .popup-content {
     max-height: 40vh;
     overflow-y: auto;

+ 21 - 7
src/web/staticres/common-module/mainSearch/js/utils.js → src/web/staticres/common-module/public/js/utils.js

@@ -1,5 +1,5 @@
 /**
- * utils.js v0.0.1
+ * utils.js
  * 各类js工具函数
  */
 
@@ -90,10 +90,14 @@ var popupTip = {
     }
 }
 
+var versionChangeLog = {
+    '0.0.1': 'init',
+    '0.0.2': 'utils.dateFromNow 函数逻辑修改,具体修改内容查看函数注释'
+}
 
 var utils = {
     // utils版本号
-    version: '0.0.1',
+    version: '0.0.2',
     isWeiXinBrowser: navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1,
     isAndroid: navigator.userAgent.toLowerCase().indexOf('android') !== -1,
     isIos: /iphone|ipod|ipad|ios/.test(navigator.userAgent.toLowerCase()),
@@ -425,10 +429,10 @@ var utils = {
         }
     },
     /**
-     * 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
+     * 时间戳转换 多少秒、多少分、多少小时前  昨天以及昨天之前的显示年月日(今年的时间不显示年份)
      * @param {Date} originTime 要转换的时间对象(或者时间戳)
      */
-    dateFromNow: function (originTime) {
+    dateFromNow: function (originTime, useOld) {
         if (!originTime) return
         // 原始时间 - 传入的时间戳
         var originTimeStamp = +new Date(originTime)
@@ -454,8 +458,18 @@ var utils = {
         }
 
         var timeString = ''
-        if (diffTimeStampAbsS > days11) {
-            // 大于10天,则使用正常日期显示
+        // 10天前
+        var tenDaysAgo = diffTimeStampAbsS > days11
+        // 是否是当天
+        var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+        var condition = !isCurrentDay
+        if (useOld) {
+            condition = tenDaysAgo
+        }
+
+        if (condition) {
+            // 不是当天/10天前,则使用正常日期显示
             var originDate = new Date(originTimeStamp)
             var nowDate = new Date()
             // 是否同年
@@ -464,7 +478,7 @@ var utils = {
             var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
             timeString = originDate.pattern(patternString)
         } else {
-            for (var i = 0; i < 7; i++) {
+            for (var i = 0; i < dataMap.number.length; i++) {
                 var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
                 if (inm != 0) {
                     timeString = inm + dataMap.zh[i] + postfix

+ 4 - 4
src/web/staticres/css/wxbutton.css

@@ -57,11 +57,11 @@ align-items: center;
 justify-content: center;
 /* flex: 1; */
 width: 48%!important;
-height: 0.8rem!important;
+height: 0.88rem!important;
 line-height: 0.8rem;
 font-size: 0.32rem!important;
 text-align: center;
-border-radius: 0.16rem;
+border-radius: 0.08rem!important;
 /* flex: none!important; */
 }
 
@@ -93,11 +93,11 @@ border-radius: 0.16rem;
   justify-content: center;
   /* flex: 1; */
   width: 48%!important;
-  height: 0.8rem!important;
+  height: 0.88rem!important;
   line-height: 0.8rem;
   font-size: 0.32rem!important;
   text-align: center;
-  border-radius: 0.16rem;
+  border-radius: 0.08rem!important;
   flex: none!important;
 }
 .j-button-confirm1[disabled]{

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

@@ -2690,7 +2690,7 @@ body{
 }
 .p13 .home .top .home_search .home_search_left span {
     color: #C0C4CC;
-    font-size: 16px;
+    font-size: 14px;
 }
 .p13 .home_search.fixed-top .jy_sprite_main.sprite_home_search {
     width: 0.4rem;

+ 48 - 1
src/web/staticres/dataExport/css/datapackage_order.css

@@ -446,6 +446,7 @@ body {
   font-size: 16px;
   border-radius: 6px;
   cursor: pointer;
+  background-color: #2CB7CA;
 }
 
 #pay .inner .info .right .btn_createOrder button:nth-of-type(2), #pay .inner .info .right .btn_createOrder button:nth-of-type(3) {
@@ -929,4 +930,50 @@ button {
 
 #guige p del + span {
   color: #2cb7ca;
-}
+}
+
+.order-phone-group {
+  margin: 32px 0;
+  background: #FFFFFF;
+  color: #000;
+  box-sizing: border-box;
+  font-size: 16px;
+  line-height: 24px;
+  letter-spacing: 0px;
+  text-align: left;
+}
+.order-phone-group label {
+  display: inline-block;
+  padding: 8px 0;
+  margin-right: 64px;
+}
+.order-phone-group.error input {
+  color: #FB483D;
+}
+.order-phone-group.error p {
+  display: inherit;
+}
+.order-phone-group input {
+  padding: 6px 10px;
+  color: #000;
+  border-radius: 4px;
+  background: #FFFFFF;
+  border: 1px solid #E0E0E0;
+  font-size: 14px;
+  line-height: 24px;
+  letter-spacing: 0px;
+  text-align: left;
+  width: 590px;
+}
+.order-phone-group input::placeholder {
+  color: #AAA;
+}
+.order-phone-group p {
+  display: none;
+  color: #FB483D;
+  font-size: 12px;
+  line-height: 18px;
+  letter-spacing: 0px;
+  text-align: left;
+  margin-top: 2px;
+}

+ 0 - 701
src/web/staticres/demo-member/js/utils.js

@@ -1,701 +0,0 @@
-/**
- * utils.js v0.0.1
- * 各类js工具函数
- */
-
-/*
-   * 时间格式化函数(将时间格式化为,2019年08月12日,2019-08-12,2019/08/12的形式)
-   *
-   *
-   *   pattern参数(想要什么格式的数据就传入什么格式的数据)
-   *     · 'yyyy-MM-dd'  ---> 输出如2019-09-20
-   *     · 'yyyy-MM-dd hh:mm'  --->  输出如2019-09-20 08:20
-   *     · 'yyyy-MM-dd HH:mm:ss'  --->  输出如2019-09-20 18:20:23
-   *     · 'yyyy/MM/dd'  --->  输出如2019/09/20
-   *     · 'yyyy年MM月dd日'  --->  输出如2019年09月20日
-   *     · 'yyyy年MM月dd日 hh时mm分'  --->  输出如2019年09月20日 08时20分
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒'  --->  输出如2019年09月20日 08时20分23秒
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒 EE'  --->  输出如2019年09月20日 08时20分23秒 周二
-   *     · 'yyyy年MM月dd日 hh时mm分ss秒 EEE'  --->  输出如2019年09月20日 08时20分23秒 星期二
-   *
-   *  参考: https://www.cnblogs.com/mr-wuxiansheng/p/6296646.html
-   */
-Date.prototype.pattern = function (fmt) {
-    if (!fmt) return ''
-    var o = {
-        'y+': this.getFullYear(),
-        'M+': this.getMonth() + 1, // 月份
-        'd+': this.getDate(), // 日
-        // 12小时制
-        'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
-        // 24小时制
-        'H+': this.getHours(), // 小时
-        'm+': this.getMinutes(), // 分
-        's+': this.getSeconds(), // 秒
-        'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
-        'S': this.getMilliseconds(), // 毫秒
-        'E+': this.getDay(), // 周
-    };
-    var week = {
-        '0': '日',
-        '1': '一',
-        '2': '二',
-        '3': '三',
-        '4': '四',
-        '5': '五',
-        '6': '六'
-    };
-    if (/(y+)/.test(fmt)) {
-        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
-    }
-    if (/(E+)/.test(fmt)) {
-        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
-            this.getDay() + '']);
-    }
-    for (var k in o) {
-        if (new RegExp('(' + k + ')').test(fmt)) {
-            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
-                .length)));
-        }
-    }
-    return fmt;
-}
-/*  挂载到Number原型上,格式化小数用tofixed会造成位数不够补零的情况(处理不让自动补零)
-    栗子: 不是number类型的需要转一下
-        Number('').fixed()
-        Number('213412DDD').fixed()
-        1234.152354.fixed()
-        1234.152354.fixed(2)
-        1234.152354.fixed(10)
-*/
-Number.prototype.fixed = function(len){
-    len = isNaN(len)?  0 : len
-    var num = Math.pow(10,len)
-    return Math.round(this*num) / num
-}
-
-var utils = {
-    // utils版本号
-    version: '0.0.1',
-    isWeiXinBrowser: navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1,
-    isAndroid: navigator.userAgent.toLowerCase().indexOf('android') !== -1,
-    isIos: /iphone|ipod|ipad|ios/.test(navigator.userAgent.toLowerCase()),
-    // 传入你要获取的参数的名字
-    getParam: function (name) {
-        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
-        var r = window.location.search.substr(1).match(reg); //获取url中'?'符后的字符串并正则匹配
-
-        var context = '';
-        if (r != null) context = r[2];
-        // 释放变量
-        reg = null;
-        r = null;
-        return context == null || context == '' || context == 'undefined' ? '' : context;
-    },
-    // 取[m, n]随机数
-    getRandomNumber: function (min, max) {
-        return Math.floor(Math.random() * (max - min + 1) + min);
-    },
-    // 获取唯一的uuid
-    // https://www.kancloud.cn/ifeng/js100/622666
-    getRandomUuid: function () {
-        var s = [];
-        var hexDigits = "0123456789abcdef";
-        for (var i = 0; i < 36; i++) {
-            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
-        }
-        s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
-        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
-        s[8] = s[13] = s[18] = s[23] = "-";
-
-        var uuid = s.join("");
-        return uuid;
-    },
-    // 获取随机字符串
-    // 不传参数则获取长度不固定的字符串
-    getRandomString: function (len) {
-        var randomString = '';
-        if (len) {
-            /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
-            var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
-            var maxPos = $chars.length;
-            for (i = 0; i < len; i++) {
-                randomString += $chars.charAt(Math.floor(Math.random() * maxPos));
-            }
-        } else {
-            // Math.random()  生成随机数字, eg: 0.123456
-            // .toString(36)  转化成36进制 : "0.4fzyo82mvyr"
-            // .substring(2)  去掉前面两位 : "yo82mvyr"
-            // .slice(-8)  截取最后八位 : "yo82mvyr"
-            randomString = Math.random().toString(36).substring(2)
-        }
-        return randomString;
-    },
-    // FROM: https://www.jianshu.com/p/90ed8b728975
-    // 比较两个对象是否相等
-    // 返回true为相等,返回false为不相等
-    deepCompare: function (x, y) {
-        var i, l, leftChain, rightChain;
-        function compare2Objects(x, y) {
-            var p;
-            // remember that NaN === NaN returns false
-            // and isNaN(undefined) returns true
-            if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {
-                return true;
-            }
-
-            // Compare primitives and functions.
-            // Check if both arguments link to the same object.
-            // Especially useful on the step where we compare prototypes
-            if (x === y) {
-                return true;
-            }
-
-            // Works in case when functions are created in constructor.
-            // Comparing dates is a common scenario. Another built-ins?
-            // We can even handle functions passed across iframes
-            if ((typeof x === 'function' && typeof y === 'function') ||
-                (x instanceof Date && y instanceof Date) ||
-                (x instanceof RegExp && y instanceof RegExp) ||
-                (x instanceof String && y instanceof String) ||
-                (x instanceof Number && y instanceof Number)) {
-                return x.toString() === y.toString();
-            }
-
-            // At last checking prototypes as good as we can
-            if (!(x instanceof Object && y instanceof Object)) {
-                return false;
-            }
-
-            if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {
-                return false;
-            }
-
-            if (x.constructor !== y.constructor) {
-                return false;
-            }
-
-            if (x.prototype !== y.prototype) {
-                return false;
-            }
-
-            // Check for infinitive linking loops
-            if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {
-                return false;
-            }
-
-            // Quick checking of one object being a subset of another.
-            // todo: cache the structure of arguments[0] for performance
-            for (p in y) {
-                if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
-                    return false;
-                } else if (typeof y[p] !== typeof x[p]) {
-                    return false;
-                }
-            }
-
-            for (p in x) {
-                if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
-                    return false;
-                } else if (typeof y[p] !== typeof x[p]) {
-                    return false;
-                }
-
-                switch (typeof (x[p])) {
-                    case 'object':
-                    case 'function':
-
-                        leftChain.push(x);
-                        rightChain.push(y);
-
-                        if (!compare2Objects(x[p], y[p])) {
-                            return false;
-                        }
-
-                        leftChain.pop();
-                        rightChain.pop();
-                        break;
-
-                    default:
-                        if (x[p] !== y[p]) {
-                            return false;
-                        }
-                        break;
-                }
-            }
-
-            return true;
-        }
-
-        if (arguments.length < 1) {
-            return true; //Die silently? Don't know how to handle such case, please help...
-            // throw "Need two or more arguments to compare";
-        }
-
-        for (i = 1, l = arguments.length; i < l; i++) {
-
-            leftChain = []; //Todo: this can be cached
-            rightChain = [];
-
-            if (!compare2Objects(arguments[0], arguments[i])) {
-                return false;
-            }
-        }
-
-        return true;
-    },
-    // 判断变量是否是数组
-    isArray: function (o){
-        return Object.prototype.toString.call(o) == '[object Array]';
-    },
-    // 数组对象根据某一个值进行从小到大冒泡排序
-    // arr 数组
-    // value 字符串
-    bSort: function (arr, value) {
-        var len = arr.length;
-        for (var i = 0; i < len - 1; i++) {
-            for (var j = 0; j < len - 1 - i; j++) {
-                // 相邻元素两两对比,元素交换,大的元素交换到后面
-                if (arr[j][value] > arr[j + 1][value]) {
-                    var temp = arr[j];
-                    arr[j] = arr[j + 1];
-                    arr[j + 1] = temp;
-                }
-            }
-        }
-        return arr;
-    },
-    // 数组去重
-    unique: function (arr) {
-        if (!this.isArray(arr)) {
-            console.log('type error!')
-            return
-        }
-        var array = [];
-        for (var i = 0; i < arr.length; i++) {
-            if (array .indexOf(arr[i]) === -1) {
-                array .push(arr[i])
-            }
-        }
-        return array
-    },
-    // 数组乱序
-    shuffle: function (arr) {
-        var targetArr = JSON.parse(JSON.stringify(arr || []))
-        var hitArr = []
-        var len = targetArr.length
-        for (var i = 0; i < len; i++) {
-            // 获取随机下标
-            var index = Math.floor(Math.random() * targetArr.length)
-            hitArr.push(targetArr[index])
-            targetArr.splice(index, 1)
-        }
-        return hitArr.concat(targetArr)
-    },
-    // 解决ios返回不刷新页面的问题
-    iosBackRefresh: function () {
-        var isPageHide = false;
-        window.addEventListener('pageshow', function () {
-            if (isPageHide) {
-                location.reload();
-            }
-        });
-        window.addEventListener('pagehide', function () {
-            isPageHide = true;
-        });
-    },
-    // ios返回调用函数
-    iosBackInvoke: function (callback) {
-        var isPageHide = false;
-        window.addEventListener('pageshow', function () {
-            if (isPageHide) {
-                callback && callback();
-            }
-        });
-        window.addEventListener('pagehide', function () {
-            isPageHide = true;
-        });
-    },
-    /**
-     * 格式化金钱的函数
-     * @param {number} s 金额必传
-     * @param {int:0-100} n 保留小数的位数(int:0-100)
-     */
-    formatMoney: function (s, n) {
-        if (n === undefined) {
-            n = -1
-        } else {
-            n = n > 0 && n <= 20 ? n : 2;
-        }
-        var intS = parseInt(s)
-        var point = '.'
-        var left;
-        var right;
-        s = parseFloat((s + '').replace(/[^\d\.-]/g, ''))
-        // 没传n,默认(如果为整数,则不保留小数。如果为浮点数,则保留两位小数)
-        if (n === -1) {
-            if (s === intS) {
-                n = 0
-                right = ''
-                point = ''
-            } else {
-                n = 2
-                s = s.toFixed(n);
-                right = s.split('.')[1];
-            }
-            s = s + ''
-            left = s.split('.')[0].split('').reverse();
-        } else {
-            s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
-            left = s.split('.')[0].split('').reverse();
-            right = s.split('.')[1];
-        }
-
-        t = '';
-        for (i = 0; i < left.length; i++) {
-            t += left[i] + ((i + 1) % 3 == 0 && (i + 1) != left.length ? ',' : '');
-        }
-
-        var money = t.split('').reverse().join('') + point + right;
-        return money;
-    },
-    // 金额大写,链接:https://juejin.im/post/5a2a7a5051882535cd4abfce
-    // upDigit(1682) result:"人民币壹仟陆佰捌拾贰元整"
-    // upDigit(-1693) result:"欠壹仟陆佰玖拾叁元整"
-    upPrice: function (n) {
-        var fraction = ['角', '分', '厘']
-        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
-        var unit = [
-            ['元', '万', '亿'],
-            ['', '拾', '佰', '仟']
-        ]
-        // var head = n < 0 ? '欠人民币' : '人民币'
-        var head = ''
-        n = Math.abs(n)
-        var s = ''
-        for (var i = 0; i < fraction.length; i++) {
-            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '')
-        }
-        s = s || '整'
-        n = Math.floor(n)
-        for (var i = 0; i < unit[0].length && n > 0; i++) {
-            var p = ''
-            for (var j = 0; j < unit[1].length && n > 0; j++) {
-                p = digit[n % 10] + unit[1][j] + p
-                n = Math.floor(n / 10)
-            }
-            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s
-            // s = p + unit[0][i] + s;
-        }
-        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
-    },
-    // 手机号中间4位加*
-    addConfusionForTel: function (tel) {
-        var reg = /^(\d{3})\d{4}(\d{4})$/
-        return tel.replace(reg, '$1****$2')
-    },
-    // 手机号加空格
-    addSpaceForTel: function (tel) {
-        var regMap = {
-            isConfuse: /^(\d{3})\*{4}(\d{4})$/,
-            addSpace: /^(\d{3})(\d{4})(\d{4})$/
-        }
-        var confusion = regMap.isConfuse.test(tel)
-        if (confusion) {
-            return tel.replace(regMap.isConfuse, '$1 **** $2')
-        } else {
-            return tel.replace(regMap.addSpace, '$1 $2 $3')
-        }
-    },
-    /**
-     * 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
-     * @param {Date} originTime 要转换的时间对象(或者时间戳)
-     */
-    dateFromNow: function (originTime) {
-        if (!originTime) return
-        // 原始时间 - 传入的时间戳
-        var originTimeStamp = +new Date(originTime)
-        // 当前时间戳
-        var nowTimeStamp = +new Date()
-        // 时间戳相差多少
-        var diffTimeStamp = nowTimeStamp - originTimeStamp
-
-        var postfix = diffTimeStamp > 0 ? '前' : '后'
-        // 求绝对值 ms(毫秒)
-        var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
-        var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
-
-        // 10天的秒数
-        var days11 = 11 * 24 * 60 * 60
-        // var dataMap = {
-        //     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
-        //     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
-        // }
-        var dataMap = {
-            zh: ['天', '小时', '分钟', '秒'],
-            number: [24 * 60 * 60, 60 * 60, 60, 1]
-        }
-
-        var timeString = ''
-        if (diffTimeStampAbsS > days11) {
-            // 大于10天,则使用正常日期显示
-            var originDate = new Date(originTimeStamp)
-            var nowDate = new Date()
-            // 是否同年
-            var sameYear = originDate.getFullYear() === nowDate.getFullYear()
-            // 如果是当年,则不显示年
-            var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
-            timeString = originDate.pattern(patternString)
-        } else {
-            for (var i = 0; i < 7; i++) {
-                var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
-                if (inm != 0) {
-                    timeString = inm + dataMap.zh[i] + postfix
-                    break
-                }
-            }
-        }
-        return timeString
-    },
-    /**
-     * 输入框获取焦点,隐藏底部固定按钮方法
-     * @param {Array} inputs 传入输入框的DOM对象
-     * @param {Object} footer 按键弹起要隐藏的footer的 DOM对象
-     */
-    inputFocusHideFooter: function (inputs, footer) {
-        var isShowBtn = function (f) {
-            if (f) {
-                footer.style.display = ''
-            } else {
-                footer.style.display = 'none'
-            }
-        }
-
-        // ios监听输入框的软键盘弹起和收起事件
-        if (this.isIos) {
-            inputs.forEach(function (item) {
-                item.addEventListener('focus', function () {
-                    console.log('IOS 键盘弹出')
-                    // IOS 键盘弹起后操作
-                    isShowBtn(false)
-                }, false)
-
-                // IOS 键盘收起:IOS 点击输入框以外区域或点击收起按钮,输入框都会失去焦点,键盘会收起,
-                item.addEventListener('blur', function () {
-                    console.log('IOS 键盘收起')
-                    // IOS 键盘收起后操作
-                    isShowBtn(true)
-                })
-            })
-        }
-
-        // Android 键盘收起:Android 键盘弹起或收起页面高度会发生变化,以此为依据获知键盘收起
-        if (this.isAndroid) {
-            var clientHeight = document.documentElement.clientHeight || document.body.clientHeight
-            window.addEventListener('resize', function () {
-                var nowClientHeight = document.documentElement.clientHeight || document.body.clientHeight
-                if (clientHeight > nowClientHeight) {
-                    // 键盘弹出的事件处理
-                    console.log('Android 键盘弹出')
-                    isShowBtn(false)
-                } else {
-                    console.log('Android 键盘收起')
-                    // 键盘收起的事件处理
-                    isShowBtn(true)
-                }
-            }, false)
-        }
-    },
-    /**
-     * 通用关键字高亮替换
-     * @param {String} value 要高亮的字符串
-     * @param {String|Array} oldChar 要被替换的字符串(或数组)
-     * @param {String|Array} newChar 要替换成的字符串(或数组)
-     *
-     * 比如:要将 - `剑鱼标讯工具函数` 字符串中的 `工具` 高亮
-     * 则此时 value -> `剑鱼标讯工具函数`
-     *        oldChar -> `工具`
-     *        newChar -> `<span class="highlight-text">工具</span>`
-     *
-     * 批量高亮-----
-     * 比如:要将 - `剑鱼标讯工具函数` 字符串中的 `工具` `剑鱼` 高亮
-     * 则此时 value -> `剑鱼标讯工具函数批量高亮`
-     *        oldChar -> ['工具', '剑鱼']
-     *        newChar -> ['<span class="highlight-text">', '</span>']
-     *
-     *   注意:此时newChar为一个长度为2的数组,数组中为高亮标签的起始标签和结束标签
-     *
-     */
-    replaceKeyword: function (value, oldChar, newChar) {
-        var _this = this
-        if (!oldChar || !newChar) return value
-        // oldChar的字符串数组,用来循环替换
-        var oldCharArr = []
-
-        if (this.isArray(oldChar)) {
-            oldCharArr = oldChar.concat()
-        } else {
-            oldCharArr.push(oldChar)
-        }
-
-        // 数组去重
-        oldCharArr = this.unique(oldCharArr)
-
-        try {
-            oldCharArr.forEach(function (item) {
-                // 去空格之后为空字符串,则直接跳过当前替换
-                if (item.replace(/\s+/g, '')) {
-                    var oc = item
-                    oc = oc.replace(/\$/g, '\\$')
-                        .replace(/\(/g, '\\(')
-                        .replace(/\)/g, '\\)')
-                        .replace(/\*/g, '\\*')
-                        .replace(/\+/g, '\\+')
-                        .replace(/\./g, '\\.')
-                        .replace(/\[/g, '\\[')
-                        .replace(/\]/g, '\\]')
-                        .replace(/\?/g, '\\?')
-                        .replace(/\\/g, '\\')
-                        .replace(/\//g, '\\/')
-                        .replace(/\^/g, '\\^')
-                        .replace(/\{/g, '\\{')
-                        .replace(/\}/g, '\\}')
-                        .replace(/\|/g, '\\|')
-
-                    if (_this.isArray(newChar)) {
-                        // 批量高亮
-                        var tempV = value
-                        value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar[0] + oc + newChar[1])
-                        if (value === tempV && oc.indexOf('+') !== -1) {
-                          var splitReg = oc.split('\\+')
-                          splitReg.map(function (v) {
-                            value = value.replace(new RegExp('('+v+')', 'gmi'), newChar[0] + v + newChar[1])
-                          })
-                        }
-                    } else {
-                        // 普通单个高亮
-                        value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar)
-                    }
-                }
-            })
-        } catch (e) {
-            console.log(e)
-            return value
-        }
-        return value
-    },
-    /**
-     * 批量删除sessionStorage中的数据
-     * @param {RegExp} reg 传入一个要匹配的正则表达式
-     */
-    clearBatchSessionStorage: function (reg) {
-        if (sessionStorage) {
-            var sessKeys = Object.keys(sessionStorage)
-            sessKeys.forEach(function (item) {
-                if (reg.test(item)) {
-                    sessionStorage.removeItem(item)
-                }
-            })
-        }
-    },
-    /**
-     * 获取图片原始宽高
-     * @param {Image/Object} img
-     * @param {Function} callback
-     */
-    getImgNaturalDimensions: function (img, callback) {
-        var naturalSize = {}
-        if (img.naturalWidth && img.naturalHeight) { // 现代浏览器
-            naturalSize.with = img.naturalWidth
-            naturalSize.height = img.naturalHeight
-        } else { // IE6/7/8
-            var image = new Image()
-            image.src = img.src
-            image.onload = function() {
-                naturalSize.with = image.width
-                naturalSize.height = image.height
-                callback && callback(naturalSize)
-            }
-        }
-        return naturalSize
-    },
-    moneyUnit: function (num, type, lv) {
-        if (num === '' || num == null || num == undefined || isNaN(num)) return ''
-        var levelArr = ['元', '万元', '亿元', '万亿元']
-        if (type === void 0) {
-            type = 'string';
-        }
-
-        if (lv === void 0) {
-            lv = 0;
-        }
-
-        if (num === 0) {
-            if (type === 'string') {
-                return '0';
-            }
-
-            if (type === 'lv') {
-                return levelArr[lv];
-            }
-
-            if (type === 'number') {
-                return 0;
-            }
-
-            if (type === 'index') {
-                return lv;
-            }
-        }
-
-        var result = num / Math.pow(10000, lv);
-
-        if (result > 10000 && lv < 2) {
-            return this.moneyUnit(num, type, lv + 1)
-        } else {
-            if (type === 'string') {
-                return String(Math.floor(result * 100) / 100).replace('.00', '') + levelArr[lv];
-            }
-
-            if (type === 'lv') {
-                return levelArr[lv];
-            }
-
-            if (type === 'index') {
-                return lv;
-            }
-
-            if (type === 'number') {
-                return String(Math.floor(result * 100) / 100).replace('.00', '');
-            }
-        }
-    },
-    /**
-     * 防抖
-     * @param {Function} func 函数
-     * @param {Number} delay 延时间隔 默认 200ms
-     * @param {Boolean} immediate 是否首次执行
-     */
-    debounce: function (func, delay, immediate){
-        var timer = null;
-        delay = delay || 200
-        return function() {
-            var context = this;
-            var args = arguments;
-            if(timer) clearTimeout(timer);
-            if(immediate){
-                var doNow = !timer;
-                timer = setTimeout(function(){
-                    timer = null;
-                },delay);
-                if(doNow){
-                    func.apply(context,args);
-                }
-            }else{
-                timer = setTimeout(function(){
-                    func.apply(context,args);
-                },delay);
-            }
-        }
-    }
-}

+ 5 - 0
src/web/staticres/frontRouter/pc/my_data_packet/js/index-pc.js

@@ -35,6 +35,11 @@ var vm = new Vue({
       }
     },
     methods: {
+      onClickRow (row, c, event) {
+    	if(event.target.className!="dian-ji"&&row.search!=null&&(row.search.comeinfrom=="supersearchPage"||row.search.comeinfrom=="exportPage")){
+			window.location.href = "/front/dataExport/toSieve?id="+row.search.id;
+		}
+      },
       goBuyPage () {
         location.href = '/front/dataPack/createOrder'
       },

+ 100 - 0
src/web/staticres/js/common.js

@@ -108,6 +108,106 @@ var EasyPopup = function(id){
 		$("#"+this.id).fadeOut();
 	}
 }
+// 部分页面没有全局工具函数
+if (typeof utils !== 'object') {
+	utils = {}
+}
+Date.prototype.pattern = function (fmt) {
+	if (!fmt) return ''
+	var o = {
+		'y+': this.getFullYear(),
+		'M+': this.getMonth() + 1, // 月份
+		'd+': this.getDate(), // 日
+		// 12小时制
+		'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
+		// 24小时制
+		'H+': this.getHours(), // 小时
+		'm+': this.getMinutes(), // 分
+		's+': this.getSeconds(), // 秒
+		'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+		'S': this.getMilliseconds(), // 毫秒
+		'E+': this.getDay(), // 周
+	};
+	var week = {
+		'0': '日',
+		'1': '一',
+		'2': '二',
+		'3': '三',
+		'4': '四',
+		'5': '五',
+		'6': '六'
+	};
+	if (/(y+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
+	}
+	if (/(E+)/.test(fmt)) {
+		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[
+		this.getDay() + '']);
+	}
+	for (var k in o) {
+		if (new RegExp('(' + k + ')').test(fmt)) {
+			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k])
+				.length)));
+		}
+	}
+	return fmt;
+}
+utils.dateFromNow = function (originTime, useOld) {
+	if (!originTime) return
+	// 原始时间 - 传入的时间戳
+	var originTimeStamp = +new Date(originTime)
+	// 当前时间戳
+	var nowTimeStamp = +new Date()
+	// 时间戳相差多少
+	var diffTimeStamp = nowTimeStamp - originTimeStamp
+
+	var postfix = diffTimeStamp > 0 ? '前' : '后'
+	// 求绝对值 ms(毫秒)
+	var diffTimeStampAbsMs = Math.abs(diffTimeStamp)
+	var diffTimeStampAbsS = Math.round(diffTimeStampAbsMs / 1000)
+
+	// 10天的秒数
+	var days11 = 11 * 24 * 60 * 60
+	// var dataMap = {
+	//     zh: ['年', '个月', '星期', '天', '小时', '分钟', '秒'],
+	//     number: [365*24*60*60, 30*24*60*60, 7*24*60*60, 24*60*60, 60*60, 60, 1]
+	// }
+	var dataMap = {
+		zh: ['天', '小时', '分钟', '秒'],
+		number: [24 * 60 * 60, 60 * 60, 60, 1]
+	}
+
+	var timeString = ''
+	// 10天前
+	var tenDaysAgo = diffTimeStampAbsS > days11
+	// 是否是当天
+	var isCurrentDay = new Date(originTimeStamp).pattern('yyyy.MM.dd') === new Date().pattern('yyyy.MM.dd')
+
+	var condition = !isCurrentDay
+	if (useOld) {
+		condition = tenDaysAgo
+	}
+
+	if (condition) {
+		// 不是当天,则使用正常日期显示
+		var originDate = new Date(originTimeStamp)
+		var nowDate = new Date()
+		// 是否同年
+		var sameYear = originDate.getFullYear() === nowDate.getFullYear()
+		// 如果是当年,则不显示年
+		var patternString = sameYear ? 'MM-dd' : 'yyyy-MM-dd'
+		timeString = originDate.pattern(patternString)
+	} else {
+		for (var i = 0; i < dataMap.number.length; i++) {
+			var inm = Math.floor(diffTimeStampAbsS / dataMap.number[i])
+			if (inm != 0) {
+				timeString = inm + dataMap.zh[i] + postfix
+				break
+			}
+		}
+	}
+	return timeString
+}
 //计算时差
 function timeDiff(date){
 	var date1 = date;//开始时间

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

@@ -127,22 +127,22 @@ var vm = new Vue({
                         label: '手机号',
                         value: '2'
                     },
-                    {
-                        label: '电子邮箱',
-                        value: '3'
-                    },
-                    {
-                        label: '不存在',
-                        value: '4'
-                    }
+                    // {
+                    //     label: '电子邮箱',
+                    //     value: '3'
+                    // },
+                    // {
+                    //     label: '不存在',
+                    //     value: '4'
+                    // }
                 ],
             },
             filterState: {
                 searchType: ['A'],
                 entArea: [],
                 entCity: [],
-                entType: [],
-                entStatus: [],
+                entType: ['A', 'B', 'C', 'D'],
+                entStatus: ['A', 'B', 'C', 'D'],
                 entCapital: [],
                 biddingArea: '', // 中标区域
                 entClass: '', // 单位类型
@@ -174,7 +174,8 @@ var vm = new Vue({
             power: false,
             powerLoaded: false,
             powerDialogShow: false,
-            baiduName: ''
+            baiduName: '',
+            inputStatus: false
         }
     },
     watch: {
@@ -189,6 +190,9 @@ var vm = new Vue({
         }
     },
     computed: {
+        getInputStatus: function () {
+            return this.inputStatus
+        },
         preSearchListShow: function () {
             return this.searchContent.trim().length >= 2 && this.preSearch.list.length && (this.preSearch.focus || this.preSearch.hover)
         },
@@ -219,7 +223,7 @@ var vm = new Vue({
                     return ''
                 }
             }
-        }
+        },
     },
     created: function () {
         this.getPower()
@@ -230,8 +234,15 @@ var vm = new Vue({
         this.initDOMEvents()
         // 默认选中搜索范围
         this.$refs.searchType.setState(this.filterState.searchType)
+        // 全选按钮逻辑
+        // this.searchTypeChange([], true)
     },
     methods: {
+        getSearchForValues: function () {
+            return this.searchTypeList.map(function (v) {
+                return v.value
+            })
+        },
         checkLogin: function () {
             var moduleOpen = $('body').hasClass('modal-open')
             if (moduleOpen) return
@@ -298,13 +309,27 @@ var vm = new Vue({
             }
             this.filterShow = !this.filterShow
         },
-        searchTypeChange: function (t) {
+        searchTypeChange: function (t, hideTip) {
+            // 全选逻辑隐藏
+            // var tempRef = this.$refs.searchType
+            // var tempList = this.getSearchForValues()
+            // if (t.length === 0) {
+            //     if (tempRef && tempRef.$data.selectList[0].selected) {
+            //         t = tempList
+            //     }
+            // } else if (tempList.join('') === t.join('')) {
+            //     tempRef && tempRef.setState()
+            // }
+
+
             var eIndex = t.indexOf('E')
             if (!this.power && eIndex !== -1) {
-                this.powerDialogShow = true
                 t.splice(eIndex, 1)
                 this.$refs.searchType.setState(t)
-                return
+                if (!hideTip) {
+                    this.powerDialogShow = true
+                    return
+                }
             }
             this.filterState.searchType = t
             this.doSearch()
@@ -319,22 +344,40 @@ var vm = new Vue({
             this.doSearch()
         },
         entTypeChange: function (e) {
+            if (!e.length) {
+                this.$refs.entType.$data.selectList[0].selected = true
+            }
             this.filterState.entType = e
             this.doSearch()
         },
         entStateChange: function (e) {
+            if (!e.length) {
+                this.$refs.entState.$data.selectList[0].selected = true
+            }
             this.filterState.entStatus = e
             this.doSearch()
         },
         // 标准金额区间
         inexactPriceChange: function (p) {
+            if (!p.length) {
+                this.$refs.entCapital.$data.selectList[0].selected = true
+            }
             this.filterState.entCapital = p
+            this.inputStatus = false
             this.doSearch()
         },
         // 输入金额区间
         exactPriceChange: function (p) {
             this.$refs.entCapital.setState()
-            this.filterState.entCapital = [p.min + '-' + p.max]
+            if (p.min === '' && p.max === '') {
+                this.filterState.entCapital = ['']
+                this.$refs.entCapital.$data.selectList[0].selected = true
+                this.inputStatus = false
+            } else {
+                this.$refs.entCapital.$data.selectList[0].selected = false
+                this.filterState.entCapital = [p.min + '-' + p.max]
+                this.inputStatus = true
+            }
             this.doSearch()
         },
         zbFilterChange: function (name) {

+ 1 - 1
src/web/staticres/js/index_content.js

@@ -22,7 +22,7 @@ $(function () {
       $("#zbIndex").attr("action", '/jylab/supsearch/index.html');
       $("#zbIndex .ser").attr("name",'keywords')
       $("#index .search .index_search_thikn").hide()
-      $("#zbIndex input").attr('placeholder', '请输入您想要查询的招标信息')
+      $("#zbIndex input").attr('placeholder', '请输入您想要查询的招标信息,多个关键词用空格隔开')
     }else{
       $("#zbIndex").attr("action", '/jylab/entSearch/index.html');
       $("#zbIndex .ser").attr("name",'searchvalue')

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio