浏览代码

Merge branch 'master' into feature/v4.8.49

lianbingjie 1 年之前
父节点
当前提交
7444b0d625
共有 66 个文件被更改,包括 3417 次插入1107 次删除
  1. 2 1
      src/config.json
  2. 2 3
      src/jfw/front/frontRouter.go
  3. 10 21
      src/jfw/front/login.go
  4. 12 19
      src/jfw/front/org_structure.go
  5. 10 8
      src/jfw/front/pcIndex.go
  6. 10 17
      src/jfw/front/pchelper.go
  7. 1 1
      src/jfw/front/swordfish.go
  8. 14 9
      src/jfw/front/tags.go
  9. 24 39
      src/jfw/modules/app/src/app/front/login.go
  10. 7 6
      src/jfw/modules/app/src/app/front/tags.go
  11. 7 3
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/analysis_result.css
  12. 二进制
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/image/noData.png
  13. 15 0
      src/jfw/modules/app/src/web/templates/big-member/page_ai_search.html
  14. 1 1
      src/jfw/modules/app/src/web/templates/big-member/page_analysis_result.html
  15. 446 210
      src/jfw/modules/app/src/web/templates/big-member/page_forecast_list.html
  16. 3 2
      src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html
  17. 2 0
      src/jfw/modules/app/src/web/templates/me/login.html
  18. 4 2
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  19. 58 38
      src/jfw/modules/bigmember/src/service/analysis/forecastproject.go
  20. 5 0
      src/jfw/modules/bigmember/src/service/use/use.go
  21. 2 2
      src/jfw/modules/distribution/src/service/action/cashout.go
  22. 3 3
      src/jfw/modules/distribution/src/service/action/logoff.go
  23. 17 13
      src/jfw/modules/distribution/src/service/action/partner.go
  24. 496 496
      src/jfw/modules/distribution/src/service/action/share.go
  25. 1 1
      src/jfw/modules/distribution/src/timetask/timetask.go
  26. 9 9
      src/jfw/modules/subscribepay/src/entity/shareFission.go
  27. 4 4
      src/jfw/modules/subscribepay/src/go.mod
  28. 8 8
      src/jfw/modules/subscribepay/src/go.sum
  29. 23 24
      src/jfw/modules/subscribepay/src/service/userAccountInfo.go
  30. 13 2
      src/web/staticres/common-module/collection/css/index.css
  31. 26 3
      src/web/staticres/common-module/collection/js/date-mobile.js
  32. 0 0
      src/web/staticres/common-module/selector/js/province_city.js
  33. 57 4
      src/web/staticres/css/dev2/biddingSearch.css
  34. 15 11
      src/web/staticres/css/dev2/newBidSearch.css
  35. 80 2
      src/web/staticres/css/dev2/superSearch-inside.css
  36. 192 1
      src/web/staticres/css/dev2/superSearch.css
  37. 311 0
      src/web/staticres/css/selectCommon.css
  38. 11 0
      src/web/staticres/css/selector/selector.css
  39. 10 4
      src/web/staticres/frontRouter/pc/collection/js/index-pc.js
  40. 二进制
      src/web/staticres/images/biddingSearch/desc-icon.png
  41. 二进制
      src/web/staticres/images/biddingSearch/icon-checkbox-new.png
  42. 二进制
      src/web/staticres/images/biddingSearch/icon-checked-new.png
  43. 二进制
      src/web/staticres/images/biddingSearch/novip-icon-check.png
  44. 二进制
      src/web/staticres/images/biddingSearch/novip-icon.png
  45. 二进制
      src/web/staticres/images/check_.png
  46. 二进制
      src/web/staticres/images/checked_.png
  47. 二进制
      src/web/staticres/images/more_.png
  48. 二进制
      src/web/staticres/images/novip-down.png
  49. 10 10
      src/web/staticres/js/ent-search-index-pc.js
  50. 2 0
      src/web/staticres/js/login.js
  51. 10 10
      src/web/staticres/js/pur-search-index-pc.js
  52. 546 0
      src/web/staticres/js/selector/area-city-data.js
  53. 84 0
      src/web/staticres/js/selector/keyword-tags-new.js
  54. 2 2
      src/web/staticres/js/selector/no-data-pc.js
  55. 32 6
      src/web/staticres/js/superSearch.js
  56. 89 0
      src/web/templates/common/selectArea.html
  57. 12 1
      src/web/templates/frontRouter/pc/collection/sess/index.html
  58. 3 2
      src/web/templates/frontRouter/wx/collection/sess/index.html
  59. 3 3
      src/web/templates/pc/biddetail.html
  60. 2 2
      src/web/templates/pc/biddetail_rec.html
  61. 0 1
      src/web/templates/pc/dataSmt/list.html
  62. 1 0
      src/web/templates/pc/index.html
  63. 8 2
      src/web/templates/pc/subscribe_new.html
  64. 693 95
      src/web/templates/pc/supsearch.html
  65. 5 4
      src/web/templates/weixin/wxinfocontent.html
  66. 4 2
      src/web/templates/weixin/wxinfocontent_rec.html

+ 2 - 1
src/config.json

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

+ 2 - 3
src/jfw/front/frontRouter.go

@@ -213,9 +213,8 @@ var bigVipFreePageReg = regexp.MustCompile(`set_.*|free|unit_portrayal|analysis_
 func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 func (this *CommonRouter) doPcBigPage(pageSign, types string) error {
 	//page := pageSign
 	//page := pageSign
 	userid, _ := this.GetSession("userId").(string)
 	userid, _ := this.GetSession("userId").(string)
-	//没有登录跳转登录页面(采购单位画像除外)
-	if !strings.Contains(pageSign, "unit_portrayal") &&
-		!strings.Contains(pageSign, "ent_portrait") && userid == "" {
+	//没有登录跳转登录页面(采购单位画像| 企业画像 除外)
+	if !strings.Contains(pageSign, "unit_portrayal") && !strings.Contains(pageSign, "ent_portrait") && !strings.Contains(pageSign, "ent_ser_portrait") && userid == "" {
 		return this.Redirect("/notin/page")
 		return this.Redirect("/notin/page")
 	}
 	}
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))
 	return this.Render(fmt.Sprintf("/frontRouter/pc/page_big_pc/sess/index.html"))

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

@@ -180,29 +180,18 @@ func (l *Login) Login() error {
 					if source != "" {
 					if source != "" {
 						data["s_tracksource"] = source
 						data["s_tracksource"] = source
 					}
 					}
+					//获取base_user_id
+					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+						Appid: "10000",
+						Phone: phone,
+					}); resp != nil && resp.Data.Id > 0 {
+						data["base_user_id"] = resp.Data.Id
+					} else {
+						log.Println(phone, "调用usercenter失败")
+						return -4, false
+					}
 					_id := mongodb.Save("user", data)
 					_id := mongodb.Save("user", data)
 					if _id != "" {
 					if _id != "" {
-						func(phone, userid string) {
-							//用户中台存储  开始
-							formdata := map[string]interface{}{
-								"appid": "10000",
-								"phone": phone,
-							}
-							if s_company != "" {
-								formdata["company"] = s_company
-							}
-							// ck, _ := l.GetCookie("SESSIONID")
-
-							// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
-							if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-								Appid: "10000",
-								Phone: phone,
-							}, *config.Middleground); !ok {
-								log.Println("usercenter add error", userid, phone)
-							}
-
-							//用户中台存储  结束
-						}(phone, _id)
 						jy.ClearPhoneIdentSession(l.Session())
 						jy.ClearPhoneIdentSession(l.Session())
 						ok, _, userInfo := afterLogin(phone, l.Session())
 						ok, _, userInfo := afterLogin(phone, l.Session())
 						userInfo["isNewUser"] = true
 						userInfo["isNewUser"] = true

+ 12 - 19
src/jfw/front/org_structure.go

@@ -21,7 +21,6 @@ import (
 	"app.yhyue.com/moapp/jypkg/public"
 	"app.yhyue.com/moapp/jypkg/public"
 
 
 	util "app.yhyue.com/moapp/jybase/common"
 	util "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 
 
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
@@ -187,25 +186,19 @@ func (this *OrgStructure) AutoLogon() error {
 			if source != "" {
 			if source != "" {
 				data["s_tracksource"] = source
 				data["s_tracksource"] = source
 			}
 			}
-			if id := mongodb.Save("user", data); id != "" {
-				// ck, _ := this.GetCookie("SESSIONID")
-				// usercenter.AddBaseUser(mongodb, util.ObjToString(config.Sysconfig["userCenterApi"]), id, map[string]interface{}{
-				// 	"phone":    phone,
-				// 	"appid":    "10000",
-				// 	"nickname": name,
-				// 	"openid":   openId,
-				// 	"unionid":  unionId,
-				// }, ck)
-				if ok := jy.AddUser(mongodb, id, pb.UserAddReq{
-					Appid:    "10000",
-					Phone:    phone,
-					Nickname: name,
-					SOpenid:  openId,
-					Unionid:  unionId,
-				}, *config.Middleground); !ok {
-					log.Println("usercenter add error", id, phone)
+			if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+				Appid:    "10000",
+				Phone:    phone,
+				Nickname: name,
+				SOpenid:  openId,
+				Unionid:  unionId,
+			}); resp != nil && resp.Data.Id > 0 {
+				data["base_user_id"] = resp.Data.Id
+				if id := mongodb.Save("user", data); id != "" {
+					rb = true
 				}
 				}
-				rb = true
+			} else {
+				log.Println(phone, unionId, "调用usercenter失败")
 			}
 			}
 		}
 		}
 	}
 	}

+ 10 - 8
src/jfw/front/pcIndex.go

@@ -143,6 +143,7 @@ func (m *PcIndex) NewSordfish(flag string) error {
 			m.T["hotWinner"] = GetWinnerInfo()
 			m.T["hotWinner"] = GetWinnerInfo()
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)
 			m.T["newbids"] = NewIndexbids(m.Session(), m.Request)
 			m.T["hotkey"] = hotKeyArr
 			m.T["hotkey"] = hotKeyArr
+			m.T["simpleTemplateData"] = map[string]interface{}{"XwebVer": m.T["XwebVer"]} //清除前端js获取模版标签变量
 			return m.Render("/pc/index.html", &m.T)
 			return m.Render("/pc/index.html", &m.T)
 		}
 		}
 	}
 	}
@@ -188,6 +189,8 @@ func GetJycmsAreaLink() []map[string]interface{} {
 
 
 // 剑鱼标讯pc首页-统计
 // 剑鱼标讯pc首页-统计
 func (m *PcIndex) NewSordfishC() error {
 func (m *PcIndex) NewSordfishC() error {
+	//TODO: seo工程师需求 把此路由重定向到首页
+	return m.Redirect("/", 301)
 	var shareid = m.GetString("id")
 	var shareid = m.GetString("id")
 	if len(shareid) == 0 {
 	if len(shareid) == 0 {
 		shareid = "10" //fmt.Sprintf("%s%d", config.Seoconfig["jysy"].(string)+fmt.Sprintf("%d", time.Now().UnixNano())[8:14], rand.Intn(9))
 		shareid = "10" //fmt.Sprintf("%s%d", config.Seoconfig["jysy"].(string)+fmt.Sprintf("%d", time.Now().UnixNano())[8:14], rand.Intn(9))
@@ -509,19 +512,18 @@ func (f *PcIndex) SearchResult(at, name string) error {
 		var datas *[]map[string]interface{}
 		var datas *[]map[string]interface{}
 		if list == nil || len(list.([]interface{})) == 0 {
 		if list == nil || len(list.([]interface{})) == 0 {
 			if keywords == "" {
 			if keywords == "" {
-				count := elastic.Count(INDEX, TYPE, query1)
-				r := rand.New(rand.NewSource(time.Now().UnixNano()))
+				//count := elastic.Count(INDEX, TYPE, query1)
 				currentPage = no
 				currentPage = no
-				startPage = r.Intn(currentPage * limitcount)
-				count1 := util.IntAll(count)
-				if count1 < startPage || startPage < 0 {
-					startPage = 0
-				}
+				startPage = rand.New(rand.NewSource(time.Now().UnixNano())).Intn(currentPage * limitcount)
+				//count1 := util.IntAll(count)
+				//if count1 < startPage || startPage < 0 {
+				//	startPage = 0
+				//}
 				query := getLastNewsQuery(area, "", stype, industry, city)
 				query := getLastNewsQuery(area, "", stype, industry, city)
 				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","bidopentime","winner","buyer","bidamount","budget","s_subscopeclass","projectname"`, startPage, limitcount)
 				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","bidopentime","winner","buyer","bidamount","budget","s_subscopeclass","projectname"`, startPage, limitcount)
 			} else {
 			} else {
 				//关键词  如果规定时间内未取到数据 则按照老规则取数据   //规则开发一半被砍 暂时注释
 				//关键词  如果规定时间内未取到数据 则按照老规则取数据   //规则开发一半被砍 暂时注释
-				_, _, datas = bidsearch.GetPcBidSearchData(keywords, "", "", "", "", key_industry, "", "", "", "", "", "", "", 0, true, nil, bidSearch_field_1, "", false, false, "", 50, "")
+				_, _, datas = bidsearch.GetPcBidSearchData(keywords, "", "", "", "", key_industry, "", "", "", "", "", "", "", 0, true, nil, bidSearch_field_1, "", false, false, "", 300, "")
 				if datas != nil && len(*datas) > limitcount {
 				if datas != nil && len(*datas) > limitcount {
 					*datas = (*datas)[0:limitcount]
 					*datas = (*datas)[0:limitcount]
 				}
 				}

+ 10 - 17
src/jfw/front/pchelper.go

@@ -141,24 +141,17 @@ func (l *PcHelper) Login() error {
 						if jy.IsEmail(email) {
 						if jy.IsEmail(email) {
 							data["s_email"] = email
 							data["s_email"] = email
 						}
 						}
+						if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+							Appid: "10000",
+							Phone: phone,
+						}); resp != nil && resp.Data.Id > 0 {
+							data["base_user_id"] = resp.Data.Id
+						} else {
+							log.Println(phone, "调用usercenter失败")
+							return -1
+						}
 						_id := mongodb.Save("user", data)
 						_id := mongodb.Save("user", data)
 						if _id != "" {
 						if _id != "" {
-							//用户中台存储  开始
-							func(phone, userId string) {
-								// formdata := map[string]interface{}{
-								// 	"appid": "10000",
-								// 	"phone": phone,
-								// }
-								//ck, _ := l.GetCookie("SESSIONID")
-								//usercenter.AddBaseUser(mongodb, util.ObjToString(config.Sysconfig["userCenterApi"]), userId, formdata, ck)
-								if ok := jy.AddUser(mongodb, userId, pb.UserAddReq{
-									Appid: "10000",
-									Phone: phone,
-								}, *config.Middleground); !ok {
-									log.Println("usercenter add error", userId, phone)
-								}
-							}(phone, _id)
-							//用户中台存储  结束
 							jy.ClearPhoneIdentSession(l.Session())
 							jy.ClearPhoneIdentSession(l.Session())
 							reToken = getUToken(mac, phone)
 							reToken = getUToken(mac, phone)
 							reOpenId = phone
 							reOpenId = phone
@@ -171,7 +164,7 @@ func (l *PcHelper) Login() error {
 							updataMap["s_phone"] = phone
 							updataMap["s_phone"] = phone
 						}
 						}
 						if len(updataMap) > 0 {
 						if len(updataMap) > 0 {
-                            jyutil.Compatible.Update( BsonIdToSId((*datas)[0]["_id"]), map[string]interface{}{
+							jyutil.Compatible.Update(BsonIdToSId((*datas)[0]["_id"]), map[string]interface{}{
 								"$set":   updataMap,
 								"$set":   updataMap,
 								"$unset": map[string]interface{}{"s_m_phone": ""},
 								"$unset": map[string]interface{}{"s_m_phone": ""},
 							})
 							})

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

@@ -810,7 +810,7 @@ func pcVRT(sid, industry, content string, isPayUser bool) (po, bo, wo []map[stri
 			queryStr := ""
 			queryStr := ""
 			commonQuery := func(mustquery string) *[]map[string]interface{} {
 			commonQuery := func(mustquery string) *[]map[string]interface{} {
 				//付费用户可查看 详情页关联信息
 				//付费用户可查看 详情页关联信息
-				if !isPayUser || content == "bdcontent" || content == "advancedProject" {
+				if util.IntAll(config.Sysconfig["biddingRelatesLevel"]) > 0 && (!isPayUser || content == "bdcontent" || content == "advancedProject") {
 					return nil //elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
 					return nil //elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
 				}
 				}
 				return elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)
 				return elastic.GetPage("bidding", "bidding", queryStr, bidSearch_sort, `"_id","title","publishtime","toptype","subtype","type","area","href","s_subscopeclass","spidercode","site"`, 0, 11)

+ 14 - 9
src/jfw/front/tags.go

@@ -681,22 +681,27 @@ func (this *Tags) GetBidding(industry, area, city, stype, keyword string, reques
 			starttime := fmt.Sprint(time.Date(now.Year()-1, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
 			starttime := fmt.Sprint(time.Date(now.Year()-1, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.Local).Unix())
 			endtime := fmt.Sprint(now.Unix())
 			endtime := fmt.Sprint(now.Unix())
 			var datas *[]map[string]interface{}
 			var datas *[]map[string]interface{}
-			var startPage int
+			//var startPage int
 			var count int64
 			var count int64
-			currentPage := 5
+			//currentPage := 5
 			limitCount := qu.IntAllDef(config.Seoconfig["tagsLimitCount"], 50)
 			limitCount := qu.IntAllDef(config.Seoconfig["tagsLimitCount"], 50)
 			if keyword == "" {
 			if keyword == "" {
 				query := bidsearch.GetSearchQuery("", industry, "0.1", "1000", "", "", "", "", bidsearch.GetBidSearchQuery(area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, "", ""), "", false, seoBidField)
 				query := bidsearch.GetSearchQuery("", industry, "0.1", "1000", "", "", "", "", bidsearch.GetBidSearchQuery(area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, "", ""), "", false, seoBidField)
-				count = elastic.Count(INDEX, TYPE, query)
+				//count = elastic.Count(INDEX, TYPE, query)
+				//if count == 0 {
+				//	return nil, 0, false
+				//}
+				//startPage = rand.New(rand.NewSource(time.Now().UnixNano())).Intn(currentPage * limitCount)
+				//count1 := qu.IntAll(count)
+				//if count1 < startPage || startPage < 0 {
+				//	startPage = 0
+				//}
+				var countTmp int
+				datas, countTmp = elastic.GetOAPage(INDEX, TYPE, query, bidSearch_sort, seoBidField, 0, limitCount)
+				count = qu.Int64All(countTmp)
 				if count == 0 {
 				if count == 0 {
 					return nil, 0, false
 					return nil, 0, false
 				}
 				}
-				startPage = rand.New(rand.NewSource(time.Now().UnixNano())).Intn(currentPage * limitCount)
-				count1 := qu.IntAll(count)
-				if count1 < startPage || startPage < 0 {
-					startPage = 0
-				}
-				datas = elastic.GetPage(INDEX, TYPE, query, bidSearch_sort, seoBidField, startPage, limitCount)
 			} else {
 			} else {
 				count, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, industry, "0.1", "1000", "", "", "", "", "", 0, true, []string{"title", "detail", "purchasing"}, seoBidField, "", false, false, "", limitCount, "")
 				count, _, datas = bidsearch.GetPcBidSearchData(keyword, area, city, fmt.Sprintf("%s_%s", starttime, endtime), stype, industry, "0.1", "1000", "", "", "", "", "", 0, true, []string{"title", "detail", "purchasing"}, seoBidField, "", false, false, "", limitCount, "")
 				if datas != nil && len(*datas) > limitCount {
 				if datas != nil && len(*datas) > limitCount {

+ 24 - 39
src/jfw/modules/app/src/app/front/login.go

@@ -218,25 +218,20 @@ func (l *Login) Login() error {
 						data["s_email"] = email
 						data["s_email"] = email
 					}
 					}
 					data["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent"))
 					data["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent"))
+
+					if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+						Appid: "10000",
+						Phone: phone,
+					}); resp != nil && resp.Data.Id > 0 {
+						data["base_user_id"] = resp.Data.Id
+					} else {
+						log.Println(phone, "调用usercenter失败")
+						return -4
+					}
 					_id := mongodb.Save("user", data)
 					_id := mongodb.Save("user", data)
 					if _id != "" {
 					if _id != "" {
 						userInfo["isNewUser"] = true
 						userInfo["isNewUser"] = true
-						//用户中台同步
-						func(userid string) {
-							// formdata := map[string]interface{}{
-							// 	"appid": "10000",
-							// 	"phone": phone,
-							// }
-							// ck, _ := l.GetCookie("SESSIONID")
-							// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
 
 
-							if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-								Appid: "10000",
-								Phone: phone,
-							}, *config.Middleground); !ok {
-								log.Println("usercenter add error", userid, phone)
-							}
-						}(_id)
 						jy.ClearPhoneIdentSession(l.Session())
 						jy.ClearPhoneIdentSession(l.Session())
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 						returnSign = afterLogin(data, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 						addr, _ := config.Sysconfig["nsq"].(string)
 						addr, _ := config.Sysconfig["nsq"].(string)
@@ -645,8 +640,6 @@ func (l *Login) WxLogin() {
 			})
 			})
 			func(userid string) {
 			func(userid string) {
 				// //用户中台同步
 				// //用户中台同步
-				// ck, _ := l.GetCookie("SESSIONID")
-				// usercenter.UpdateBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), BsonIdToSId((*user)["_id"]), ck)
 				if uinfo := jy.GetInfoForBaseUser(mongodb, userid); uinfo != nil {
 				if uinfo := jy.GetInfoForBaseUser(mongodb, userid); uinfo != nil {
 					jy.UpdateUser(mongodb, userid, *uinfo, *config.Middleground)
 					jy.UpdateUser(mongodb, userid, *uinfo, *config.Middleground)
 				}
 				}
@@ -686,29 +679,21 @@ func (l *Login) WxLogin() {
 				newUser["s_email"] = email
 				newUser["s_email"] = email
 			}
 			}
 			newUser["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent")) //用户注册终端 ios 安卓 pc
 			newUser["s_regsource"] = isAndroidOrIOS(l.Header("User-Agent")) //用户注册终端 ios 安卓 pc
+			nickname := qutil.ObjToString(qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname))
+			if resp := config.Middleground.UserCenter.UserAdd(pb.UserAddReq{
+				Appid:    "10000",
+				Nickname: nickname,
+				Headimg:  u.HeadImageUrl,
+				AOpenid:  u.OpenId,
+				Unionid:  u.UnionId,
+			}); resp != nil && resp.Data.Id > 0 {
+				newUser["base_user_id"] = resp.Data.Id
+			} else {
+				log.Println(u.UnionId, "调用usercenter失败")
+				return 0
+			}
+
 			if _id := mongodb.Save("user", newUser); _id != "" {
 			if _id := mongodb.Save("user", newUser); _id != "" {
-				//用户中台同步
-				func(userid string) {
-					// formdata := map[string]interface{}{
-					// 	"appid":    "10000",
-					// 	"nickname": qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname),
-					// 	"headimg":  u.HeadImageUrl,
-					// 	"a_openid": u.OpenId,
-					// 	"unionid":  u.UnionId,
-					// }
-					// ck, _ := l.GetCookie("SESSIONID")
-					// usercenter.AddBaseUser(mongodb, qutil.ObjToString(config.Sysconfig["userCenterApi"]), userid, formdata, ck)
-					nickname := qutil.ObjToString(qutil.If(u.Nickname == "", newUser["s_jyname"], u.Nickname))
-					if ok := jy.AddUser(mongodb, userid, pb.UserAddReq{
-						Appid:    "10000",
-						Nickname: nickname,
-						Headimg:  u.HeadImageUrl,
-						AOpenid:  u.OpenId,
-						Unionid:  u.UnionId,
-					}, *config.Middleground); !ok {
-						log.Println("usercenter add error", userid)
-					}
-				}(_id)
 				returnSign = afterLogin(newUser, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 				returnSign = afterLogin(newUser, l.Session(), rid, oid, phoneType, channel, deviceId, true, l.ResponseWriter)
 				if disWord != "" {
 				if disWord != "" {
 					redisDis := redis.GetStr("other", "DIS_"+disWord[1:])
 					redisDis := redis.GetStr("other", "DIS_"+disWord[1:])

+ 7 - 6
src/jfw/modules/app/src/app/front/tags.go

@@ -1,10 +1,6 @@
 package front
 package front
 
 
 import (
 import (
-	qu "app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
-	"app.yhyue.com/moapp/jybase/redis"
-	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
 	"jy/src/jfw/modules/app/src/app/jyutil"
 	"jy/src/jfw/modules/app/src/app/jyutil"
@@ -13,6 +9,11 @@ import (
 	"regexp"
 	"regexp"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
+
+	qu "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/bidsearch"
 )
 )
 
 
 var (
 var (
@@ -303,8 +304,8 @@ onceAgain:
 		if biddingInfo.PageNum == (biddingInfo.Total-1)/biddingInfo.PageSize+1 {
 		if biddingInfo.PageNum == (biddingInfo.Total-1)/biddingInfo.PageSize+1 {
 			nextPage = ""
 			nextPage = ""
 		}
 		}
-		tg.T["prevPage"] = qu.If(prevPage != "", fmt.Sprintf("/tags/%s/%s.html", types, prevPage), "").(string)
-		tg.T["nextPage"] = qu.If(nextPage != "", fmt.Sprintf("/tags/%s/%s.html", types, nextPage), "").(string)
+		tg.T["prevPage"] = qu.If(prevPage != "", fmt.Sprintf("/%s/%s/%s.html", first, types, prevPage), "").(string)
+		tg.T["nextPage"] = qu.If(nextPage != "", fmt.Sprintf("/%s/%s/%s.html", first, types, nextPage), "").(string)
 		tg.T["totalPage"] = (biddingInfo.Total-1)/biddingInfo.PageSize + 1
 		tg.T["totalPage"] = (biddingInfo.Total-1)/biddingInfo.PageSize + 1
 		tg.T["pageNum"] = biddingInfo.PageNum
 		tg.T["pageNum"] = biddingInfo.PageNum
 		tg.T["hotArea"] = jyutil.HotAreas
 		tg.T["hotArea"] = jyutil.HotAreas

+ 7 - 3
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/analysis_result.css

@@ -3,10 +3,14 @@
   justify-content: center;
   justify-content: center;
   align-items: center;
   align-items: center;
   width: 100%;
   width: 100%;
-  height: .88rem;
-  background: #EAF8FA;
-  color: #2ABED1;
+  /* height: .88rem; */
+  background: #FFF4E8;
+  color: #FF9F40;
   font-size: .26rem;
   font-size: .26rem;
+  line-height: 0.4rem;
+  box-sizing: border-box;
+  padding: 0.14rem 0.32rem;
+  text-align: center;
 }
 }
 #analysis-result .bid_forcast_com{
 #analysis-result .bid_forcast_com{
   padding-top: .24rem;
   padding-top: .24rem;

二进制
src/jfw/modules/app/src/web/staticres/jyapp/big-member/image/noData.png


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

@@ -145,6 +145,20 @@
             font-size: .2rem;
             font-size: .2rem;
             color: #2ABED1;
             color: #2ABED1;
         }
         }
+        #ai-search .head-tip{
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          width: 100%;
+          /* height: .88rem; */
+          background: #FFF4E8;
+          color: #FF9F40;
+          font-size: .26rem;
+          line-height: 0.4rem;
+          box-sizing: border-box;
+          padding: 0.14rem 0.32rem;
+          text-align: center;
+       }
     </style>
     </style>
 
 
     <!--head内避免script加载-->
     <!--head内避免script加载-->
@@ -155,6 +169,7 @@
     <div class="j-main search-main" id="ai-search" v-cloak>
     <div class="j-main search-main" id="ai-search" v-cloak>
         <div style="display: flex;flex-direction: column;justify-content: space-between;overflow: hidden;">
         <div style="display: flex;flex-direction: column;justify-content: space-between;overflow: hidden;">
             <div class="top">
             <div class="top">
+                <div class="head-tip">请按提示输入需要预测的项目名称、采购内容条件等,大数据会预测潜在投标企业名录及中标率分析。</div>
                 <div class="balance">
                 <div class="balance">
                     <div class="balance-remind">您的AI中标预测次数余额:<span class="balance-count">${surplus}</span></div>
                     <div class="balance-remind">您的AI中标预测次数余额:<span class="balance-count">${surplus}</span></div>
                     <div class="go-recharge" v-if="!isSubCount && isBigMember">
                     <div class="go-recharge" v-if="!isSubCount && isBigMember">

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

@@ -30,7 +30,7 @@
             <img class="working" src="/jyapp/big-member/image/working.gif" alt="">
             <img class="working" src="/jyapp/big-member/image/working.gif" alt="">
         </div> -->
         </div> -->
         <div>
         <div>
-          <div class="head-tip">分析同类项目,优化投标分析流程,提高企业投标决策效率</div>
+          <div class="head-tip">请按提示输入分析条件,系统会提供同类项目分析图表,帮助企业制定投标策略。</div>
             <!-- <div class="result-top">
             <!-- <div class="result-top">
                 <div class="project-name">${baseInfo.projectname}</div>
                 <div class="project-name">${baseInfo.projectname}</div>
                 <div class="project-date">
                 <div class="project-date">

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

@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="zh-CN">
 <html lang="zh-CN">
+
 <head>
 <head>
     <!--引入公共资源头部-->
     <!--引入公共资源头部-->
     {{include "/big-member/meta.html"}}
     {{include "/big-member/meta.html"}}
@@ -14,50 +15,62 @@
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
+    <link rel="stylesheet"
+        href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}' />
     <!--E-当前页面的css资源-->
     <!--E-当前页面的css资源-->
 
 
     <!--小于100行的样式插入html而不是css,有助于减少请求数-->
     <!--小于100行的样式插入html而不是css,有助于减少请求数-->
     <style>
     <style>
-        .forecast-list{
+        .forecast-list {
             background: #fff;
             background: #fff;
         }
         }
-        .steps{
+
+        .steps {
             display: flex;
             display: flex;
             flex-direction: column;
             flex-direction: column;
             overflow: hidden;
             overflow: hidden;
         }
         }
-        .van-steps{
+
+        .van-steps {
             flex: 1;
             flex: 1;
             overflow-y: scroll;
             overflow-y: scroll;
         }
         }
-        .van-steps--vertical{
+
+        .van-steps--vertical {
             padding: .2rem 0 0 .8rem;
             padding: .2rem 0 0 .8rem;
         }
         }
-        .van-step--vertical{
+
+        .van-step--vertical {
             padding: .2rem .32rem .4rem 0;
             padding: .2rem .32rem .4rem 0;
         }
         }
-        .van-step__circle{
+
+        .van-step__circle {
             background-color: #2ABED1;
             background-color: #2ABED1;
         }
         }
-        .van-step__line{
+
+        .van-step__line {
             background-color: #2ABED1;
             background-color: #2ABED1;
         }
         }
-        .van-icon-checked::before{
+
+        .van-icon-checked::before {
             content: '';
             content: '';
             width: 5px;
             width: 5px;
             height: 5px;
             height: 5px;
             background: #2ABED1;
             background: #2ABED1;
             border-radius: 50%;
             border-radius: 50%;
         }
         }
-        .van-step__title.van-step__title--active{
+
+        .van-step__title.van-step__title--active {
             color: #171826;
             color: #171826;
         }
         }
-        .van-step--vertical:first-child::before{
+
+        .van-step--vertical:first-child::before {
             background-color: rgb(42, 190, 209);
             background-color: rgb(42, 190, 209);
             height: 100%;
             height: 100%;
             top: -10px;
             top: -10px;
         }
         }
-        .van-step--vertical:last-child::before{
+
+        .van-step--vertical:last-child::before {
             position: absolute;
             position: absolute;
             left: -15px;
             left: -15px;
             top: 20px;
             top: 20px;
@@ -67,27 +80,32 @@
             z-index: 1;
             z-index: 1;
             background-color: rgb(42, 190, 209);
             background-color: rgb(42, 190, 209);
         }
         }
-        .van-step--vertical:not(:last-child)::after{
+
+        .van-step--vertical:not(:last-child)::after {
             border: 0;
             border: 0;
         }
         }
-        .push-time{
+
+        .push-time {
             display: flex;
             display: flex;
             align-items: center;
             align-items: center;
             color: #5F5E64;
             color: #5F5E64;
             line-height: .3rem;
             line-height: .3rem;
         }
         }
-        .icon-push-time{
+
+        .icon-push-time {
             width: .4rem;
             width: .4rem;
             height: .4rem;
             height: .4rem;
             margin-right: .16rem;
             margin-right: .16rem;
         }
         }
-        .custom-title{
+
+        .custom-title {
             color: #9B9CA3;
             color: #9B9CA3;
             font-size: .24rem;
             font-size: .24rem;
             line-height: .36rem;
             line-height: .36rem;
             margin-top: 8px;
             margin-top: 8px;
         }
         }
-        .custom-info{
+
+        .custom-info {
             display: block;
             display: block;
             color: #171826;
             color: #171826;
             font-size: .28rem;
             font-size: .28rem;
@@ -97,27 +115,33 @@
             -webkit-line-clamp: 2;
             -webkit-line-clamp: 2;
             overflow: hidden;
             overflow: hidden;
         }
         }
-        .empty{
+
+        .empty {
             display: flex;
             display: flex;
             flex-direction: column;
             flex-direction: column;
             align-items: center;
             align-items: center;
-            padding-top: 1.6rem;
+            padding-top: 0.8rem;
         }
         }
-        .empty-img{
-            width: 3.2rem;
-            height: 3.2rem;
+
+        .empty-img.noData {
+            width: 4rem;
+            height: 4rem;
+            padding: 0;
+            margin-bottom: 0;
         }
         }
-        .empty-tip{
-            margin-top: .24rem;
+
+        .empty-tip {
+            /* margin-top: .24rem; */
             font-size: .26rem;
             font-size: .26rem;
             line-height: .4rem;
             line-height: .4rem;
             color: #9B9CA3;
             color: #9B9CA3;
         }
         }
-        .link-btn{
+
+        .link-btn {
             display: inline-block;
             display: inline-block;
             width: 3.3rem;
             width: 3.3rem;
             height: .8rem;
             height: .8rem;
-            margin-top: .96rem;
+            margin-top: 0.42rem;
             line-height: .8rem;
             line-height: .8rem;
             border: 1px solid #2ABED1;
             border: 1px solid #2ABED1;
             border-radius: 4px;
             border-radius: 4px;
@@ -126,14 +150,16 @@
             text-align: center;
             text-align: center;
             box-sizing: border-box;
             box-sizing: border-box;
         }
         }
-        .red-tips{
+
+        .red-tips {
             display: flex;
             display: flex;
             align-items: center;
             align-items: center;
             justify-content: space-between;
             justify-content: space-between;
             padding: .14rem .32rem;
             padding: .14rem .32rem;
             background: #FEE9E8;
             background: #FEE9E8;
         }
         }
-        .red-span{
+
+        .red-span {
             flex: 1;
             flex: 1;
             display: inline-block;
             display: inline-block;
             margin-right: .6rem;
             margin-right: .6rem;
@@ -141,7 +167,8 @@
             line-height: .4rem;
             line-height: .4rem;
             color: #FB483D;
             color: #FB483D;
         }
         }
-        .red-a{
+
+        .red-a {
             display: inline-block;
             display: inline-block;
             width: 1.44rem;
             width: 1.44rem;
             height: .64rem;
             height: .64rem;
@@ -153,212 +180,421 @@
             color: #FB483D;
             color: #FB483D;
             font-size: .26rem;
             font-size: .26rem;
         }
         }
-        .van-list__loading{
+
+        .van-list__loading {
             margin-left: -0.8rem;
             margin-left: -0.8rem;
         }
         }
+
+        #forecast-list .head-tip {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            width: 100%;
+            /* height: .88rem; */
+            background: #FFF4E8;
+            color: #FF9F40;
+            font-size: .26rem;
+            line-height: 0.4rem;
+            box-sizing: border-box;
+            padding: 0.14rem 0.32rem;
+            text-align: center;
+        }
+
+        .timebox.collection {
+            /* display: flex; */
+        }
+
+        .timebox.collection .cell-title {
+            color: #171826;
+            font-size: 0.28rem;
+            box-sizing: border-box;
+            padding-top: 0.5rem;
+            padding-left: 0.32rem;
+            /* line-height: 0.48rem; */
+            float: left;
+        }
+
+        .analysis-tab.van-tabs.van-tabs--line {
+            border-bottom: 1px solid #0000000D;
+            padding-bottom: 0.08rem;
+        }
+
+        .collection .dateTags .customTime {
+            display: none;
+        }
+
+        .timebox.collection .timeTag {
+            padding: 0.32rem 0 0.3rem 0;
+        }
+
+        .timebox.collection .timeTag .area-card-item {
+            margin: 0 0.16rem 0 0;
+            font-size: 0.26rem;
+            min-width: 1.18rem;
+            box-sizing: border-box;
+            padding: 0.12rem 0.2rem;
+            height: auto;
+            line-height: 0.4rem;
+        }
+
+        .timebox.collection .timePicker .van-cell.van-field {
+            width: 2.4rem;
+            height: 0.64rem;
+            box-sizing: border-box;
+            padding: 0.12rem 0.26rem;
+        }
+
+        .timebox.collection .timePicker.clickactive .van-cell.van-field {
+            border-color: #2abed1;
+        }
+
+        .timebox.collection .timePicker.clickactive {
+            background-color: inherit;
+        }
+
+        .timebox.collection .dateTags .van-field__control {
+            font-size: 0.24rem;
+        }
+
+        .timebox.collection .timePicker {
+            padding: 0 0 0.3rem 0;
+            height: auto;
+            min-width: 5.36rem;
+            position: relative;
+            left: -1.2rem
+        }
+
+        .timebox.collection .timeTag .area-card-item.active::after {
+            display: none;
+        }
+
+        .timebox.collection .timePicker.clickactive::after {
+            display: none;
+        }
+
+        .timebox.collection .j-footer {
+            display: none;
+        }
+
+        .timebox.collection .dateTags {
+            height: unset;
+            padding: 0 0 0 0.32rem;
+            overflow: visible;
+            display: block;
+        }
     </style>
     </style>
 
 
     <!--head内避免script加载-->
     <!--head内避免script加载-->
 </head>
 </head>
+
 <body>
 <body>
-<div class="j-container">
-    {{include "/big-member/header.html"}}
-    <div class="j-main forecast-list" id="forecast-list" v-cloak>
-        <div class="steps"  v-if="list.length && list.length > 0" >
-            <van-steps direction="vertical" :active="0">
-                <van-list
-                    v-model="loading"
-                    :finished="finished"
-                    :immediate-check="false"
-                    finished-text="没有更多了"
-                    @load="onLoad"
-                    :offset="50"
-                >
-                    <van-step v-for="item in list" :key="item.id">
-                        <div class="push-time" @click="goDetail(item)">
-                            <span class="j-icon icon-push-time"></span>
-                            <span>${item.createtime}</span>
-                        </div>
-                        <div @click="goDetail(item)" v-if="item.buyer">
-                            <p class="custom-title">采购单位</p>
-                            <a href="javascript:;" class="custom-info">${item.buyer}</a>
-                        </div>
-                        <div @click="goDetail(item)">
-                            <p class="custom-title">预测线索</p>
-                            <a href="javascript:;" class="custom-info">${item.title}</a>
-                        </div>
-                        <div @click="goDetail(item)">
-                            <p class="custom-title">预测采购内容</p>
-                            <a href="javascript:;" class="custom-info">
-                                <span v-if="item.purchasing">${item.purchasing.join('、')}</span>
-                            </a>
-                        </div>
-                    </van-step>
-                </van-list>
-            </van-steps>
-            <div v-show="set.hasListNotKey">
-                <div class="red-tips">
-                    <span class="red-span">检测到您暂无设置订阅关键词,后续将无法进行预测</span>
-                    <a class="red-a" href="./bigVip_detail">去设置</a>
+    <div class="j-container">
+        {{include "/big-member/header.html"}}
+        <div class="j-main forecast-list" id="forecast-list" v-cloak>
+            <div class="headbox">
+                <div class="head-tip">潜在项目预测基于用户订阅设置,初次使用请到订阅设置页面,完善业务关键词等信息。</div>
+                <van-tabs class="analysis-tab" :title-active-color="tabConf.titleActiveColor"
+                    :title-inactive-color="tabConf.titleInactiveColor" :line-width="tabConf.lineWidth"
+                    :color="tabConf.color" @change="tabChange" v-model="tabActiveName">
+                    <van-tab v-for="(tab, index) in tabList" :key="index" :title="tab.label" :name="tab.name"></van-tab>
+                </van-tabs>
+                <div class="timebox collection" v-show = "tabActiveName == 'fwl'">
+                    <div class="cell-title">合同到期时间</div>
+                    <date-component ref="dateSelector" popup-container="body" :diy="true" :times="timeOptions"
+                        @confirm="confirm"></date-component>
                 </div>
                 </div>
             </div>
             </div>
-        </div>
-        <div class="empty" v-else>
-            <img class="empty-img" src="/jyapp/big-member/image/img-empty.png" alt="" />
-            <div v-show="set.notKey" style="text-align: center;">
-                <p class="empty-tip">暂无设置订阅关键词,无法进行预测</p>
-                <a class="link-btn" @click="goSetting" href="javascript:;" v-show="isSubCount">去设置</a>
+            <div class="steps" v-if="list.length && list.length > 0">
+                <van-steps direction="vertical" :active="0">
+                    <van-list v-model="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了"
+                        @load="onLoad" :offset="50">
+                        <van-step v-for="item in list" :key="item.id">
+                            <div class="push-time" @click="goDetail(item)">
+                                <span class="j-icon icon-push-time"></span>
+                                <span>${item.createtime}</span>
+                            </div>
+                            <div @click="goDetail(item)" v-if="item.buyer">
+                                <p class="custom-title">采购单位</p>
+                                <a href="javascript:;" class="custom-info">${item.buyer}</a>
+                            </div>
+                            <div @click="goDetail(item)">
+                                <p class="custom-title">预测线索</p>
+                                <a href="javascript:;" class="custom-info">${item.title}</a>
+                            </div>
+                            <div @click="goDetail(item)">
+                                <p class="custom-title">预测采购内容</p>
+                                <a href="javascript:;" class="custom-info">
+                                    <span v-if="item.purchasing">${item.purchasing.join('、')}</span>
+                                </a>
+                            </div>
+                             <div v-show = "tabActiveName == 'fwl'">
+                                <p class="custom-title">合同到期时间:${item.yuceendtime}</p>
+                            </div>
+                        </van-step>
+                    </van-list>
+                </van-steps>
+                <div v-show="set.hasListNotKey">
+                    <div class="red-tips">
+                        <span class="red-span">检测到您暂无设置订阅关键词,后续将无法进行预测</span>
+                        <a class="red-a" href="./bigVip_detail">去设置</a>
+                    </div>
+                </div>
             </div>
             </div>
-            <div v-show="set.notList">
-                <p class="empty-tip">暂未预测出潜在项目</p>
+            <div class="empty" v-else>
+                <img class="empty-img noData" src="/jyapp/big-member/image/noData.png" alt="" />
+                <div v-show="set.notKey" style="text-align: center;">
+                    <p class="empty-tip">暂无设置订阅关键词,无法进行预测</p>
+                    <a class="link-btn" @click="goSetting" href="javascript:;" v-show="isSubCount">去设置</a>
+                </div>
+                <div v-show="set.notList">
+                    <p class="empty-tip">暂未预测出潜在项目</p>
+                </div>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
-</div>
-
-<!--S-必定需要预加载的资源-->
-<link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js />
-<link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js />
-<link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js />
-<!--E-必定需要预加载的资源-->
-
-<!--S-有可能需要提前预加载的资源-->
-<!--E-有可能需要提前预加载的资源-->
-
-<!--S-当前页面的资源-->
-<script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
-<script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
-<script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
-<!--E-当前页面的资源-->
-{{include "/big-member/commonjs.html"}}
-<!--小于100行同css,减少请求数-->
-<script>
-    var vNode = {
-        delimiters: ['${', '}'],
-        el: '#forecast-list',
-        data: {
-            isSet: true,
-            scrollTop:0,
-            set:{
-                hasListNotKey:false,
-                notList:false,
-                notKey:false,
-            },
-            list: [],
-            page: 1,
-            loading: false,
-            finished: false,
-            isSubCount:true,
-        },
-        created () {
-            var pData = JSON.parse(sessionStorage.getItem('$data-forecast_list'))
-            if (pData) {
-                this.isSet = pData.isSet;
-                this.scrollTop = pData.scrollTop;
-                this.set = pData.set;
-                this.list = pData.list;
-                this.page = pData.page;
-                this.loading = pData.loading;
-                this.finished = pData.finished;
-                this.isSubCount = pData.isSubCount;
-            } else {
-                this.getList()
-            }
 
 
-        },
-        mounted() {
-            sessionStorage.removeItem('forecast_keys')
-            var _this = this;
-            if(_this.scrollTop != 0) {
-                setTimeout(function(){
-                    $('.van-steps').scrollTop(_this.scrollTop)
-                    console.log($('.van-steps').scrollTop())
-                    sessionStorage.removeItem('$data-forecast_list')
-                },50)
-            }
-        },
-        methods: {
-            onLoad: function(){
-                var that = this;
-                setTimeout(function() {
-                    // that.loading = true;
-                    that.getList();
-                },500)
+    <!--S-必定需要预加载的资源-->
+    <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js />
+    <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js />
+    <link rel="preload" as="script" href=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js />
+    <!--E-必定需要预加载的资源-->
+
+    <!--S-有可能需要提前预加载的资源-->
+    <!--E-有可能需要提前预加载的资源-->
+
+    <!--S-当前页面的资源-->
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
+    <script
+        src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/date-mobile.js?v={{Msg "seo" "version"}}'></script>
+    <!--E-当前页面的资源-->
+    {{include "/big-member/commonjs.html"}}
+    <!--小于100行同css,减少请求数-->
+    <script>
+        var vNode = {
+            delimiters: ['${', '}'],
+            el: '#forecast-list',
+            components: {
+                dateComponent: dateComponent,
             },
             },
-            getList:function(){
-                var that = this;
-                $.ajax({
-                    type:'POST',
-                    url:'/bigmember/forecast/forPList?t=' + new Date().getTime(),
-                    data:{
-                        pageNum: that.page
+            data: {
+                isSet: true,
+                scrollTop: 0,
+                set: {
+                    hasListNotKey: false,
+                    notList: false,
+                    notKey: false,
+                },
+                list: [],
+                page: 1,
+                loading: false,
+                finished: false,
+                isSubCount: true,
+                tabList: [
+                    {
+                        label: '服务类项目',
+                        name: 'fwl'
+                    },
+                    {
+                        label: '拟建项目',
+                        name: 'nj'
+                    }
+                ],
+                tabConf: {
+                    titleActiveColor: '#2ABED1',
+                    titleInactiveColor: '#5F5E64',
+                    lineWidth: '24',
+                    color: '#2ABED1'
+                },
+                tabActiveName: 'fwl',
+                timeOptions: [
+                    {
+                        name: '全部',
+                        value: 'all',
+                        selected: true
+                    },
+                    {
+                        name: '最近3个月',
+                        value: 'lately90',
+                        selected: false
                     },
                     },
-                    success:function(res) {
-                        console.log(res)
-                        if(res.error_code == 0) {
-                            that.isSubCount = !res.data.isSubCount
-                            if(res.data.code === 1 && !res.data.list) {
-                                // 暂无设置订阅关键词,无法进行预测
-                                that.set.notKey = true;
-                            } else if(res.data.code === 2) {
-                                // 您设置的订阅关键词无法进行预测
-                                that.set.notList = true
-                            } else if(res.data.code === 1 && res.data.list.length && res.data.list.length > 0){
-                                that.set.hasListNotKey = true;
-                            }
 
 
-                            if(res.data.list) {
-                                that.loading = false;
-                                res.data.list.forEach(function(v,i){
-                                    if (v.createtime) {
-                                      v.createtime = new Date(Number(v.createtime + '000')).pattern('yyyy/MM/dd')
+                ],
+                startTime: '',
+                endTime: '',
+                dataType: 'fwl',
+                exact : 'all'
+            },
+            created() {
+                let that = this
+                var pData = JSON.parse(sessionStorage.getItem('$data-forecast_list'))
+                if (pData) {
+                    this.isSet = pData.isSet;
+                    this.scrollTop = pData.scrollTop;
+                    this.set = pData.set;
+                    this.list = pData.list;
+                    this.page = pData.page;
+                    this.loading = pData.loading;
+                    this.finished = pData.finished;
+                    this.isSubCount = pData.isSubCount;
+                    this.dataType = pData.dataType
+                    this.tabActiveName = pData.tabActiveName
+                    this.startTime = pData.startTime
+                    this.endTime = pData.endTime
+                    this.$nextTick(function(){
+                        if(that.exact){
+                            that.$refs.dateSelector.setState({exact:that.exact})
+                        }else{
+                            that.$refs.dateSelector.setState({startDate:parseInt(that.startTime*1000),endDate:parseInt(that.endTime*1000),exact:'exact'})
+                        }
+                    })
+                    
+                } else {
+                    this.getList()
+                }
+            },
+            mounted() {
+                sessionStorage.removeItem('forecast_keys')
+                var _this = this;
+                if (_this.scrollTop != 0) {
+                    setTimeout(function () {
+                        $('.van-steps').scrollTop(_this.scrollTop)
+                        console.log($('.van-steps').scrollTop())
+                        sessionStorage.removeItem('$data-forecast_list')
+                    }, 50)
+                }
+            },
+            methods: {
+                onLoad: function () {
+                    var that = this;
+                    setTimeout(function () {
+                        // that.loading = true;
+                        that.getList();
+                    }, 500)
+                },
+                getList: function () {
+                    var that = this;
+                    $.ajax({
+                        type: 'POST',
+                        url: '/bigmember/forecast/forPList?t=' + new Date().getTime(),
+                        data: {
+                            pageNum: that.page, dataType: that.dataType, startTime: that.startTime, endTime: that.endTime
+                        },
+                        success: function (res) {
+                            console.log(res)
+                            if (res.error_code == 0) {
+                                that.isSubCount = !res.data.isSubCount
+                                if (res.data.code === 1 && (!res.data.list || res.data.list.length == 0)) {
+                                    // 暂无设置订阅关键词,无法进行预测
+                                    that.set.notKey = true;
+                                } else if (res.data.code === 2) {
+                                    // 您设置的订阅关键词无法进行预测
+                                    that.set.notList = true
+                                } else if (res.data.code === 1 && res.data.list.length && res.data.list.length > 0) {
+                                    that.set.hasListNotKey = true;
+                                }
+
+                                if (res.data.list) {
+                                    that.loading = false;
+                                    res.data.list.forEach(function (v, i) {
+                                        if (v.createtime) {
+                                            v.createtime = new Date(Number(v.createtime + '000')).pattern('yyyy/MM/dd')
+                                        }
+                                        if(v.yuceendtime){
+                                            v.yuceendtime = new Date(Number(v.yuceendtime + '000')).pattern('yyyy/MM/dd')
+                                        }
+                                    })
+                                    that.list = that.list.concat(res.data.list);
+                                    that.page++;
+                                    if ($.isArray(res.data.list) && res.data.list.length != 0) {
+                                        console.log('有数据')
+                                    } else {
+                                        console.log('没有数据了')
+                                        that.finished = true
+                                        that.loading = false
                                     }
                                     }
-                                })
-                                that.list = that.list.concat(res.data.list);
-                                that.page++;
-                                if ($.isArray(res.data.list) && res.data.list.length != 0) {
-                                    console.log('有数据')
                                 } else {
                                 } else {
-                                    console.log('没有数据了')
-                                    that.finished = true
-                                    that.loading = false
+                                    that.finished = true;
+                                    that.loading = false;
                                 }
                                 }
                             } else {
                             } else {
-                                that.finished = true;
-                                that.loading = false;
+                                that.$toast(res.error_msg)
                             }
                             }
-                        }else{
-                            that.$toast(res.error_msg)
+                        },
+                        error: function (err) {
+                            console.log(err)
                         }
                         }
-                    },
-                    error:function(err) {
-                        console.log(err)
-                    }
-                })
-            },
-            // 去设置
-            goSetting: function() {
-                location.href = './bigVip_detail'
-            },
-            // 去详情
-            goDetail: function(item) {
-                // console.log(item)
-                var arr = [];
-                item.purchasing.forEach(function(v){
-                    if(v){
-                        arr.push(v.toString())
-                    }
-                })
-                console.log(arr)
-                this.scrollTop = $('.van-steps').scrollTop();
-                sessionStorage.setItem('$data-forecast_list', JSON.stringify(this.$data))
-                sessionStorage.setItem('forecast_keys',arr.toString())
-                location.href = './forecast_detail?id=' + item.id + '&keys=' + encodeURIComponent(arr.toString())
+                    })
+                },
+                // 去设置
+                goSetting: function () {
+                    location.href = './bigVip_detail'
+                },
+                // 去详情
+                goDetail: function (item) {
+                    // console.log(item)
+                    var arr = [];
+                    item.purchasing.forEach(function (v) {
+                        if (v) {
+                            arr.push(v.toString())
+                        }
+                    })
+                    console.log(arr)
+                    this.scrollTop = $('.van-steps').scrollTop();
+                    sessionStorage.setItem('$data-forecast_list', JSON.stringify(this.$data))
+                    sessionStorage.setItem('forecast_keys', arr.toString())
+                    location.href = './forecast_detail?id=' + item.id + '&keys=' + encodeURIComponent(arr.toString())
+                },
+                tabChange(val) {
+                    this.$refs.dateSelector.setState({
+                        exact: 'all'
+                    })
+                    this.$refs.dateSelector.resetAll()
+                    this.startTime = ''
+                    this.endTime = ''
+                    this.dataType = val
+                    this.list= [],
+                    this.page = 1,
+                    this.finished = false,
+                    this.getList()
+                },
+                confirm(val) {
+                    console.log(val)
+
+                }
             }
             }
         }
         }
-    }
-    var forecastList =new Vue(vNode)
-</script>
+        var forecastList = new Vue(vNode)
+        window.$tagsChange = function () {
+            forecastList.$refs.dateSelector.dateStyle = false
+            forecastList.$refs.dateSelector.clearDateTimePicker()
+        }
+        window.$chooseData = function (data) {
+            if (data.result) {
+                if (data.result.start == 0 && data.result.end == 0) {
+                    forecastList.startTime = ''
+                    forecastList.endTime = ''
+
+                } else {
+                    forecastList.startTime = parseInt(data.result.start / 1000)
+                    forecastList.endTime = parseInt(data.result.end / 1000)
+
+                }
+                if(data.exact){
+                    forecastList.exact = data.exact
+                    
+                }else{
+                    forecastList.exact = null
+                }
+                forecastList.list = []
+                forecastList.page = 1
+                forecastList.finished = false,
+                forecastList.getList()
+            }
+        }
+    </script>
 
 
 </body>
 </body>
-</html>
+
+</html>

+ 3 - 2
src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html

@@ -131,7 +131,7 @@
             <div class="j-main">
             <div class="j-main">
               <div class="emptycom">
               <div class="emptycom">
                 <div class="emptyimg">
                 <div class="emptyimg">
-                  <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+                  <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
                 </div>
                 </div>
                 <div class="emptytext">
                 <div class="emptytext">
                   暂无数据
                   暂无数据
@@ -145,11 +145,12 @@
         <div class="j-main">
         <div class="j-main">
           <div class="emptycom">
           <div class="emptycom">
             <div class="emptyimg">
             <div class="emptyimg">
-              <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+              <img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
             </div>
             </div>
             <div class="emptytext">
             <div class="emptytext">
               您还没有收藏标讯
               您还没有收藏标讯
             </div>
             </div>
+            <div class="empty-btn" @click="location.href='/jy_mobile/search/middle/bidding'">前往收藏</div>
           </div>
           </div>
         </div>
         </div>
       </div>
       </div>

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

@@ -479,6 +479,8 @@
 								}
 								}
 								$('.rules').hide()
 								$('.rules').hide()
 								loginSuccess(r);
 								loginSuccess(r);
+							}else if (r.status==-4){
+								showTip("系统错误,请重试",1000);
 							}else{
 							}else{
 								showTip("验证码错误",1000);
 								showTip("验证码错误",1000);
 							}
 							}

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

@@ -4,6 +4,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
     <meta name="keywords" content="{{.T.obj.keywords}}">
     <meta name="keywords" content="{{.T.obj.keywords}}">
     <meta name="description" content="{{.T.obj.description}}">
     <meta name="description" content="{{.T.obj.description}}">
+    <meta name="referrer" content="never">
     <title>{{.T.obj.title}} - 剑鱼标讯</title>
     <title>{{.T.obj.title}} - 剑鱼标讯</title>
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/alertPopShow.css?v={{Msg "seo" "version"}}" rel="stylesheet">
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/alertPopShow.css?v={{Msg "seo" "version"}}" rel="stylesheet">
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/bootstrap.min.css?v={{Msg "seo" "version"}}" rel="stylesheet">
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/bootstrap.min.css?v={{Msg "seo" "version"}}" rel="stylesheet">
@@ -165,7 +166,8 @@
       }
       }
       #h_content table tr td,.h_content table th{
       #h_content table tr td,.h_content table th{
         border: 1px solid #EBEBEB;
         border: 1px solid #EBEBEB;
-        text-align: center;
+        /* text-align: center; */
+        padding: 2px 4px;
       }
       }
       .app-layout-content-b .bm-bottom{
       .app-layout-content-b .bm-bottom{
         display: flex;
         display: flex;
@@ -864,7 +866,7 @@
             </div>
             </div>
             <!--E 登录引导置底 E-->
             <!--E 登录引导置底 E-->
             <div class="abs">
             <div class="abs">
-                <div onclick="advDownApp(this)" class="original_name"><a class="original hidden">阅读原文</a></div>
+                <div onclick="advDownApp(this)" class="original_name"><a class="original hidden" rel="no-referrer">阅读原文</a></div>
                 {{if .T.obj.hasSession}}
                 {{if .T.obj.hasSession}}
                     <a class="feedback" href="/jyapp/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
                     <a class="feedback" href="/jyapp/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
                 {{end}}
                 {{end}}

+ 58 - 38
src/jfw/modules/bigmember/src/service/analysis/forecastproject.go

@@ -32,24 +32,39 @@ const (
 	bidSearch_field = ``
 	bidSearch_field = ``
 
 
 	forecastQuery            = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match":1}}}`
 	forecastQuery            = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match":1}}}`
-	filter_must_time         = `{"bool":{"should":[{"bool":{"must":[{"range":{"yucetime":{"gte":%d}}}],"must_not":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}}]}},{"bool":{"must":[{"constant_score":{"filter":{"exists":{"field":"yuceendtime"}}}},{"range":{"yuceendtime":{"gte":%d}}}]}}]}}`
+	filter_must_time         = `{"bool":{"%s":[{"exists":{"field":"top_category"}}]}},{"bool":{"should":[{"bool":{"must":[%s]}}]}}`
 	filter_must_area_city    = `{"bool":{"should":[%s]}}`
 	filter_must_area_city    = `{"bool":{"should":[%s]}}`
 	query_should_keys        = `{"bool":{"must":[%s],"must_not":[%s]}}`
 	query_should_keys        = `{"bool":{"must":[%s],"must_not":[%s]}}`
-	query_should_multi_match = `{"multi_match":{"query":"%s","type":"phrase","fields":["results.purchasing.mypurchasing"]}}`
+	query_should_multi_match = `{"multi_match":{"query":"%s","type":"phrase","fields":["%s"]}}`
 )
 )
 
 
-/**
+/*
+*
 @author:王山
 @author:王山
 @descript:中标项目预测
 @descript:中标项目预测
 @date:2022-03-08
 @date:2022-03-08
 @demand:
 @demand:
+
 	有yuceendtime字段,按照yuceendtime大于当前时间||无yuceendtime字段,按照yucetime字段最近三个月查询数据;
 	有yuceendtime字段,按照yuceendtime大于当前时间||无yuceendtime字段,按照yucetime字段最近三个月查询数据;
 	另有省份、城市、采购单位类型等;from 赵龙玥
 	另有省份、城市、采购单位类型等;from 赵龙玥
-**/
-func getForecastProjectSql(scd *util.ViewCondition) string {
+
+*
+*/
+func getForecastProjectSql(scd *util.ViewCondition, startTime, endTime int, dataType string) string {
 	musts := []string{}
 	musts := []string{}
 	bools := []string{}
 	bools := []string{}
-	musts = append(musts, fmt.Sprintf(filter_must_time, time.Now().AddDate(0, -3, 0).Unix(), time.Now().Unix()))
+	if endTime == 0 {
+		endTime = int(time.Now().Unix())
+	}
+	name := ""
+	mustStr := "{\"constant_score\":{\"filter\":{\"exists\":{\"field\":\"%s\"}}}},{\"range\":{\"%s\":{\"gte\":%d,\"lte\":%d}}}"
+	if dataType == "nj" {
+		name = "title"
+		musts = append(musts, fmt.Sprintf(filter_must_time, "must", fmt.Sprintf(mustStr, "yucetime", "yucetime", startTime, endTime)))
+	} else {
+		name = "results.purchasing.mypurchasing"
+		musts = append(musts, fmt.Sprintf(filter_must_time, "must_not", fmt.Sprintf(mustStr, "yuceendtime", "yuceendtime", startTime, endTime)))
+	}
 	//省份
 	//省份
 	areaCity := []string{}
 	areaCity := []string{}
 	if len(scd.Area) > 0 {
 	if len(scd.Area) > 0 {
@@ -101,16 +116,16 @@ func getForecastProjectSql(scd *util.ViewCondition) string {
 			bool_must_not := []string{}
 			bool_must_not := []string{}
 			//附加词
 			//附加词
 			for _, vv := range v.Keyword {
 			for _, vv := range v.Keyword {
-				bool_must = append(bool_must, fmt.Sprintf(multi_match, vv))
+				bool_must = append(bool_must, fmt.Sprintf(multi_match, vv, name))
 			}
 			}
 
 
 			for _, vv := range v.Appended {
 			for _, vv := range v.Appended {
-				bool_must = append(bool_must, fmt.Sprintf(multi_match, vv))
+				bool_must = append(bool_must, fmt.Sprintf(multi_match, vv, name))
 			}
 			}
 
 
 			//排除词
 			//排除词
 			for _, vv := range v.Exclude {
 			for _, vv := range v.Exclude {
-				bool_must_not = append(bool_must_not, fmt.Sprintf(multi_match, vv))
+				bool_must_not = append(bool_must_not, fmt.Sprintf(multi_match, vv, name))
 			}
 			}
 
 
 			//添加
 			//添加
@@ -231,6 +246,9 @@ func (this *Analysis) ForPList() {
 		}
 		}
 		pageNum, _ := this.GetInteger("pageNum")
 		pageNum, _ := this.GetInteger("pageNum")
 		pageSize, _ := this.GetInteger("pageSize")
 		pageSize, _ := this.GetInteger("pageSize")
+		startTime, _ := this.GetInteger("startTime")
+		endTime, _ := this.GetInteger("endTime")
+		dataType := this.GetString("dataType")
 		if pageSize == 0 {
 		if pageSize == 0 {
 			pageSize = 10
 			pageSize = 10
 		}
 		}
@@ -241,7 +259,7 @@ func (this *Analysis) ForPList() {
 			if (*o_mb)["o_member_jy"] != nil {
 			if (*o_mb)["o_member_jy"] != nil {
 				o_member_jy = qutil.ObjToMap((*o_mb)["o_member_jy"])
 				o_member_jy = qutil.ObjToMap((*o_mb)["o_member_jy"])
 				//项目预测检索库
 				//项目预测检索库
-				flist, fcount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize)
+				flist, fcount = getNewForecast(main_userId, pageNum, *o_member_jy, pageSize, startTime, endTime, dataType)
 				if pageNum == 1 {
 				if pageNum == 1 {
 					if (*o_member_jy)["a_items"] != nil {
 					if (*o_member_jy)["a_items"] != nil {
 						a_items := qutil.ObjArrToMapArr((*o_member_jy)["a_items"].([]interface{}))
 						a_items := qutil.ObjArrToMapArr((*o_member_jy)["a_items"].([]interface{}))
@@ -279,16 +297,17 @@ func (this *Analysis) ForPList() {
 }
 }
 
 
 type ForecastInfo struct {
 type ForecastInfo struct {
-	Buyer      string   `json:"buyer"`
-	Id         string   `json:"id"`
-	Purchasing []string `json:"purchasing"`
-	Title      string   `json:"title"`
-	Createtime int64    `json:"createtime"`
-	Keys       string   `json:"keys"`
-	Jyhref     string   `json:"jyhref"`
+	Buyer       string   `json:"buyer"`
+	Id          string   `json:"id"`
+	Purchasing  []string `json:"purchasing"`
+	Title       string   `json:"title"`
+	Createtime  int64    `json:"createtime"`
+	Keys        string   `json:"keys"`
+	Jyhref      string   `json:"jyhref"`
+	Yuceendtime int64    `json:"yuceendtime"`
 }
 }
 
 
-//合并去重
+// 合并去重
 func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 	var idMap = map[string]bool{}
 	var idMap = map[string]bool{}
 	var res = []*ForecastInfo{}
 	var res = []*ForecastInfo{}
@@ -298,12 +317,13 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 		for _, rv := range r {
 		for _, rv := range r {
 			idMap[qutil.ObjToString(rv["id"])] = true
 			idMap[qutil.ObjToString(rv["id"])] = true
 			res = append(res, &ForecastInfo{
 			res = append(res, &ForecastInfo{
-				Buyer:      qutil.ObjToString(rv["buyer"]),
-				Id:         util.EncodeId(qutil.ObjToString(rv["id"])),
-				Purchasing: rv["results"].([]string),
-				Title:      qutil.ObjToString(rv["title"]),
-				Createtime: qutil.Int64All(rv["createtime"]),
-				Keys:       "",
+				Buyer:       qutil.ObjToString(rv["buyer"]),
+				Id:          util.EncodeId(qutil.ObjToString(rv["id"])),
+				Purchasing:  rv["results"].([]string),
+				Title:       qutil.ObjToString(rv["title"]),
+				Createtime:  qutil.Int64All(rv["createtime"]),
+				Keys:        "",
+				Yuceendtime: qutil.Int64All(rv["yuceendtime"]),
 			})
 			})
 		}
 		}
 	}
 	}
@@ -314,13 +334,14 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 				continue
 				continue
 			}
 			}
 			res = append(res, &ForecastInfo{
 			res = append(res, &ForecastInfo{
-				Buyer:      qutil.ObjToString(fv["buyer"]),
-				Id:         util.EncodeId(qutil.ObjToString(fv["id"])),
-				Purchasing: fv["results"].([]string),
-				Title:      qutil.ObjToString(fv["title"]),
-				Createtime: qutil.Int64All(fv["yucetime"]),
-				Jyhref:     qutil.ObjToString(fv["jyhref"]),
-				Keys:       "",
+				Buyer:       qutil.ObjToString(fv["buyer"]),
+				Id:          util.EncodeId(qutil.ObjToString(fv["id"])),
+				Purchasing:  fv["results"].([]string),
+				Title:       qutil.ObjToString(fv["title"]),
+				Createtime:  qutil.Int64All(fv["yucetime"]),
+				Jyhref:      qutil.ObjToString(fv["jyhref"]),
+				Keys:        "",
+				Yuceendtime: qutil.Int64All(fv["yuceendtime"]),
 			})
 			})
 		}
 		}
 	}
 	}
@@ -335,8 +356,7 @@ func forecastMerge(r, f []map[string]interface{}) []*ForecastInfo {
 
 
 var d = &dfa.DFA{}
 var d = &dfa.DFA{}
 
 
-//
-func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int) (list []map[string]interface{}, count int64) {
+func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface{}, pageSize int, startTime, endTime int, dataType string) (list []map[string]interface{}, count int64) {
 	if userId == "" {
 	if userId == "" {
 		return
 		return
 	}
 	}
@@ -364,7 +384,7 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
 		return
 		return
 	}
 	}
 	// qstr := GetMemberForecastSql(sql)
 	// qstr := GetMemberForecastSql(sql)
-	qstr := getForecastProjectSql(sql)
+	qstr := getForecastProjectSql(sql, startTime, endTime, dataType)
 	count = elastic.Count(INDEX, TYPE, qstr)
 	count = elastic.Count(INDEX, TYPE, qstr)
 	list = *elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*pageSize, pageSize, 0, false)
 	list = *elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSearch_sort, bidSearch_field, (pageNum-1)*pageSize, pageSize, 0, false)
 	if list != nil {
 	if list != nil {
@@ -389,13 +409,14 @@ func getNewForecast(userId string, pageNum int, o_member_jy map[string]interface
 			v["results"] = rsArrRes
 			v["results"] = rsArrRes
 			v["id"] = qutil.ObjToString(v["_id"])
 			v["id"] = qutil.ObjToString(v["_id"])
 			v["yucetime"] = qutil.Int64All(v["yucetime"].(float64))
 			v["yucetime"] = qutil.Int64All(v["yucetime"].(float64))
+			v["yuceendtime"] = qutil.Int64All(v["yuceendtime"])
 		}
 		}
 		d.Clear()
 		d.Clear()
 	}
 	}
 	return
 	return
 }
 }
 
 
-//获取大会员forecast 检索库查询语句 - 查询逻辑有调整 dev4.6.8 -ws 新方法:getForecastProjectSql()
+// 获取大会员forecast 检索库查询语句 - 查询逻辑有调整 dev4.6.8 -ws 新方法:getForecastProjectSql()
 func GetMemberForecastSql(scd *util.ViewCondition) string {
 func GetMemberForecastSql(scd *util.ViewCondition) string {
 	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
 	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
 	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
@@ -495,7 +516,7 @@ func GetMemberForecastSql(scd *util.ViewCondition) string {
 	return qstr
 	return qstr
 }
 }
 
 
-//member_jy
+// member_jy
 func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
 func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
 	if o_member_jy["a_items"] == nil {
 	if o_member_jy["a_items"] == nil {
 		return nil
 		return nil
@@ -529,7 +550,7 @@ func getSqlObjFromId(o_member_jy map[string]interface{}) *util.ViewCondition {
 	}
 	}
 }
 }
 
 
-//关键词 附加词 排除词
+// 关键词 附加词 排除词
 func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.ViewKeyWord) {
 func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.ViewKeyWord) {
 	if a_items == nil {
 	if a_items == nil {
 		return
 		return
@@ -574,7 +595,6 @@ func getKeyWordArr(a_items []interface{}, item string, index int) (arr []util.Vi
 	return
 	return
 }
 }
 
 
-//
 func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
 func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
 	if area == nil {
 	if area == nil {
 		return
 		return

+ 5 - 0
src/jfw/modules/bigmember/src/service/use/use.go

@@ -672,6 +672,11 @@ func (u *Use) IsAdd() {
 		uRefer := u.Refer()
 		uRefer := u.Refer()
 		var userInfo = &UserInfo{}
 		var userInfo = &UserInfo{}
 		userid := qu.ObjToString(u.GetSession("userId"))
 		userid := qu.ObjToString(u.GetSession("userId"))
+		if userid == "" {
+			userInfo.IsFree = true    //默认 否则画像引导 不出来
+			userInfo.Powers = []int{} //空数组
+			return Result{Data: userInfo}
+		}
 		bigPower := jy.GetBigVipUserBaseMsg(u.Session(), *config.Middleground)
 		bigPower := jy.GetBigVipUserBaseMsg(u.Session(), *config.Middleground)
 		userInfo = &UserInfo{
 		userInfo = &UserInfo{
 			BigMemberStatus: bigPower.Status,
 			BigMemberStatus: bigPower.Status,

+ 2 - 2
src/jfw/modules/distribution/src/service/action/cashout.go

@@ -40,7 +40,7 @@ func (this *CashOut) Index() {
 			SELECT a.type,a.auth_status,b.dis_sales,b.dis_commission,b.money
 			SELECT a.type,a.auth_status,b.dis_sales,b.dis_commission,b.money
 			FROM dis_partner a
 			FROM dis_partner a
 			LEFT JOIN account b on (a.uid=b.uid)
 			LEFT JOIN account b on (a.uid=b.uid)
-			WHERE a.uid = ? limit 1
+			WHERE a.uid = ? and  a.type=2 limit 1
 		`, userId)
 		`, userId)
 		if dbSearch == nil || len(*dbSearch) == 0 {
 		if dbSearch == nil || len(*dbSearch) == 0 {
 			return &Result{-1, "用户数据查询失败", nil}
 			return &Result{-1, "用户数据查询失败", nil}
@@ -149,7 +149,7 @@ func (this *CashOut) CashOutSubmit() {
 			SELECT a.type,a.auth_status,b.money
 			SELECT a.type,a.auth_status,b.money
 			FROM dis_partner a
 			FROM dis_partner a
 			LEFT JOIN account b on (a.uid=b.uid)
 			LEFT JOIN account b on (a.uid=b.uid)
-			WHERE a.uid = ? limit 1
+			WHERE a.uid = ?  and  a.type=2 limit 1
 		`, userId)
 		`, userId)
 		if dbSearch == nil || len(*dbSearch) == 0 {
 		if dbSearch == nil || len(*dbSearch) == 0 {
 			return &Result{-1, "未查询到用户信息", nil}
 			return &Result{-1, "未查询到用户信息", nil}

+ 3 - 3
src/jfw/modules/distribution/src/service/action/logoff.go

@@ -59,10 +59,10 @@ func (l *Logoff) Sure() {
 			commission = util.IntAll((*account)[0]["dis_commission"])
 			commission = util.IntAll((*account)[0]["dis_commission"])
 			sales = util.IntAll((*account)[0]["dis_sales"])
 			sales = util.IntAll((*account)[0]["dis_sales"])
 			for _, v := range []string{"dis_partner", "dis_cashout", "dis_count"} {
 			for _, v := range []string{"dis_partner", "dis_cashout", "dis_count"} {
-				list := Mysql.SelectBySql(fmt.Sprintf(`select * from %s where uid=?`, v), userId)
+				list := Mysql.SelectBySql(fmt.Sprintf(`select * from %s where uid=? and  type=2`, v), userId)
 				VarBackup.Save(v, list)
 				VarBackup.Save(v, list)
 			}
 			}
-			list := Mysql.SelectBySql(`select a.* from dis_auth a inner join dis_partner b on (b.uid=? and b.id=a.partner_id)`, userId)
+			list := Mysql.SelectBySql(`select a.* from dis_auth a inner join dis_partner b on (b.uid=? and b.id=a.partner_id and  a.type=2)`, userId)
 			VarBackup.Save("dis_auth", list)
 			VarBackup.Save("dis_auth", list)
 			//
 			//
 			Mysql.SelectByBath(200, func(l *[]map[string]interface{}) bool {
 			Mysql.SelectByBath(200, func(l *[]map[string]interface{}) bool {
@@ -73,7 +73,7 @@ func (l *Logoff) Sure() {
 				update_flag := Mysql.UpdateOrDeleteBySqlByTx(tx, `update account set dis_commission=0,dis_sales=0,dis_order=0 where uid=?`, userId)
 				update_flag := Mysql.UpdateOrDeleteBySqlByTx(tx, `update account set dis_commission=0,dis_sales=0,dis_order=0 where uid=?`, userId)
 				del_flag := true
 				del_flag := true
 				for _, v := range []string{"dis_partner", "dis_cashout", "dis_count", "dis_sale"} {
 				for _, v := range []string{"dis_partner", "dis_cashout", "dis_count", "dis_sale"} {
-					if Mysql.UpdateOrDeleteBySqlByTx(tx, fmt.Sprintf(`delete from %s where uid=?`, v), userId) < 0 {
+					if Mysql.UpdateOrDeleteBySqlByTx(tx, fmt.Sprintf(`delete from %s where uid=? and  type=2 `, v), userId) < 0 {
 						del_flag = false
 						del_flag = false
 					}
 					}
 				}
 				}

+ 17 - 13
src/jfw/modules/distribution/src/service/action/partner.go

@@ -68,11 +68,11 @@ func (p *Partner) AddPartner() {
 		if !jy.IsPhone(phone) || !jy.IsEmail(mail) {
 		if !jy.IsPhone(phone) || !jy.IsEmail(mail) {
 			return -1, "手机号或邮箱正则校验失败"
 			return -1, "手机号或邮箱正则校验失败"
 		}
 		}
-		if Mysql.Count("dis_partner", map[string]interface{}{"uid": userid, "auth_status": 1}) > 0 {
+		if Mysql.Count("dis_partner", map[string]interface{}{"uid": userid, "auth_status": 1, "type": 2}) > 0 {
 			return -1, "该用户已加入合作伙伴"
 			return -1, "该用户已加入合作伙伴"
-		} else if Mysql.Count("dis_partner", map[string]interface{}{"phone": phone}) > 0 {
+		} else if Mysql.Count("dis_partner", map[string]interface{}{"phone": phone, "type": 2}) > 0 {
 			return -1, "该手机号已加入合作伙伴"
 			return -1, "该手机号已加入合作伙伴"
-		} else if Mysql.Count("dis_partner", map[string]interface{}{"email": mail}) > 0 {
+		} else if Mysql.Count("dis_partner", map[string]interface{}{"email": mail, "type": 2}) > 0 {
 			return -1, "该邮箱已加入合作伙伴"
 			return -1, "该邮箱已加入合作伙伴"
 		}
 		}
 		log.Println("code:", p.GetString("code"))
 		log.Println("code:", p.GetString("code"))
@@ -119,7 +119,8 @@ func (p *Partner) AddPartner() {
 			}
 			}
 		}
 		}
 		account := Mysql.FindOne("dis_partner", map[string]interface{}{
 		account := Mysql.FindOne("dis_partner", map[string]interface{}{
-			"uid": userid,
+			"uid":  userid,
+			"type": 2,
 		}, `id,type`, "")
 		}, `id,type`, "")
 
 
 		//入库
 		//入库
@@ -162,7 +163,8 @@ func (p *Partner) AddPartner() {
 			insert_1 := int64(0)
 			insert_1 := int64(0)
 			if account != nil {
 			if account != nil {
 				query := map[string]interface{}{
 				query := map[string]interface{}{
-					"uid": userid,
+					"uid":  userid,
+					"type": 2,
 				}
 				}
 				inserts := map[string]interface{}{
 				inserts := map[string]interface{}{
 					"type":          typ,
 					"type":          typ,
@@ -270,14 +272,14 @@ func (p *Partner) IsPartner() {
 		p.ServeJson(map[string]interface{}{"isPartner": partner_user})
 		p.ServeJson(map[string]interface{}{"isPartner": partner_user})
 		return
 		return
 	}
 	}
-	partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=?`, userid) > 0
+	partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=?  and  type=2`, userid) > 0
 	if partner_user {
 	if partner_user {
-		update := Mysql.UpdateOrDeleteBySql(` UPDATE dis_partner SET lastlogintime=? WHERE uid =?`, time.Now().Format(Date_Full_Layout), userid)
+		update := Mysql.UpdateOrDeleteBySql(` UPDATE dis_partner SET lastlogintime=? WHERE uid =? and  type=2`, time.Now().Format(Date_Full_Layout), userid)
 		if update < 0 {
 		if update < 0 {
 			log.Println("修改最后登录时间出错", userid)
 			log.Println("修改最后登录时间出错", userid)
 		}
 		}
 	}
 	}
-	partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=? and type!=3`, userid) > 0
+	partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=? and type=2`, userid) > 0
 
 
 	p.ServeJson(map[string]interface{}{
 	p.ServeJson(map[string]interface{}{
 		"isPartner": partner_user,
 		"isPartner": partner_user,
@@ -345,7 +347,7 @@ func (p *Partner) PartnerInfo() {
 		if userid == "" {
 		if userid == "" {
 			return data, "未登录", Error_code
 			return data, "未登录", Error_code
 		}
 		}
-		partner := Mysql.SelectBySql("SELECT dp.id,dp.is_adopt,dp.name,dp.contacts,dp.phone,dp.email,dp.type,dp.channel,dp.reason,dp.proving,da.name AS authName,da.license FROM dis_partner dp LEFT JOIN dis_auth da ON dp.id = da.partner_id WHERE dp.uid = ? ", userid)
+		partner := Mysql.SelectBySql("SELECT dp.id,dp.is_adopt,dp.name,dp.contacts,dp.phone,dp.email,dp.type,dp.channel,dp.reason,dp.proving,da.name AS authName,da.license FROM dis_partner dp LEFT JOIN dis_auth da ON dp.id = da.partner_id WHERE dp.uid = ? and  dp.type=2 ", userid)
 		if partner == nil {
 		if partner == nil {
 			return data, "用户并未加入伙伴", Error_code
 			return data, "用户并未加入伙伴", Error_code
 		}
 		}
@@ -411,7 +413,7 @@ func (p *Partner) ReapplyPartner() {
 			return -1, "手机号或邮箱正则校验失败"
 			return -1, "手机号或邮箱正则校验失败"
 		}
 		}
 		//判断是否是当前账户手机号及邮箱
 		//判断是否是当前账户手机号及邮箱
-		phoneData := Mysql.FindOne("dis_partner", map[string]interface{}{"phone": phone}, "uid", "")
+		phoneData := Mysql.FindOne("dis_partner", map[string]interface{}{"phone": phone, "type": 2}, "uid", "")
 		if phoneData != nil {
 		if phoneData != nil {
 			if len(*phoneData) > 0 {
 			if len(*phoneData) > 0 {
 				if (*phoneData)["uid"] != userid {
 				if (*phoneData)["uid"] != userid {
@@ -451,7 +453,7 @@ func (p *Partner) ReapplyPartner() {
 				}
 				}
 			}
 			}
 		}
 		}
-		mailData := Mysql.FindOne("dis_partner", map[string]interface{}{"email": mail}, "uid", "")
+		mailData := Mysql.FindOne("dis_partner", map[string]interface{}{"email": mail, "type": 2}, "uid", "")
 		if mailData != nil {
 		if mailData != nil {
 			if len(*mailData) > 0 && (*mailData)["uid"] != userid {
 			if len(*mailData) > 0 && (*mailData)["uid"] != userid {
 				return -1, "该邮箱已加入合作伙伴"
 				return -1, "该邮箱已加入合作伙伴"
@@ -464,7 +466,8 @@ func (p *Partner) ReapplyPartner() {
 			return -1, "缺少参数"
 			return -1, "缺少参数"
 		}
 		}
 		account := Mysql.FindOne("dis_partner", map[string]interface{}{
 		account := Mysql.FindOne("dis_partner", map[string]interface{}{
-			"uid": userid,
+			"uid":  userid,
+			"type": 2,
 		}, `id,type`, "")
 		}, `id,type`, "")
 
 
 		authData := Mysql.FindOne("dis_auth", map[string]interface{}{"name": p.GetString("entname")}, "partner_id", "")
 		authData := Mysql.FindOne("dis_auth", map[string]interface{}{"name": p.GetString("entname")}, "partner_id", "")
@@ -483,7 +486,8 @@ func (p *Partner) ReapplyPartner() {
 		//入库
 		//入库
 		if Mysql.ExecTx("加入伙伴", func(tx *sql.Tx) bool {
 		if Mysql.ExecTx("加入伙伴", func(tx *sql.Tx) bool {
 			query := map[string]interface{}{
 			query := map[string]interface{}{
-				"uid": userid,
+				"uid":  userid,
+				"type": 2,
 			}
 			}
 			inserts := map[string]interface{}{
 			inserts := map[string]interface{}{
 				"phone":    phone,
 				"phone":    phone,

+ 496 - 496
src/jfw/modules/distribution/src/service/action/share.go

@@ -1,36 +1,36 @@
 package action
 package action
 
 
 import (
 import (
-    "app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
-    "database/sql"
-    "encoding/base64"
-    "fmt"
-    . "jy/src/jfw/modules/distribution/src/service/config"
-    . "jy/src/jfw/modules/distribution/src/service/public"
-    "log"
-    "strconv"
-    "strings"
-    "sync"
-    "time"
+	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
+	"database/sql"
+	"encoding/base64"
+	"fmt"
+	. "jy/src/jfw/modules/distribution/src/service/config"
+	. "jy/src/jfw/modules/distribution/src/service/public"
+	"log"
+	"strconv"
+	"strings"
+	"sync"
+	"time"
 
 
-    util "app.yhyue.com/moapp/jybase/common"
-    . "app.yhyue.com/moapp/jybase/date"
-    "app.yhyue.com/moapp/jybase/redis"
-    "github.com/SKatiyar/qr"
+	util "app.yhyue.com/moapp/jybase/common"
+	. "app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/redis"
+	"github.com/SKatiyar/qr"
 
 
-    "app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 )
 )
 
 
 //分享接口
 //分享接口
 type Share struct {
 type Share struct {
-    *xweb.Action
-    getWordShare      xweb.Mapper `xweb:"/share/getWordShare"`      //获取口令分享的口令
-    getOtherWordShare xweb.Mapper `xweb:"/share/getOtherWordShare"` //第三方获取口令分享的口令
-    getWordInfo       xweb.Mapper `xweb:"/share/getWordInfo"`       //根据口令获取口令信息
-    linkShare         xweb.Mapper `xweb:"/share/(.*)"`              //链接分享获取用户信息
-    productInfo       xweb.Mapper `xweb:"/share/productInfo"`       //产品信息
-    shareLogs         xweb.Mapper `xweb:"/share/shareLogs"`         //分享记录日志
-    shareLink         xweb.Mapper `xweb:"/share/shareLink"`         //分享链接获取
+	*xweb.Action
+	getWordShare      xweb.Mapper `xweb:"/share/getWordShare"`      //获取口令分享的口令
+	getOtherWordShare xweb.Mapper `xweb:"/share/getOtherWordShare"` //第三方获取口令分享的口令
+	getWordInfo       xweb.Mapper `xweb:"/share/getWordInfo"`       //根据口令获取口令信息
+	linkShare         xweb.Mapper `xweb:"/share/(.*)"`              //链接分享获取用户信息
+	productInfo       xweb.Mapper `xweb:"/share/productInfo"`       //产品信息
+	shareLogs         xweb.Mapper `xweb:"/share/shareLogs"`         //分享记录日志
+	shareLink         xweb.Mapper `xweb:"/share/shareLink"`         //分享链接获取
 }
 }
 
 
 //1000:请求方式有误;1001:需要登录;1002:缺失参数;1003:无效参数;1004:没有权限
 //1000:请求方式有误;1001:需要登录;1002:缺失参数;1003:无效参数;1004:没有权限
@@ -40,531 +40,531 @@ var suffix_msgt = "_SX"
 
 
 //
 //
 func init() {
 func init() {
-    xweb.AddAction(&Share{})
+	xweb.AddAction(&Share{})
 }
 }
 
 
 var METHOD = "POST"
 var METHOD = "POST"
 
 
 //所有产品信息 和 所属产品得个人分销统计
 //所有产品信息 和 所属产品得个人分销统计
 func (this *Share) ProductInfo() error {
 func (this *Share) ProductInfo() error {
-    defer util.Catch()
-    res := map[string]interface{}{
-        "error_code": error_code[0],
-        "error_msg":  error_msg[0],
-    }
-    if this.Method() == METHOD {
-        res["error_msg"] = error_msg[1]
-        res["error_code"] = error_code[1]
-        userId, _ := this.Session().Get("userId").(string)
-        if userId != "" {
-            partner := Mysql.SelectBySql("SELECT type from dis_partner  WHERE uid = ? ", userId)
-            p_data, ok := MQFW.Find("dis_product", `{"s_status":1,"model":1}`, `{"l_createdate":1}`, nil, false, -1, -1)
-            if (fmt.Sprint((*partner)[0]["type"])) == "2" {
-                p_data, ok = MQFW.Find("dis_product", `{"s_status":1,"model":2}`, `{"l_createdate":1}`, nil, false, -1, -1)
-            }
-            if ok && p_data != nil {
-                //个人累计数据
-                dis_res := *Mysql.SelectBySql("SELECT DISTINCT a.product_name,SUM(a.sale_money) AS t_sale,SUM(a.commission) AS t_com,COUNT(a.product_name) AS t_count FROM dis_sale a  WHERE a.uid = '" + userId + "'  GROUP BY a.product_name")
-                for key, v := range *p_data {
-                    delete(v, "_id")
-                    if v["s_name"] == "超级订阅企业版" {
-                        v["s_name"] = "超级订阅"
-                        (*p_data)[key]["s_name"] = "超级订阅"
-                    }
-                    for _, dv := range dis_res {
-                        if dv["product_name"] == v["s_name"].(string) {
-                            v["t_sale"] = util.IntAll(dv["t_sale"])   //销售金额
-                            v["t_com"] = util.IntAll(dv["t_com"])     //佣金金额
-                            v["t_count"] = util.IntAll(dv["t_count"]) //销售单数
-                            if util.IntAll(dv["t_count"]) > 0 {
-                                v["average"] = util.IntAll(dv["t_com"]) / util.IntAll(dv["t_count"]) //平均佣金
-                            }
-                            break
-                        }
-                    }
-                }
-                res["data"] = *p_data
-            } else {
-                log.Println("查询产品信息报错")
-            }
-            res["error_msg"] = ""
-            res["error_code"] = 0
-        }
-    }
-    this.ServeJson(res)
-    return nil
+	defer util.Catch()
+	res := map[string]interface{}{
+		"error_code": error_code[0],
+		"error_msg":  error_msg[0],
+	}
+	if this.Method() == METHOD {
+		res["error_msg"] = error_msg[1]
+		res["error_code"] = error_code[1]
+		userId, _ := this.Session().Get("userId").(string)
+		if userId != "" {
+			partner := Mysql.SelectBySql("SELECT type from dis_partner  WHERE uid = ?  and  type=2", userId)
+			p_data, ok := MQFW.Find("dis_product", `{"s_status":1,"model":1}`, `{"l_createdate":1}`, nil, false, -1, -1)
+			if (fmt.Sprint((*partner)[0]["type"])) == "2" {
+				p_data, ok = MQFW.Find("dis_product", `{"s_status":1,"model":2}`, `{"l_createdate":1}`, nil, false, -1, -1)
+			}
+			if ok && p_data != nil {
+				//个人累计数据
+				dis_res := *Mysql.SelectBySql("SELECT DISTINCT a.product_name,SUM(a.sale_money) AS t_sale,SUM(a.commission) AS t_com,COUNT(a.product_name) AS t_count FROM dis_sale a  WHERE a.uid = '" + userId + "'  GROUP BY a.product_name")
+				for key, v := range *p_data {
+					delete(v, "_id")
+					if v["s_name"] == "超级订阅企业版" {
+						v["s_name"] = "超级订阅"
+						(*p_data)[key]["s_name"] = "超级订阅"
+					}
+					for _, dv := range dis_res {
+						if dv["product_name"] == v["s_name"].(string) {
+							v["t_sale"] = util.IntAll(dv["t_sale"])   //销售金额
+							v["t_com"] = util.IntAll(dv["t_com"])     //佣金金额
+							v["t_count"] = util.IntAll(dv["t_count"]) //销售单数
+							if util.IntAll(dv["t_count"]) > 0 {
+								v["average"] = util.IntAll(dv["t_com"]) / util.IntAll(dv["t_count"]) //平均佣金
+							}
+							break
+						}
+					}
+				}
+				res["data"] = *p_data
+			} else {
+				log.Println("查询产品信息报错")
+			}
+			res["error_msg"] = ""
+			res["error_code"] = 0
+		}
+	}
+	this.ServeJson(res)
+	return nil
 }
 }
 
 
 //微信自动回复 或者访问复制链接
 //微信自动回复 或者访问复制链接
 func (this *Share) LinkShare(discored string) error {
 func (this *Share) LinkShare(discored string) error {
-    defer util.Catch()
-    openid, _ := this.Session().Get("s_m_openid").(string)
-    //openid = "ocXeA0v5hueaCCGu_3Iva0br857s"
-    //log.Println("微信自动回复 或者访问复制链接discored:", discored)
-    disType := discored[:1]
-    if openid == "" || discored == "" {
-        /*if disType == "E" { //数据流量包
-          	return this.Redirect("/frontPage/flowpacket/free/data")
-          } else if disType == "F" { //中标必听课
-          	return this.Redirect("/frontPage/coursepage/free/data")
-          } else {
-          	//提示关注页面
-          	return this.Redirect("/")
-          }*/
-        //提示关注页面
-        return this.Redirect("/")
-    }
-    userId, _ := this.Session().Get("userId").(string)
-    url := ""
-    fmt.Println(userId, openid, "user", `{"s_m_openid":"`+openid+`}`, `{"o_jy":1:"o_vipjy":1,"i_vip_status":1}`)
-    if discored[len(discored)-4:len(discored)-2] == "GX" {
-        if disType == "A" {
-            user := jy.GetBigVipUserBaseMsg(this.Session(), *Middleground)
-            log.Println(user)
-            if user != nil {
-                i_vip_status := user.VipStatus
-                if i_vip_status > 0 {
-                    modular := util.ObjToMap(Sysconfig.Modular[discored[:1]])
-                    url = (*modular)["upgradeUrl"].(string)
-                } else {
-                    modular := util.ObjToMap(Sysconfig.Modular[discored[:1]])
-                    url = (*modular)["url"].(string) + "?disWord=" + discored
-                }
-            }
-        } else if disType == "E" {
-            //判断用户是否否买过数据流量包
-            /*req, _ := http.NewRequest("GET", Sysconfig.SourceCenter+"/resources/findBalance?accountId="+userId, nil)
-              fmt.Println(Sysconfig.SourceCenter + "/resources/findBalance?accountId=" + userId)
-              res, _ := http.DefaultClient.Do(req)
-              defer res.Body.Close()
-              body, _ := ioutil.ReadAll(res.Body)
-              dat := BalanceRes{}
-              _ = json.Unmarshal([]byte(body), &dat)
-              if dat.Data != nil && len(dat.Data) > 0 {
-              	//页面跳转至数据包筛选页面
-              	modular := util.ObjToMap(Sysconfig.Modular[disType])
-              	url = (*modular)["packetFilterUrl"].(string) + "?disWord=" + discored
-              } else {
-              	//没有购买流量包,跳转至购买页面
-              	modular := util.ObjToMap(Sysconfig.Modular[disType])
-              	url = (*modular)["buyUrl"].(string) + "?disWord=" + discored
-              }*/
-            //新老用户打开链接跳转至购买界面
-            modular := util.ObjToMap(Sysconfig.Modular[disType])
-            url = (*modular)["buyUrl"].(string) + "?disWord=" + discored
-        } else if disType == "F" {
-            modular := util.ObjToMap(Sysconfig.Modular[disType])
-            url = (*modular)["courselistUrl"].(string) + "?disWord=" + discored
-        }
+	defer util.Catch()
+	openid, _ := this.Session().Get("s_m_openid").(string)
+	//openid = "ocXeA0v5hueaCCGu_3Iva0br857s"
+	//log.Println("微信自动回复 或者访问复制链接discored:", discored)
+	disType := discored[:1]
+	if openid == "" || discored == "" {
+		/*if disType == "E" { //数据流量包
+		  	return this.Redirect("/frontPage/flowpacket/free/data")
+		  } else if disType == "F" { //中标必听课
+		  	return this.Redirect("/frontPage/coursepage/free/data")
+		  } else {
+		  	//提示关注页面
+		  	return this.Redirect("/")
+		  }*/
+		//提示关注页面
+		return this.Redirect("/")
+	}
+	userId, _ := this.Session().Get("userId").(string)
+	url := ""
+	fmt.Println(userId, openid, "user", `{"s_m_openid":"`+openid+`}`, `{"o_jy":1:"o_vipjy":1,"i_vip_status":1}`)
+	if discored[len(discored)-4:len(discored)-2] == "GX" {
+		if disType == "A" {
+			user := jy.GetBigVipUserBaseMsg(this.Session(), *Middleground)
+			log.Println(user)
+			if user != nil {
+				i_vip_status := user.VipStatus
+				if i_vip_status > 0 {
+					modular := util.ObjToMap(Sysconfig.Modular[discored[:1]])
+					url = (*modular)["upgradeUrl"].(string)
+				} else {
+					modular := util.ObjToMap(Sysconfig.Modular[discored[:1]])
+					url = (*modular)["url"].(string) + "?disWord=" + discored
+				}
+			}
+		} else if disType == "E" {
+			//判断用户是否否买过数据流量包
+			/*req, _ := http.NewRequest("GET", Sysconfig.SourceCenter+"/resources/findBalance?accountId="+userId, nil)
+			  fmt.Println(Sysconfig.SourceCenter + "/resources/findBalance?accountId=" + userId)
+			  res, _ := http.DefaultClient.Do(req)
+			  defer res.Body.Close()
+			  body, _ := ioutil.ReadAll(res.Body)
+			  dat := BalanceRes{}
+			  _ = json.Unmarshal([]byte(body), &dat)
+			  if dat.Data != nil && len(dat.Data) > 0 {
+			  	//页面跳转至数据包筛选页面
+			  	modular := util.ObjToMap(Sysconfig.Modular[disType])
+			  	url = (*modular)["packetFilterUrl"].(string) + "?disWord=" + discored
+			  } else {
+			  	//没有购买流量包,跳转至购买页面
+			  	modular := util.ObjToMap(Sysconfig.Modular[disType])
+			  	url = (*modular)["buyUrl"].(string) + "?disWord=" + discored
+			  }*/
+			//新老用户打开链接跳转至购买界面
+			modular := util.ObjToMap(Sysconfig.Modular[disType])
+			url = (*modular)["buyUrl"].(string) + "?disWord=" + discored
+		} else if disType == "F" {
+			modular := util.ObjToMap(Sysconfig.Modular[disType])
+			url = (*modular)["courselistUrl"].(string) + "?disWord=" + discored
+		}
 
 
-    } else {
-        _, url, _, _ = analyseWord(discored, userId, true)
-    }
-    log.Println("获取三级页面地址:", url)
-    return this.Redirect(url)
+	} else {
+		_, url, _, _ = analyseWord(discored, userId, true)
+	}
+	log.Println("获取三级页面地址:", url)
+	return this.Redirect(url)
 }
 }
 
 
 //分析口令
 //分析口令
 func analyseWord(discored, userId string, isBuy bool) (name, url, appUrl, shareNickname string) {
 func analyseWord(discored, userId string, isBuy bool) (name, url, appUrl, shareNickname string) {
-    log.Println("分析口令传入参数", discored)
-    //指令第一个字母
-    encry := discored[:1]
-    //模块  A:超级订阅  B:数据导出  C:数据报告等  D公告信息 _SX三天有效 E 数据流量包 F 中标必听课
-    modular := util.ObjToMap(Sysconfig.Modular[encry])
-    if modular != nil && (*modular)["name"] != nil {
-        redisDis := redis.GetStr("other", "DIS_"+discored[1:])
-        log.Println("redis:", redisDis)
-        if redisDis == "" {
-            name = (*modular)["name"].(string)
-            url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
-            appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
-        } else {
-            shareNickname = strings.Split(redisDis, "##")[0]
-            suffix := discored[len(discored)-3 : len(discored)]
-            name = (*modular)["name"].(string)
-            //公告三级页处理
-            if suffix == suffix_msgt {
-                effectiveTimeStr := strings.Split(redisDis, "##")[3]
-                effectiveTime, _ := strconv.ParseInt(effectiveTimeStr, 10, 64)
-                //是否计算佣金
-                if time.Now().Unix() <= effectiveTime {
-                    url = strings.Split(redisDis, "##")[2] + "?disWord=" + discored    //指令传输
-                    appUrl = strings.Split(redisDis, "##")[2] + "?disWord=" + discored //日志中转页
-                } else {
-                    url = strings.Split(redisDis, "##")[2]    //指令传输
-                    appUrl = strings.Split(redisDis, "##")[2] //日志中转页
-                }
+	log.Println("分析口令传入参数", discored)
+	//指令第一个字母
+	encry := discored[:1]
+	//模块  A:超级订阅  B:数据导出  C:数据报告等  D公告信息 _SX三天有效 E 数据流量包 F 中标必听课
+	modular := util.ObjToMap(Sysconfig.Modular[encry])
+	if modular != nil && (*modular)["name"] != nil {
+		redisDis := redis.GetStr("other", "DIS_"+discored[1:])
+		log.Println("redis:", redisDis)
+		if redisDis == "" {
+			name = (*modular)["name"].(string)
+			url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
+			appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
+		} else {
+			shareNickname = strings.Split(redisDis, "##")[0]
+			suffix := discored[len(discored)-3 : len(discored)]
+			name = (*modular)["name"].(string)
+			//公告三级页处理
+			if suffix == suffix_msgt {
+				effectiveTimeStr := strings.Split(redisDis, "##")[3]
+				effectiveTime, _ := strconv.ParseInt(effectiveTimeStr, 10, 64)
+				//是否计算佣金
+				if time.Now().Unix() <= effectiveTime {
+					url = strings.Split(redisDis, "##")[2] + "?disWord=" + discored    //指令传输
+					appUrl = strings.Split(redisDis, "##")[2] + "?disWord=" + discored //日志中转页
+				} else {
+					url = strings.Split(redisDis, "##")[2]    //指令传输
+					appUrl = strings.Split(redisDis, "##")[2] //日志中转页
+				}
 
 
-            } else {
-                if encry == "A" {
-                    name = (*modular)["name"].(string)
-                    url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
-                    appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
-                } else if encry == "E" {
-                    if isBuy {
-                        name = (*modular)["name"].(string)
-                        url = (*modular)["url"].(string) + "?disWord=" + discored                                                         //指令传输
-                        appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appPacketFilterUrl"].(string) + "?disWord=" + discored //日志中转页
-                    } else {
-                        name = (*modular)["name"].(string)
-                        url = (*modular)["url"].(string) + "?disWord=" + discored                                                //指令传输
-                        appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appBuyUrl"].(string) + "?disWord=" + discored //日志中转页
-                    }
-                } else if encry == "F" {
-                    if isBuy {
-                        name = (*modular)["name"].(string)
-                        url = (*modular)["url"].(string) + "?disWord=" + discored                                                    //指令传输
-                        appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["courselistUrl"].(string) + "?disWord=" + discored //日志中转页
-                    } else {
-                        name = (*modular)["name"].(string)
-                        url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
-                        appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
-                    }
-                }
-            }
-        }
-    }
-    /*//redis 获取分销者信息
-      redisDis := redis.GetStr("other", "DIS_"+discored[1:])
-      if redisDis != "" {
-      	//分销者昵称
-      	shareNickname = strings.Split(redisDis, "##")[0]
-      }*/
-    return name, url, appUrl, shareNickname
+			} else {
+				if encry == "A" {
+					name = (*modular)["name"].(string)
+					url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
+					appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
+				} else if encry == "E" {
+					if isBuy {
+						name = (*modular)["name"].(string)
+						url = (*modular)["url"].(string) + "?disWord=" + discored                                                         //指令传输
+						appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appPacketFilterUrl"].(string) + "?disWord=" + discored //日志中转页
+					} else {
+						name = (*modular)["name"].(string)
+						url = (*modular)["url"].(string) + "?disWord=" + discored                                                //指令传输
+						appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appBuyUrl"].(string) + "?disWord=" + discored //日志中转页
+					}
+				} else if encry == "F" {
+					if isBuy {
+						name = (*modular)["name"].(string)
+						url = (*modular)["url"].(string) + "?disWord=" + discored                                                    //指令传输
+						appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["courselistUrl"].(string) + "?disWord=" + discored //日志中转页
+					} else {
+						name = (*modular)["name"].(string)
+						url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
+						appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
+					}
+				}
+			}
+		}
+	}
+	/*//redis 获取分销者信息
+	  redisDis := redis.GetStr("other", "DIS_"+discored[1:])
+	  if redisDis != "" {
+	  	//分销者昵称
+	  	shareNickname = strings.Split(redisDis, "##")[0]
+	  }*/
+	return name, url, appUrl, shareNickname
 
 
 }
 }
 
 
 type Duration int64
 type Duration int64
 
 
 func TimeProcessing(hour interface{}, duration int) time.Time {
 func TimeProcessing(hour interface{}, duration int) time.Time {
-    todayZero, _ := time.ParseInLocation(Date_Full_Layout, fmt.Sprint(hour), time.Local)
-    mm, _ := time.ParseDuration(fmt.Sprint(duration) + "m")
-    t := todayZero.Add(mm)
-    //t := todayZero.Add(time.Second * 89)
-    return t
+	todayZero, _ := time.ParseInLocation(Date_Full_Layout, fmt.Sprint(hour), time.Local)
+	mm, _ := time.ParseDuration(fmt.Sprint(duration) + "m")
+	t := todayZero.Add(mm)
+	//t := todayZero.Add(time.Second * 89)
+	return t
 }
 }
 
 
 //根据app客户端复制信息  返回对应信息
 //根据app客户端复制信息  返回对应信息
 func (this *Share) GetWordInfo() {
 func (this *Share) GetWordInfo() {
-    defer util.Catch()
-    res := map[string]interface{}{
-        "error_code": error_msg[0],
-        "error_msg":  error_msg[0],
-        "data":       map[string]interface{}{},
-    }
-    userId, _ := this.Session().Get("userId").(string)
-    //userId := "5f5b174923d21d0624334fca"
-    if this.Method() == METHOD {
-        copyTxt := this.GetString("copyTxt")
-        if strings.Contains(copyTxt, "复制") && strings.Contains(copyTxt, "剑鱼标讯APP") {
-            ct_one := strings.Split(copyTxt, ":")[1]
-            discored := strings.Split(ct_one, ",")[0]
-            log.Println("口令:", discored)
-            log.Println("分析", CopyInfo(discored, userId))
-            if discored != "" {
-                res["data"] = CopyInfo(discored, userId)
-                res["error_code"] = 0
-                res["error_msg"] = ""
-            } else {
-                res["error_msg"] = error_msg[2]
-            }
-        } else {
-            res["error_msg"] = error_msg[2]
-        }
-    }
-    this.ServeJson(res)
+	defer util.Catch()
+	res := map[string]interface{}{
+		"error_code": error_msg[0],
+		"error_msg":  error_msg[0],
+		"data":       map[string]interface{}{},
+	}
+	userId, _ := this.Session().Get("userId").(string)
+	//userId := "5f5b174923d21d0624334fca"
+	if this.Method() == METHOD {
+		copyTxt := this.GetString("copyTxt")
+		if strings.Contains(copyTxt, "复制") && strings.Contains(copyTxt, "剑鱼标讯APP") {
+			ct_one := strings.Split(copyTxt, ":")[1]
+			discored := strings.Split(ct_one, ",")[0]
+			log.Println("口令:", discored)
+			log.Println("分析", CopyInfo(discored, userId))
+			if discored != "" {
+				res["data"] = CopyInfo(discored, userId)
+				res["error_code"] = 0
+				res["error_msg"] = ""
+			} else {
+				res["error_msg"] = error_msg[2]
+			}
+		} else {
+			res["error_msg"] = error_msg[2]
+		}
+	}
+	this.ServeJson(res)
 }
 }
 
 
 //app 分析指令
 //app 分析指令
 func CopyInfo(discored, userId string) (res map[string]interface{}) {
 func CopyInfo(discored, userId string) (res map[string]interface{}) {
-    if discored != "" {
-        log.Println(analyseWord(discored, userId, true))
-        name, _, appUrl, shareNickname := analyseWord(discored, userId, true)
-        imgUrl := Sysconfig.Modular["imgUrl"].(string)
-        if p_data, ok := MQFW.Find("dis_product", nil, `{"l_createdate":1}`, nil, false, -1, -1); ok && p_data != nil {
-            for _, v := range *p_data {
-                if v["s_name"].(string) == name && v["s_img"].(string) != "" {
-                    imgUrl = v["s_img"].(string) //产品头像
-                    break
-                }
-            }
-        }
-        suffix := discored[len(discored)-3 : len(discored)]
-        if suffix == suffix_msgt {
-            appUrl = "/jyapp" + appUrl
-        }
-        log.Println("需要打开页面地址:" + appUrl)
-        res = map[string]interface{}{
-            "title":     fmt.Sprintf(Sysconfig.Modular["title"].(string), shareNickname), //标题
-            "subTitle":  fmt.Sprintf(Sysconfig.Modular["subTitle"].(string), name),       //副标题
-            "butTxt":    Sysconfig.Modular["butTxt"].(string),                            //按钮文案
-            "bottomTxt": Sysconfig.Modular["bottomTxt"].(string),                         //底部文案
-            "appUrl":    appUrl,                                                          //跳转链接
-            "imgUrl":    imgUrl + "?v=" + strconv.FormatInt(time.Now().Unix(), 10),       //产品图片
-        }
-    }
-    return
+	if discored != "" {
+		log.Println(analyseWord(discored, userId, true))
+		name, _, appUrl, shareNickname := analyseWord(discored, userId, true)
+		imgUrl := Sysconfig.Modular["imgUrl"].(string)
+		if p_data, ok := MQFW.Find("dis_product", nil, `{"l_createdate":1}`, nil, false, -1, -1); ok && p_data != nil {
+			for _, v := range *p_data {
+				if v["s_name"].(string) == name && v["s_img"].(string) != "" {
+					imgUrl = v["s_img"].(string) //产品头像
+					break
+				}
+			}
+		}
+		suffix := discored[len(discored)-3 : len(discored)]
+		if suffix == suffix_msgt {
+			appUrl = "/jyapp" + appUrl
+		}
+		log.Println("需要打开页面地址:" + appUrl)
+		res = map[string]interface{}{
+			"title":     fmt.Sprintf(Sysconfig.Modular["title"].(string), shareNickname), //标题
+			"subTitle":  fmt.Sprintf(Sysconfig.Modular["subTitle"].(string), name),       //副标题
+			"butTxt":    Sysconfig.Modular["butTxt"].(string),                            //按钮文案
+			"bottomTxt": Sysconfig.Modular["bottomTxt"].(string),                         //底部文案
+			"appUrl":    appUrl,                                                          //跳转链接
+			"imgUrl":    imgUrl + "?v=" + strconv.FormatInt(time.Now().Unix(), 10),       //产品图片
+		}
+	}
+	return
 }
 }
 
 
 //数据流量包、中标必听课分销  分析口令
 //数据流量包、中标必听课分销  分析口令
 func appAnalyseWord(discored, userId string, isBuy bool) (name, url, appUrl, shareNickname string) {
 func appAnalyseWord(discored, userId string, isBuy bool) (name, url, appUrl, shareNickname string) {
-    log.Println("分析口令传入参数", discored)
-    //指令第一个字母
-    encry := discored[:1]
-    //模块  A:超级订阅  B:数据导出  C:数据报告等  D公告信息 _SX三天有效 E 数据流量包 F 中标必听课
-    modular := util.ObjToMap(Sysconfig.Modular[encry])
-    if modular != nil && (*modular)["name"] != nil {
-        redisDis := redis.GetStr("other", "DIS_"+discored[1:])
-        log.Println("redis:", redisDis)
-        if redisDis == "" {
-            name = (*modular)["name"].(string)
-            url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
-            appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
-        } else {
-            shareNickname = strings.Split(redisDis, "##")[0]
-            suffix := discored[len(discored)-3 : len(discored)]
-            name = (*modular)["name"].(string)
-            //公告三级页处理
-            if suffix == suffix_msgt {
-                effectiveTimeStr := strings.Split(redisDis, "##")[3]
-                effectiveTime, _ := strconv.ParseInt(effectiveTimeStr, 10, 64)
-                //是否计算佣金
-                if time.Now().Unix() <= effectiveTime {
-                    url = strings.Split(redisDis, "##")[2] + "?disWord=" + discored    //指令传输
-                    appUrl = strings.Split(redisDis, "##")[2] + "?disWord=" + discored //日志中转页
-                } else {
-                    url = strings.Split(redisDis, "##")[2]    //指令传输
-                    appUrl = strings.Split(redisDis, "##")[2] //日志中转页
-                }
+	log.Println("分析口令传入参数", discored)
+	//指令第一个字母
+	encry := discored[:1]
+	//模块  A:超级订阅  B:数据导出  C:数据报告等  D公告信息 _SX三天有效 E 数据流量包 F 中标必听课
+	modular := util.ObjToMap(Sysconfig.Modular[encry])
+	if modular != nil && (*modular)["name"] != nil {
+		redisDis := redis.GetStr("other", "DIS_"+discored[1:])
+		log.Println("redis:", redisDis)
+		if redisDis == "" {
+			name = (*modular)["name"].(string)
+			url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
+			appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
+		} else {
+			shareNickname = strings.Split(redisDis, "##")[0]
+			suffix := discored[len(discored)-3 : len(discored)]
+			name = (*modular)["name"].(string)
+			//公告三级页处理
+			if suffix == suffix_msgt {
+				effectiveTimeStr := strings.Split(redisDis, "##")[3]
+				effectiveTime, _ := strconv.ParseInt(effectiveTimeStr, 10, 64)
+				//是否计算佣金
+				if time.Now().Unix() <= effectiveTime {
+					url = strings.Split(redisDis, "##")[2] + "?disWord=" + discored    //指令传输
+					appUrl = strings.Split(redisDis, "##")[2] + "?disWord=" + discored //日志中转页
+				} else {
+					url = strings.Split(redisDis, "##")[2]    //指令传输
+					appUrl = strings.Split(redisDis, "##")[2] //日志中转页
+				}
 
 
-            } else {
-                name = (*modular)["name"].(string)
-                url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
-                appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
-            }
-        }
+			} else {
+				name = (*modular)["name"].(string)
+				url = (*modular)["url"].(string) + "?disWord=" + discored                                             //指令传输
+				appUrl = "/jyapp/distrib/redirectTo?appUrl=" + (*modular)["appUrl"].(string) + "?disWord=" + discored //日志中转页
+			}
+		}
 
 
-    }
-    /*//redis 获取分销者信息
-      redisDis := redis.GetStr("other", "DIS_"+discored[1:])
-      if redisDis != "" {
-      	//分销者昵称
-      	shareNickname = strings.Split(redisDis, "##")[0]
-      }*/
-    return name, url, appUrl, shareNickname
+	}
+	/*//redis 获取分销者信息
+	  redisDis := redis.GetStr("other", "DIS_"+discored[1:])
+	  if redisDis != "" {
+	  	//分销者昵称
+	  	shareNickname = strings.Split(redisDis, "##")[0]
+	  }*/
+	return name, url, appUrl, shareNickname
 
 
 }
 }
 
 
 //第三方获取口令分享的口令信息
 //第三方获取口令分享的口令信息
 func (this *Share) GetOtherWordShare() {
 func (this *Share) GetOtherWordShare() {
-    defer util.Catch()
-    res := map[string]interface{}{
-        "error_code": error_code[0],
-        "error_msg":  error_msg[0],
-    }
-    if this.Method() == METHOD {
-        //模块 A:超级订阅  B:数据导出  C:数据报告 X公告三级页等
-        modular := this.GetString("modular")
-        url := this.GetString("url")
-        if modular != "" {
-            userId, _ := this.GetSession("userId").(string)
-            //userId := "123"
-            partner_user := false
-            if userId != "" {
-                s_nickname, _ := this.GetSession("s_nickname").(string)
-                //s_nickname := "232"
-                if s_nickname == "" {
-                    s_nickname, _ = this.GetSession("app_name").(string)
-                }
-                //判断是否参与伙伴计划
-                var insert_1, insert_3 int64
-                partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=?`, userId) > 0
-                if Mysql.ExecTx("加入伙伴", func(tx *sql.Tx) bool {
-                    if !partner_user {
-                        insert := map[string]interface{}{
-                            "type":          3,
-                            "phone":         0,
-                            "email":         0,
-                            "channel":       "微信",
-                            "uid":           userId,
-                            "is_adopt":      1,
-                            "auth_status":   0, //认证状态
-                            "createtime":    time.Now().Format(Date_Full_Layout),
-                            "lastlogintime": time.Now().Format(Date_Full_Layout),
-                        }
-                        insert_1 = Mysql.InsertByTx(tx, "dis_partner", insert) //伙伴表
-                        log.Println("插入伙伴计划", insert_1)
-                        partner_user = Mysql.CountBySql(`select count(*) from account where uid=?`, userId) > 0
-                        if !partner_user {
-                            insert_3 = Mysql.InsertByTx(tx, "account", map[string]interface{}{ //个人账户表
-                                "uid":            userId,
-                                "money":          0,
-                                "dis_sales":      0,
-                                "dis_commission": 0,
-                                "dis_order":      0,
-                            })
-                            log.Println("插入账号表", insert_3)
-                        }
+	defer util.Catch()
+	res := map[string]interface{}{
+		"error_code": error_code[0],
+		"error_msg":  error_msg[0],
+	}
+	if this.Method() == METHOD {
+		//模块 A:超级订阅  B:数据导出  C:数据报告 X公告三级页等
+		modular := this.GetString("modular")
+		url := this.GetString("url")
+		if modular != "" {
+			userId, _ := this.GetSession("userId").(string)
+			//userId := "123"
+			partner_user := false
+			if userId != "" {
+				s_nickname, _ := this.GetSession("s_nickname").(string)
+				//s_nickname := "232"
+				if s_nickname == "" {
+					s_nickname, _ = this.GetSession("app_name").(string)
+				}
+				//判断是否参与伙伴计划
+				var insert_1, insert_3 int64
+				partner_user = Mysql.CountBySql(`select count(*) from dis_partner where uid=? and  type=2`, userId) > 0
+				if Mysql.ExecTx("加入伙伴", func(tx *sql.Tx) bool {
+					if !partner_user {
+						insert := map[string]interface{}{
+							"type":          3,
+							"phone":         0,
+							"email":         0,
+							"channel":       "微信",
+							"uid":           userId,
+							"is_adopt":      1,
+							"auth_status":   0, //认证状态
+							"createtime":    time.Now().Format(Date_Full_Layout),
+							"lastlogintime": time.Now().Format(Date_Full_Layout),
+						}
+						insert_1 = Mysql.InsertByTx(tx, "dis_partner", insert) //伙伴表
+						log.Println("插入伙伴计划", insert_1)
+						partner_user = Mysql.CountBySql(`select count(*) from account where uid=?`, userId) > 0
+						if !partner_user {
+							insert_3 = Mysql.InsertByTx(tx, "account", map[string]interface{}{ //个人账户表
+								"uid":            userId,
+								"money":          0,
+								"dis_sales":      0,
+								"dis_commission": 0,
+								"dis_order":      0,
+							})
+							log.Println("插入账号表", insert_3)
+						}
 
 
-                    }
-                    word := VarLSCPool.GetJob()
-                    word += suffix_msgt
-                    //用户昵称存redis   app粘贴时备用
-                    effectiveTime := time.Now().Unix() + int64(Sysconfig.TermValidity*60)
-                    url = strings.Replace(url, "/jyapp", "", 1)
-                    redis.Put("other", "DIS_"+word, s_nickname+"##"+userId+"##"+url+"##"+fmt.Sprint(effectiveTime), -1)
-                    log.Println("生成口号命令", userId)
-                    res["data"] = map[string]interface{}{
-                        "disWord":   modular + word,                               //口令
-                        "shareLink": Sysconfig.Webdomain + "/X/" + modular + word, //微信分享链接
-                        "erUrl":     "/jyapp/front/downloadJyApp/qrOther?discored=" + modular + word + "&title=公告信息",
-                    }
-                    res["error_code"] = 0
-                    res["error_msg"] = ""
-                    return insert_1 > 0 && insert_3 > -1
-                }) {
+					}
+					word := VarLSCPool.GetJob()
+					word += suffix_msgt
+					//用户昵称存redis   app粘贴时备用
+					effectiveTime := time.Now().Unix() + int64(Sysconfig.TermValidity*60)
+					url = strings.Replace(url, "/jyapp", "", 1)
+					redis.Put("other", "DIS_"+word, s_nickname+"##"+userId+"##"+url+"##"+fmt.Sprint(effectiveTime), -1)
+					log.Println("生成口号命令", userId)
+					res["data"] = map[string]interface{}{
+						"disWord":   modular + word,                               //口令
+						"shareLink": Sysconfig.Webdomain + "/X/" + modular + word, //微信分享链接
+						"erUrl":     "/jyapp/front/downloadJyApp/qrOther?discored=" + modular + word + "&title=公告信息",
+					}
+					res["error_code"] = 0
+					res["error_msg"] = ""
+					return insert_1 > 0 && insert_3 > -1
+				}) {
 
 
-                }
-            }
-        } else {
-            res["error_msg"] = error_msg[2]
-            res["error_code"] = error_code[2]
-        }
-    }
-    this.ServeJson(res)
+				}
+			}
+		} else {
+			res["error_msg"] = error_msg[2]
+			res["error_code"] = error_code[2]
+		}
+	}
+	this.ServeJson(res)
 }
 }
 
 
 //获取口令分享的口令信息
 //获取口令分享的口令信息
 func (this *Share) GetWordShare() {
 func (this *Share) GetWordShare() {
-    defer util.Catch()
-    res := map[string]interface{}{
-        "error_code": error_code[0],
-        "error_msg":  error_msg[0],
-    }
-    if this.Method() == METHOD {
-        //模块  A:超级订阅  B:数据导出  C:数据报告等
-        modular := this.GetString("modular")
-        if modular != "" {
-            userId, _ := this.GetSession("userId").(string)
-            //userId := "5c89fead1c298a4d75fef39e"
-            if userId != "" {
-                s_nickname, _ := this.GetSession("s_nickname").(string)
-                if s_nickname == "" {
-                    s_nickname, _ = this.GetSession("app_name").(string)
-                }
-                word := redis.GetStr("other", "DIS_"+userId)
-                if word == "" {
-                    userData := Compatible.Select(userId, `{"s_disword":1}`)
-                    if (*userData)["s_disword"] != nil && util.ObjToString((*userData)["s_disword"]) != "" {
-                        word = util.ObjToString((*userData)["s_disword"])
-                    } else {
-                        word = VarLSCPool.GetJob()
-                        //用户昵称存redis   app粘贴时备用
-                        redis.Put("other", "DIS_"+word, s_nickname+"##"+userId, -1)
-                        //用户信息绑定分享口令
-                        redis.Put("other", "DIS_"+userId, word, -1)
-                        ok := Compatible.Update(userId, map[string]interface{}{
-                            "$set": map[string]interface{}{
-                                "s_disword": word,
-                            },
-                        })
-                        if !ok {
-                            log.Println("保存 口令到user失败-", userId)
-                        }
-                    }
-                }
-                res["data"] = map[string]interface{}{
-                    "disWord":   modular + word,                               //口令
-                    "shareLink": Sysconfig.Webdomain + "/F/" + modular + word, //微信分享链接
-                    "erUrl":     "/jyapp/getERCode/DIS_" + modular + word,     //二维码地址
-                }
-                res["error_code"] = 0
-                res["error_msg"] = ""
-            } else {
-                res["error_msg"] = error_msg[1]
-                res["error_code"] = error_code[1]
-            }
-        } else {
-            res["error_msg"] = error_msg[2]
-            res["error_code"] = error_code[2]
-        }
-    }
-    this.ServeJson(res)
+	defer util.Catch()
+	res := map[string]interface{}{
+		"error_code": error_code[0],
+		"error_msg":  error_msg[0],
+	}
+	if this.Method() == METHOD {
+		//模块  A:超级订阅  B:数据导出  C:数据报告等
+		modular := this.GetString("modular")
+		if modular != "" {
+			userId, _ := this.GetSession("userId").(string)
+			//userId := "5c89fead1c298a4d75fef39e"
+			if userId != "" {
+				s_nickname, _ := this.GetSession("s_nickname").(string)
+				if s_nickname == "" {
+					s_nickname, _ = this.GetSession("app_name").(string)
+				}
+				word := redis.GetStr("other", "DIS_"+userId)
+				if word == "" {
+					userData := Compatible.Select(userId, `{"s_disword":1}`)
+					if (*userData)["s_disword"] != nil && util.ObjToString((*userData)["s_disword"]) != "" {
+						word = util.ObjToString((*userData)["s_disword"])
+					} else {
+						word = VarLSCPool.GetJob()
+						//用户昵称存redis   app粘贴时备用
+						redis.Put("other", "DIS_"+word, s_nickname+"##"+userId, -1)
+						//用户信息绑定分享口令
+						redis.Put("other", "DIS_"+userId, word, -1)
+						ok := Compatible.Update(userId, map[string]interface{}{
+							"$set": map[string]interface{}{
+								"s_disword": word,
+							},
+						})
+						if !ok {
+							log.Println("保存 口令到user失败-", userId)
+						}
+					}
+				}
+				res["data"] = map[string]interface{}{
+					"disWord":   modular + word,                               //口令
+					"shareLink": Sysconfig.Webdomain + "/F/" + modular + word, //微信分享链接
+					"erUrl":     "/jyapp/getERCode/DIS_" + modular + word,     //二维码地址
+				}
+				res["error_code"] = 0
+				res["error_msg"] = ""
+			} else {
+				res["error_msg"] = error_msg[1]
+				res["error_code"] = error_code[1]
+			}
+		} else {
+			res["error_msg"] = error_msg[2]
+			res["error_code"] = error_code[2]
+		}
+	}
+	this.ServeJson(res)
 }
 }
 
 
 //type 1:超级订阅 2:数据导出 3:数据报告 4:中标必听课 5三级页
 //type 1:超级订阅 2:数据导出 3:数据报告 4:中标必听课 5三级页
 func (this *Share) ShareLogs() {
 func (this *Share) ShareLogs() {
-    userId, _ := this.GetSession("userId").(string)
-    //userId := "5c89fead1c298a4d75fef39e"
-    status, msg := func() (int, string) {
-        typ, _ := this.GetInteger("product_type")
-        product_type := ""
-        if typ == 1 {
-            product_type = "超级订阅"
-        } else if typ == 2 {
-            product_type = "数据导出"
-        } else if typ == 3 {
-            product_type = "数据报告"
-        } else if typ == 4 {
-            product_type = "中标必听课"
-        } else {
-            return -1, "product_type参数错误"
-        }
-        lock := &sync.Mutex{}
-        lock.Lock()
-        //count++
-        MQFW.Update("dis_product", map[string]interface{}{
-            "s_name": product_type,
-        }, map[string]interface{}{
-            "$set": map[string]interface{}{
-                "l_timetamp": time.Now().Unix(),
-            },
-            "$inc": map[string]interface{}{
-                "i_shareCount": 1,
-            },
-        }, false, false)
-        lock.Unlock()
-        //保存日志
-        userid := util.If(userId == "", "", userId)
-        logid := MQFW.Save("distribution_sharelog", map[string]interface{}{
-            "userid":       userid,
-            "createtime":   time.Now().Unix(),
-            "url":          this.Request.Referer(),
-            "client":       this.Header("User-Agent"),
-            "product_type": typ,
-            "action":       this.GetString("act"),
-            "password":     this.GetString("password"),
-        })
-        if logid == "" {
-            return -1, "保存分享日志出错"
-        }
-        return 1, ""
-    }()
-    if status != 1 {
-        log.Println(this.GetSession("userId"), msg)
-    }
+	userId, _ := this.GetSession("userId").(string)
+	//userId := "5c89fead1c298a4d75fef39e"
+	status, msg := func() (int, string) {
+		typ, _ := this.GetInteger("product_type")
+		product_type := ""
+		if typ == 1 {
+			product_type = "超级订阅"
+		} else if typ == 2 {
+			product_type = "数据导出"
+		} else if typ == 3 {
+			product_type = "数据报告"
+		} else if typ == 4 {
+			product_type = "中标必听课"
+		} else {
+			return -1, "product_type参数错误"
+		}
+		lock := &sync.Mutex{}
+		lock.Lock()
+		//count++
+		MQFW.Update("dis_product", map[string]interface{}{
+			"s_name": product_type,
+		}, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"l_timetamp": time.Now().Unix(),
+			},
+			"$inc": map[string]interface{}{
+				"i_shareCount": 1,
+			},
+		}, false, false)
+		lock.Unlock()
+		//保存日志
+		userid := util.If(userId == "", "", userId)
+		logid := MQFW.Save("distribution_sharelog", map[string]interface{}{
+			"userid":       userid,
+			"createtime":   time.Now().Unix(),
+			"url":          this.Request.Referer(),
+			"client":       this.Header("User-Agent"),
+			"product_type": typ,
+			"action":       this.GetString("act"),
+			"password":     this.GetString("password"),
+		})
+		if logid == "" {
+			return -1, "保存分享日志出错"
+		}
+		return 1, ""
+	}()
+	if status != 1 {
+		log.Println(this.GetSession("userId"), msg)
+	}
 }
 }
 
 
 func (this *Share) ShareLink() {
 func (this *Share) ShareLink() {
-    res := map[string]interface{}{
-        "error_code": error_code[0],
-        "error_msg":  error_msg[0],
-        "data":       "",
-    }
-    disWord := this.GetString("disWord")
-    dis := disWord[:1]
-    url := Sysconfig.Webdomain + "/G/" + disWord
-    if dis == "E" {
-        url = Sysconfig.Webdomain + "/E/" + disWord
-    } else if dis == "F" {
-        url = Sysconfig.Webdomain + "/F/" + disWord
-    }
+	res := map[string]interface{}{
+		"error_code": error_code[0],
+		"error_msg":  error_msg[0],
+		"data":       "",
+	}
+	disWord := this.GetString("disWord")
+	dis := disWord[:1]
+	url := Sysconfig.Webdomain + "/G/" + disWord
+	if dis == "E" {
+		url = Sysconfig.Webdomain + "/E/" + disWord
+	} else if dis == "F" {
+		url = Sysconfig.Webdomain + "/F/" + disWord
+	}
 
 
-    log.Println(url)
-    r, _ := qr.Encode(url, qr.M)
-    pngdat := r.PNG()
-    res["error_code"] = 0
-    res["error_msg"] = "二维码获取"
-    res["data"] = base64.StdEncoding.EncodeToString(pngdat)
-    this.ServeJson(res)
+	log.Println(url)
+	r, _ := qr.Encode(url, qr.M)
+	pngdat := r.PNG()
+	res["error_code"] = 0
+	res["error_msg"] = "二维码获取"
+	res["data"] = base64.StdEncoding.EncodeToString(pngdat)
+	this.ServeJson(res)
 }
 }

+ 1 - 1
src/jfw/modules/distribution/src/timetask/timetask.go

@@ -159,7 +159,7 @@ func settlement() {
 			var sFx *settlementFx
 			var sFx *settlementFx
 			count_code := VarOrderCode.Get() //结算单号
 			count_code := VarOrderCode.Get() //结算单号
 			nowFormat := NowFormat(Date_Full_Layout)
 			nowFormat := NowFormat(Date_Full_Layout)
-			partner := Mysql.SelectBySql(`select a.name,a.type,a.auth_status,b.legal_idcard from dis_partner a left join dis_auth b on (b.auth_status=1 and a.id=b.partner_id) where a.uid=? ORDER BY b.auth_time desc limit 1`, uid)
+			partner := Mysql.SelectBySql(`select a.name,a.type,a.auth_status,b.legal_idcard from dis_partner a left join dis_auth b on (b.auth_status=1 and a.id=b.partner_id) where a.uid=? and  a.type=2 ORDER BY b.auth_time desc limit 1`, uid)
 			count_cash, tax_cash := int64(0), int64(0)
 			count_cash, tax_cash := int64(0), int64(0)
 			if partner != nil && len(*partner) > 0 {
 			if partner != nil && len(*partner) > 0 {
 				partner_type, _ := (*partner)[0]["type"].(int64)
 				partner_type, _ := (*partner)[0]["type"].(int64)

+ 9 - 9
src/jfw/modules/subscribepay/src/entity/shareFission.go

@@ -44,14 +44,14 @@ const (
 
 
 var jianyubiReg = regexp.MustCompile(`达到(\d+)剑鱼币`)
 var jianyubiReg = regexp.MustCompile(`达到(\d+)剑鱼币`)
 
 
-//增加权益
+// 增加权益
 func (this *ShareFission) AddPower(r *http.Request) {
 func (this *ShareFission) AddPower(r *http.Request) {
 	if this.ShareUid != "" { //有分享人
 	if this.ShareUid != "" { //有分享人
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, this.UserId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, this.UserId, jy.Jywx_node1, nil)
 		if err != nil {
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, this.UserId)
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, this.UserId)
 		}
 		}
-		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, this.ShareUid, jy.Jywx_node1)
+		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, this.ShareUid, jy.Jywx_node1, nil)
 		if err != nil {
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, this.ShareUid)
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, this.ShareUid)
 		}
 		}
@@ -60,7 +60,7 @@ func (this *ShareFission) AddPower(r *http.Request) {
 	} else { //无分享人-新用户
 	} else { //无分享人-新用户
 		// 年终报告分享过来的
 		// 年终报告分享过来的
 		if this.NewSource == "reportShare" {
 		if this.NewSource == "reportShare" {
-			err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_report_invited, this.UserId, jy.Jywx_node1)
+			err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_report_invited, this.UserId, jy.Jywx_node1, nil)
 			if err != nil {
 			if err != nil {
 				log.Println("nsq队列写入失败-->", err, jy.Jywx_report_invited, this.UserId)
 				log.Println("nsq队列写入失败-->", err, jy.Jywx_report_invited, this.UserId)
 			}
 			}
@@ -72,7 +72,7 @@ func (this *ShareFission) AddPower(r *http.Request) {
 		} else if qu.IsWxBrowser(r) { //微信端绑定手机号
 		} else if qu.IsWxBrowser(r) { //微信端绑定手机号
 			e_code = jy.Jywx_subscribe_new
 			e_code = jy.Jywx_subscribe_new
 		}
 		}
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, e_code, this.UserId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, e_code, this.UserId, jy.Jywx_node1, nil)
 		if err != nil {
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, e_code, this.UserId)
 			log.Println("nsq队列写入失败-->", err, e_code, this.UserId)
 		}
 		}
@@ -83,11 +83,11 @@ var mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
 
 
 func AddPower(s_m_openid, userId string, r *http.Request) {
 func AddPower(s_m_openid, userId string, r *http.Request) {
 	if shareUid := redis.GetStr(config.Config.ShareRedisName, fmt.Sprintf("rec_%s", s_m_openid)); shareUid != "" {
 	if shareUid := redis.GetStr(config.Config.ShareRedisName, fmt.Sprintf("rec_%s", s_m_openid)); shareUid != "" {
-		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, userId, jy.Jywx_node1)
+		err := jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invited, userId, jy.Jywx_node1, nil)
 		if err != nil {
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, userId)
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invited, userId)
 		}
 		}
-		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, shareUid, jy.Jywx_node1)
+		err = jy.Publish(util.Mgo_log, config.Config.Nsq, config.Config.Nsq_Topic, jy.Jywx_subscribe_invite, shareUid, jy.Jywx_node1, nil)
 		if err != nil {
 		if err != nil {
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, shareUid)
 			log.Println("nsq队列写入失败-->", err, jy.Jywx_subscribe_invite, shareUid)
 		}
 		}
@@ -97,8 +97,8 @@ func AddPower(s_m_openid, userId string, r *http.Request) {
 }
 }
 
 
 /*
 /*
-	starttime,endtime:权益开始结束时间
-	types:订单类型  1: 仅延长周期  2: 开通权益
+starttime,endtime:权益开始结束时间
+types:订单类型  1: 仅延长周期  2: 开通权益
 */
 */
 func Order(userid, starttime, endtime string, types, dayNum int, remark string) bool {
 func Order(userid, starttime, endtime string, types, dayNum int, remark string) bool {
 	_, buyset, isvip := JyVipSubStruct.GetVipDetail(userid)
 	_, buyset, isvip := JyVipSubStruct.GetVipDetail(userid)

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

@@ -3,9 +3,9 @@ module jy/src/jfw/modules/subscribepay/src
 go 1.18
 go 1.18
 
 
 require (
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb
+	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064
+	app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
@@ -128,7 +128,7 @@ require (
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
 	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
 	google.golang.org/grpc v1.56.1 // indirect
 	google.golang.org/grpc v1.56.1 // indirect
-	google.golang.org/protobuf v1.30.0 // indirect
+	google.golang.org/protobuf v1.31.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
@@ -137,7 +137,7 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/api v0.26.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect
 	k8s.io/client-go v0.26.3 // indirect

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

@@ -5,12 +5,12 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb h1:fT7FIKElKjkRHTmDxXPeNr5LWe2RmyJU+5aod1nptek=
-app.yhyue.com/moapp/jybase v0.0.0-20230614085041-f8f20842d5cb/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+see7t8ZTxnsCJaz5PGRqJXzwR6f7s=
+app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064 h1:iHqmyjzumVbeWeN1f4l+cpuRBizCO/VZvOUyGD5b/EM=
-app.yhyue.com/moapp/jypkg v0.0.0-20230627060822-53aa53e4d064/go.mod h1:JBkMSnaOQbfV80laTPwjzjfP6nLXOQpJBaNUdvKV2tw=
+app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13 h1:SHHxYLu6EQRvwykoQk55vuAITLDV5dwWt1MACiXr9bs=
+app.yhyue.com/moapp/jypkg v0.0.0-20230811011214-d7e0fd4ddb13/go.mod h1:VaHDi3twSg4G84k2+UFOe7ZCw5EqUZVAkW2N2dHeMbU=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -1359,8 +1359,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
@@ -1423,8 +1423,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602 h1:lZ0XCzRDSOBaoJczQudZ3KZhRs4zm5sjboDpwuYZUVM=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230626055559-2b719f6c6602/go.mod h1:Jjhym3U0MFdSgeafHPm758NefCPZpekg2sWPh6Gy6Jk=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 h1:BItxi1gkQUs3sjxaBk6tc34fZWSO4hUSXcTM3PcnY4I=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

+ 23 - 24
src/jfw/modules/subscribepay/src/service/userAccountInfo.go

@@ -15,6 +15,7 @@ import (
 	. "app.yhyue.com/moapp/jybase/api"
 	. "app.yhyue.com/moapp/jybase/api"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
 	. "app.yhyue.com/moapp/jybase/date"
+	"app.yhyue.com/moapp/jybase/dchest/captcha"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	elastic "app.yhyue.com/moapp/jybase/es"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
@@ -24,7 +25,6 @@ import (
 	"app.yhyue.com/moapp/jybase/usercenter"
 	"app.yhyue.com/moapp/jybase/usercenter"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"app.yhyue.com/moapp/jypkg/common/src/qfw/util/jy"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
 	"bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/pb"
-	"app.yhyue.com/moapp/jybase/dchest/captcha"
 )
 )
 
 
 type UserAccount struct {
 type UserAccount struct {
@@ -387,7 +387,7 @@ func (this *UserAccount) PhoneBind() {
 			if unionid == "" {
 			if unionid == "" {
 				return "", fmt.Errorf("获取账户信息异常")
 				return "", fmt.Errorf("获取账户信息异常")
 			}
 			}
-			exists, relationPhoneId := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, phoneVerify)
+			exists, relationPhoneId := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(userId, unionid, phoneVerify)
 			if exists { //再次校验是否使用
 			if exists { //再次校验是否使用
 				return nil, fmt.Errorf("手机号已被绑定")
 				return nil, fmt.Errorf("手机号已被绑定")
 			}
 			}
@@ -776,30 +776,29 @@ func (this *UserAccount) WxUnBind() {
 				"i_ratemode": 2,
 				"i_ratemode": 2,
 				// "i_newfree":  1, //新免费用户=>新订阅设置页面 20211122
 				// "i_newfree":  1, //新免费用户=>新订阅设置页面 20211122
 			}
 			}
+			userAddReq := &pb.UserAddReq{
+				Appid:   "10000",
+				Unionid: qutil.ObjToString((*unsetMap)["s_unionid"]),
+				SOpenid: s_m_openid,
+			}
+			if qutil.ObjToString((*unsetMap)["s_nickname"]) != "" {
+				userAddReq.Nickname = qutil.ObjToString((*unsetMap)["s_nickname"])
+			}
+			if qutil.ObjToString((*unsetMap)["s_headimageurl"]) != "" {
+				userAddReq.Headimg = qutil.ObjToString((*unsetMap)["s_headimageurl"])
+			}
+			if qutil.ObjToString((*unsetMap)["a_m_openid"]) != "" {
+				userAddReq.AOpenid = qutil.ObjToString((*unsetMap)["a_m_openid"])
+			}
+			if resp := config.Middleground.UserCenter.UserAdd(*userAddReq); resp != nil && resp.Data.Id > 0 {
+				(*unsetMap)["base_user_id"] = resp.Data.Id
+			} else {
+				log.Println(qutil.ObjToString((*unsetMap)["s_unionid"]), "调用usercenter失败")
+				return nil, DBUPDATE_ERROR
+			}
 			//公众号微信关注移至另一用户中  此时微信公众号用户session问题错乱
 			//公众号微信关注移至另一用户中  此时微信公众号用户session问题错乱
 			if saveId := util.MQFW.Save("user", unsetMap); saveId == "" {
 			if saveId := util.MQFW.Save("user", unsetMap); saveId == "" {
 				return nil, DBUPDATE_ERROR
 				return nil, DBUPDATE_ERROR
-			} else {
-				//用户中台存储  开始
-				func(phone, userid string) {
-					userAddReq := &pb.UserAddReq{
-						Appid:   "10000",
-						Unionid: qutil.ObjToString((*unsetMap)["s_unionid"]),
-						SOpenid: s_m_openid,
-					}
-					if qutil.ObjToString((*unsetMap)["s_nickname"]) != "" {
-						userAddReq.Nickname = qutil.ObjToString((*unsetMap)["s_nickname"])
-					}
-					if qutil.ObjToString((*unsetMap)["s_headimageurl"]) != "" {
-						userAddReq.Headimg = qutil.ObjToString((*unsetMap)["s_headimageurl"])
-					}
-					if qutil.ObjToString((*unsetMap)["a_m_openid"]) != "" {
-						userAddReq.AOpenid = qutil.ObjToString((*unsetMap)["a_m_openid"])
-					}
-					if ok := jy.AddUser(util.MQFW, userid, *userAddReq, *config.Middleground); !ok {
-						log.Println("usercenter add error", userid, phone)
-					}
-				}(phone, saveId)
 			}
 			}
 			flushWxsession = true
 			flushWxsession = true
 		}
 		}
@@ -894,7 +893,7 @@ func phoneStep(sess *httpsession.Session, step int, phone, code, sign string) (s
 			if unionid == "" {
 			if unionid == "" {
 				return "", fmt.Errorf("获取账户信息异常")
 				return "", fmt.Errorf("获取账户信息异常")
 			}
 			}
-			if exists, _ := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, phone); exists {
+			if exists, _ := jy.NewPhoneUtil(util.MQFW).BindPhoneIsOccupy(unionid, unionid, phone); exists {
 				return "", fmt.Errorf("手机号已被使用")
 				return "", fmt.Errorf("手机号已被使用")
 			}
 			}
 		}
 		}

+ 13 - 2
src/web/staticres/common-module/collection/css/index.css

@@ -920,7 +920,7 @@
 /* 空状态样式 */
 /* 空状态样式 */
 
 
 .emptycom {
 .emptycom {
-    margin-top: 3.6rem;
+    /* margin-top: 3.6rem; */
     display: -webkit-box;
     display: -webkit-box;
     display: -webkit-flex;
     display: -webkit-flex;
     display: flex;
     display: flex;
@@ -935,6 +935,7 @@
     -webkit-align-items: center;
     -webkit-align-items: center;
     align-items: center;
     align-items: center;
     width: 100%;
     width: 100%;
+    height: 100%;
 }
 }
 
 
 .emptycom .emptyimg {
 .emptycom .emptyimg {
@@ -955,7 +956,17 @@
     color: #5f5e64;
     color: #5f5e64;
     line-height: .4rem;
     line-height: .4rem;
 }
 }
-
+.emptycom .empty-btn{
+  width: 3.3rem;
+  height: .8rem;
+  line-height: .8rem;
+  margin-top: .48rem;
+  background: #2ABED1;
+  color: #fff;
+  font-size: .32rem;
+  border-radius: 4px;
+  text-align: center;
+}
 
 
 /* vip弹窗样式 */
 /* vip弹窗样式 */
 .vip_component {
 .vip_component {

+ 26 - 3
src/web/staticres/common-module/collection/js/date-mobile.js

@@ -424,6 +424,7 @@ var dateComponent = {
       return t
       return t
     },
     },
     selectFixedDate: function(item) {
     selectFixedDate: function(item) {
+     
       if (item.selected) return
       if (item.selected) return
       if (!item.isFree && !this.rootopen) {
       if (!item.isFree && !this.rootopen) {
         var _this = this
         var _this = this
@@ -440,9 +441,18 @@ var dateComponent = {
         return
         return
       }
       }
       this.timeSelectList.forEach(v => (v.selected = false))
       this.timeSelectList.forEach(v => (v.selected = false))
-      item.selected = true
-      this.dateStyle = false
-      this.clearDateTimePicker()
+      item.selected = true 
+      console.log(item)
+      // this.$emit('tagsChange')
+      let that = this
+      try{ 
+       window.$tagsChange()
+       let result = that.getState()
+        window.$chooseData({result,exact:item.value})
+      }catch(e){
+
+      }
+      
     },
     },
     // 显示选择时间弹窗
     // 显示选择时间弹窗
     dateShowEvent: function() {
     dateShowEvent: function() {
@@ -545,6 +555,12 @@ var dateComponent = {
         this.datePicker.endshow = false
         this.datePicker.endshow = false
       }
       }
       this.sortTime(this.dateTimePickerState.start, this.dateTimePickerState.end)
       this.sortTime(this.dateTimePickerState.start, this.dateTimePickerState.end)
+      try{
+        let result = that.getState()
+        window.$chooseData({result,exact:null})
+      }catch(e){
+
+      }
     },
     },
     // 选择结束时间弹窗确认按钮
     // 选择结束时间弹窗确认按钮
     onendConfirm: function(){
     onendConfirm: function(){
@@ -552,6 +568,13 @@ var dateComponent = {
       this.dateTimePickerState.endPlaceHolder = this.$refs.getendValues.value.pattern('yyyy年MM月dd日')
       this.dateTimePickerState.endPlaceHolder = this.$refs.getendValues.value.pattern('yyyy年MM月dd日')
       this.datePicker.endshow = false
       this.datePicker.endshow = false
       this.sortTime(this.dateTimePickerState.start, this.dateTimePickerState.end)
       this.sortTime(this.dateTimePickerState.start, this.dateTimePickerState.end)
+      let that = this
+      try{
+        let result = that.getState()
+        window.$chooseData({result,exact:null})
+      }catch(e){
+
+      }
     },
     },
     // 时间大小判断
     // 时间大小判断
     sortTime: function(start, end) {
     sortTime: function(start, end) {

文件差异内容过多而无法显示
+ 0 - 0
src/web/staticres/common-module/selector/js/province_city.js


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

@@ -301,7 +301,7 @@ margin-left: 176px;
   padding: 0 15px;
   padding: 0 15px;
   box-sizing: border-box;
   box-sizing: border-box;
   border: 1px solid #e0e0e0;
   border: 1px solid #e0e0e0;
-  margin-top: 25px;
+  margin-top: 16px;
   font-size: 14px;
   font-size: 14px;
 /*  overflow: hidden;*/
 /*  overflow: hidden;*/
 }
 }
@@ -400,6 +400,13 @@ margin-left: 176px;
   /*价格区间*/
   /*价格区间*/
   padding: 17px 0px 10px;
   padding: 17px 0px 10px;
   border-bottom: 1px dashed #e0e0e0;
   border-bottom: 1px dashed #e0e0e0;
+
+}
+#searchInner .searchControl .searchTender .Price.select {
+  padding: 0px;
+  border-bottom: none;
+  padding-top: 12px;
+  padding-left: 12px;
 }
 }
 
 
 #searchInner .searchControl .searchTender .Price .Price-content {
 #searchInner .searchControl .searchTender .Price .Price-content {
@@ -411,17 +418,38 @@ margin-left: 176px;
   padding: 4px 7px;
   padding: 4px 7px;
   cursor: pointer;
   cursor: pointer;
   margin: 0 45px 4px 0;
   margin: 0 45px 4px 0;
+
+}
+#searchInner .searchControl .searchTender .Price.select .Price-content span {
+  padding: 0;
+  margin: 0;
+  display: block;
+  margin-bottom: 10px;
+  line-height: 20px;
+  font-size: 14px;
+  color: #1D1D1D !important;
+  padding-left: 25px;
+  background: url('/images/check_.png') no-repeat;
+  background-size: 20px;
+
 }
 }
 
 
 #searchInner .searchControl .searchTender .Price .Price-content span.active {
 #searchInner .searchControl .searchTender .Price .Price-content span.active {
   color: #FFFFFF;
   color: #FFFFFF;
   background-color: #2cb7ca;
   background-color: #2cb7ca;
   border-radius:2px;
   border-radius:2px;
+  
+  
+}
+#searchInner .searchControl .searchTender .Price.select .Price-content span.active {
+  background-color: #fff;
+  background-image:url('/images/checked_.png')!important;
+  
 }
 }
 
 
 #searchInner .searchControl .searchTender .Price .Price-content .PriceInput {
 #searchInner .searchControl .searchTender .Price .Price-content .PriceInput {
   float: left;
   float: left;
-/*  margin-top: -2px;*/
+ /* margin-top: -2px; */
 }
 }
 
 
 #searchInner .searchControl .searchTender .Price .Price-content .PriceInput input[type="text"] {
 #searchInner .searchControl .searchTender .Price .Price-content .PriceInput input[type="text"] {
@@ -452,6 +480,16 @@ margin-left: 176px;
   padding: 0;
   padding: 0;
   margin: 12px 6px 0;
   margin: 12px 6px 0;
 }
 }
+#searchInner .searchControl .searchTender .Price.select .Price-content .PriceInput span{
+  float: left;
+  width: 14px;
+  height: 1px;
+  line-height: 15px;
+  background-color: #E0E0E0;
+  padding: 0;
+  margin: 12px 6px 0;
+
+}
 
 
 #searchInner .searchControl .searchTender .Price .Price-content button {
 #searchInner .searchControl .searchTender .Price .Price-content button {
   float: left;
   float: left;
@@ -463,7 +501,18 @@ margin-left: 176px;
   cursor: pointer;
   cursor: pointer;
 	border-radius:2px;
 	border-radius:2px;
 }
 }
-
+#searchInner .searchControl .searchTender .Price.select .Price-content button {
+  float: left;
+  width: 28px;
+  height: 22px;
+  margin: 7px 0 0 10px;
+  background-color: #fff;
+  color: #2cb7ca;
+  cursor: pointer;
+	border-radius:0px;
+  font-size: 14px;
+  padding: 0;
+}
 #searchInner .searchControl .searchTender .release-time {
 #searchInner .searchControl .searchTender .release-time {
   /*发布时间*/
   /*发布时间*/
   padding: 17px 0 10px;
   padding: 17px 0 10px;
@@ -708,7 +757,7 @@ border-radius:2px;
 
 
 #searchInner .searchControl .seaTender-inner {
 #searchInner .searchControl .seaTender-inner {
   /*招标搜索列表内容*/
   /*招标搜索列表内容*/
-  margin-top: 15px;
+  margin-top: 16px;
   background-color: #ffffff;
   background-color: #ffffff;
 /*  border: 1px solid #e0e0e0;*/
 /*  border: 1px solid #e0e0e0;*/
   border-bottom: none;
   border-bottom: none;
@@ -1715,6 +1764,7 @@ body{
 #searchInner .searchHeader-container,
 #searchInner .searchHeader-container,
 #searchInner .filter-header{
 #searchInner .filter-header{
   background: #fff;
   background: #fff;
+  /* border-radius: 8px 8px 0 0; */
 }
 }
 #searchInner .searchHeader-container,
 #searchInner .searchHeader-container,
 #searchInner .searchControl .searchTender{
 #searchInner .searchControl .searchTender{
@@ -1723,3 +1773,6 @@ body{
 #searchInner .searchControl .searchTender{
 #searchInner .searchControl .searchTender{
   border: 0;
   border: 0;
 }
 }
+#searchInner .filter-header{
+  border-radius: 8px 8px 0 0;
+}

+ 15 - 11
src/web/staticres/css/dev2/newBidSearch.css

@@ -17,22 +17,22 @@
 
 
 .searchSpace .search-list .search-list-checkbox{
 .searchSpace .search-list .search-list-checkbox{
   float: left;
   float: left;
-  padding-left: 22px;
+  padding-left: 28px;
   cursor: pointer;
   cursor: pointer;
-  background: url(/images/biddingSearch/icon-checkbox.png) no-repeat center left;
-  background-size: 14px 14px;
+  background: url(/images/biddingSearch/icon-checkbox-new.png) no-repeat center left;
+  background-size: 22px 22px;
   border: 0;
   border: 0;
 }
 }
 .searchSpace .search-list-checkbox.checkbox-checked{
 .searchSpace .search-list-checkbox.checkbox-checked{
-  background: url(/images/biddingSearch/icon-checked.png) no-repeat center left;
-  background-size: 14px 14px;
+  background: url(/images/biddingSearch/icon-checked-new.png) no-repeat center left;
+  background-size: 22px 22px;
 }
 }
 .searchSpace .search-list .icon-vip{
 .searchSpace .search-list .icon-vip{
-  float: left;
-  display: inline-block;
+  /* float: left; */
+  /* display: inline-block;
   width: 38px;
   width: 38px;
-  height: 18px;
-  margin-left: 8px;
+  height: 18px; */
+  /* margin-left: 8px; */
 }
 }
 /* 高级筛选 */
 /* 高级筛选 */
 .advanced-filter{
 .advanced-filter{
@@ -85,6 +85,9 @@
   padding: 15px 0;
   padding: 15px 0;
   border-top: 1px dashed #e0e0e0;
   border-top: 1px dashed #e0e0e0;
 }
 }
+.lh-22{
+  line-height: 22px;
+}
 .other-filter .other-content{
 .other-filter .other-content{
   float: left;
   float: left;
   width: calc(100% - 116px);
   width: calc(100% - 116px);
@@ -153,9 +156,10 @@
   cursor: pointer;
   cursor: pointer;
   text-align: left;
   text-align: left;
 }
 }
-.custom-option > li:hover{
+/* .custom-option > li:hover{
   background: #ececec;
   background: #ececec;
-}
+} */
+
 .other-filter .buy-select > select,
 .other-filter .buy-select > select,
 .other-filter .bid-select > select{
 .other-filter .bid-select > select{
   border: 0;
   border: 0;

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

@@ -160,13 +160,13 @@
 	position: absolute;
 	position: absolute;
     left: 124px;
     left: 124px;
     top: 7.5px;
     top: 7.5px;
-    color: #ccc;
+    color: #1D1D1D;
 }
 }
 .maxwy{
 .maxwy{
 	position: absolute;
 	position: absolute;
     right: 8px;
     right: 8px;
     top: 7.5px;
     top: 7.5px;
-    color: #ccc;
+    color: #1D1D1D;
 }
 }
 .PriceInput{
 .PriceInput{
 	position:relative;
 	position:relative;
@@ -272,6 +272,9 @@
   position: absolute;
   position: absolute;
   left: 372px;
   left: 372px;
 }
 }
+.tips_ .remindtwo{
+  z-index: 20;
+}
 .visited td {
 .visited td {
   color: #999!important;
   color: #999!important;
 }
 }
@@ -499,3 +502,78 @@ input, textarea {
   line-height: 24px;
   line-height: 24px;
   color: #1D1D1D;
   color: #1D1D1D;
 }
 }
+.lh-22{
+  line-height: 22px;
+}
+.other-filter.lh-22{
+  padding: 20px 0;
+}
+.selector-card.file{
+  padding: 0 0 20px 0;
+}
+.bid-select.others,.buy-select.others{
+  /* width: 200px; */
+  margin-right: 16px;
+}
+.custom-select.others{
+  width: 200px;
+  padding-left: 0;
+  padding-right: 0;
+}
+.other-filter .other-content .el-input__inner:hover{
+  border-color: #E0E0E0;
+}
+.other-filter .other-content .el-input__inner{
+  border-color:#E0E0E0;
+  width: 200px;
+  box-sizing: border-box;
+  color:#1D1D1D ;
+}
+.selector-card-content.mini-select .el-select .el-input .el-select__caret{
+  color: #AAAAAA;
+}
+.selector-card-content.mini-select .el-select .el-input.is-focus .el-input__inner {
+  border-color: #2cb7ca !important;
+}
+ .el-select-dropdown.el-popper.select_common_data {
+  margin: 0;
+  border: 1px solid #2cb7ca;
+
+}
+.el-select-dropdown.el-popper[x-placement^=bottom].select_common_data {
+  margin-top: 5px;
+}
+.el-select-dropdown.el-popper[x-placement^=bottom].select_common_data .popper__arrow {
+  display: none;
+}
+.el-select-dropdown.el-popper.select_common_data .el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
+  background-color: #ececec;
+}
+.el-select-dropdown.el-popper.select_common_data .el-select-dropdown__item.selected{
+  font-weight: 400;
+  color: #1D1D1D;
+}
+.el-select-dropdown.el-popper.select_common_data  .el-select-dropdown__item{
+  color: #1D1D1D;
+}
+.two-filter .custom-option{
+  padding: 6px 0;
+  margin-top: 5px;
+  background-color: #fff;
+}
+.other-filter .one-filter,.two-filter{
+  display: flex;
+}
+.mr-16{
+  margin-right: 16px;
+}
+.two-filter .custom-input.select-input{
+  width: 195px;
+  text-indent: 16px;
+
+}
+
+.active_select_custom.item_option{
+  background: #ececec;
+}
+

+ 192 - 1
src/web/staticres/css/dev2/superSearch.css

@@ -8,7 +8,15 @@
 .pricefat{
 .pricefat{
 	float: left;
 	float: left;
 	margin-top: -9px;
 	margin-top: -9px;
-	/* border: 1px solid #fff; */
+	border: 1px solid #fff;
+    background-color: #F5F6F7;
+	padding: 5px 5px;
+	border-radius:2px;
+}
+.pricefat.seleted_{
+	float: left;
+	margin-top: 0;
+	border: 1px solid #fff;
     background-color: #F5F6F7;
     background-color: #F5F6F7;
 	padding: 5px 5px;
 	padding: 5px 5px;
 	border-radius:2px;
 	border-radius:2px;
@@ -495,3 +503,186 @@
 }
 }
 
 
 /*E-BI 嵌入样式-E */
 /*E-BI 嵌入样式-E */
+
+.release-time .vip_box{
+  min-height: 50px;
+  margin-left: 6px;
+  padding: 12px;
+  background: linear-gradient(90deg, #FFF7DC 0%, rgba(255, 247, 220, 0) 100%);
+  border: 1px dashed #C98F37;
+  box-sizing: border-box;
+  border-radius: 4px;
+  display: flex;
+  align-items: center;
+  box-sizing: border-box;
+  
+}
+.release-time .vip_box .active{
+  color: #fff !important;
+  background-color:#C98F37 !important;
+  border-radius: 2px;
+  
+}
+.release-time.flex-auto{
+  display: flex;
+  align-items: center;
+}
+.release-time .vip_box .year_{
+  padding: 4px 7px;
+  cursor: pointer;
+  margin-right: 10px;
+  color:#1D1D1D;
+}
+.release-time .vip_box .timerInput_{
+  margin-left: 4px;
+}
+.release-time .vip_box .timerInput_ input{
+    width:142px;
+    height: 24px;
+    padding: 0 15px;
+    box-sizing: border-box;
+    border: 1px solid #C98F37;
+    border-radius: 2px;
+    float: left;
+    color: #1D1D1D;
+
+}
+.release-time .vip_box .timerInput_ span{
+   float: left;
+    width: 14px;
+    height: 1px;
+    line-height: 15px;
+    background-color: #C98F37;
+    padding: 0;
+    margin: 12px 6px 0;
+}
+.searchSpace {
+  padding: 12px 0 !important;
+  min-height: 74px;
+  box-sizing: border-box;
+  border-bottom: 1px dashed rgb(224, 224, 224);
+  display: flex;
+  align-items: center;
+}
+.searchSpace .flex-box{
+  display: flex;
+  align-items: center;
+}
+.searchSpace .vip_box{
+  min-height: 50px;
+  padding: 12px;
+  background: linear-gradient(90deg, #FFF7DC 0%, rgba(255, 247, 220, 0) 100%);
+  border: 1px dashed #C98F37;
+  box-sizing: border-box;
+  border-radius: 4px;
+  display: flex;
+  align-items: center;
+  box-sizing: border-box;
+ 
+}
+.searchSpace .search-content{
+  display: flex;
+}
+.searchSpace .flex-box > .icon-vip{
+  display: inline-block;
+    width: 38px;
+    height: 18px;
+    margin-left: 8px;
+}
+.searchSpace .vip_box .search-list .search-list-checkbox{
+  background: url(/images/biddingSearch/novip-icon.png) no-repeat center left;
+  background-size: 22px 22px;
+
+}
+.searchSpace .vip_box .search-list .search-list-checkbox.checkbox-checked{
+  background: url(/images/biddingSearch/novip-icon-check.png) no-repeat center left;
+  background-size: 22px 22px;
+
+}
+.searchSpace .vip_box .search-list-checkbox em{
+  background: linear-gradient(270deg, #F1D090 0%, #FAE7CA 100%);
+  display: inline-block;
+  padding: 1px 8px;
+  border-radius: 2px;
+  margin-left: 8px;
+  line-height: 18px;
+}
+.searchSpace .search-list .desc-icon{
+  width: 16px;
+  height: 16px;
+  margin-left: 6px;
+  cursor: pointer;
+}
+.searchSpace .search-list.nologin-hide{
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+.remind.tips_ .remindone{
+  left: 250px;
+}
+.remind.tips_ .remindonebak{
+left: 252px;
+}
+.remind.tips_ .remindtwo{
+  left: 268px;
+}
+.desc-con-box{
+  z-index: 99!important;
+}
+.desc-con-box .remindone_{
+  display: inline-block;
+    width: 0px;
+    height: 0px;
+    border: 1px solid #ccc;
+    position: absolute;
+    left: 18px;
+    top: 0px;
+    border-width: 9px;
+    border-color: transparent #ccc transparent transparent;
+    z-index: 9;
+}
+.desc-con-box .remindonebak_{
+  display: inline-block;
+  width: 0px;
+  height: 0px;
+  border: 1px solid #fff;
+  position: absolute;
+  left: 20px;
+  top: 0px;
+  border-width: 9px;
+  border-color: transparent #fff transparent transparent;
+  z-index: 10;
+}
+@media only screen and (max-width: 1350px), only screen and (max-device-width: 1350px) {
+  .desc-con-box .remindtwo_{
+    width: 260px !important;
+ }
+}
+
+
+.desc-con-box .remindtwo_{
+  display: inline-block;
+  width: 333px;
+  border: 1px solid #cecbce;
+  position: absolute;
+  left: 36px;
+  background-color: #fff;
+  padding: 24px 24px;
+  font-family: MicrosoftYaHer-Bold,MicrosoftYaHei;
+  font-size: 14px;
+  line-height: 24px;
+  border-radius: 2px;
+  top: -20px;
+  color: #5c5d61;
+  box-shadow: 0 0 10px rgba(0,0,0, .24);
+  z-index: 5;
+}
+.popup_box{
+  position: relative;
+
+}
+.remindtwo_ span{
+  font-weight: bold;
+    color: #1d1d1d;
+}

+ 311 - 0
src/web/staticres/css/selectCommon.css

@@ -0,0 +1,311 @@
+.el-popper .select_box.selectArea{
+  min-width: 360px;
+  height: 360px;
+  box-sizing: border-box;
+  display: flex;
+}
+#selectArea_{
+  position: relative;
+}
+#selectArea_ .el-input--suffix .el-input__inner{
+  height: 30px;
+}
+#selectArea_ .el-input .el-select__caret{
+  color: #AAAAAA;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+#selectArea_ .el-input .el-input__icon{
+  line-height: normal;
+}
+#selectArea_ .el-input__inner{
+  width: 200px;
+  background-color: transparent;
+}
+#selectArea_ .el-input__inner:hover{
+  border-color: #E0E0E0;
+}
+#selectArea_ .el-select.select_common:hover{
+  border-color: #E0E0E0;
+
+}
+#selectArea_ .valueBox{
+  width: 180px;
+  height: 30px;
+  position:absolute;
+  left: 0;
+  top: 0;
+  z-index: 0;
+  padding-left:16px;
+  box-sizing: border-box;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+#selectArea_ .valueBox span{
+  line-height: 30px;
+  font-size: 14px;
+  color: #1D1D1D;
+}
+#selectArea_ .valueBox .hightlight{
+  color: #2ABED1!important;
+}
+.el-popper .select_box.selectArea .right,.left{
+  flex: 1;
+  height: 100%;
+  box-sizing: border-box;
+  /* padding-left: 10px; */
+  padding-top: 12px;
+  padding-right: 2px;
+  position: relative;
+}
+.el-popper .select_box.selectArea .right{
+  border-left: 1px solid #ECECEC;
+}
+.el-popper .select_box.selectArea .head_tit{
+  display: flex;
+  align-items: center;
+}
+.el-popper .select_box.selectArea  .area-icon-vip{
+  width: 38px;
+  height: 18px;
+  margin-left: 8px;
+  display: block;
+}
+.el-popper .select_box.selectArea .title_{
+font-size: 14px;
+font-weight: 400;
+line-height: 22px;
+color: #999999;
+margin-left: 12px;
+}
+.el-popper .select_box.selectArea .left .box_{
+  margin-top: 12px;
+  height: 312px;
+  overflow-y: auto;
+}
+.el-popper .select_box.selectArea .left .box_ .name_{
+font-size: 14px;
+font-weight: 400;
+line-height: 22px;
+color: #1D1D1D;
+display: inline-block;
+margin-left: 4px;
+}
+.el-popper .select_box.selectArea .box_::-webkit-scrollbar{
+  width: 4px;
+  
+}
+.el-popper .select_box.selectArea .box_::-webkit-scrollbar-thumb, ::-webkit-scrollbar-thumb { 
+  background-color: #E0E0E0 !important;
+}
+.el-popper .select_box.selectArea .left .box_ .el-checkbox{
+  display: inline-block !important;
+  margin-left: 10px;
+}
+.el-popper .select_box.selectArea .right .box_{
+  margin-top: 12px;
+  height: 312px;
+  overflow-y: auto;
+}
+.el-popper .select_box.selectArea .right .box_ .name_{
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 22px;
+  color: #1D1D1D;
+  display: inline-block;
+  margin-left: 4px;
+  }
+.el-popper .select_box.selectArea .right .box_ .el-checkbox{
+  display: inline-block !important;
+  margin-left: 10px;
+}
+.el-popper .select_box.selectArea .left .item_{
+  display: flex;
+  align-items: center;
+  height: 30px;
+  cursor: pointer;
+  /* margin-bottom: 6px; */
+  position: relative;
+}
+.el-popper .select_box.selectArea .right .item_{
+  display: flex;
+  align-items: center;
+  cursor: pointer;
+  height: 30px;
+  /* margin-bottom: 6px; */
+  position: relative;
+}
+.el-popper .select_box.selectArea .box_ .item_ .icon_more{
+  background-size: 100% 100%;
+  width: 16px;
+  height: 15px;
+  position: absolute;
+  right: 4px;
+  top: 7.5px;
+}
+.el-popper .select_box.selectArea .box_ .active_{
+  background-color: #ECECEC;
+}
+.el-select-dropdown.el-popper.select_common_data{
+  z-index: 99!important;
+
+}
+@media only screen and (max-width:1230px),only screen and (max-device-width:1230px){
+  .el-select-dropdown.el-popper.select_common_data.select_Notkey{
+    left: -200px!important;
+
+  }
+  .el-select-dropdown.el-popper.select_common_data.select_price{
+    left: -225px!important;
+
+  }
+}
+.el-popper .select_box.moneyBox{
+  min-width: 425px;
+  height: 104px;
+  box-sizing: border-box;
+}
+.selectbtn.pricebut{
+  display: block!important;
+}
+.notkeyBox.select_box{
+  min-width: 400px;
+  min-height: 157px;
+  box-sizing: border-box;
+
+}
+.selectNotkey .notkeyBox.select_box .el-tag {
+  margin-top: 6px;
+  height: 24px;
+  line-height: 22px;
+  padding: 0 8px;
+  background: #F5F6F7;
+  border: 1px solid #ECECEC;
+  border-radius: 4px;
+  margin-right: 16px;
+  color: #1D1D1D;
+  font-size: 14px;
+  margin-left: 0px;
+}
+.selectNotkey .notkeyBox.select_box .el-icon-close:before {
+  content: "\e6db";
+}
+.selectNotkey .notkeyBox.select_box  .el-tag .el-icon-close::before {
+  display: block;
+}
+.selectNotkey .notkeyBox.select_box .el-tag .el-icon-close::before {
+  display: block;
+}
+.selectNotkey .notkeyBox.select_box .el-icon-close:before {
+  content: "\e6db";
+}
+
+.selectNotkey .notkeyBox.select_box .el-tag .el-tag__close {
+  color: #AAAAAA;
+}
+.selectNotkey .notkeyBox.select_box .el-tag__close.el-icon-close {
+  font-weight: 700;
+}
+.selectNotkey .notkeyBox.select_box .el-tag .el-tag__close {
+  color: #AAAAAA;
+}
+
+
+.selectNotkey .notkeyBox.select_box  .el-tag__close.el-icon-close {
+    font-weight: 700;
+}
+.selectNotkey .notkeyBox.select_box  .el-tag .el-icon-close {
+    border-radius: 50%;
+    text-align: center;
+    position: relative;
+    cursor: pointer;
+    font-size: 12px;
+    height: 16px;
+    width: 16px;
+    line-height: 16px;
+    vertical-align: middle;
+    top: -1px;
+    right: -5px;
+}
+
+
+.selectNotkey .notkeyBox.select_box  .el-tag:hover {
+    color: #2CB7CA;
+    border: 1px solid #2ABED1;
+    background: #fff;
+}
+
+.selectNotkey .notkeyBox.select_box  .el-tag__close.el-icon-close{
+  background-color:rgba(255, 255, 255, 0)!important;
+
+}
+
+
+.selectNotkey .notkeyBox.select_box .el-tag:hover .el-tag__close {
+    background-color: transparent;
+    color: #2CB7CA;
+}
+.selectNotkey .notkeyBox.select_box .key_box{
+  padding-top: 12px;
+  margin-left: 16px;
+}
+.selectNotkey .notkeyBox.select_box .el-input__inner {
+  width: 308px !important;
+  height: 36px;
+  font-size: 14px!important;
+  color: #1D1D1D!important;
+}
+.selectNotkey .notkeyBox.select_box .add-keyword-tags{
+  width: 100%;
+  margin-top: 16px;
+}
+.selectNotkey .notkeyBox.select_box  .el-input.is-disabled .el-input__inner{
+  background-color: #F2F2F4!important;
+  border-color: #ECECEC;
+}
+.select-novip-box{
+   display: flex;
+   align-items: center;
+}
+.select-novip-content{
+   min-width: 872px;
+   padding: 9px 12px;
+   background: linear-gradient(90deg, #FFF7DC 0%, rgba(255, 247, 220, 0) 100%);
+   border: 1px dashed #C98F37;
+   box-sizing: border-box;
+   border-radius: 4px;
+   display: flex;
+   align-items: center;
+   box-sizing: border-box;
+}
+.select-novip-box .icon-vip{
+  width: 38px;
+  margin-left: 12px;
+}
+.select-novip-box .item_select{
+  width: 200px;
+  height: 30px;
+  border: 1px solid #C98F37;
+  /* margin-right: 16px; */
+  padding: 0 7px 0 16px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  border-radius: 4px;
+}
+.select-novip-box .item_select .span_tit{
+  font-size: 14px;
+  color: #1D1D1D;
+  line-height: 22px;
+}
+.select-novip-box .item_select .novip-down{
+ width: 16px;
+ height: 16px;
+}
+.select-novip-box .glod_{
+  color: #C98F37;
+
+}
+

+ 11 - 0
src/web/staticres/css/selector/selector.css

@@ -30,6 +30,17 @@
     font-size: 16px;
     font-size: 16px;
     line-height: 24px;
     line-height: 24px;
 }
 }
+.no-data .tip-btn{
+  width: 108px;
+  height: 30px;
+  margin-top: 24px;
+  background: #2ABED1;
+  color: #fff;
+  font-size: 14px;
+  border-radius: 4px;
+  outline: 0;
+  border: 0;
+}
 
 
 .selector-card-container {
 .selector-card-container {
     padding: 0 14px;
     padding: 0 14px;

+ 10 - 4
src/web/staticres/frontRouter/pc/collection/js/index-pc.js

@@ -80,7 +80,8 @@ var vm = new Vue({
             powerDialogShow: false,
             powerDialogShow: false,
             urlFilterTagId: [],
             urlFilterTagId: [],
             tableShowData: [],
             tableShowData: [],
-            tableFirst20: []
+            tableFirst20: [],
+            checkNum: 0
         }
         }
     },
     },
     computed: {
     computed: {
@@ -326,7 +327,7 @@ var vm = new Vue({
             }
             }
             this.getList()
             this.getList()
         },
         },
-        contains(arr, ele) {
+        contains: function (arr, ele) {
           if(arr.length == 0){
           if(arr.length == 0){
             return;
             return;
           }
           }
@@ -583,6 +584,7 @@ var vm = new Vue({
               }
               }
               item.selected = state
               item.selected = state
             })
             })
+            this.checkNum = selectDataIds? selectDataIds.length : 0
         },
         },
         listItemCheckboxChange: function (data, check) {
         listItemCheckboxChange: function (data, check) {
             if (check) {
             if (check) {
@@ -601,6 +603,7 @@ var vm = new Vue({
                 arr.push(item.selected)
                 arr.push(item.selected)
             })
             })
             this.currentPageAllChecked = arr.indexOf(false) === -1
             this.currentPageAllChecked = arr.indexOf(false) === -1
+            this.checkNum = selectDataIds? selectDataIds.length : 0
         },
         },
         openTagDrawer: function () {
         openTagDrawer: function () {
             this.tagDrawer.show = true
             this.tagDrawer.show = true
@@ -761,7 +764,7 @@ var vm = new Vue({
             })
             })
         },
         },
        // 获取参标数据
        // 获取参标数据
-       getBidIsJoin() {
+       getBidIsJoin: function () {
           var _this = this
           var _this = this
           var paramsData = {
           var paramsData = {
            ids: _this.listState.list.map(function(item){
            ids: _this.listState.list.map(function(item){
@@ -800,7 +803,7 @@ var vm = new Vue({
        * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传(bidIds和projectIds必传一个)
        * @param projectIds 项目信息id ,多个,号隔开 划转和终止参标必传(bidIds和projectIds必传一个)
        * @param callback
        * @param callback
        */
        */
-      joinBidAction (item) {
+      joinBidAction: function (item) {
         if(item.joinBid) {
         if(item.joinBid) {
           return this.showToast('如需终止参标,需要在详情页进行操作。')
           return this.showToast('如需终止参标,需要在详情页进行操作。')
         }
         }
@@ -834,5 +837,8 @@ var vm = new Vue({
           }
           }
         })
         })
       },
       },
+      goCollect: function () {
+        window.open('/page_workDesktop/work-bench/page?link=' + encodeURIComponent(location.origin + '/jylab/supsearch/index.html'))
+      }
     }
     }
 })
 })

二进制
src/web/staticres/images/biddingSearch/desc-icon.png


二进制
src/web/staticres/images/biddingSearch/icon-checkbox-new.png


二进制
src/web/staticres/images/biddingSearch/icon-checked-new.png


二进制
src/web/staticres/images/biddingSearch/novip-icon-check.png


二进制
src/web/staticres/images/biddingSearch/novip-icon.png


二进制
src/web/staticres/images/check_.png


二进制
src/web/staticres/images/checked_.png


二进制
src/web/staticres/images/more_.png


二进制
src/web/staticres/images/novip-down.png


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

@@ -317,16 +317,16 @@ var vm = new Vue({
          * 初始化页面搜索框与工作台顶部搜索联动事件函数,详情见对应函数 common.js
          * 初始化页面搜索框与工作台顶部搜索联动事件函数,详情见对应函数 common.js
          * 需要在 dom 初始化后调用来监听事件,Vue中需要额外在 input 对应事件额外手动触发事件
          * 需要在 dom 初始化后调用来监听事件,Vue中需要额外在 input 对应事件额外手动触发事件
          */
          */
-        if (goTemplateData.inIframe) {
-          this._$SearchEvent = initSearchPageEvent({
-            type: 'company',
-            el: '.search-header-top .input-container',
-            submitSelector: '.search-button',
-            change: function(val) {
-              this.searchContent = val
-            }
-          })
-        }
+        // if (goTemplateData.inIframe) {
+        //   this._$SearchEvent = initSearchPageEvent({
+        //     type: 'company',
+        //     el: '.search-header-top .input-container',
+        //     submitSelector: '.search-button',
+        //     change: function(val) {
+        //       this.searchContent = val
+        //     }
+        //   })
+        // }
     },
     },
     methods: {
     methods: {
         industryTab: function() {
         industryTab: function() {

+ 2 - 0
src/web/staticres/js/login.js

@@ -1129,6 +1129,8 @@ $(function(){
                     }
                     }
                   }else if(r.status==-1){
                   }else if(r.status==-1){
                       arr[2].showError('短信验证码输入错误')
                       arr[2].showError('短信验证码输入错误')
+                  }else if(r.status==-4){
+                      arr[2].showError('系统错误,请重试')
                   }
                   }
                 });
                 });
             }
             }

+ 10 - 10
src/web/staticres/js/pur-search-index-pc.js

@@ -223,16 +223,16 @@ var vm = new Vue({
          * 初始化页面搜索框与工作台顶部搜索联动事件函数,详情见对应函数 common.js
          * 初始化页面搜索框与工作台顶部搜索联动事件函数,详情见对应函数 common.js
          * 需要在 dom 初始化后调用来监听事件,Vue中需要额外在 input 对应事件额外手动触发事件
          * 需要在 dom 初始化后调用来监听事件,Vue中需要额外在 input 对应事件额外手动触发事件
          */
          */
-        if (goTemplateData.inIframe) {
-          this._$SearchEvent = initSearchPageEvent({
-            type: 'buyer',
-            el: '.search-header-top .input-container',
-            submitSelector: '.search-button',
-            change: function(val) {
-              this.searchContent = val
-            }
-          })
-        }
+        // if (goTemplateData.inIframe) {
+        //   this._$SearchEvent = initSearchPageEvent({
+        //     type: 'buyer',
+        //     el: '.search-header-top .input-container',
+        //     submitSelector: '.search-button',
+        //     change: function(val) {
+        //       this.searchContent = val
+        //     }
+        //   })
+        // }
     },
     },
     methods: {
     methods: {
         randomBgc: function () {
         randomBgc: function () {

+ 546 - 0
src/web/staticres/js/selector/area-city-data.js

@@ -0,0 +1,546 @@
+var selectArea_temp = `<div id="selectArea_">
+  <div class="valueBox"><span v-text="valueLabel"></span><span v-text="num" class="hightlight" v-show="num&&num!='全国'&&num!='全部'"></span><span v-show="num&&num!='全国'&&num!='全部'">个</span></div>
+  <el-select ref="selectchoose" :placeholder="placeholderValue" :value="selectValue"  class="select_common" @visible-change="change" popper-class="select_common_data">
+    <div slot="empty" class="select_box selectArea">
+      <div class="left">
+        <p class="title_" v-text="leftTit"></p>
+        <div class="box_" onmousewheel="var event = window.event || arguments.callee.caller.arguments[0];if(event.preventDefault) event.preventDefault();var delta = event.wheelDelta || event.originalEvent.wheelDelta || event.originalEvent.detail;var k = delta? delta:-delta*10;this.scrollTop = this.scrollTop - k;return false;">
+          <div class="item_" v-for= "(item,index) in leftList" @click.self="leftclick(item,index)" :class="{active_:active == index}">
+           <img class="icon_more" src='/images/more_.png' alt="">
+            <el-checkbox v-model = "item.selected" @change="handleCheckChange($event,item,index)" :indeterminate="item.indeterminate" :disabled="item.disabled"></el-checkbox>
+            <p class="name_" v-text="item.label" @click.self="leftclick(item,index)"></p>
+          </div>
+        </div>
+      </div>
+      <div class="right" v-show = "!(type=='area'&& !login)">
+       <div class = "head_tit">
+       <p class="title_" v-text="rightTit"></p>
+       <img class="area-icon-vip" src="/images/biddingSearch/VIP.png" alt="" v-if="type=='area'&&login&&!vipState"/>
+       </div>
+        <div class="box_" onmousewheel="var event = window.event || arguments.callee.caller.arguments[0];if(event.preventDefault) event.preventDefault();var delta = event.wheelDelta || event.originalEvent.wheelDelta || event.originalEvent.detail;var k = delta? delta:-delta*10;this.scrollTop = this.scrollTop - k;return false;">
+          <div class="item_" v-for= "(item1,index2) in rightList">
+          <el-checkbox v-model = "item1.selected" @change ="handleCheckChange_right($event,item1,index2)" :indeterminate="item1.indeterminate" :disabled="item1.disabled"></el-checkbox>
+          <p class="name_" v-text="item1.label"></p>
+          </div>
+        </div>
+      </div>
+    </div>
+  </el-select>
+</div>`
+
+
+var selectAreachoose = {
+  name: 'selectAreachoose',
+  template: selectArea_temp,
+  props: ['listData', 'valueLabel', 'leftTit', 'rightTit', 'viplimit', 'vip', 'login', 'type'],
+  data: function () {
+    return {
+      selectValue: '',
+      placeholderValue: '',
+      leftList: [],
+      rightList: [],
+      nowindex: 0,
+      chooseData: {},
+      active: 0,
+      num: '',
+      originalData: []
+    };
+  },
+  computed: {
+  },
+  watch: {
+  },
+  created: function () {
+    let list = this.listData
+    list.forEach((item, index) => { 
+      if (item.children.length == 1) { // 只有一个全部  
+        item.children[0].disabled = true
+      }
+    })
+    this.originalData = JSON.parse(JSON.stringify(list))
+    this.leftList = list
+    this.rightList = this.leftList[0].children
+    this.getData()
+  },
+  mounted: function () {
+  },
+  beforeDestroy: function () {
+
+  },
+  methods: {
+    initData() { //还原初始数据
+      let left = JSON.parse(JSON.stringify(this.originalData))
+      this.leftList = left
+      this.rightList = this.leftList[0].children
+    },
+    processingarea(area, city) {
+      console.log(area, city, '地区组件调用回显获取的省市')
+      if (area || city) {
+        let a = area ? area.split(',') : []
+        let c = city ? city.split(',') : []
+        // 回显省份则其下地市全选
+        if (a && a.length > 0) {
+          a.forEach((item) => {
+            this.leftList.forEach(e => {
+              if (item == e.value) {
+                e.selected = true
+                e.initialSelect = true //增加initialSelect记录初始勾选 用于恢复非VIP勾选恢复原始按钮状态
+                e.children.forEach(ele => {
+                  ele.selected = true
+                  ele.initialSelect = true
+                })
+              }
+            })
+          })
+        }
+
+        // 有城市则说明所在省是半选
+        if (c && c.length > 0) {
+          c.forEach((item) => {
+            this.leftList.forEach(ele => {
+              ele.children.forEach(items => {
+                if (items.value == item) { // 回显市在多层级数据中的
+                  ele.selected = false // 省级半选
+                  ele.indeterminate = true
+                  ele.initialSelect = false
+                  ele.children[0].selected = false
+                  ele.children[0].indeterminate = true
+                  ele.children[0].initialSelect = false
+                  items.selected = true
+                  items.initialSelect = true
+                  items.indeterminate = false
+
+                }
+              })
+            })
+          })
+        }
+        this.allchoosestate()
+      } else {
+        this.num = '全国'
+        this.leftList.forEach(ele => {
+          if (ele.value == '全国' || ele.value == '全部') {
+            ele.selected = true
+            ele.initialSelect = true
+            ele.indeterminate = false
+          } else {
+            ele.selected = false
+            ele.initialSelect = false
+            ele.indeterminate = false
+          }
+          ele.children.forEach(e => {
+            if (e.parent == '全国' || e.parent == '全部') {
+              e.selected = true
+              e.initialSelect = true
+              e.indeterminate = false
+
+            } else {
+              e.selected = false
+              e.initialSelect = false
+              e.indeterminate = false
+            }
+          })
+        })
+      }
+      this.getData()
+    },
+    processingindustry(data) { // 行业回显
+      if (data) {
+        let list
+        if (Array.isArray(data)) {
+          list = data
+        } else {
+          list = data.toString().split(',')
+        }
+        let arr = list
+        // /_(.+)/.exec(ele)[1]
+        this.checkecho(arr, 'id') // 回显选中信息
+
+      } else {
+        this.reactAll()// 置为初始
+      }
+      this.getData()
+    },
+    processingbuyerclass(data) { // 采购单位回显
+      if (data) {
+        let list
+        if (Array.isArray(data)) {
+          list = data
+        } else {
+          list = data.toString().split(',')
+        }
+        let arr = list
+        // /_(.+)/.exec(ele)[1]
+        this.checkecho(arr, 'value') // 回显选中信息
+
+      } else {
+        this.reactAll()// 置为初始
+      }
+      this.getData()
+    },
+    reactAll() {
+      this.num = '全部'
+      this.leftList.forEach(ele => {
+        if (ele.value == '全国' || ele.value == '全部') {
+          ele.selected = true
+          ele.initialSelect = true
+          ele.indeterminate = false
+        } else {
+          ele.selected = false
+          ele.initialSelect = false
+          ele.indeterminate = false
+        }
+        ele.children.forEach(e => {
+          if (e.parent == '全国' || e.parent == '全部') {
+            e.selected = true
+            e.initialSelect = true
+            e.indeterminate = false
+
+          } else {
+            e.selected = false
+            e.initialSelect = false
+            e.indeterminate = false
+          }
+        })
+      })
+    },
+    checkecho(arr, key) {
+      arr.forEach(ele => {
+        this.leftList.forEach(e => {
+          e.children.forEach(item => {
+            if (ele == item[key]) {
+              item.selected = true
+            }
+          })
+        })
+      })
+      this.leftList.forEach((ele, index) => {
+        let choosed = []
+        let all = []
+        ele.children.forEach(item => {
+          if (item.label != '全部') {
+            all.push(item.value)
+          }
+          if (item.selected && item.label != '全部') {
+            choosed.push(item.value)
+          }
+        })
+        if (choosed.length == 0) { // 未选
+          ele.selected = false
+          ele.indeterminate = false
+          ele.children[0].selected = false
+          ele.children[0].indeterminate = false
+
+        } else if (choosed.length >= all.length) { // 全选
+
+          ele.selected = true
+          ele.indeterminate = false
+          ele.children[0].selected = true
+          ele.children[0].indeterminate = false
+
+        } else { // 半选
+
+          ele.selected = false
+          ele.indeterminate = true
+          ele.children[0].selected = false
+          ele.children[0].indeterminate = true
+        }
+      })
+      this.allchoosestate()
+    },
+    change(val) {
+      console.log(val, 'change')
+      this.$emit('selectchange', val)
+    },
+    leftclick(item, index) {
+      this.active = index
+      this.rightList = item.children
+      this.nowindex = index
+      console.log(item, index)
+    },
+    handleCheckChange(e, item, index) {
+      this.active = index
+      if (e) { // 选中
+        if (item.value == '全国' || item.value == '全部') { // 全部选中
+          this.leftList.forEach(ele => {
+            ele.initialSelect = true // 记录不受双向绑定影响的选中状态
+            ele.selected = true
+            ele.indeterminate = false // 取消半选
+            ele.children.forEach(ele1 => {
+              ele1.initialSelect = true
+              ele1.selected = true
+              ele1.indeterminate = false // 取消半选
+            })
+          })
+
+        } else {
+          // 二级全选
+          item.indeterminate = false // 取消半选
+          item.children.forEach(ele => {
+            ele.selected = true
+            ele.initialSelect = true
+            if (ele.label == '全部') {
+              ele.indeterminate = false
+            }
+          })
+        }
+      } else {
+        if (item.value == '全国' || item.value == '全部') { // 全部取消
+          this.leftList.forEach(ele => {
+            ele.selected = false
+            ele.initialSelect = false
+            ele.children.forEach(ele1 => {
+              ele1.selected = false
+              ele1.initialSelect = false
+            })
+          })
+        } else {
+          // 二级取消
+          item.children.forEach(ele => {
+            ele.selected = false
+            ele.initialSelect = false
+          })
+        }
+      }
+      // 控制最外部全选状态
+      this.allchoosestate()
+      this.rightList = item.children
+      this.nowindex = index
+      this.getData()
+      this.$emit('datachange', this.chooseData)
+    },
+    handleCheckChange_right(e, item, index) {
+      if (this.viplimit && !this.vip) {
+        let initialSelect = item.initialSelect
+        item.selected = initialSelect
+        this.$emit('limit', item)
+        return
+      }
+      if (e) {
+        if (item.label == '全部') {
+          this.leftList[this.nowindex].children.forEach(ele => {
+            this.$set(ele, 'selected', true)
+            this.$set(ele, 'indeterminate', false)
+          })
+
+        } else {
+          item.selected = true
+          item.indeterminate = false
+        }
+      } else {
+        if (item.label == '全部') {
+          this.leftList[this.nowindex].children.forEach(ele => {
+            this.$set(ele, 'selected', false)
+            this.$set(ele, 'indeterminate', false)
+
+          })
+
+        } else {
+          item.selected = false
+          item.indeterminate = false
+        }
+
+      }
+
+      let arr = this.leftList[this.nowindex].children
+      if (arr.length == 1) {
+        if (e) {
+          this.leftList[this.nowindex].indeterminate = false
+          this.leftList[this.nowindex].selected = true
+          if (item.parent == '全国' || item.parent == '全部') {
+            this.num = '全部'
+            this.leftList.forEach(ele => {
+              ele.selected = true
+              ele.initialSelect = true
+              ele.indeterminate = false
+              ele.children.forEach(items => {
+                items.selected = true
+                items.initialSelect = true
+                items.indeterminate = false
+              })
+            })
+          }
+        } else {
+          this.leftList[this.nowindex].indeterminate = false
+          this.leftList[this.nowindex].selected = false
+          if (item.parent == '全国' || item.parent == '全部') {
+            this.num = '全部'
+            this.leftList.forEach(ele => {
+              ele.selected = false
+              ele.initialSelect = false
+              ele.indeterminate = false
+              ele.children.forEach(items => {
+                items.selected = false
+                items.initialSelect = false
+                items.indeterminate = false
+              })
+            })
+          }
+        }
+      } else {
+        let select = []
+        let realarr = []
+        arr.forEach(ele => {
+          if (ele.selected && ele.label != '全部') {
+            select.push(ele)
+          }
+          if (ele.label != '全部') {
+            realarr.push(ele)
+          }
+        })
+
+        if (realarr.length > select.length && select.length != 0) { // 未全选
+          // 控制上级部分
+          this.leftList[this.nowindex].indeterminate = true
+          this.leftList[this.nowindex].selected = false
+          // 二级的‘全部’按钮
+          this.leftList[this.nowindex].children.forEach(ele => {
+            if (ele.label == '全部') {
+              ele.indeterminate = true
+              ele.selected = false
+            }
+          })
+
+        } else if (select.length >= realarr.length && select.length != 0) { // 全选
+          // 控制上级部分
+          this.leftList[this.nowindex].indeterminate = false
+          this.leftList[this.nowindex].selected = true
+          // 二级的‘全部’按钮
+          this.leftList[this.nowindex].children.forEach(ele => {
+            if (ele.label == '全部') {
+              ele.indeterminate = false
+              ele.selected = true
+            }
+          })
+        } else if (select.length == 0) { //都未选
+          // 控制上级部分
+          this.leftList[this.nowindex].selected = false
+          this.leftList[this.nowindex].indeterminate = false
+          // 二级的‘全部’按钮
+          this.leftList[this.nowindex].children.forEach(ele => {
+            if (ele.label == '全部') {
+              ele.indeterminate = false
+              ele.selected = false
+            }
+          })
+
+        }
+
+      }
+      // 控制最外部全选状态
+      this.allchoosestate()
+      this.getData()
+      this.$emit('datachange', this.chooseData)
+    },
+    getData() {
+      let one = [] // 所有选中的一级选项
+      let two = [] // 所有选中的二级选项
+      let area = [] // 省市规则选中省全部则只需要省市不用再传,选中省中的部分市则传选中的市,省不再传
+      let city = []
+      let oneAndtwo = []
+      let noSecondlevel = [] //没有二级选项 的一级选中 如直辖市
+      let alltwo = [] // 全部数据的集合
+      this.leftList.forEach(ele => {
+        if (ele.selected) {
+          one.push(ele.value)
+          area.push(ele.value)
+          if (ele.children.length == 1 || !ele.children) {
+            noSecondlevel.push(ele.value)
+          }
+        } else { // 一级半选
+          if (ele.children && ele.children.length != 0) {
+            ele.children.forEach(e => {
+              if (e.selected && e.value != '全部') {
+                city.push(e.value)
+              }
+            })
+          }
+        }
+        if (ele.children && ele.children.length != 0) {
+          ele.children.forEach(e => {
+            if (e.selected) {
+              two.push(e.value)
+              if (e.value != '全部') {
+                oneAndtwo.push(e.parent + '_' + e.value)
+              }
+            }
+            if (e.value != '全部') {
+              alltwo.push(e.parent + '_' + e.value)
+            }
+
+          })
+        }
+      })
+      let one_noall = this.removeElements(one, '全部') // 去掉一级全部选项的所有选中
+      let two_noall = this.removeElements(two, '全部')// 去掉二级全部选项的所有选中
+      let arr_ = noSecondlevel.concat(two_noall) // 没有二级选项的一级选项选中和二级选项所有选中合并得出总数
+      if ((this.leftList[0].value == '全部' || this.leftList[0].value == '全国') && this.leftList[0].selected) {
+        this.num = this.leftList[0].value
+      } else {
+        this.num = arr_.length
+      }
+      this.chooseData = { one, two, one_noall, two_noall, area, city, oneAndtwo, noSecondlevel, alltwo }
+      console.log(this.chooseData, '选中数据集合')
+    },
+    allchoosestate() {
+      // 控制最外部全选状态
+      let all = []
+      let choosed = []
+      this.leftList.forEach(ele => {
+        if (ele.label != '全部' && ele.label != '全国') {
+          all.push(ele.value)
+        }
+
+        if (ele.selected && ele.label != '全部' && ele.label != '全国') {
+          choosed.push(ele.value)
+        }
+        ele.children.forEach(item => {
+          if (item.label != '全部') {
+            all.push(item.value)
+          }
+
+          if (item.selected && item.label != '全部') {
+            choosed.push(item.value)
+          }
+        })
+      })
+      if (choosed.length == 0) {
+        this.leftList[0].selected = false
+        this.leftList[0].indeterminate = false
+      } else if (choosed.length >= all.length) {
+        this.leftList[0].selected = true
+        this.leftList[0].indeterminate = false
+      } else {
+        this.leftList[0].selected = false
+        this.leftList[0].indeterminate = true
+      }
+      if (this.leftList[0].selected) {
+        this.leftList[0].children[0].selected = true
+        this.leftList[0].children[0].indeterminate = false
+      } else {
+        this.leftList[0].children[0].selected = false
+        this.leftList[0].children[0].indeterminate = false
+      }
+      if (this.leftList[0].indeterminate) {
+        this.leftList[0].children[0].indeterminate = true
+        this.leftList[0].children[0].selected = false
+      }
+    },
+    removeElements(arr, element) {
+      return arr.filter(function (value) {
+        return value !== element;
+      })
+    },
+    checkArrays(arr1, arr2) {
+      let newArr = [];
+
+      for (let i = 0; i < arr2.length; i++) {
+        if (!arr1.includes(arr2[i])) {
+          newArr.push(arr2[i]);
+        }
+      }
+
+      return newArr;
+    }
+  }
+}

+ 84 - 0
src/web/staticres/js/selector/keyword-tags-new.js

@@ -0,0 +1,84 @@
+var keywordTagsComponentTemplate = `
+  <div class="add-keyword-container">
+    <div style="margin-top:6px;">
+      <el-input
+        class="add-keyword-input"
+        type="text"
+        :placeholder="list.length >= maxListLength?'排除词个数已达上限':placeholder"
+        v-model.trim="addKeywordVal"
+        :maxlength="maxLength"
+        :disabled="disabled || list.length >= maxListLength"
+        @keyup.native="onKeyup"
+      ></el-input>
+      <span class="add-keyword-btn" :class="{'focus': addKeywordVal}" @click="addKeyTags">添加</span>
+    </div>
+    <div class="add-keyword-tags">
+    <el-tag
+      :key="tag"
+      v-for="tag in list"
+      closable
+      :disable-transitions="false"
+      @close="handleClose(tag)">
+      {{tag}}
+    </el-tag>
+  </div>
+    <slot name="radio"></slot>
+  </div>
+`
+
+// var keywordTagsComponentTemplate = "\n<div class=\"selector-content select-list-content\" ref=\"selectContainer\">\n    <span class=\"action-button show-more\" @click=\"showMore = !showMore\" v-if=\"needShowMore\">\n        <span class=\"action-text\">{{ showMore ? '\u6536\u8D77' : '\u66F4\u591A' }}</span>\n        <span class=\"el-icon-arrow-down\" :class=\"showMore ? 'rotate180' : ''\"></span>\n    </span>\n    <div class=\"select-group-container\" v-if=\"selectButtonType === 'checkbox'\">\n        <el-checkbox\n            v-for=\"(item, index) in selectList\"\n            :key=\"index\"\n            :name=\"item.value\"\n            ref=\"selectItem\"\n            v-model=\"item.selected\"\n            v-show=\"showAll(item)\"\n            @change=\"changeState(item)\"\n        >{{ item.label }}</el-checkbox>\n    </div>\n    <div class=\"select-group-container\" v-else-if=\"selectButtonType === 'button'\">\n        <div\n            v-for=\"(item, index) in selectList\"\n            :key=\"index\"\n            ref=\"selectItem\"\n            class=\"j-button-item bgc\"\n            v-show=\"showAll(item)\"\n            :class=\"{\n                active: item.selected,\n                all: item.label === selectItemExp.label\n            }\"\n            @click=\"changeState(item)\"\n        >{{ item.label }}</div>\n    </div>\n</div>\n";
+
+var keywordTagsComponentnew = {
+    name: 'keyword-tags-pc',
+    template: keywordTagsComponentTemplate,
+    props: {
+      placeholder: {
+        type: String,
+        default: '请输入关键词'
+      },
+      // 输入框可输入最大长度
+      maxLength: {
+        type: Number,
+        default: 15
+      },
+      list: {
+        type: Array,
+        default: function () {
+          return []
+        }
+      },
+      // 数组最大长度
+      maxListLength: {
+        type: Number,
+        default: 5
+      },
+      // 输入框是否禁用
+      disabled: Boolean,
+      beforeChange: Function
+    },
+    data: function () {
+      return {
+        addKeywordVal: ''
+      }
+    },
+    mounted: function () {},
+    methods: {
+      addKeyTags: function () {
+        var beforeChange = this.beforeChange()
+        if (!beforeChange) return
+        if (!this.addKeywordVal) return
+        this.list.push(this.addKeywordVal.replace(/\s*$/g,''))
+        console.log(this.list);
+        this.$emit('change', this.list)
+        this.addKeywordVal = ''
+      },
+      handleClose: function (tag) {
+        this.list.splice(this.list.indexOf(tag), 1)
+        this.$emit('change', this.list)
+      },
+      onKeyup: function () {
+        // this.addKeywordVal = this.addKeywordVal.replace(/^\s+|\s+$/g, '')
+        this.addKeywordVal = this.addKeywordVal.trim().replace(/^\s*/g, '')
+      }
+    }
+}

+ 2 - 2
src/web/staticres/js/selector/no-data-pc.js

@@ -1,10 +1,10 @@
 // var noDataComponentTemplate = `
 // var noDataComponentTemplate = `
 // <div class="no-data">
 // <div class="no-data">
 //     <el-image src="/images/pc_12.png"></el-image>
 //     <el-image src="/images/pc_12.png"></el-image>
-//     <div class="tip-text"><p>{{ tipText }}</p></div>
+//     <div class="tip-text"><p>{{ tipText }}</p><slot></slot></div>
 // </div>
 // </div>
 // `
 // `
-var noDataComponentTemplate = '<div class="no-data"><el-image :src="images"></el-image><div class="tip-text"><p>{{ tipText }}</p></div></div>'
+var noDataComponentTemplate = '<div class="no-data"><el-image :src="images"></el-image><div class="tip-text"><p>{{ tipText }}</p><slot></slot></div></div>'
 var noDataComponent = {
 var noDataComponent = {
     name: 'no-data-pc',
     name: 'no-data-pc',
     template: noDataComponentTemplate,
     template: noDataComponentTemplate,

+ 32 - 6
src/web/staticres/js/superSearch.js

@@ -32,8 +32,19 @@ $(function() {
 	})
 	})
 	//
 	//
 	$(".pricebut").click(function(){
 	$(".pricebut").click(function(){
+    let selectMinPrices = $(".PriceInput [name='minprice']").val();
+		let selectMaxPrices =  $(".PriceInput [name='maxprice']").val();
+    console.log(selectMinPrices,selectMaxPrices)
+    
+    if(selectMinPrices && selectMaxPrices){
+      let val = selectMinPrices+'万'+'~'+selectMaxPrices+'万'
+      $('.selectorMoney .valueBox .title').text(val)
+    }else{
+      $('.selectorMoney .valueBox .title').text('价格区间')
+    }
 		priceCss();
 		priceCss();
 		beforeSubmit('filter-price');
 		beforeSubmit('filter-price');
+    searchInnerVue.$refs.selectprice.blur()
 	})
 	})
 	//
 	//
 	$("#timebut").click(function(){
 	$("#timebut").click(function(){
@@ -144,6 +155,21 @@ $(function() {
     }
     }
 
 
   })
   })
+  // 监听列表选择框变动时的勾选数量
+  $('body').on('change','.custom-checkbox',function () {
+    setTimeout(function () {
+      let checkNum = selectDataIds ? selectDataIds.length : 0 ;
+      if( checkNum > 0 ) {
+        $('#checkNum-bid-box').show()
+        $('#checkNum-bid').html(checkNum)
+        $('#serchNum-bid').hide()
+      }else{
+        $('#checkNum-bid-box').hide()
+        $('#serchNum-bid').show()
+      }
+    })
+  })
+
 })
 })
 
 
 //取redis里的数据
 //取redis里的数据
@@ -1047,7 +1073,7 @@ function beforeSubmit(from){
 				selectIndustrys += thisText;
 				selectIndustrys += thisText;
 			}
 			}
     });
     });
-		$("#zbSeatchT [name='industry']").val(selectIndustrys);
+		// $("#zbSeatchT [name='industry']").val(selectIndustrys); // 使用下拉组件赋值隐藏域 这里不再赋值
 		//价格
 		//价格
 		if(!$("#priceAll").hasClass("active")){
 		if(!$("#priceAll").hasClass("active")){
 			var selectMinPrices = $(".PriceInput [name='minprice']").val();
 			var selectMinPrices = $(".PriceInput [name='minprice']").val();
@@ -1077,13 +1103,13 @@ function beforeSubmit(from){
         }
         }
       }
       }
     })
     })
-    //采购单位类型
-    $("#zbSeatchT [name='buyerclass']").val(buyerTypeArr)
+    //采购单位类型   下拉组件回调赋值不在此处赋值
+    // $("#zbSeatchT [name='buyerclass']").val(buyerTypeArr)
     // $("#buyerInput").val(buyerTypeArr);
     // $("#buyerInput").val(buyerTypeArr);
 	//采购单位联系方式有无
 	//采购单位联系方式有无
-    $("#zbSeatchT [name='buyertel']").val($(".custom-input[name='buyertel']").attr('data-value'));
+    // $("#zbSeatchT [name='buyertel']").val($(".custom-input[name='buyertel']").attr('data-value'));
     //中标单位联系方式有无
     //中标单位联系方式有无
-    $("#zbSeatchT [name='winnertel']").val($(".custom-input[name='winnertel']").attr('data-value'));
+    // $("#zbSeatchT [name='winnertel']").val($(".custom-input[name='winnertel']").attr('data-value'));
     //排除词
     //排除词
 	$("#zbSeatchT [name='notkey']").val($("#zbSeatchT [name='notkey']").val());
 	$("#zbSeatchT [name='notkey']").val($("#zbSeatchT [name='notkey']").val());
 		if(!$("#zbSeatchT [name='keywords']").val()&&!$("#zbSeatchT [name='industry']").val()&&from!="F" && !$("#zbSeatchT [name='additionalWords']").val()){
 		if(!$("#zbSeatchT [name='keywords']").val()&&!$("#zbSeatchT [name='industry']").val()&&from!="F" && !$("#zbSeatchT [name='additionalWords']").val()){
@@ -1563,7 +1589,7 @@ function collectClick() {
             if (selectType == 'title') {
             if (selectType == 'title') {
               $('.custom-checkbox:not(".check-all"):checked').siblings().children('.icon-collect').addClass('checked')
               $('.custom-checkbox:not(".check-all"):checked').siblings().children('.icon-collect').addClass('checked')
             } else {
             } else {
-              $('.custom-checkbox:not(".check-all"):checked').parents('.liLuceneList').find('.icon-collect').addClass('checked')
+              $('.custom-checkbox:not(".check-all"):checked').parents('.liLuceneList').find('.icon-beforeSubmitcollect').addClass('checked')
             }
             }
             // 收藏成功后再查一次收藏状态,为了区分达到收藏上限点时部分收藏成功,部分收藏失败
             // 收藏成功后再查一次收藏状态,为了区分达到收藏上限点时部分收藏成功,部分收藏失败
             getBidIsColl()
             getBidIsColl()

+ 89 - 0
src/web/templates/common/selectArea.html

@@ -0,0 +1,89 @@
+<div id="selectArea_">
+  <el-select :placeholder="placeholderValue" :value="selectValue" :append-to-body="false" class="select_common">
+    <div slot="empty" class="select_box selectArea">
+      <div class="left">
+        <p class="title_">$$leftTit$$</p>
+        <div class="box_">
+          <div class="item_" v-for= "(item,index) in leftList" @click.self="leftclick(item,index)">
+            <el-checkbox v-model = "item.selected" @change="handleCheckChange($event,item,index)" :indeterminate="item.indeterminate"></el-checkbox>
+            <p class="name_">$$item.label$$</p>
+          </div>
+        </div>
+      </div>
+      <div class="right">
+        <p class="title_">$$rightTit$$</p>
+        <div class="box_" v-for= "(item,index) in rightList">
+          <el-checkbox v-model = "item.selected" @change ="handleCheckChange_right($event,item,index)" :indeterminate="item.indeterminate"></el-checkbox>
+          <p class="name_">$$item.label$$</p>
+        </div>
+      </div>
+    </div>
+  </el-select>
+</div>
+<script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.7.14/vue.min.js></script>
+<script>
+  var selectArea_ = new Vue({
+    el: "#selectArea",
+    delimiters: ["$$", "$$"],
+    // template: temp,
+    data: function () {
+      return {
+        selectValue: '项目地区',
+        placeholderValue: '项目地区',
+        leftTit: '省级',
+        rightTit: '市级',
+        leftList: [],
+        rightList: []
+      };
+    },
+    computed: {
+    },
+    watch: {
+    },
+    created: function () {
+
+    },
+    mounted: function () {
+      this.leftList = [{"label":"全国","disabled":false,"selected":false,"indeterminate":false,"value":"全国","children":[{"label":"全部","disabled":false,"selected":false,"value":"全部"}]}]
+    },
+    beforeDestroy: function () {
+
+    },
+    methods: {
+      noallChoose (val){
+        if(val && val.length > 0){
+          let a = []
+          val.forEach(element => {
+            if (element.selected){
+              a.push(element)
+            }  
+          });
+          if(a.length<val.length){
+            return true
+          }else{
+            return false
+          }
+        }else{
+          return false
+        }
+      },
+      leftclick(item,index){
+        // this.rightList = item.children 
+        alert(item,index)
+      },
+      handleCheckChange (e,item,index) {
+        alert(e,item,index)
+
+      },
+      handleCheckChange_right (e,item,index) {
+        console.log(e,item,index,'right')
+
+      }
+    
+    }
+  });
+</script>
+<style>
+  
+
+</style>

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

@@ -31,6 +31,13 @@
             .visited td {
             .visited td {
               color: #999!important;
               color: #999!important;
             }
             }
+            .left .total-count{
+              display: inline-block;
+              margin-left: 12px;
+              font-size: 14px;
+              color: #686868;
+              line-height: 49px;
+            }
         </style>
         </style>
 	</head>
 	</head>
 
 
@@ -149,6 +156,8 @@
                         <div class="left flex">
                         <div class="left flex">
                             <el-checkbox v-model="currentPageAllChecked" @change="allCheckboxChange"></el-checkbox>
                             <el-checkbox v-model="currentPageAllChecked" @change="allCheckboxChange"></el-checkbox>
                             <div class="list-title">标讯收藏</div>
                             <div class="list-title">标讯收藏</div>
+                            <span class="total-count" v-if="checkNum > 0">已选<em class="highlight-text">${ checkNum }</em>条信息</span>
+                            <span class="total-count" v-else>搜索到<em class="highlight-text">${ listState.total }</em>条信息</span>
                         </div>
                         </div>
                         <div class="right flex" v-if="biEnv">
                         <div class="right flex" v-if="biEnv">
                             <div class="icon-box flex" @click="biBatchAddSelected">
                             <div class="icon-box flex" @click="biBatchAddSelected">
@@ -200,7 +209,9 @@
                                 <span class="j-icon" v-if="!biEnv" :class="item.star ? 'icon-star-active' : 'icon-star'" @click.prevent.stop="unStarThis(item)"></span>
                                 <span class="j-icon" v-if="!biEnv" :class="item.star ? 'icon-star-active' : 'icon-star'" @click.prevent.stop="unStarThis(item)"></span>
                             </div>
                             </div>
                         </div>
                         </div>
-                        <no-data style="display: none;" v-show="listState.list.length === 0 && listState.loaded" tip-text="暂未收藏标讯"></no-data>
+                        <no-data style="display: none;" v-show="listState.list.length === 0 && listState.loaded" tip-text="暂未收藏标讯">
+                          <button class="tip-btn" @click="goCollect">前往收藏</button>
+                        </no-data>
                     </div>
                     </div>
                     <div class="list collect-table-list" v-loading="listState.loading" v-show="listState.listType === 'table'" style="display: none;">
                     <div class="list collect-table-list" v-loading="listState.loading" v-show="listState.listType === 'table'" style="display: none;">
                         <table class="table">
                         <table class="table">

+ 3 - 2
src/web/templates/frontRouter/wx/collection/sess/index.html

@@ -151,7 +151,7 @@
             <div class="j-main">
             <div class="j-main">
               <div class="emptycom">
               <div class="emptycom">
                 <div class="emptyimg">
                 <div class="emptyimg">
-                  <img src='{{Msg "seo" "cdn"}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+                  <img src='{{Msg "seo" "cdn"}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
                 </div>
                 </div>
                 <div class="emptytext">
                 <div class="emptytext">
                   暂无数据
                   暂无数据
@@ -165,11 +165,12 @@
         <div class="j-main">
         <div class="j-main">
           <div class="emptycom">
           <div class="emptycom">
             <div class="emptyimg">
             <div class="emptyimg">
-              <img src='{{Msg "seo" "cdn"}}/common-module/collection/image/img-empty.png?v={{Msg "seo" "version"}}' alt="">
+              <img src='{{Msg "seo" "cdn"}}/common-module/public/image/jy-back.png?v={{Msg "seo" "version"}}' alt="">
             </div>
             </div>
             <div class="emptytext">
             <div class="emptytext">
               您还没有收藏标讯
               您还没有收藏标讯
             </div>
             </div>
+            <div class="empty-btn" @click="location.href='/jy_mobile/search/middle/bidding'">前往收藏</div>
           </div>
           </div>
         </div>
         </div>
       </div>
       </div>

+ 3 - 3
src/web/templates/pc/biddetail.html

@@ -5,9 +5,9 @@
 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
 <meta name="Keywords" content="{{.T.obj.keywords}}"/>
 <meta name="Keywords" content="{{.T.obj.keywords}}"/>
 <meta name="Description" content="{{.T.obj.description}}"/>
 <meta name="Description" content="{{.T.obj.description}}"/>
-<meta name="renderer" content="webkit">
 <meta content="telephone=no" name="format-detection"/>
 <meta content="telephone=no" name="format-detection"/>
-    <meta content="light" theme="light" name="enable-header"/>
+<meta content="light" theme="light" name="enable-header"/>
+<meta name="referrer" content="never">
 {{include "/common/pnc.html"}}
 {{include "/common/pnc.html"}}
 <link href="{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
 <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
@@ -352,7 +352,7 @@ function isWechat() {
 		{{end}}
 		{{end}}
 		<div class="pdf-div hidden"></div>
 		<div class="pdf-div hidden"></div>
 		<div class="original-text">
 		<div class="original-text">
-			<a href="{{.T.obj.url}}" target="_blank" class="com-original hidden">
+			<a href="{{.T.obj.url}}" target="_blank" class="com-original hidden" rel="no-referrer">
 				<img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
 				<img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
 			</a>
 			</a>
 			<!--#onekey{padding:8px 40px;}-->
 			<!--#onekey{padding:8px 40px;}-->

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

@@ -4,7 +4,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
     <meta name="Keywords" content="{{.T.obj.keywords}}"/>
     <meta name="Keywords" content="{{.T.obj.keywords}}"/>
     <meta name="Description" content="{{.T.obj.description}}"/>
     <meta name="Description" content="{{.T.obj.description}}"/>
-    <meta name="renderer" content="webkit">
+    <meta name="referrer" content="never">
     <meta content="telephone=no" name="format-detection"/>
     <meta content="telephone=no" name="format-detection"/>
     <meta content="light" theme="light" name="enable-header"/>
     <meta content="light" theme="light" name="enable-header"/>
     {{include "/common/pnc.html"}}
     {{include "/common/pnc.html"}}
@@ -1160,7 +1160,7 @@
                 {{else}}
                 {{else}}
                 <div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_getoriginaltext">
                 <div class="original-text" onclick="adv_statistics(this)" adv_name="pc_article_getoriginaltext">
                     {{end}}
                     {{end}}
-                    <a target="_blank" class="com-original hidden">
+                    <a target="_blank" class="com-original hidden" rel="no-referrer">
                         <img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
                         <img src="{{Msg "seo" "cdn"}}/images/pc_15.png">查看原文
                     </a>
                     </a>
                     <!--#onekey{padding:8px 40px;}-->
                     <!--#onekey{padding:8px 40px;}-->

+ 0 - 1
src/web/templates/pc/dataSmt/list.html

@@ -176,7 +176,6 @@
     var scrollTop = $(window).scrollTop(); // 滚动条的位置
     var scrollTop = $(window).scrollTop(); // 滚动条的位置
     var elementTop = $('.dataMart .recordPosition_advertising').offset().top; // 元素距离文档顶部的位置
     var elementTop = $('.dataMart .recordPosition_advertising').offset().top; // 元素距离文档顶部的位置
     var elementHeight = $('.dataMart .recordPosition_advertising').height(); // 元素的高度
     var elementHeight = $('.dataMart .recordPosition_advertising').height(); // 元素的高度
-
     if (elementTop < scrollTop + windowHeight && elementTop + elementHeight > scrollTop) {
     if (elementTop < scrollTop + windowHeight && elementTop + elementHeight > scrollTop) {
       // 元素在可视窗口内
       // 元素在可视窗口内
       $('.dataMart .dataMart_advertising').removeClass('fixed_bottom')
       $('.dataMart .dataMart_advertising').removeClass('fixed_bottom')

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

@@ -15,6 +15,7 @@
     }
     }
   </script>
   </script>
   {{include "/common/pnc.html"}}
   {{include "/common/pnc.html"}}
+  <link rel="canonical" href="https://www.jianyu360.cn">
   <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/pccss/reset_pc.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/pccss/reset_pc.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/swiper.min.css?v={{Msg "seo" "version"}}'>
   <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/swiper.min.css?v={{Msg "seo" "version"}}'>

+ 8 - 2
src/web/templates/pc/subscribe_new.html

@@ -142,6 +142,7 @@
     </div>
     </div>
     <div class="line-flex CfadeInUp newTxt" style="opacity: 1;">
     <div class="line-flex CfadeInUp newTxt" style="opacity: 1;">
         <div class="subpage-button gold  open-customer" id="go-info-subscribe-0">咨询客服</div>
         <div class="subpage-button gold  open-customer" id="go-info-subscribe-0">咨询客服</div>
+        <div class="subpage-button gold" id="go-play" style="display: none;">立即使用</div>
         <div class="double12" data-tip="买1年送1年">
         <div class="double12" data-tip="买1年送1年">
             <div class="subpage-button darkblue" id="go-buy-subscribe-0"  data-go-buy-subscribe>立即购买</div>
             <div class="subpage-button darkblue" id="go-buy-subscribe-0"  data-go-buy-subscribe>立即购买</div>
         </div>
         </div>
@@ -472,10 +473,15 @@
     function toggleShowBuy (type) {
     function toggleShowBuy (type) {
         if (type) {
         if (type) {
             //已购买扫码使用
             //已购买扫码使用
-            $("div*[data-go-buy-subscribe]").siblings().hide()
-            $("div*[data-go-buy-subscribe]").text('立即使用').off('click').on('click', function () {
+            $('#go-info-subscribe-0').hide()
+            $('#go-play').show()
+            $('#go-play').text('立即使用').off('click').on('click', function () {
               window.location.href="/page_workDesktop/"
               window.location.href="/page_workDesktop/"
             })
             })
+            $("div*[data-go-buy-subscribe]").siblings().hide()
+            $("div*[data-go-buy-subscribe]").text('立即续费').off('click').on("click",function (){
+                window.location.href="/swordfish/page_big_pc/free/svip/buy?type=renew"
+            })
             $(".footer-banner").hide()
             $(".footer-banner").hide()
         } else {
         } else {
             // 双12活动
             // 双12活动

文件差异内容过多而无法显示
+ 693 - 95
src/web/templates/pc/supsearch.html


+ 5 - 4
src/web/templates/weixin/wxinfocontent.html

@@ -1,9 +1,10 @@
 <html>
 <html>
 <head>
 <head>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-  <meta name="Keywords" content="{{.T.obj.keywords}}"/>
-  <meta name="Description" content="{{.T.obj.description}}"/>
-  <title>公告信息</title>
+<meta name="Keywords" content="{{.T.obj.keywords}}"/>
+<meta name="Description" content="{{.T.obj.description}}"/>
+<meta name="referrer" content="never">
+<title>公告信息</title>
 <link href="{{Msg "seo" "cdn"}}/css/bootstrap.min.css" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/bootstrap.min.css" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/wxswordfish/style.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/wxswordfish/style.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
@@ -792,7 +793,7 @@ pre {
 		<button type="button" onclick="reward()" class="btn">打赏</button>
 		<button type="button" onclick="reward()" class="btn">打赏</button>
 	</center>
 	</center>
 	<div class="abs">
 	<div class="abs">
-		<a href="{{.T.obj.url}}" class="original hidden">阅读原文</a>
+		<a href="{{.T.obj.url}}" class="original hidden" rel="no-referrer">阅读原文</a>
 		{{if .T.obj.hasSession}}
 		{{if .T.obj.hasSession}}
 		<a class="feedback" href="/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
 		<a class="feedback" href="/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
 		{{end}}
 		{{end}}

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

@@ -3,6 +3,7 @@
   <meta name="Keywords" content="{{.T.obj.keywords}}"/>
   <meta name="Keywords" content="{{.T.obj.keywords}}"/>
   <meta name="Description" content="{{.T.obj.description}}"/>
   <meta name="Description" content="{{.T.obj.description}}"/>
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+<meta name="referrer" content="never">
 <title>公告信息</title>
 <title>公告信息</title>
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/wxcontentinfo.css?v={{Msg "seo" "version"}}2" rel="stylesheet">
 <link href="{{Msg "seo" "cdn"}}/css/wxcontentinfo.css?v={{Msg "seo" "version"}}2" rel="stylesheet">
@@ -757,10 +758,11 @@ em {
   /* border: 1px solid #EBEBEB; */
   /* border: 1px solid #EBEBEB; */
   border-collapse: collapse!important;
   border-collapse: collapse!important;
   border-spacing: 0px !important;
   border-spacing: 0px !important;
-  text-align: center;
+  /* text-align: center; */
 }
 }
 #h_content table tr td,.h_content table th{
 #h_content table tr td,.h_content table th{
   border: 1px solid #EBEBEB;
   border: 1px solid #EBEBEB;
+  padding: 2px 4px;
 }
 }
 .info .yhfb{
 .info .yhfb{
   background-color: rgba(255, 58, 32, 0.1);
   background-color: rgba(255, 58, 32, 0.1);
@@ -1283,7 +1285,7 @@ body .loading_ p span {
 			<span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
 			<span class="t-p-v-a-text">*温馨提示:系统识别到正文中对投标方有资质要求~</span>
 		</div>
 		</div>
 		<div class="abs">
 		<div class="abs">
-			<div class="original_name"  onclick="adv_statistics(this)" data-cl-event="c_wx_original_buttonclick"><a class="original hidden">阅读原文</a></div>
+			<div class="original_name"  onclick="adv_statistics(this)" data-cl-event="c_wx_original_buttonclick"><a class="original hidden" rel="no-referrer">阅读原文</a></div>
 			{{if .T.obj.hasSession}}
 			{{if .T.obj.hasSession}}
 			<a class="feedback" href="/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
 			<a class="feedback" href="/swordfish/feedback?fkid={{.T.obj._id}}">意见反馈</a>
 			{{end}}
 			{{end}}

部分文件因为文件数量过多而无法显示