Bläddra i källkod

Merge branch 'feature/v4.9.10' of https://jygit.jydev.jianyu360.cn/qmx/jy into dev/v4.9.10_wmh

wenmenghao321 1 år sedan
förälder
incheckning
8afe82183c
49 ändrade filer med 2638 tillägg och 301 borttagningar
  1. 2 1
      src/export.json
  2. 1 1
      src/go.mod
  3. 2 2
      src/go.sum
  4. 17 3
      src/jfw/front/dataExport.go
  5. 48 2
      src/jfw/front/searchOptimize.go
  6. 12 1
      src/jfw/front/supsearch.go
  7. 14 4
      src/jfw/front/swordfish.go
  8. 3 0
      src/jfw/front/ws_dataExport.go
  9. 47 17
      src/jfw/front/wx_dataExport.go
  10. 21 0
      src/jfw/modules/app/src/app/front/dataExport.go
  11. 2 0
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  12. 2 1
      src/jfw/modules/app/src/export.json
  13. 70 66
      src/jfw/modules/app/src/go.mod
  14. 838 39
      src/jfw/modules/app/src/go.sum
  15. 35 3
      src/jfw/modules/app/src/web/templates/dataExport/dataExport.html
  16. 361 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_agencyEdit.html
  17. 146 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_agencyInput.html
  18. 16 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html
  19. 8 8
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html
  20. 5 5
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html
  21. 2 1
      src/jfw/modules/publicapply/src/activityday/config.json
  22. 2 1
      src/jfw/modules/publicapply/src/activityday/config/config.go
  23. 7 2
      src/jfw/modules/publicapply/src/activityday/dao/dao.go
  24. 1 1
      src/jfw/modules/publicapply/src/customer/entity/entiy.go
  25. 2 2
      src/jfw/modules/publicapply/src/go.mod
  26. 2 2
      src/jfw/modules/publicapply/src/go.sum
  27. 0 0
      src/jfw/modules/subscribepay/src/dataexport.json
  28. 15 6
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  29. 11 2
      src/jfw/modules/subscribepay/src/go.mod
  30. 14 3
      src/jfw/modules/subscribepay/src/go.sum
  31. 2 0
      src/jfw/modules/subscribepay/src/pay/derivedCondition.go
  32. 2 0
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  33. 0 25
      src/jfw/modules/subscribepay/src/util/dataExportExcel.go
  34. 3 1
      src/web/staticres/common-module/dataExport/js/association.js
  35. 40 3
      src/web/staticres/css/selectCommon.css
  36. 8 4
      src/web/staticres/dataExport/css/conditions.css
  37. 3 1
      src/web/staticres/dataExport/css/conditions.scss
  38. 9 0
      src/web/staticres/dataExport/js/conditions_order.js
  39. 7 3
      src/web/staticres/js/selector/keyword-tags-new.js
  40. 20 3
      src/web/staticres/js/superSearch.js
  41. 139 64
      src/web/templates/pc/dataExport_sieve.html
  42. 24 3
      src/web/templates/pc/orderDetail.html
  43. 134 3
      src/web/templates/pc/supsearch.html
  44. 36 5
      src/web/templates/weixin/dataExport/dataExport.html
  45. 340 0
      src/web/templates/weixin/dataExport/dataExport_agencyEdit.html
  46. 137 0
      src/web/templates/weixin/dataExport/dataExport_agencyInput.html
  47. 17 1
      src/web/templates/weixin/dataExport/dataExport_toOrderDetail.html
  48. 7 7
      src/web/templates/weixin/dataExport/dataExport_winnerEdit.html
  49. 4 4
      src/web/templates/weixin/dataExport/dataExport_winnerInput.html

+ 2 - 1
src/export.json

@@ -3,6 +3,7 @@
     "wordsLimit": 100,
     "countLimit": 300,
     "buyerLimit": 100,
-    "winnerLimit": 100
+    "winnerLimit": 100,
+    "agencyLimit": 100
   }
 }

+ 1 - 1
src/go.mod

@@ -6,7 +6,7 @@ require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.13.2
+	app.yhyue.com/moapp/jypkg v1.14.6
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0

+ 2 - 2
src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.13.2 h1:bYpAbssOew/V4Lzm5bR5JejQttF+Pxhux+kRN5V8lmE=
-app.yhyue.com/moapp/jypkg v1.13.2/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
+app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

+ 17 - 3
src/jfw/front/dataExport.go

@@ -118,6 +118,7 @@ func (d *DataExport) SieveData() {
 	buyer := d.GetString("buyer")
 	buyerclass := d.GetString("buyerclass")
 	winner := d.GetString("winner")
+	agency := d.GetString("agency")
 	selectType := d.GetString("selectType")
 
 	var areaArr []string
@@ -128,6 +129,7 @@ func (d *DataExport) SieveData() {
 	var buyerArr []string
 	var buyerclassArr []string
 	var winnerArr []string
+	var agencyArr []string
 	var keywordList []dataexport.KeyWord
 
 	log.Println("price", minPrice, maxPrice)
@@ -175,6 +177,10 @@ func (d *DataExport) SieveData() {
 		winnerArr = strings.Split(winner, ",")
 		log.Println("winnerArr", winnerArr)
 	}
+	if agency != "" {
+		agencyArr = strings.Split(agency, ",")
+		log.Println("agencyArr", agencyArr)
+	}
 	var isTitle int
 
 	if selectType != "" {
@@ -260,6 +266,7 @@ func (d *DataExport) SieveData() {
 		"maxprice":    maxPrice,
 		"subtype":     subType,
 		"buyer":       buyerArr,
+		"agency":      agencyArr,
 		"buyerclass":  buyerclassArr,
 		"isTitle":     isTitle,
 		"winner":      winnerArr,
@@ -482,9 +489,12 @@ func (d *DataExport) SuperSearchExport() error {
 	source := d.GetString("jump_source") //兼容工作桌面外检索跳转工作桌面内
 	//接收超级搜索页面参数
 	reqData := public.BidSearchExport{
-		Keywords:        d.GetString("keywords"),                     //搜索词
-		Publishtime:     d.GetString("publishtime"),                  //发布时间
-		Area:            d.GetString("area"),                         //地区
+		Keywords:        d.GetString("keywords"),    //搜索词
+		Publishtime:     d.GetString("publishtime"), //发布时间
+		Area:            d.GetString("area"),        //地区
+		Buyer:           d.GetString("buyer"),
+		Winner:          d.GetString("winner"),
+		Agency:          d.GetString("agency"),
 		Subtype:         d.GetString("subtype"),                      //信息类型
 		Minprice:        d.GetString("minprice"),                     //最低价格
 		Maxprice:        d.GetString("maxprice"),                     //最高价格
@@ -529,6 +539,10 @@ func (d *DataExport) SuperSearchExport() error {
 	d.SetSession("Echo_searchMode", reqData.SearchMode)
 	d.SetSession("Echo_wordsMode", reqData.WordsMode)
 	d.SetSession("Echo_additionalWords", reqData.AdditionalWords)
+	d.SetSession("Echo_buyer", reqData.Buyer)
+	d.SetSession("Echo_winner", reqData.Winner)
+	d.SetSession("Echo_agency", reqData.Agency)
+
 	if source == "" {
 		saveData := reqData.PassBidSearchExport(config.Sysconfig)
 

+ 48 - 2
src/jfw/front/searchOptimize.go

@@ -23,7 +23,7 @@ import (
 
 const (
 	multiMatch              = `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s]}}`
-	query                   = `{"query":{"bool":{"must":[%s],"must_not":[%s]}}}`
+	query                   = `{"query":{"bool":{"filter":[%s],"must_not":[%s]}}}`
 	queryBoolShould         = `{"bool":{"should":[%s],"minimum_should_match": 1}}`
 	queryBoolMustBoolShould = `{"bool":{"must":[{"range":{"bidamount":{%s}}}]}},{"bool":{"must":[{"range":{"budget":{%s}}}],"must_not":[{"range":{"bidamount":{"gte":-1}}}]}}`
 	queryBoolMust           = `{"bool":{"must":[{"terms":{"s_subscopeclass":[%s]}}]}}`
@@ -97,13 +97,16 @@ type SearchOptimize struct {
 	Changehand          int           `json:"changehand"`     // 换手率
 	Scale               string        `json:"scale"`          //价格区间
 	Isfile              int           `json:"isfile"`         //有无附件
+	Buyer               string        `json:"buyer"`          //采购单位
+	Winner              string        `json:"winner"`         //中标企业
+	Agency              string        `json:"agency"`         //代理机构
 
 }
 
 // NewSearchOptimize  初始化
 func NewSearchOptimize(userId, phone, province, city, district, subtype, topType, publishTime, selectType, price, industry, buyerClass, buyerTel, winnerTel, fileExists, keyWords, additionalWords, exclusionWords, platform, territorialization, expireTime, propertyForm, subinformation string,
 	pageNum, pageSize, searchGroup, searchMode, wordsMode int, period, scale string, changehand, isfile int,
-	userInfo jy.VipState, searchTypeSwitch bool, r *http.Request, accountId, entAccountId, entId, entUserId int64) *SearchOptimize {
+	userInfo jy.VipState, searchTypeSwitch bool, r *http.Request, accountId, entAccountId, entId, entUserId int64, buyer, winner, agency string) *SearchOptimize {
 	IsPay := userInfo.IsPayedUser()
 	if territorialization == "BIProperty" {
 		res := config.Middleground.ResourceCenter.Haspowers(accountId, entAccountId, entId, entUserId)
@@ -154,6 +157,9 @@ func NewSearchOptimize(userId, phone, province, city, district, subtype, topType
 		Changehand:       changehand,
 		Scale:            scale,
 		Isfile:           isfile,
+		Buyer:            buyer,
+		Winner:           winner,
+		Agency:           agency,
 	}
 	so.SearchParamsHandle()
 	return so
@@ -430,6 +436,18 @@ func (so *SearchOptimize) GetSearchQuery(mustQuery string) (qstr string) {
 	}
 	switchBool := strings.Contains(findFields, "detail") && strings.Contains(findFields, "title") && so.SearchTypeSwitch
 
+	//采购单位
+	if so.Buyer != "" {
+		musts = append(musts, GetMatchArrSql("buyer.mbuyer", strings.Split(so.Buyer, ",")...))
+	}
+	//中标单位
+	if so.Winner != "" {
+		musts = append(musts, GetMatchArrSql("s_winner.mwinner", strings.Split(so.Winner, ",")...))
+	}
+	//代理机构
+	if so.Agency != "" {
+		musts = append(musts, GetMatchArrSql("agency.magency", strings.Split(so.Agency, ",")...))
+	}
 	//此时关键词中间有+进行隔离
 	if so.KeyWords != "" {
 		var (
@@ -1170,3 +1188,31 @@ func IndustryFormat(industry, subScopeClass string) (newIndustry string) {
 	}
 	return
 }
+
+// 采购单位、中标企业、代理机构
+var GetMatchArrSql = func(field string, val ...string) (sql string) {
+	if len(val) == 0 {
+		return
+	}
+	var (
+		arr []string
+		i   int
+	)
+	for _, s := range val {
+		if s == "" {
+			continue
+		}
+		if len([]rune(s)) > 30 {
+			s = string([]rune(s)[:30])
+		}
+		i++
+		arr = append(arr, fmt.Sprintf(`{"match_phrase": {"%s": "%s"}}`, field, s))
+		if i > 4 {
+			break
+		}
+	}
+	if len(arr) == 0 {
+		return ""
+	}
+	return fmt.Sprintf(`{"bool": {"should": [%s],"minimum_should_match": 1}}`, strings.Join(arr, ","))
+}

+ 12 - 1
src/jfw/front/supsearch.go

@@ -402,6 +402,9 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 		city                      = ""     //城市 付费用户可用
 		district                  = ""
 		regionMap                 = ""
+		buyer                     = ""
+		winner                    = ""
+		agency                    = ""
 	)
 	// 领域化标识
 	territorialization := p.GetString("bid_field")
@@ -428,6 +431,10 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 		city = p.GetString("city") //城市 付费用户可用
 		district = p.GetString("district")
 		regionMap = p.GetString("regionMap")
+		//P492招标采购搜索匹配采购单位等优化
+		buyer = p.GetString("buyer")   //采购单位
+		winner = p.GetString("winner") //中标企业
+		agency = p.GetString("agency") //招标代理机构
 	}
 	//历史导出数据回显
 	if strings.Contains(p.Url(), "?goback") {
@@ -478,6 +485,10 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 		wordsMode = util.IntAll(sessVal["Echo_wordsMode"])                  //搜索关键词模式;默认0:包含所有关键词;1:包含任意关键词。
 		additionalWords = util.ObjToString(sessVal["Echo_additionalWords"]) //关键词:附加关键词(副:五组,每组最多15个字符 每组,号隔开)
 		queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
+		//P492招标采购搜索匹配采购单位等优化
+		buyer = util.ObjToString(sessVal["Echo_buyer"])
+		winner = util.ObjToString(sessVal["Echo_winner"])
+		agency = util.ObjToString(sessVal["Echo_agency"])
 	}
 	keywordsLimit := util.IntAllDef(config.Sysconfig["keywordsLimit"], 35)
 	searchLimit := public.IsSearchLimit(queryItems)
@@ -522,7 +533,7 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 		searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
 		so := NewSearchOptimize(userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, "", "", "",
 			0, pageSize, searchGroup, searchMode, wordsMode, "", "", 0, 0,
-			*userInfo, searchTypeSwitch, p.Request, accountId, entAccountId, entId, entUserId)
+			*userInfo, searchTypeSwitch, p.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
 		heightKeys = so.HeightKeys //主关键词和附加词合并,多组空格隔开,作为前端渲染高亮关键词使用
 		//关键词  行业 附加词
 		//放开用户不输入关键词可搜索 --P297需求

+ 14 - 4
src/jfw/front/swordfish.go

@@ -187,6 +187,11 @@ func (m *Front) PcAjaxReq() {
 		isLimit                   = 1
 		list                      []*map[string]interface{}
 		heightKeys                string //需要高亮的关键词
+		//P492招标采购搜索匹配采购单位等优化
+		buyer  string //采购单位
+		winner string //中标企业
+		agency string //招标代理机构
+		bwa    bool
 	)
 	queryItems = userInfo.GetQueryItems(selectType, util.Int64All(config.Sysconfig["bidSearchOldUserLimit"]))
 	isPayedUser = userInfo.IsPayedUser()
@@ -195,6 +200,11 @@ func (m *Front) PcAjaxReq() {
 		hasBuyerTel, hasWinnerTel = m.GetString("buyertel"), m.GetString("winnertel")
 		notkey = m.GetString("notkey")
 		city = m.GetString("city")
+		//P492招标采购搜索匹配采购单位等优化
+		buyer = m.GetString("buyer")   //采购单位
+		winner = m.GetString("winner") //中标企业
+		agency = m.GetString("agency") //招标代理机构
+		bwa = buyer != "" || winner != "" || agency != ""
 	}
 	// p329  非反爬白名单用户不放开  需要处理通用词
 	onList, _ := jyutil.IsOnTheWhitelist(m.Session())
@@ -206,7 +216,8 @@ func (m *Front) PcAjaxReq() {
 	b_word, a_word, s_word := jy.InterceptSearchKW(searchValueString, util.IntAllDef(config.Sysconfig["keywordsLimit"], 35), len(industry) == 0)
 	//放开用户不输入关键词可搜索 --P297需求
 	// p329 反爬白名单用户放开  非反爬白名单用户不放开  未输入关键词
-	if len(s_word) > 0 || (len(s_word) >= 0 && onList) || len(industry) > 0 || strings.TrimSpace(additionalWords) != "" {
+	//P492招标采购搜索匹配采购单位等优化--采购单位 || 中标企业 || 招标代理机构 有任何一个都可以进行搜索
+	if len(s_word) > 0 || (len(s_word) >= 0 && onList) || len(industry) > 0 || strings.TrimSpace(additionalWords) != "" || bwa {
 		searchLimit := public.IsSearchLimit(queryItems)
 		//未登录用户标题、正文都限制,已登录用户只限制正文
 		if userId == "" {
@@ -223,7 +234,7 @@ func (m *Front) PcAjaxReq() {
 		}
 		if isLimit == 1 {
 			searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
-			so := NewSearchOptimize(userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId)
+			so := NewSearchOptimize(userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
 			if so.PageNum < 0 && so.PageSize < 0 {
 				log.Printf("查询参数超出范围,有可能是异常请求; 用户id:%s;用户手机号:%s \n", userId, phone)
 			} else {
@@ -234,9 +245,8 @@ func (m *Front) PcAjaxReq() {
 		}
 	} else {
 		searchTypeSwitch, _ := config.Sysconfig["searchTypeSwitch"].(bool)
-		so := NewSearchOptimize(userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId)
+		so := NewSearchOptimize(userId, phone, area, city, district, subtype, toptype, publishtime, strings.Join(queryItems, ","), fmt.Sprintf("%s-%s", minprice, maxprice), industry, buyerclass, hasBuyerTel, hasWinnerTel, fileExists, s_word, additionalWords, notkey, "PC", territorialization, expireTime, propertyForm, subinformation, currentPage, pageSize, searchGroup, searchMode, wordsMode, period, scale, changehand, isfile, *userInfo, searchTypeSwitch, m.Request, accountId, entAccountId, entId, entUserId, buyer, winner, agency)
 		list, count, total = so.GetBidSearchListByCache()
-
 	}
 	if userId == "" {
 		for _, v := range list {

+ 3 - 0
src/jfw/front/ws_dataExport.go

@@ -365,6 +365,9 @@ func (wd *WsDataExport) SearchExport() error {
 		Keywords:        wd.GetString("searchvalue"),                  //搜索词
 		Publishtime:     wd.GetString("publishtime"),                  //发布时间
 		Area:            wd.GetString("scope"),                        //地区
+		Buyer:           wd.GetString("buyer"),                        //采购单位
+		Agency:          wd.GetString("agency"),                       //招标代理机构
+		Winner:          wd.GetString("winner"),                       //中标企业
 		Subtype:         wd.GetString("subtype"),                      //信息类型
 		Minprice:        wd.GetString("minprice"),                     //最低价格
 		Maxprice:        wd.GetString("maxprice"),                     //最高价格

+ 47 - 17
src/jfw/front/wx_dataExport.go

@@ -23,23 +23,24 @@ import (
 
 type WxDataExport struct {
 	*xweb.Action
-	toSieve       xweb.Mapper `xweb:"/front/wx_dataExport/toSieve"`       //微信数据导出
-	saveData      xweb.Mapper `xweb:"/front/wx_dataExport/saveData"`      //保存筛选数据
-	area          xweb.Mapper `xweb:"/front/wx_dataExport/area"`          //区域
-	industry      xweb.Mapper `xweb:"/front/wx_dataExport/industry"`      //行业
-	buyerclass    xweb.Mapper `xweb:"/front/wx_dataExport/buyerclass"`    //采购单位类型
-	keyWord       xweb.Mapper `xweb:"/front/wx_dataExport/keyWord"`       //关键词
-	keyWordInput  xweb.Mapper `xweb:"/front/wx_dataExport/keyWordInput"`  //关键词输入
-	appended      xweb.Mapper `xweb:"/front/wx_dataExport/appended"`      //附加词
-	appendedInput xweb.Mapper `xweb:"/front/wx_dataExport/appendedInput"` //附加词输入
-	exclude       xweb.Mapper `xweb:"/front/wx_dataExport/exclude"`       //排除词
-	excludeInput  xweb.Mapper `xweb:"/front/wx_dataExport/excludeInput"`  //排除词输入
-	price         xweb.Mapper `xweb:"/front/wx_dataExport/price"`         //金额
-	subType       xweb.Mapper `xweb:"/front/wx_dataExport/subType"`       //信息类型
-	buyerEdit     xweb.Mapper `xweb:"/front/wx_dataExport/buyerEdit"`     //采购单位编辑
-	buyerInput    xweb.Mapper `xweb:"/front/wx_dataExport/buyerInput"`    //采购单位输入
-	winnerEdit    xweb.Mapper `xweb:"/front/wx_dataExport/winnerEdit"`    //中标单位编辑
-	winnerInput   xweb.Mapper `xweb:"/front/wx_dataExport/winnerInput"`   //中标单位输入
+	toSieve       xweb.Mapper `xweb:"/front/wx_dataExport/toSieve"`            //微信数据导出
+	saveData      xweb.Mapper `xweb:"/front/wx_dataExport/saveData"`           //保存筛选数据
+	area          xweb.Mapper `xweb:"/front/wx_dataExport/area"`               //区域
+	industry      xweb.Mapper `xweb:"/front/wx_dataExport/industry"`           //行业
+	buyerclass    xweb.Mapper `xweb:"/front/wx_dataExport/buyerclass"`         //采购单位类型
+	keyWord       xweb.Mapper `xweb:"/front/wx_dataExport/keyWord"`            //关键词
+	keyWordInput  xweb.Mapper `xweb:"/front/wx_dataExport/keyWordInput"`       //关键词输入
+	appended      xweb.Mapper `xweb:"/front/wx_dataExport/appended"`           //附加词
+	appendedInput xweb.Mapper `xweb:"/front/wx_dataExport/appendedInput"`      //附加词输入
+	exclude       xweb.Mapper `xweb:"/front/wx_dataExport/exclude"`            //排除词
+	excludeInput  xweb.Mapper `xweb:"/front/wx_dataExport/excludeInput"`       //排除词输入
+	price         xweb.Mapper `xweb:"/front/wx_dataExport/price"`              //金额
+	subType       xweb.Mapper `xweb:"/front/wx_dataExport/subType"`            //信息类型
+	buyerEdit     xweb.Mapper `xweb:"/front/wx_dataExport/buyerEdit"`          //采购单位编辑
+	buyerInput    xweb.Mapper `xweb:"/front/wx_dataExport/buyerInput"`         //采购单位输入
+	winnerEdit    xweb.Mapper `xweb:"/front/wx_dataExport/winnerEdit"`         //中标单位编辑
+	winnerInput   xweb.Mapper `xweb:"/front/wx_dataExport/winnerInput"`        //中标单位输入
+	agencyEdit    xweb.Mapper `xweb:"/front/wx_dataExport/agency(Edit|Input)"` //代理机构编辑
 }
 
 func init() {
@@ -116,6 +117,7 @@ func (w *WxDataExport) SaveData() error {
 	keyWord := w.GetString("keyWord")                      //关键词
 	buyer := w.GetString("buyer")                          //采购单位
 	winner := w.GetString("winner")                        //中标单位
+	agency := w.GetString("agency")                        //中标单位
 	buyerclass := w.GetString("buyerclass")                //中标单位
 	selectType := w.GetString("selectType")                //标题 or 全文
 	comeinfrom := w.GetString("comeinfrom")                //来源
@@ -127,6 +129,7 @@ func (w *WxDataExport) SaveData() error {
 	var regionArr []string
 	var industryArr []string
 	var buyerArr []string
+	var agencyArr []string
 	var buyerclassArr []string
 	var winnerArr []string
 	var keyWordArr []dataexport.KeyWord
@@ -166,6 +169,9 @@ func (w *WxDataExport) SaveData() error {
 	if buyer != "" {
 		buyerArr = strings.Split(buyer, ",")
 	}
+	if agency != "" {
+		agencyArr = strings.Split(agency, ",")
+	}
 	if buyerclass != "" {
 		buyerclassArr = strings.Split(buyerclass, ",")
 	}
@@ -242,6 +248,7 @@ func (w *WxDataExport) SaveData() error {
 
 	buyerLimit := util.IntAllDef(exportLimit["buyerLimit"], 100)
 	winnerLimit := util.IntAllDef(exportLimit["winnerLimit"], 100)
+	agencyLimit := util.IntAllDef(exportLimit["agencyLimit"], 100)
 
 	if len(buyerArr) > buyerLimit {
 		w.ServeJson(map[string]interface{}{
@@ -257,6 +264,13 @@ func (w *WxDataExport) SaveData() error {
 		})
 		return nil
 	}
+	if len(agencyArr) > agencyLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("招标代理机构超过上限%d", winnerLimit),
+		})
+		return nil
+	}
 	saveData := map[string]interface{}{
 		"publishtime": publishtime,
 		"area":        areaArr,
@@ -269,6 +283,7 @@ func (w *WxDataExport) SaveData() error {
 		"isTitle":     isTitle,
 		"subtype":     subType,
 		"buyer":       buyerArr,
+		"agency":      agencyArr,
 		"buyerclass":  buyerclassArr,
 		"winner":      winnerArr,
 		"comeintime":  time.Now().Unix(),
@@ -515,3 +530,18 @@ func (w *WxDataExport) WinnerInput() error {
 	w.Render("/weixin/dataExport/dataExport_winnerInput.html", &w.T)
 	return nil
 }
+
+// 代理机构编辑
+func (w *WxDataExport) AgencyEdit(val string) error {
+	//分享
+	getsession := w.Session().GetMultiple()
+	w.T["signature"] = wx.SignJSSDK(w.Site() + w.Url())
+	myopenid, _ := getsession["s_m_openid"].(string)
+	w.T["openid"] = se.EncodeString(myopenid)
+	mynickname, _ := getsession["s_nickname"].(string)
+	myavatar, _ := getsession["s_avatar"].(string)
+	w.T["nickname"] = mynickname
+	w.T["avatar"] = myavatar
+	w.Render(fmt.Sprintf("/weixin/dataExport/dataExport_agency%s.html", val), &w.T)
+	return nil
+}

+ 21 - 0
src/jfw/modules/app/src/app/front/dataExport.go

@@ -39,6 +39,7 @@ type WxDataExport struct {
 	winnerInput        xweb.Mapper `xweb:"/jyapp/front/dataExport/winnerInput"`        //中标单位输入
 	setDontPromptAgain xweb.Mapper `xweb:"/jyapp/front/dataExport/setDontPromptAgain"` //数据导出-超出2w条,不再提示
 	getDontPromptAgain xweb.Mapper `xweb:"/jyapp/front/dataExport/getDontPromptAgain"` //数据导出-超出2w条,不再提示
+	agencyEdit         xweb.Mapper `xweb:"/jyapp/front/dataExport/agency(Edit|Input)"` //代理机构编辑
 
 }
 
@@ -117,6 +118,7 @@ func (w *WxDataExport) SaveData() error {
 	industry := strings.TrimSpace(w.GetString("industry")) //行业
 	keyWord := w.GetString("keyWord")                      //关键词
 	buyer := w.GetString("buyer")                          //采购单位
+	agency := w.GetString("agency")                        //招标代理机构
 	buyerclass := w.GetString("buyerclass")                //采购单位类型
 	winner := w.GetString("winner")                        //中标单位
 	selectType := w.GetString("selectType")                //标题 or 全文
@@ -132,6 +134,7 @@ func (w *WxDataExport) SaveData() error {
 	var buyerArr []string
 	var buyerclassArr []string
 	var winnerArr []string
+	var agencyArr []string
 	var keyWordArr []dataexport.KeyWord
 
 	if area != "" {
@@ -169,6 +172,9 @@ func (w *WxDataExport) SaveData() error {
 	if buyer != "" {
 		buyerArr = strings.Split(buyer, ",")
 	}
+	if agency != "" {
+		agencyArr = strings.Split(agency, ",")
+	}
 	if buyerclass != "" {
 		buyerclassArr = strings.Split(buyerclass, ",")
 	}
@@ -247,6 +253,7 @@ func (w *WxDataExport) SaveData() error {
 
 	buyerLimit := util.IntAllDef(exportLimit["buyerLimit"], 100)
 	winnerLimit := util.IntAllDef(exportLimit["winnerLimit"], 100)
+	agencyLimit := util.IntAllDef(exportLimit["agencyLimit"], 100)
 
 	if len(buyerArr) > buyerLimit {
 		w.ServeJson(map[string]interface{}{
@@ -262,6 +269,13 @@ func (w *WxDataExport) SaveData() error {
 		})
 		return nil
 	}
+	if len(agencyArr) > agencyLimit {
+		w.ServeJson(map[string]interface{}{
+			"error_code": -1,
+			"error_msg":  fmt.Sprintf("招标代理机构超过上限%d", winnerLimit),
+		})
+		return nil
+	}
 	saveData := map[string]interface{}{
 		"publishtime": publishtime,
 		"area":        areaArr,
@@ -274,6 +288,7 @@ func (w *WxDataExport) SaveData() error {
 		"maxprice":    max,
 		"subtype":     subType,
 		"buyer":       buyerArr,
+		"agency":      agencyArr,
 		"buyerclass":  buyerclassArr,
 		"winner":      winnerArr,
 		"selectType":  selectType,
@@ -419,3 +434,9 @@ func (w *WxDataExport) WinnerEdit() error {
 	w.Render("/dataExport/dataExport_winnerEdit.html", &w.T)
 	return nil
 }
+
+// AgencyEdit 代理机构编辑
+func (w *WxDataExport) AgencyEdit(val string) error {
+	w.Render(fmt.Sprintf("/dataExport/dataExport_agency%s.html", val), &w.T)
+	return nil
+}

+ 2 - 0
src/jfw/modules/app/src/app/front/ws_dataExport.go

@@ -355,6 +355,8 @@ func (wd *WsDataExport) SearchExport() error {
 		Keywords:        wd.GetString("searchvalue"),                  //搜索词
 		Publishtime:     wd.GetString("publishtime"),                  //发布时间
 		Area:            wd.GetString("scope"),                        //地区
+		Buyer:           wd.GetString("buyer"),                        //采购单位
+		Agency:          wd.GetString("agency"),                       //招标代理机构
 		Subtype:         wd.GetString("subtype"),                      //信息类型
 		Minprice:        wd.GetString("minprice"),                     //最低价格
 		Maxprice:        wd.GetString("maxprice"),                     //最高价格

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

@@ -3,6 +3,7 @@
     "wordsLimit": 100,
     "countLimit": 300,
     "buyerLimit": 100,
-    "winnerLimit": 100
+    "winnerLimit": 100,
+    "agencyLimit": 100
   }
 }

+ 70 - 66
src/jfw/modules/app/src/go.mod

@@ -3,43 +3,44 @@ module jy/src/jfw/modules/app/src
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40
+	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.0.16
-	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.15-0.20230925060020-8e4db0f1e13e
+	app.yhyue.com/moapp/jypkg v1.14.6
+	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
-	github.com/gogf/gf/v2 v2.3.1
+	github.com/gogf/gf/v2 v2.6.2
 	github.com/pkg/errors v0.9.1
-	go.mongodb.org/mongo-driver v1.11.6
+	go.mongodb.org/mongo-driver v1.13.1
 )
 
 require (
 	app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d // indirect
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 // indirect
-	app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae // indirect
-	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231219095433-7e7d4aa59822 // indirect
-	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.8 // indirect
-	github.com/BurntSushi/toml v1.1.0 // indirect
+	app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736 // indirect
+	app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 // indirect
+	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20231226074509-942d80dc34eb // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231222060155-36e225b61353 // indirect
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 // indirect
+	github.com/BurntSushi/toml v1.2.0 // indirect
 	github.com/RoaringBitmap/roaring v1.5.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bits-and-blooms/bitset v1.2.0 // indirect
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
-	github.com/clbanning/mxj/v2 v2.5.5 // indirect
+	github.com/clbanning/mxj/v2 v2.7.0 // indirect
 	github.com/coreos/go-semver v0.3.1 // indirect
 	github.com/coreos/go-systemd/v22 v22.5.0 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
-	github.com/fatih/color v1.15.0 // indirect
-	github.com/fsnotify/fsnotify v1.6.0 // indirect
+	github.com/fatih/color v1.16.0 // indirect
+	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
-	github.com/go-openapi/jsonreference v0.20.1 // indirect
-	github.com/go-openapi/swag v0.22.3 // indirect
+	github.com/go-openapi/jsonreference v0.20.2 // indirect
+	github.com/go-openapi/swag v0.22.4 // indirect
 	github.com/go-redis/redis/v8 v8.11.5 // indirect
 	github.com/go-sql-driver/mysql v1.7.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
@@ -48,24 +49,25 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
-	github.com/google/gnostic v0.5.7-v3refs // indirect
-	github.com/google/go-cmp v0.5.9 // indirect
+	github.com/google/gnostic-models v0.6.8 // indirect
+	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/uuid v1.4.0 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/howeyc/fsnotify v0.9.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.1 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/compress v1.15.15 // indirect
+	github.com/klauspost/compress v1.16.7 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
-	github.com/mattn/go-isatty v0.0.17 // indirect
-	github.com/mattn/go-runewidth v0.0.13 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mattn/go-runewidth v0.0.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -77,13 +79,13 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/olivere/elastic v6.2.37+incompatible // indirect
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
-	github.com/openzipkin/zipkin-go v0.4.1 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
-	github.com/prometheus/client_golang v1.15.1 // indirect
-	github.com/prometheus/client_model v0.3.0 // indirect
-	github.com/prometheus/common v0.42.0 // indirect
-	github.com/prometheus/procfs v0.9.0 // indirect
-	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/openzipkin/zipkin-go v0.4.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+	github.com/prometheus/client_golang v1.17.0 // indirect
+	github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
+	github.com/prometheus/common v0.44.0 // indirect
+	github.com/prometheus/procfs v0.11.1 // indirect
+	github.com/rivo/uniseg v0.4.4 // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
@@ -95,42 +97,44 @@ require (
 	github.com/tealeg/xlsx v1.0.5 // indirect
 	github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
-	github.com/xdg-go/scram v1.1.1 // indirect
-	github.com/xdg-go/stringprep v1.0.3 // indirect
+	github.com/xdg-go/scram v1.1.2 // indirect
+	github.com/xdg-go/stringprep v1.0.4 // indirect
 	github.com/yl2chen/cidranger v1.0.2 // indirect
-	github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
-	github.com/zeromicro/go-zero v1.5.3 // indirect
+	github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
+	github.com/zeromicro/go-zero v1.6.1 // indirect
 	github.com/ziutek/blas v0.0.0-20190227122918-da4ca23e90bb // indirect
-	go.etcd.io/etcd/api/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
-	go.etcd.io/etcd/client/v3 v3.5.9 // indirect
-	go.opentelemetry.io/otel v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/jaeger v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
-	go.opentelemetry.io/otel/exporters/zipkin v1.15.1 // indirect
-	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
-	go.opentelemetry.io/otel/trace v1.15.1 // indirect
-	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.11 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.11 // indirect
+	go.opentelemetry.io/otel v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 // indirect
+	go.opentelemetry.io/otel/exporters/zipkin v1.19.0 // indirect
+	go.opentelemetry.io/otel/metric v1.19.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.19.0 // indirect
+	go.opentelemetry.io/otel/trace v1.19.0 // indirect
+	go.opentelemetry.io/proto/otlp v1.0.0 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
-	go.uber.org/automaxprocs v1.5.2 // indirect
+	go.uber.org/automaxprocs v1.5.3 // indirect
 	go.uber.org/multierr v1.9.0 // indirect
 	go.uber.org/zap v1.24.0 // indirect
-	golang.org/x/crypto v0.6.0 // indirect
-	golang.org/x/net v0.10.0 // indirect
-	golang.org/x/oauth2 v0.7.0 // indirect
-	golang.org/x/sync v0.1.0 // indirect
-	golang.org/x/sys v0.8.0 // indirect
-	golang.org/x/term v0.8.0 // indirect
-	golang.org/x/text v0.9.0 // indirect
-	golang.org/x/time v0.3.0 // indirect
-	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
-	google.golang.org/grpc v1.56.1 // indirect
-	google.golang.org/protobuf v1.31.0 // indirect
+	golang.org/x/crypto v0.16.0 // indirect
+	golang.org/x/net v0.19.0 // indirect
+	golang.org/x/oauth2 v0.13.0 // indirect
+	golang.org/x/sync v0.5.0 // indirect
+	golang.org/x/sys v0.15.0 // indirect
+	golang.org/x/term v0.15.0 // indirect
+	golang.org/x/text v0.14.0 // indirect
+	golang.org/x/time v0.5.0 // indirect
+	google.golang.org/appengine v1.6.8 // indirect
+	google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
+	google.golang.org/grpc v1.60.0 // indirect
+	google.golang.org/protobuf v1.31.1-0.20231027082548-f4a6c1f6e5c1 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
@@ -139,13 +143,13 @@ require (
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gorm.io/driver/mysql v1.0.5 // indirect
 	gorm.io/gorm v1.21.3 // indirect
-	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a // indirect
-	k8s.io/api v0.26.3 // indirect
-	k8s.io/apimachinery v0.27.0-alpha.3 // indirect
-	k8s.io/client-go v0.26.3 // indirect
-	k8s.io/klog/v2 v2.90.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20230307230338-69ee2d25a840 // indirect
-	k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
+	jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231023011746-38dc3b6aded8 // indirect
+	k8s.io/api v0.28.4 // indirect
+	k8s.io/apimachinery v0.28.4 // indirect
+	k8s.io/client-go v0.28.4 // indirect
+	k8s.io/klog/v2 v2.100.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 838 - 39
src/jfw/modules/app/src/go.sum


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

@@ -336,11 +336,17 @@
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
                         <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/winnerEdit')">
-                                <strong>中标单位</strong>
+                                <strong>中标企业</strong>
                                 <span id="winner"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a>
                         </li>
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/agencyEdit')">
+                            <strong style="width: 2.2rem;">招标代理机构</strong>
+                            <span id="agency"></span>
+                            <i class="iconfont icon-arrow"></i>
+                            </a>
+                        </li>
                     </ul>
                 </div>
             </div>
@@ -548,6 +554,7 @@
             localStorage.removeItem('subTypes')
             localStorage.removeItem('buyer')
             localStorage.removeItem('winner')
+            localStorage.removeItem('agency')
             localStorage.setItem('index','-1')
             let val =res.data[0]
             if(val.publishtime){
@@ -661,6 +668,9 @@
         if(val.winner){
           localStorage.setItem('winner',val.winner)
         }
+        if(val.agency){
+          localStorage.setItem('agency',val.agency)
+        }
         }
       }
           sessionStorage.setItem('goScreen','2');
@@ -835,12 +845,19 @@
             } else {
                 localStorage.buyer = "";
             }
-            //中标单位
+            //中标企业
             if (filter["winner"] != null && filter["winner"].length > 0) {
                 localStorage.winner = filter["winner"].join(",");
             } else {
                 localStorage.winner = "";
             }
+            // 代理机构
+            if (filter["agency"] != null && filter["agency"].length > 0) {
+                localStorage.agency = filter["agency"].join(",");
+            } else {
+                localStorage.agency = "";
+            }
+
             //时间
             if (filter["publishtime"] != "") {
                 console.log(filter["publishtime"])
@@ -990,7 +1007,7 @@
             $(".confirm").hide();
             $(".resetOne").css('display', 'flex');
         }
-        //中标单位
+        //中标企业
         if (localStorage.winner !== undefined && localStorage.winner !== "") {
             var winner = localStorage.winner;
             var winners = winner.replace(/,/g, " ");
@@ -998,6 +1015,14 @@
             $(".confirm").hide();
             $(".resetOne").css('display', 'flex');
         }
+        // 代理机构
+        if (localStorage.agency) {
+            var agency = localStorage.agency;
+            var agencys = agency.replace(/,/g, " ");
+            $("#agency").text(agencys);
+            $(".confirm").hide();
+            $(".resetOne").css('display', 'flex');
+        }
         //获取当前时间
         var nowDate = (function () {
             var date = new Date();
@@ -1286,6 +1311,7 @@
             var subType = "";
             var buyer = "";
             var winner = "";
+            var agency = "";
             var selectType = "";
             var comeinfrom = "";
             var buyclass = "";
@@ -1341,6 +1367,9 @@
             if (localStorage.winner !== undefined && localStorage.winner !== "") {
                 winner = localStorage.winner;
             }
+            if (localStorage.agency) {
+                agency = localStorage.agency;
+            }
             if (localStorage.export_selectType !== undefined && localStorage.export_selectType !== "") {
                 // selectType = localStorage.export_selectType
                 var selectType_str = localStorage.export_selectType;
@@ -1424,6 +1453,7 @@
                     "subType": subType,
                     "buyer": buyer,
                     "winner": winner,
+                    "agency": agency,
                     "selectType": selectType,
                     "comeinfrom": comeinfrom,
                     "disWord": GetQueryString("disWord"),
@@ -1463,6 +1493,7 @@
             localStorage.removeItem("subTypes");
             localStorage.removeItem("buyer");
             localStorage.removeItem("winner");
+            localStorage.removeItem("agency");
             localStorage.removeItem("export_starttime");
             localStorage.removeItem("export_endtime");
             sessionStorage.removeItem("keyWord");
@@ -1475,6 +1506,7 @@
             $("#price").text("");
             $("#subType").text("");
             $("#winner").text("");
+            $("#agency").text("");
             $("#buyer").text("");
             $(".match").text("标题");
             //

+ 361 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_agencyEdit.html

@@ -0,0 +1,361 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  {{include "/common/meta.html"}}
+  <title>招标代理机构</title>
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+  <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
+  <link rel="stylesheet" type="text/css"
+    href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
+  <link rel="stylesheet"
+    href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}' />
+  <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+  <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+  {{include "/common/js.html"}}
+</head>
+<style>
+  .page {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    justify-content: space-between;
+  }
+
+  body {
+    background: rgba(245, 244, 249, 1) !important;
+  }
+
+  .keyWord .enter .btn .save-btn {
+    float: right;
+  }
+
+  .content {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    overflow-y: scroll;
+  }
+
+  .addKeyBtn i {
+    font-size: 1rem;
+    color: #2cb7ca;
+  }
+
+  .addKeyBtn {
+    left: 44%;
+    position: fixed;
+    text-align: center;
+    bottom: 10%;
+  }
+
+  .ent-more-tips {
+    display: none;
+    width: 100%;
+    padding: .14rem .32rem;
+    background: rgba(249, 242, 234, 1);
+    color: #FF9F40;
+    font-size: .26rem;
+    line-height: .4rem;
+    text-align: center;
+  }
+
+  .ent-more-tips>a {
+    color: #FF3A20;
+    text-decoration: underline;
+  }
+</style>
+
+<body>
+  <div class="page">
+    <div class="app-layout-header jy-app-header">
+      <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+      招标代理机构
+      <span></span></div>
+    <div class="app-layout-content-b">
+      <div class="keyWord">
+        <section class="content">
+          <div class="enter addkeyWord">
+            <input type="text" class="enterOne" placeholder="招标代理机构名称" />
+            <div class="btn fixed-bottom">
+              <button class="save-btn" disabled>确认</button>
+              <button class="close">取消</button>
+            </div>
+          </div>
+
+          <!-- 添加附加词显示列表 -->
+          <div class="showKeyWord">
+            <ul>
+
+            </ul>
+
+          </div>
+          <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
+          </div>
+        </section>
+        <div class="ent-more-tips">最多可添加{{Export.exportLimit.agencyLimit}}个招标代理机构,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div>
+      </div>
+    </div>
+    <div class="addKeyBtn" id="add-ent-word">
+      <i class="iconfont icon-tianjia"></i>
+    </div>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js"></script>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script>
+      var limit = {{Export.exportLimit}};
+      var agencyLimit = limit.agencyLimit || 100
+      console.log(limit);
+    </script>
+    <script>
+      $(window).bind("pageshow", function (event) {
+        if (event.originalEvent.persisted) {
+          window.location.reload();
+        }
+      });
+      var agencyArr = [];
+      if (localStorage.agency !== "" && localStorage.agency !== undefined) {
+        var agency = localStorage.agency.split(",");
+        agencyArr = agency;
+        var html = "";
+        for (var i in agency) {
+          html +=
+            `<li>
+							<div class="one">
+								<div>
+									<span>
+										<p class="key">${ agency[i] }</p>
+									</span>
+								</div>
+								<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+							</div>
+							<div class="modify">
+								<textarea  name=""  rows="1"  placeholder="" maxlength="">${ agency[i] }</textarea>
+								<button class="deleteKey">删除</button>
+								<button class="ascertainKey">确定</button>
+							</div>
+						</li>`
+        }
+        $('.showKeyWord > ul').prepend(html);
+        console.log(agency);
+        if (agency.length >= agencyLimit) {
+          $('.addKeyBtn').hide()
+          $('.ent-more-tips').show()
+        }
+      }
+      $(function () {
+
+        $('.knowBtn').on('click', function () {
+          $(".problemPop").hide()
+        })
+        $(".problem").on('click', function () {
+          $(".problemPop").css("display", 'flex');
+        })
+
+        function hasWords() {
+          var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+          if (showKeyWordLength === 0) {
+            $(".enter.addkeyWord").show();
+            $(".addKeyWord").hide();
+            $(".showKeyWord").hide();
+            $('.addKeyBtn').hide()
+          } else {
+            $(".enter.addkeyWord").hide();
+            $(".showKeyWord").show();
+            $(".addKeyWord").show();
+            if (showKeyWordLength >= agencyLimit) {
+              $('.addKeyBtn').hide()
+              $('.ent-more-tips').show()
+            } else {
+              $('.addKeyBtn').show()
+              $('.ent-more-tips').hide()
+            }
+          }
+        }
+        hasWords();
+
+        // 添加按钮
+        $(".addKeyBtn i").on('click', function () {
+          window.location.href = "/jyapp/front/dataExport/agencyInput";
+        });
+
+        $('textarea').each(function (i, dom) {
+          // console.log(i,dom)
+          dom.style.height = dom.scrollHeight + 'px';
+        });
+        $("textarea").on("input", function () {
+          this.style.height = 'auto';
+          this.style.height = this.scrollHeight + "px";
+        });
+
+        //防止键盘把当前输入框给挡住
+        $('input[type="text"],textarea').focus(function () {
+          var target = this;
+          setTimeout(function () {
+            target.scrollIntoViewIfNeeded();
+          }, 400);
+        });
+
+        // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+        $('.addkeyWord input.enterOne').on('input', function () {
+
+          var buttonDOM = $(this).siblings().find('button')[0];
+          if ($(this).val().replace(/\s+/g, "").length >= 1) {
+            buttonDOM.style.opacity = 1;
+            buttonDOM.removeAttribute("disabled")
+          } else {
+            buttonDOM.style.opacity = .5;
+            buttonDOM.setAttribute("disabled", true)
+          }
+        });
+
+        // 添加 按钮的点击事件
+        $('.addkeyWord .btn .save-btn').on('click', function () {
+          var keyWord = $('.addkeyWord input.enterOne').val();
+          keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+          if (keyWord.length > 50) {
+            // var s = keyWord.slice(0,49);
+            // $('.addkeyWord input.enterOne').val(s);
+
+            weui.toast('招标代理机构不能超过50字', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {}
+            });
+            return
+          }
+          agencyArr.push(keyWord);
+          localStorage.setItem("agency", agencyArr);
+          var html = `<li>
+								<div class="one">
+									<div>
+										<span>
+											<p class="key">${ keyWord }</p>
+										</span>
+									</div>
+									<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+								</div>
+								<div class="modify">
+									<textarea  name=""  rows="1"  placeholder="" maxlength="">${ keyWord }</textarea>
+									<button class="deleteKey">删除</button>
+									<button class="ascertainKey">确定</button>
+								</div>
+							</li>`;
+          $('.showKeyWord > ul').prepend(html);
+
+          // 隐藏
+          $(".enter.addkeyWord").hide();
+          $(".showKeyWord").show();
+          $(".addKeyWord").show();
+          $('.enter.addkeyWord > input').val('');
+          var buttonDOM = $('.enter.addkeyWord .btn button')[0];
+          buttonDOM.style.opacity = .5;
+          buttonDOM.setAttribute("disabled", true)
+          hasWords();
+        });
+
+        // 编辑
+        $(".showKeyWord").on('click', '.editKeyWord', function (e) {
+          let oSpan = $(this).parent().siblings().children('textarea');
+          let val = $(oSpan).val();
+          $(this).parent().hide();
+          $(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one')
+            .show()
+          $(oSpan).val('').focus().val(val);
+          $(".addKeyWord").hide();
+          hasWords();
+        });
+
+        // 编辑 删除
+        $('.showKeyWord').on('click', '.deleteKey', function (e) {
+          var agency = $(this).parent().prev().find('.key').text();
+          agencyArr.splice($.inArray(agency, agencyArr), 1);
+          localStorage.agency = agencyArr.toString();
+          $(this).parents('li').remove();
+          $(".addKeyWord").show();
+          hasWords()
+          // console.log('删除附加词:',$(this).parent().find('span').text())
+        });
+        // 编辑 确定
+        $('.showKeyWord').on('click', '.ascertainKey', function (e) {
+          var keyWord = $(this).siblings('textarea').val();
+          var agency = $(this).parent().prev().find('.key').text();
+          keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+          if (keyWord.replace(/\s+/g, "").length < 1) {
+
+            weui.toast('招标代理机构不能为空', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {
+
+              }
+            });
+            return
+          } else if ($(this).parent().find("textarea").val().length > 50) {
+            // var s = $(this).parent().find("span").text().slice(0,49);
+            // $(this).parent().find("span").text(s);
+            weui.toast('招标代理机构不能超过50字', {
+              duration: 2000,
+              className: 'text-overflow100',
+              callback: function () {}
+            });
+            return
+          } else {
+            for (var i in agencyArr) {
+              if (keyWord !== agency) {
+                if (agencyArr[i] === keyWord) {
+                  weui.toast('招标代理机构重复了', {
+                    duration: 2000,
+                    className: 'text-overflow100',
+                    callback: function () {}
+                  });
+                  return
+                }
+              }
+              if (agencyArr[i] === agency) {
+                agencyArr[i] = keyWord;
+              }
+            }
+            localStorage.agency = agencyArr.toString();
+            $(this).parent().siblings().find('.key').text(keyWord);
+            $(this).parent().hide().siblings().show()
+          }
+          // $(".addKeyWord").show();
+          hasWords();
+        });
+
+        //去空格方法
+        String.prototype.trim = function () {
+          return this.replace(/(^\s*)|(\s*$)/g, ' ');
+        };
+
+        $(".close").on('click', function () {
+          history.back();
+        });
+      })
+
+      function goPerfect() {
+        var source = ''
+        if (utils.$env.platform === 'h5') {
+          source = 'h5_Dataself_entmore_customization'
+        } else {
+          source = 'app_Dataself_entmore_customization'
+        }
+        location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=' + source
+      }
+    </script>
+    <script
+      src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}">
+    </script>
+    <!--百度统计end-->
+    {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 146 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_agencyInput.html

@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    {{include "/common/meta.html"}}
+	<title>招标代理机构</title>
+    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
+    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css" />
+    <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}'/>
+    <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+	{{include "/common/js.html"}}
+    </head>
+    <style>
+        .page{
+			display: flex;
+			flex-direction: column;
+			height: 100%;
+			justify-content: space-between;
+		}
+        body{
+            background: rgba(245,244,249,1)!important;
+        }
+        .keyWord .enter .btn .save-btn {
+            float: right;
+        }
+        .keyWord .addKeyWord {
+            width: 100%;
+            position: fixed;
+            top: 100%;
+            text-align: center;
+        }
+    </style>
+    <body>
+    	<div class="page">
+		    <div class="app-layout-header jy-app-header">
+		        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+		        招标代理机构
+		    <span></span></div>
+			<div class="app-layout-content-b">
+	    		<div class="keyWord">
+        <section class="content">
+        <div class="enter addkeyWord">
+        <input type="text" class="enterOne" placeholder="招标代理机构名称" />
+        <div class="btn fixed-bottom">
+        <button class="save-btn" disabled>确认</button>
+        <button class="close">取消</button>
+    </div>
+    </div>
+
+    <!-- 添加附加词显示列表 -->
+    <div class="showKeyWord">
+        <ul>
+
+        </ul>
+
+
+        </div>
+        <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
+        </div>
+            </section>
+        </div>
+       		</div>
+		</div>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script>
+    var agencyArr = [];
+    if(localStorage.agency !== "" && localStorage.agency !== undefined){
+        var agency = localStorage.agency.split(",");
+        agencyArr = agency;
+    }
+    $(function(){
+
+        $('.knowBtn').on('click',function(){
+            $(".problemPop").hide()
+        });
+        $(".problem").on('click',function(){
+            $(".problemPop").css("display",'flex');
+        });
+
+        // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+        $('.addkeyWord input.enterOne').on('input', function() {
+
+            var buttonDOM = $(this).siblings().find('button')[0];
+            if ($(this).val().replace(/\s+/g,"").length >= 1) {
+                buttonDOM.style.opacity = 1;
+                buttonDOM.removeAttribute("disabled")
+            } else {
+                buttonDOM.style.opacity = .5;
+                buttonDOM.setAttribute("disabled", true)
+            }
+        });
+
+        // 添加 按钮的点击事件
+        $('.addkeyWord .btn .save-btn').on('click', function(){
+            var keyWord = $('.addkeyWord input.enterOne').val();
+            keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+            if (keyWord.length > 50) {
+                // var s = keyWord.slice(0,49);
+                // $('.addkeyWord input.enterOne').val(s);
+
+                weui.toast('招标代理机构不能超过50字', {
+                    duration: 2000,
+                    className: 'text-overflow100',
+                    callback: function(){}
+                });
+                return
+            }
+            for (var a in agencyArr){
+                if (keyWord === agencyArr[a]){
+                    weui.toast('招标代理机构重复了', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){}
+                    });
+                    return
+                }
+            }
+            agencyArr.push(keyWord);
+            localStorage.setItem("agency", agencyArr);
+            history.back();
+        });
+
+        //去空格方法
+        String.prototype.trim = function(){
+            return this.replace(/(^\s*)|(\s*$)/g, ' ');
+        };
+
+        $(".close").on('click', function () {
+            history.back();
+        });
+    })
+
+    </script>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
+<!--百度统计end-->
+{{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 16 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_toOrderDetail.html

@@ -245,6 +245,7 @@
                 var subType = filter["subtype"];
                 var buyer = filter["buyer"];
                 var winner = filter["winner"];
+                var agency = filter.agency
                 var selectType = filter["selectType"];
 
                 if (!publishtime) {
@@ -432,6 +433,16 @@
                 }
                 $(".winner").append(winnerHtml);
 
+                var agencyHtml = "";
+                if (agency && agency.length > 0) {
+                    for (var i = 0; i < agency.length; i++) {
+                        agencyHtml += "<span>" + agency[i] + "&nbsp</span>";
+                    }
+                    $('.agency').parent().show()
+                } else {
+                    agencyHtml += "<span>-</span>";
+                }
+                $(".agency").append(agencyHtml);
             }
             ;
 
@@ -574,7 +585,7 @@
 										</span>
                         </p>
                         <p class="item-list l-item">
-                            <span class="label">中标单位:</span>
+                            <span class="label">中标企业:</span>
                             <span class="item-list-parents winner value">
 										</span>
                         </p>
@@ -583,6 +594,10 @@
                             <span class="item-list-parents buyer value">
 										</span>
                         </p>
+                        <p class="item-list l-item" style="display: none;">
+                            <span class="label">招标代理机构:</span>
+                            <span class="item-list-parents agency value"></span>
+                        </p>
                     </div>
                 </div>
                 <div class="bottom">

+ 8 - 8
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html

@@ -3,7 +3,7 @@
 
 <head>
   {{include "/common/meta.html"}}
-  <title>中标单位</title>
+  <title>中标企业</title>
   <link rel="stylesheet" type="text/css"
     href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
   <link rel="stylesheet" type="text/css"
@@ -76,13 +76,13 @@
   <div class="page">
     <div class="app-layout-header jy-app-header">
       <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
-      中标单位
+      中标企业
       <span></span></div>
     <div class="app-layout-content-b">
       <div class="keyWord">
         <section class="content">
           <div class="enter addkeyWord">
-            <input type="text" class="enterOne" placeholder="中标单位名称" />
+            <input type="text" class="enterOne" placeholder="中标企业名称" />
             <div class="btn fixed-bottom">
               <button class="save-btn" disabled>确认</button>
               <button class="close">取消</button>
@@ -101,7 +101,7 @@
             </ul>
           </div>
         </section>
-        <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div>
+        <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标企业,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="goPerfect()">申请数据定制导出></a></div>
       </div>
     </div>
     <div class="addKeyBtn" id="add-ent-word">
@@ -224,7 +224,7 @@
             // var s = keyWord.slice(0,49);
             // $('.addkeyWord input.enterOne').val(s);
 
-            weui.toast('中标单位不能超过50字', {
+            weui.toast('中标企业不能超过50字', {
               duration: 2000,
               className: 'text-overflow100',
               callback: function () {}
@@ -290,7 +290,7 @@
           keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
           if (keyWord.replace(/\s+/g, "").length < 1) {
 
-            weui.toast('中标单位不能为空', {
+            weui.toast('中标企业不能为空', {
               duration: 2000,
               className: 'text-overflow100',
               callback: function () {
@@ -301,7 +301,7 @@
           } else if ($(this).parent().find("textarea").val().length > 50) {
             // var s = $(this).parent().find("span").text().slice(0,49);
             // $(this).parent().find("span").text(s);
-            weui.toast('中标单位不能超过50字', {
+            weui.toast('中标企业不能超过50字', {
               duration: 2000,
               className: 'text-overflow100',
               callback: function () {}
@@ -311,7 +311,7 @@
             for (var i in winnerArr) {
               if (keyWord !== winner) {
                 if (winnerArr[i] === keyWord) {
-                  weui.toast('中标单位重复了', {
+                  weui.toast('中标企业重复了', {
                     duration: 2000,
                     className: 'text-overflow100',
                     callback: function () {}

+ 5 - 5
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html

@@ -3,7 +3,7 @@
 
 <head>
     {{include "/common/meta.html"}}
-	<title>中标单位</title>
+	<title>中标企业</title>
     <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" type="text/css" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css">
@@ -39,13 +39,13 @@
     	<div class="page">
 		    <div class="app-layout-header jy-app-header">
 		        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
-		        中标单位
+		        中标企业
 		    <span></span></div>
 			<div class="app-layout-content-b">
 	    		<div class="keyWord">
         <section class="content">
         <div class="enter addkeyWord">
-        <input type="text" class="enterOne" placeholder="中标单位名称" />
+        <input type="text" class="enterOne" placeholder="中标企业名称" />
         <div class="btn fixed-bottom">
         <button class="save-btn" disabled>确认</button>
         <button class="close">取消</button>
@@ -105,7 +105,7 @@
                 // var s = keyWord.slice(0,49);
                 // $('.addkeyWord input.enterOne').val(s);
 
-                weui.toast('中标单位不能超过50字', {
+                weui.toast('中标企业不能超过50字', {
                     duration: 2000,
                     className: 'text-overflow100',
                     callback: function(){}
@@ -114,7 +114,7 @@
             }
             for (var a in winnerArr){
                 if (keyWord === winnerArr[a]){
-                    weui.toast('中标单位重复了', {
+                    weui.toast('中标企业重复了', {
                         duration: 2000,
                         className: 'text-overflow100',
                         callback: function(){}

+ 2 - 1
src/jfw/modules/publicapply/src/activityday/config.json

@@ -38,5 +38,6 @@
     "weChatUrl": ""
   },
   "webhookURL": ["https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=78864582-d770-452f-a55d-e8d17c647f31"],
-  "drawNum": 20
+  "drawNum": 20,
+  "firstAccessSwitch": true
 }

+ 2 - 1
src/jfw/modules/publicapply/src/activityday/config/config.go

@@ -36,7 +36,8 @@ type config struct {
 		WeChatUrl    string `json:"weChatUrl"`
 	} `json:"siteMsg"`
 	WebhookURL []string `json:"webhookURL"`
-	DrawNum    int      `json:"drawNum"` //一次最大抽奖次数
+	DrawNum    int      `json:"drawNum"`           //一次最大抽奖次数
+	FASwitch   bool     `json:"firstAccessSwitch"` //首次访问 是否赠送剑鱼币 开关
 }
 
 var (

+ 7 - 2
src/jfw/modules/publicapply/src/activityday/dao/dao.go

@@ -6,6 +6,7 @@ import (
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jybase/redis"
 	"fmt"
+	"jy/src/jfw/modules/publicapply/src/activityday/config"
 	"jy/src/jfw/modules/publicapply/src/activityday/consts"
 	"jy/src/jfw/modules/publicapply/src/activityday/util"
 	"jy/src/jfw/modules/publicapply/src/db"
@@ -45,13 +46,17 @@ func GetLotteryActiveInfo(activeId int64, sess map[string]interface{}, session *
 		return
 	}
 	//活动期间
-	if r.DLai.ActiveStartTime <= now.Unix() && r.DLai.ActiveEndTime >= now.Unix() {
+	if r.DLai.ActiveStartTime <= now.Unix() && r.DLai.ActiveEndTime >= now.Unix() && config.Config.FASwitch {
 		//首次访问活动页面 赠送剑鱼币100
 		onceKey := fmt.Sprintf("activity_day_once_%s", r.UserInfo.UserId)
 		if ok, err := redis.Exists(consts.RedisNewCode, onceKey); err == nil && !ok {
 			err = r.PointHarvest(r.DLai.Cost)
 			if err == nil {
-				redis.Put(consts.RedisNewCode, onceKey, now.Day(), 30*24*60*60)
+				expireTime := 10 * 24 * 60 * 60
+				if r.DLai.ActiveEndTime > now.Unix() {
+					expireTime = int(r.DLai.ActiveEndTime - now.Unix())
+				}
+				redis.Put(consts.RedisNewCode, onceKey, now.Day(), expireTime)
 			} else {
 				log.Println("--首次 赠送--err -:", err.Error())
 			}

+ 1 - 1
src/jfw/modules/publicapply/src/customer/entity/entiy.go

@@ -80,7 +80,6 @@ func (this *CustomerOperation) CheckIsFollow() (data map[string]interface{}) {
 	useCount := db.Mgo.Count(fc, map[string]interface{}{
 		"userId": this.UserId,
 	})
-	countInfo["use"] = useCount
 	// 获取关注上限
 	//BigMsg := jy.GetBigVipUserBaseMsg(this.Session, *config.Middleground)  这个方法没有企业服务的信息不用这个了
 	o := this.SessUser
@@ -93,6 +92,7 @@ func (this *CustomerOperation) CheckIsFollow() (data map[string]interface{}) {
 	if useCount > countLimit {
 		useCount = countLimit
 	}
+	countInfo["use"] = useCount
 	surplus := countLimit - useCount
 	countInfo["surplus"] = surplus
 	return

+ 2 - 2
src/jfw/modules/publicapply/src/go.mod

@@ -5,7 +5,8 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.13.2
+	app.yhyue.com/moapp/jypkg v1.14.6
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231222060155-36e225b61353
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5
@@ -24,7 +25,6 @@ require (
 	app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736 // indirect
 	app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 // indirect
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20231226074509-942d80dc34eb // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20231222060155-36e225b61353 // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 // indirect
 	github.com/BurntSushi/toml v1.2.0 // indirect
 	github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect

+ 2 - 2
src/jfw/modules/publicapply/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.13.2 h1:bYpAbssOew/V4Lzm5bR5JejQttF+Pxhux+kRN5V8lmE=
-app.yhyue.com/moapp/jypkg v1.13.2/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
+app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/jfw/modules/subscribepay/src/dataexport.json


+ 15 - 6
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -194,7 +194,7 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 		filter := qutil.ObjToString((*order)["filter"])
 		// buyer, buyerclass, winner, subtype := "", "", "", ""
 		// publishtime, region, industry, keys := "", "", "", ""
-		buyer, buyerclass, winner, subtype := "-", "全部", "-", "全部"
+		buyer, buyerclass, winner, subtype, agency := "-", "全部", "-", "全部", "-"
 		publishtime, region, industry, keys := "-", "全国", "全部", "-"
 		sc_money := ""
 		sc := new(dataexport.SieveCondition)
@@ -287,6 +287,9 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 			if len(sc.Buyer) > 0 {
 				buyer = strings.Join(sc.Buyer, " ")
 			}
+			if len(sc.Agency) > 0 {
+				agency = strings.Join(sc.Agency, " ")
+			}
 			if len(sc.Buyerclass) > 0 {
 				buyerclass = strings.Join(sc.Buyerclass, " ")
 			}
@@ -300,7 +303,7 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 			log.Println("用户筛选条件错误", err, sc)
 		}
 		mail_title = "剑鱼标讯历史数据订单【" + order_code + "】,请查收"
-		mailcontent = fmt.Sprintf(config.ExConf.Mail_order_finance_content, order_code, create_time, pay_time, product_type, isShowTransaction, pay_way, transaction_id, data_spec, data_count, order_money, user_mail, user_phone, publishtime, region, industry, buyerclass, keys, selectType, sc_money, subtype, buyer, winner)
+		mailcontent = fmt.Sprintf(config.ExConf.Mail_order_finance_content, order_code, create_time, pay_time, product_type, isShowTransaction, pay_way, transaction_id, data_spec, data_count, order_money, user_mail, user_phone, publishtime, region, industry, buyerclass, keys, selectType, sc_money, subtype, buyer, winner, agency)
 	} else {
 		//申请发票
 		pay_time = qutil.ObjToString((*order)["pay_time"])
@@ -593,7 +596,7 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 func GetPackDataExportMailContent(filterId, download_url string) (content string, err error) {
 	// buyer, buyerclass, winner, subtype := "", "", "", ""
 	// publishtime, region, industry, keys := "", "", "", ""
-	buyer, buyerclass, winner, subtype := "-", "全部", "-", "全部"
+	buyer, buyerclass, winner, subtype, agency := "-", "全部", "-", "全部", "-"
 	publishtime, region, industry, keys := "-", "全国", "全部", "-"
 	sc_money := ""
 	sc := dataexport.GetSqlObjFromId(util.MQFW, filterId)
@@ -689,6 +692,9 @@ func GetPackDataExportMailContent(filterId, download_url string) (content string
 		if len(sc.Buyer) > 0 {
 			buyer = strings.Join(sc.Buyer, " ")
 		}
+		if len(sc.Agency) > 0 {
+			agency = strings.Join(sc.Agency, " ")
+		}
 		if len(sc.Buyerclass) > 0 {
 			buyerclass = strings.Join(sc.Buyerclass, " ")
 		}
@@ -702,7 +708,7 @@ func GetPackDataExportMailContent(filterId, download_url string) (content string
 		log.Println("用户筛选条件错误", err, sc)
 	}
 	// orderCode, create_time, pay_time, product_type, data_spec, data_count, order_money, user_mail, user_phone,
-	content = fmt.Sprintf(config.ExConf.Mail_attach_pack_content, download_url, publishtime, region, industry, buyerclass, keys, keywordsMatchItemShow, sc_money, subtype, buyer, winner)
+	content = fmt.Sprintf(config.ExConf.Mail_attach_pack_content, download_url, publishtime, region, industry, buyerclass, keys, keywordsMatchItemShow, sc_money, subtype, buyer, winner, agency)
 	return content, nil
 }
 
@@ -729,7 +735,7 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 		create_time = strings.Replace(create_time, "-", ".", -1)
 		create_time = regexp.MustCompile(":[^:]+$").ReplaceAllString(create_time, "")
 	}
-	buyer, buyerclass, winner, subtype := "-", "全部", "-", "全部"
+	buyer, buyerclass, winner, subtype, agency := "-", "全部", "-", "全部", "-"
 	publishtime, region, industry, keys := "-", "全国", "全部", "-"
 	sc_money := "-"
 	sc := new(dataexport.SieveCondition)
@@ -828,6 +834,9 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 		if len(sc.Buyer) > 0 {
 			buyer = strings.Join(sc.Buyer, " ")
 		}
+		if len(sc.Agency) > 0 {
+			agency = strings.Join(sc.Agency, " ")
+		}
 		if len(sc.Buyerclass) > 0 {
 			buyerclass = strings.Join(sc.Buyerclass, " ")
 		}
@@ -840,7 +849,7 @@ func GetDataExportMailContent(orderCode string) (content string, err error) {
 	} else {
 		log.Println("用户筛选条件错误", err, sc)
 	}
-	content = fmt.Sprintf(config.ExConf.Mail_attach_content, download_url, orderCode, create_time, pay_time, product_type, data_spec, data_count, order_money, user_mail, user_phone, publishtime, region, industry, buyerclass, keys, keywordsMatchItemShow, sc_money, subtype, buyer, winner)
+	content = fmt.Sprintf(config.ExConf.Mail_attach_content, download_url, orderCode, create_time, pay_time, product_type, data_spec, data_count, order_money, user_mail, user_phone, publishtime, region, industry, buyerclass, keys, keywordsMatchItemShow, sc_money, subtype, buyer, winner, agency)
 	return content, nil
 }
 

+ 11 - 2
src/jfw/modules/subscribepay/src/go.mod

@@ -5,13 +5,13 @@ go 1.19
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.13.3
+	app.yhyue.com/moapp/jypkg v1.14.6
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.16
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/gogf/gf/v2 v2.6.2
 	github.com/shopspring/decimal v1.3.1
-	github.com/tealeg/xlsx v1.0.5
+	github.com/tealeg/xlsx/v3 v3.3.5
 	go.mongodb.org/mongo-driver v1.13.1
 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
 	k8s.io/apimachinery v0.29.1
@@ -36,6 +36,7 @@ require (
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
 	github.com/fatih/color v1.16.0 // indirect
+	github.com/frankban/quicktest v1.14.6 // indirect
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/garyburd/redigo v1.6.2 // indirect
 	github.com/go-logr/logr v1.3.0 // indirect
@@ -51,6 +52,7 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
+	github.com/google/btree v1.0.1 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
@@ -65,6 +67,8 @@ require (
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/klauspost/compress v1.16.7 // indirect
+	github.com/kr/pretty v0.3.1 // indirect
+	github.com/kr/text v0.2.0 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
@@ -82,12 +86,16 @@ require (
 	github.com/olivere/elastic/v7 v7.0.22 // indirect
 	github.com/openzipkin/zipkin-go v0.4.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+	github.com/peterbourgon/diskv/v3 v3.0.1 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/prometheus/client_golang v1.17.0 // indirect
 	github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
 	github.com/prometheus/common v0.44.0 // indirect
 	github.com/prometheus/procfs v0.11.1 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
+	github.com/rogpeppe/fastuuid v1.2.0 // indirect
+	github.com/rogpeppe/go-internal v1.10.0 // indirect
+	github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa // indirect
 	github.com/sirupsen/logrus v1.8.3 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
@@ -96,6 +104,7 @@ require (
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/spf13/viper v1.15.0 // indirect
 	github.com/subosito/gotenv v1.4.2 // indirect
+	github.com/tealeg/xlsx v1.0.5 // indirect
 	github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed // indirect
 	github.com/xdg-go/pbkdf2 v1.0.0 // indirect
 	github.com/xdg-go/scram v1.1.2 // indirect

+ 14 - 3
src/jfw/modules/subscribepay/src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240104022202-158734833402/go.mod h1:fjaD11Z3
 app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4/go.mod h1:61hzZ3dZHXL28BNl8BOgZsvM2S5UVY5YFzOkEUPrSu4=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v1.13.3 h1:qJdzwbjoddEZW2e96OqUypUz356/aVXlAqJn2kmeksE=
-app.yhyue.com/moapp/jypkg v1.13.3/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
+app.yhyue.com/moapp/jypkg v1.14.6 h1:D3hMtvJhqOSsu94jGTPWT+dGeaLmcEMH4WOdEzGd68Q=
+app.yhyue.com/moapp/jypkg v1.14.6/go.mod h1:uGSHEjlIVCDFeud5hD7bY5Z1Csrvh+c3vr4Mg50qCW0=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 h1:WGi4OEIoqw6NpNFGioUEBZnjK9aBa+xJqf/5WY+QyhM=
 app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161/go.mod h1:0Oj8SB4pVjdCLD28sy2zyM3hS0WHGpNuVcakLW43GmI=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
@@ -992,7 +992,8 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
 github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
-github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
@@ -1171,6 +1172,7 @@ github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNu
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
 github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
@@ -1555,6 +1557,8 @@ github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdU
 github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/peterbourgon/diskv/v3 v3.0.1 h1:x06SQA46+PKIUftmEujdwSEpIx8kR+M9eLYsUxeYveU=
+github.com/peterbourgon/diskv/v3 v3.0.1/go.mod h1:kJ5Ny7vLdARGU3WUuy6uzO6T0nb/2gWcT1JiBvRmb5o=
 github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
 github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
 github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
@@ -1567,6 +1571,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug=
 github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
 github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -1626,6 +1631,7 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
 github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
 github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
@@ -1633,6 +1639,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
@@ -1643,6 +1650,8 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
 github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
 github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa h1:2cO3RojjYl3hVTbEvJVqrMaFmORhL6O06qdW42toftk=
+github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa/go.mod h1:Yjr3bdWaVWyME1kha7X0jsz3k2DgXNa1Pj3XGyUAbx8=
 github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
@@ -1709,6 +1718,8 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8
 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
+github.com/tealeg/xlsx/v3 v3.3.5 h1:dzmns01jRf0SveBe7VqkcO2LCLOcypcDI6H66PiZycQ=
+github.com/tealeg/xlsx/v3 v3.3.5/go.mod h1:KV4FTFtvGy0TBlOivJLZu/YNZk6e0Qtk7eOSglWksuA=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed h1:1+oKuPuDQ4AbN1WRMFxl9WQClH80GuZ81X/4FsOshjI=
 github.com/thinxer/go-word2vec v0.0.0-20150917053916-5c19ec7379ed/go.mod h1:WE5pZgSp3RwicfhHQmOJOexA0n4AKTzBqmnSu7R8Nbk=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=

+ 2 - 0
src/jfw/modules/subscribepay/src/pay/derivedCondition.go

@@ -39,6 +39,8 @@ func CheckSave(userid, filterId string) {
 	data["buyerclass"] = ArrSort(buyerclass)
 	buyer, _ := (*dataMap)["buyer"].([]interface{})
 	data["buyer"] = ArrSort(buyer)
+	agency, _ := (*dataMap)["agency"].([]interface{})
+	data["agency"] = ArrSort(agency)
 	winner, _ := (*dataMap)["winner"].([]interface{})
 	data["winner"] = ArrSort(winner)
 	keyword, _ := (*dataMap)["keywords"].([]interface{})

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

@@ -73,6 +73,8 @@ func (des *DataExportPack) ScreenList() {
 				dataMap["buyerclass"] = strings.Join(qutil.ObjArrToStringArr(buyerclass), ",")
 				buyer, _ := dataMap["buyer"].([]interface{})
 				dataMap["buyer"] = strings.Join(qutil.ObjArrToStringArr(buyer), ",")
+				agency, _ := dataMap["agency"].([]interface{})
+				dataMap["agency"] = strings.Join(qutil.ObjArrToStringArr(agency), ",")
 				winner, _ := dataMap["winner"].([]interface{})
 				dataMap["winner"] = strings.Join(qutil.ObjArrToStringArr(winner), ",")
 				keywords, _ := dataMap["keywords"].([]interface{})

+ 0 - 25
src/jfw/modules/subscribepay/src/util/dataExportExcel.go

@@ -163,7 +163,6 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 				for index, winnerDatas := range winnerMaps {
 					row = sheet.AddRow()
 					row.SetHeight(20)
-
 					for _, v := range excelHead {
 						if v.Filed == "" {
 							continue
@@ -173,11 +172,9 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 							Border:    defaultExcelBorder,
 							Alignment: defaultExcelAlignment,
 						}
-
 						if v.Filed != "legal_person" && v.Filed != "company_phone" && v.Filed != "company_email" && v.Filed != "company_name" {
 							if index == 0 {
 								cell.VMerge = winnerTotal - 1
-
 								if v.Filed == "title" || v.Filed == "url" {
 									cell.SetFormula(fmt.Sprintf("=HYPERLINK(\"%s\",\"%s\")", data["url_jump"], data[v.Filed]))
 								} else if v.Filed == "href" {
@@ -198,7 +195,6 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 			} else {
 				row = sheet.AddRow()
 				row.SetHeight(20)
-
 				for _, v := range excelHead {
 					if v.Filed == "" {
 						continue
@@ -221,27 +217,6 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 					cell.SetStyle(style)
 				}
 			}
-			//row = sheet.AddRow()
-			//row.SetHeight(50)
-			//data["index"] = k + 1
-			//for _, v := range excelHead {
-			//	if v.Filed == "" {
-			//		continue
-			//	}
-			//	cell = row.AddCell()
-			//
-			//	if v.Filed == "title" || v.Filed == "url" {
-			//		cell.SetFormula(fmt.Sprintf("=HYPERLINK(\"%s\",\"%s\")", data["url_jump"], data[v.Filed]))
-			//	} else if v.Filed == "href" {
-			//		cell.SetFormula(fmt.Sprintf("=HYPERLINK(\"%s\",\"%s\")", data["href"], data[v.Filed]))
-			//	} else {
-			//		cell.SetValue(data[v.Filed])
-			//	}
-			//	cell.SetStyle(&xlsx.Style{
-			//		Border:    defaultExcelBorder,
-			//		Alignment: defaultExcelAlignment,
-			//	})
-			//}
 		}
 		if err := FolderCheck(filePath); err != nil {
 			return err

+ 3 - 1
src/web/staticres/common-module/dataExport/js/association.js

@@ -11,8 +11,10 @@ $(function(){
     let type = ''
     if(window.location.href.indexOf('buyer') > -1){
       type = 'buyer'
-    }else{
+    }else if (window.location.href.indexOf('winner') > -1){
       type = 'ent'
+    }else{
+      return
     }
     associationNameList(type,input_query,function(res){
       $('.keyWord .association-list').html('')

+ 40 - 3
src/web/staticres/css/selectCommon.css

@@ -4,32 +4,46 @@
   box-sizing: border-box;
   display: flex;
 }
-#selectArea_{
+#selectArea_,
+.select-common-inputs {
   position: relative;
 }
+
+
+.select-common-card + .select-common-card {
+  margin-left: 16px;
+}
+
+.select-common-inputs .el-input--suffix .el-input__inner,
 #selectArea_ .el-input--suffix .el-input__inner{
   height: 30px;
 }
+.select-common-inputs .el-input .el-select__caret,
 #selectArea_ .el-input .el-select__caret{
   color: #AAAAAA;
   display: flex;
   align-items: center;
   justify-content: center;
 }
+.select-common-inputs .el-input .el-input__icon,
 #selectArea_ .el-input .el-input__icon{
   line-height: normal;
 }
+.select-common-inputs .el-input__inner,
 #selectArea_ .el-input__inner{
   width: 200px;
   background-color: transparent;
 }
+.select-common-inputs .el-input__inner:hover,
 #selectArea_ .el-input__inner:hover{
   border-color: #E0E0E0;
 }
+.select-common-inputs .el-select.select_common:hover,
 #selectArea_ .el-select.select_common:hover{
   border-color: #E0E0E0;
 
 }
+.select-common-inputs .valueBox,
 #selectArea_ .valueBox{
   width: 180px;
   height: 30px;
@@ -43,11 +57,13 @@
   overflow: hidden;
   text-overflow: ellipsis;
 }
+.select-common-inputs .valueBox span,
 #selectArea_ .valueBox span{
   line-height: 30px;
   font-size: 14px;
   color: #1D1D1D;
 }
+.select-common-inputs .valueBox .hightlight,
 #selectArea_ .valueBox .hightlight{
   color: #2ABED1!important;
 }
@@ -95,9 +111,9 @@ 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 { 
+.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{
@@ -157,6 +173,13 @@ margin-left: 4px;
     left: -200px!important;
 
   }
+  .el-select-dropdown.el-popper.select_common_data.select_left_dropdown{
+    left: 0 !important;
+  }
+  .el-select-dropdown.el-popper.select_common_data.select_right_dropdown{
+    right: 0 !important;
+    left: unset !important;
+  }
   .el-select-dropdown.el-popper.select_common_data.select_price{
     left: -225px!important;
 
@@ -176,6 +199,9 @@ margin-left: 4px;
   box-sizing: border-box;
 
 }
+.select-common-inputs .notkeyBox.select_box {
+  min-width: 440px;
+}
 .selectNotkey .notkeyBox.select_box .el-tag {
   margin-top: 6px;
   height: 24px;
@@ -257,6 +283,10 @@ margin-left: 4px;
   font-size: 14px!important;
   color: #1D1D1D!important;
 }
+.select-common-inputs .notkeyBox.select_box .el-input__inner {
+  width: 368px !important;
+  padding-right: 15px;
+}
 .selectNotkey .notkeyBox.select_box .add-keyword-tags{
   width: 100%;
   margin-top: 16px;
@@ -279,6 +309,13 @@ margin-left: 4px;
    display: flex;
    align-items: center;
    box-sizing: border-box;
+   flex-wrap: wrap;
+}
+.select-novip-content .more-novip-content {
+  margin-top: 12px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 }
 .select-novip-box .icon-vip{
   width: 38px;

+ 8 - 4
src/web/staticres/dataExport/css/conditions.css

@@ -633,12 +633,14 @@ input.sm {
 }
 
 #inputDel_1,
-#inputDel_2 {
+#inputDel_2,
+#inputDel_3 {
   width: 100%;
 }
 
 #inputDel_1>.delete-close,
-#inputDel_2>.delete-close {
+#inputDel_2>.delete-close,
+#inputDel_3>.delete-close {
   width: 336px;
   text-align: left;
   position: relative;
@@ -1255,7 +1257,9 @@ input.sm {
   justify-content: space-between;
 }
 
-.buyer-search-list, .winner-search-list {
+.buyer-search-list,
+.agency-search-list,
+.winner-search-list {
   padding: 20px 0;
   position: absolute;
   z-index: 6;
@@ -1326,4 +1330,4 @@ body .loading_ p span {
   transform: rotate(0deg); }
 100% {
   transform: rotate(360deg); }
-}
+}

+ 3 - 1
src/web/staticres/dataExport/css/conditions.scss

@@ -466,7 +466,9 @@ $font2:#686868;
     margin-left: 14px;
   }
 }
-#inputDel_1,#inputDel_2 {
+#inputDel_1,
+#inputDel_2,
+#inputDel_3 {
   width: 100%;
   >.delete-close {
     width: 336px;

+ 9 - 0
src/web/staticres/dataExport/js/conditions_order.js

@@ -352,6 +352,10 @@ function addDelInput(t,type) {
         $("#addWinner").css("display","block");
       break
     }
+    case 3:{
+        $("#addAgency").css("display","block");
+      break
+    }
   }
   $(t).prev().val('')
   $(t).prev().hide();
@@ -363,6 +367,7 @@ function addDelInputB(t,type) {
   setTimeout(() => {
     $('.buyer-search-list').hide()
     $('.winner-search-list').hide()
+    $('.agency-search-list').hide()
     var d = document.createElement('div');
     var text = $(t).val();
     if(!text.trim()){
@@ -382,6 +387,10 @@ function addDelInputB(t,type) {
             $("#addWinner").show(msecs);
             break
         }
+        case 3:{
+            $("#addAgency").show(msecs);
+            break
+        }
     }
     $(t).val('');
     $(t).hide();

+ 7 - 3
src/web/staticres/js/selector/keyword-tags-new.js

@@ -4,7 +4,7 @@ var keywordTagsComponentTemplate = `
       <el-input
         class="add-keyword-input"
         type="text"
-        :placeholder="list.length >= maxListLength?'排除词个数已达上限':placeholder"
+        :placeholder="list.length >= maxListLength?maxTip:placeholder"
         v-model.trim="addKeywordVal"
         :maxlength="maxLength"
         :disabled="disabled || list.length >= maxListLength"
@@ -36,6 +36,10 @@ var keywordTagsComponentnew = {
         type: String,
         default: '请输入关键词'
       },
+      maxTip: {
+        type: String,
+        default: '排除词个数已达上限'
+      },
       // 输入框可输入最大长度
       maxLength: {
         type: Number,
@@ -67,7 +71,7 @@ var keywordTagsComponentnew = {
         var beforeChange = this.beforeChange()
         if (!beforeChange) return
         if (!this.addKeywordVal) return
-        this.list.push(this.addKeywordVal.replace(/\s*$/g,''))
+        this.list.push(this.addKeywordVal.replace(/,/g, ' ').replace(/\s*$/g,''))
         console.log(this.list);
         this.$emit('change', this.list)
         this.addKeywordVal = ''
@@ -78,7 +82,7 @@ var keywordTagsComponentnew = {
       },
       onKeyup: function () {
         // this.addKeywordVal = this.addKeywordVal.replace(/^\s+|\s+$/g, '')
-        this.addKeywordVal = this.addKeywordVal.trim().replace(/^\s*/g, '')
+        this.addKeywordVal = this.addKeywordVal.replace(/,/g, ' ').trim().replace(/^\s*/g, '')
       }
     }
 }

+ 20 - 3
src/web/staticres/js/superSearch.js

@@ -233,6 +233,9 @@ function getNewBiddings(num, size){
     buyertel: $("#zbSeatchT [name='buyertel']").val(),
     winnertel: $("#zbSeatchT [name='winnertel']").val(),
     notkey: $("#zbSeatchT [name='notkey']").val(),
+    buyer: $("#zbSeatchT [name='buyer']").val(),
+    winner: $("#zbSeatchT [name='winner']").val(),
+    agency: $("#zbSeatchT [name='agency']").val(),
     fileExists: $("#zbSeatchT [name='fileExists']").val(),
     city: $("#zbSeatchT [name='city']").val(),
     bid_field: $("#zbSeatchT [name='bid_field']").val(),
@@ -244,6 +247,7 @@ function getNewBiddings(num, size){
   };
 	$.post("/front/pcAjaxReq",param,function(r){
     heightWords = r.heightWords
+    showSearchTipForTimeRange(false)
 		if(r&&r.list!=null&&r.list.length>0){
       // 计算总页码
       if (currentPage == 1) {
@@ -903,6 +907,9 @@ function getVIPData(clickpaging){
         buyertel: $("#zbSeatchT [name='buyertel']").val(),
         winnertel: $("#zbSeatchT [name='winnertel']").val(),
 		    notkey: $("#zbSeatchT [name='notkey']").val(),
+        buyer: $("#zbSeatchT [name='buyer']").val(),
+        winner: $("#zbSeatchT [name='winner']").val(),
+        agency: $("#zbSeatchT [name='agency']").val(),
         fileExists: $("#zbSeatchT [name='fileExists']").val(),
         city: $("#zbSeatchT [name='city']").val(),
         bid_field: $("#zbSeatchT [name='bid_field']").val(),
@@ -1005,16 +1012,20 @@ function beforeSubmit(from){
   // 如果在反爬白名单,则空搜索刷新搜索结果(即允许空搜索)
   // 不在,则不允许空搜索(此处空搜索指的是主搜索框是否为空)
   if (!onAntiSpiderWhitelist) {
+    var hasOneKey = (searchInnerVue.buyerTags.length || searchInnerVue.winnerTags.length || searchInnerVue.proxyTags.length) > 0
+
     // 切换三种筛选类型时候判断(切换tab时不弹窗)
-    if (!searchKeywords) {
+    if (!searchKeywords && !hasOneKey) {
       if (from.indexOf('tab-') !== -1) {
         return false
       }
     }
     // 关键词去两边空格后为空
     if (!searchKeywords && searchInnerVue.keywordTags.length === 0) {
-      showToast('请先输入关键词')
-      return false
+      if (!hasOneKey) {
+        showToast('请先输入关键词')
+        return false
+      }
     } else {
       // 判断关键词中是否有通用词,并清空对应通用词的项
       var hasCommonWords = checkAndClearTextIncludesCommonWords(searchKeywords)
@@ -1267,6 +1278,9 @@ function searchOnsubmit(clickpaging){
     buyertel: $("#zbSeatchT [name='buyertel']").val(),
     winnertel: $("#zbSeatchT [name='winnertel']").val(),
     notkey: $("#zbSeatchT [name='notkey']").val(),
+    buyer: $("#zbSeatchT [name='buyer']").val(),
+    winner: $("#zbSeatchT [name='winner']").val(),
+    agency: $("#zbSeatchT [name='agency']").val(),
     fileExists: $("#zbSeatchT [name='fileExists']").val(),
     city: $("#zbSeatchT [name='city']").val(),
     bid_field: $("#zbSeatchT [name='bid_field']").val(),
@@ -1301,6 +1315,9 @@ function searchOnsubmit(clickpaging){
       buyertel: $("#zbSeatchT [name='buyertel']").val(),
       winnertel: $("#zbSeatchT [name='winnertel']").val(),
       notkey: $("#zbSeatchT [name='notkey']").val(),
+      buyer: $("#zbSeatchT [name='buyer']").val(),
+      winner: $("#zbSeatchT [name='winner']").val(),
+      agency: $("#zbSeatchT [name='agency']").val(),
       fileExists: $("#zbSeatchT [name='fileExists']").val(),
       city: $("#zbSeatchT [name='city']").val(),
       searchGroup: $("#zbSeatchT [name='searchGroup']").val(),

+ 139 - 64
src/web/templates/pc/dataExport_sieve.html

@@ -28,7 +28,7 @@
     <!-- <script src="{{Msg "seo" "cdn"}}/swiper/swiper.min.js?v={{Msg "seo" "version"}}"></script> -->
     <script src="https://cdn.bootcdn.net/ajax/libs/fontfaceobserver/2.1.0/fontfaceobserver.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/vue-dragscroll/3.0.1/dist/vue-dragscroll.min.js"></script>
-    
+
     <title>数据导出_拟建项目导出_招标采购数据导出_中标数据导出-剑鱼标讯</title>
     <meta content="自助导出" theme="light" name="enable-header"/>
     <meta name="Keywords" content="拟建项目导出,招标采购数据导出,中标数据导出,剑鱼标讯"/>
@@ -335,7 +335,9 @@
             background-color: red;
         }
 
-        #inputDel_2.del-box .delete-close, #inputDel_1.del-box .delete-close {
+        #inputDel_3.del-box .delete-close,
+        #inputDel_2.del-box .delete-close,
+        #inputDel_1.del-box .delete-close {
             display: -webkit-box;
             overflow: hidden;
             -webkit-line-clamp: 3;
@@ -367,7 +369,9 @@
             right: 0;
         }
 
-        #inputDel_1 > .delete-close > i, #inputDel_2 > .delete-close > i {
+        #inputDel_1 > .delete-close > i,
+        #inputDel_2 > .delete-close > i,
+        #inputDel_3 > .delete-close > i {
             top: 6px;
         }
 
@@ -773,7 +777,8 @@
                     </p>
                     <p class="f-l-c-item" v-if="item.subtype">信息类型:<em class="i-value">${formatInfoType(item.subtype)}</em></p>
                     <p class="f-l-c-item" v-if="item.buyer">采购单位:<em class="i-value">${item.buyer}</em></p>
-                    <p class="f-l-c-item" v-if="item.winner">中标单位:<em class="i-value">${item.winner}</em></p>
+                    <p class="f-l-c-item" v-if="item.winner">中标企业:<em class="i-value">${item.winner}</em></p>
+                    <p class="f-l-c-item" v-if="item.agency">招标代理机构:<em class="i-value">${item.agency}</em></p>
                     <p class="f-l-c-item">
                       <span v-if="item.buyertel == 'y'">采购单位联系方式:<em class="i-value">${formatContact(item.buyertel,'buyertel')}</em></span>
                       <span v-if="item.winnertel == 'y'">中标单位联系方式:<em class="i-value">${formatContact(item.winnertel,'winnertel')}</em></span>
@@ -1024,11 +1029,11 @@
         <div class="heng"></div>
         <!--中标单位-->
         <div class="line-box float-box p20">
-            <div class="left">中标单位</div>
+            <div class="left">中标企业</div>
             <div class="right float-box">
                 <div class="del-box float-box" id="inputDel_2"></div>
                 <div class="user-input">
-                    <input oninput="getDataExportSearch('2')" class="w" type="text" placeholder="请输入中标单位" maxlength="50" id="winnerInput"
+                    <input oninput="getDataExportSearch('2')" class="w" type="text" placeholder="请输入中标企业" maxlength="50" id="winnerInput"
                            onblur="addDelInputB(this,2)">
                     <div class="winner-search-list" style="display: none;">
                       <div class="pre-search-item ellipsis" v-for="(item,index) in winnerSearch.list" :key="index" @click="toDetail(item, '2')">${ item.name }</div>
@@ -1040,7 +1045,28 @@
                         <div class="add-w ss" onclick="addInput(this,2)" data-text="添加"></div>
                     </div>
                 </div>
-                <div class="data-more-tips winner-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_entrmore_customization')">申请数据定制导出></a></div>
+                <div class="data-more-tips winner-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标企业,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_entrmore_customization')">申请数据定制导出></a></div>
+            </div>
+        </div>
+        <div class="heng"></div>
+        <!--招标代理机构-->
+        <div class="line-box float-box p20">
+            <div class="left">招标代理机构</div>
+            <div class="right float-box">
+                <div class="del-box float-box" id="inputDel_3"></div>
+                <div class="user-input">
+                    <input class="w" type="text" placeholder="请输入招标代理机构" maxlength="30" id="agencyInput"
+                           onblur="addDelInputB(this,3)">
+                  <div class="agency-search-list" style="display: none;">
+                    </div>
+                    {{/*<button style="display: none" class="sussecc w100" onclick="addDelInput(this,3)">确定</button>*/}}
+                </div>
+                <div class="add-input-w- float-box" id="addAgency" style="display: none;">
+                    <div class="l">
+                        <div class="add-w ss" onclick="addInput(this,3)" data-text="添加"></div>
+                    </div>
+                </div>
+                <div class="data-more-tips agency-more-tips">最多可添加{{Export.exportLimit.agencyLimit}}个招标代理机构,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_entrmore_customization')">申请数据定制导出></a></div>
             </div>
         </div>
         <div class="heng"></div>
@@ -1450,6 +1476,7 @@
   var limit = {{Export.exportLimit}};
   var buyerLimit = limit.buyerLimit || 100
   var winnerLimit = limit.winnerLimit || 100
+  var agencyLimit = limit.agencyLimit || 100
   var wordsLimit =  limit.countLimit
   console.log(limit);
   var dataNode = new Vue({
@@ -1518,6 +1545,11 @@
           focus: false,
           list: []
       },
+      agencySearch: {
+          hover: false,
+          focus: false,
+          list: []
+      },
     },
     created () {
       $('.dataExport_table').css('display', 'block')
@@ -2601,15 +2633,24 @@
       // 清空历史联想数据
         dataNode.buyerSearch.list = []
         dataNode.winnerSearch.list = []
-        var unit = ''
-        var type = 'ent'
-        if (str === '1') {
-          type = 'buyer'
-          unit = $('#buyerInput').val()
-        } else if(str === '2') {
-          type = 'ent'
-          unit = $('#winnerInput').val()
+        dataNode.agencySearch.list = []
+
+        var waitMap = {
+          1: {
+            type: 'buyer',
+            unit: $('#buyerInput').val()
+          },
+          2: {
+            type: 'ent',
+            unit: $('#winnerInput').val()
+          },
+          3: {
+            type: 'agency',
+            unit: $('#agencyInput').val()
+          }
         }
+        var type = waitMap[str].type
+        var uint = waitMap[str].unit
         var data = {
             name: unit.trim()
         }
@@ -2620,6 +2661,10 @@
         }
         $('.buyer-search-list').hide()
         $('.winner-search-list').hide()
+       // 招标代理机构没有联想
+        if  (type === 'agency') {
+          return
+        }
         searchTimer = setTimeout(() => {
           $.ajax({
             url: `/bigmember/search/${type}/association`,
@@ -2939,26 +2984,28 @@
         return subArr;
     }
 
+    function getCommonInputs (id) {
+      var arr = new Array();
+      $.each($(id).children("div"), function (index, value) {
+        if ($(value).text()) {
+          arr.push($(value).text())
+        }
+      });
+      return arr;
+    }
+
     //采购单位
     function getBuyers() {
-        var arr = new Array();
-        $.each($("#inputDel_1").children("div"), function (index, value) {
-            if ($(value).text()) {
-                arr.push($(value).text())
-            }
-        });
-        return arr;
+        return getCommonInputs('#inputDel_1');
     }
 
     //中标单位
     function getWinners() {
-        var arr = new Array();
-        $.each($("#inputDel_2").children("div"), function (index, value) {
-            if ($(value).text()) {
-                arr.push($(value).text())
-            }
-        });
-        return arr;
+      return getCommonInputs('#inputDel_2');
+    }
+    //招标代理机构
+    function getAgencys() {
+      return getCommonInputs('#inputDel_3');
     }
 
     $(document).on('keydown', 'body', function (e) {
@@ -3154,6 +3201,7 @@
         var subType = getSubType();
         var buyer = getBuyers();
         var winner = getWinners();
+        var agency = getAgencys();
         var dataType = dataNode._data.dataType
         //关键词匹配方式
         let stLiArr = []
@@ -3197,6 +3245,7 @@
             "subtype": subType.toString() == "全部" ? "" : subType.toString(),
             "buyer": buyer.toString(),
             "winner": winner.toString(),
+            "agency": agency.toString(),
             "dataType": dataType
         };
         setLocalStorage(param);
@@ -3204,8 +3253,8 @@
           openLoginDig(null,'reload',function(){
             sessionStorage.setItem('existing_filter_echo', '2') // 点确定本页拉登录登陆成功不走接口回显
           })
-          return 
-        } 
+          return
+        }
         // console.log(param);
         $.post("/front/dataExport/sieveData", param, function (res) {
           $('.loading_').hide()
@@ -3316,20 +3365,22 @@
         //subtype
         $("#info-del").children().remove();
         InfoArr.clear(InfoArr.arr);
-        //buyer
-        $("#inputDel_1").find("div[data-arr='inputDel_1']").remove();
-        window['inputDel_1'] = [];
-        $("#addBuyer").hide();
-        $("#buyerInput").show();
-        //winner
-        $("#inputDel_2").find("div[data-arr='inputDel_2']").remove();
-        window['inputDel_2'] = [];
-        $("#addWinner").hide();
-        $("#winnerInput").show();
+
+        removeCommomInputs(1, '#addBuyer', '#buyerInput')
+        removeCommomInputs(2, '#addWinner', '#winnerInput')
+        removeCommomInputs(3, '#addAgency', '#agencyInput')
         // 隐藏超出限制
         $('.data-more-tips').hide()
     });
 
+    function removeCommomInputs (id, addId, inputId) {
+      var k = 'inputDel_' + id
+      $("#"+ k).find("div[data-arr='"+k+"']").remove();
+      window[k] = [];
+      $(addId).hide();
+      $(inputId).show();
+    }
+
     function GetQueryString(name) {
         var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
         var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配
@@ -3479,6 +3530,11 @@
                 $("#winnerInput").focus();
                 break;
             }
+            case 3: {
+                $("#agencyInput").show();
+                $("#agencyInput").focus();
+                break;
+            }
         }
     }
 </script>
@@ -3755,30 +3811,36 @@
                 InfoArr.add(sel, dataValue);
             }
         });
-        //采购单位
-        $("#buyerInput").val("");
-        if (paramObj["buyer"] && paramObj["buyer"].split(",").length > 0) {
-            var buyers = paramObj["buyer"].split(",");
-            $("#buyerInput").hide();
-            $.each(buyers, function (i, v) {
-                if (v) {
-                    addDelBox(v, '#' + "inputDel_1", "inputDel_1", null);
-                }
-            });
-            $("#addBuyer").show();
-        }
-        //中标单位
-        $("#winnerInput").val("");
-        if (paramObj["winner"] && paramObj["winner"].split(",").length > 0) {
-            var winners = paramObj["winner"].split(",");
-            $("#winnerInput").hide();
-            $.each(winners, function (i, v) {
-                if (v) {
-                    addDelBox(v, '#' + "inputDel_2", "inputDel_2", null);
-                }
+
+        // 定义一个处理单位信息的函数
+        function handleUnits(key, inputId, addId, paramKey) {
+          $("#" + inputId).val("");
+          var k = "inputDel_" + key
+          var list = []
+          if (paramObj[paramKey]) {
+            if (typeof paramObj[paramKey] === 'string') {
+              list = paramObj[paramKey].split(",")
+            } else {
+              list = paramObj[paramKey]
+            }
+          }
+
+          if (list.length > 0) {
+            var units = list
+            $("#" + inputId).hide();
+            $.each(units, function (i, v) {
+              if (v) {
+                addDelBox(v, '#' + k, k, null);
+              }
             });
-            $("#addWinner").show();
+            $(addId).show();
+          }
         }
+
+        // 使用函数处理
+        handleUnits(1, "buyerInput", "#addBuyer", "buyer");
+        handleUnits(2, "winnerInput", "#addWinner", "winner");
+        handleUnits(3, "agencyInput", "#addAgency", "agency");
     }
   }
   function echo_selectType(selectType){
@@ -3853,7 +3915,7 @@
   var observer = new MutationObserver(function(mutations) {
     mutations.forEach(function(mutation) {
       // console.log('页面dom发生改变');
-      
+
       // 关键词
       if (getTotal() >= wordsLimit) {
         $('#addKeyword').hide()
@@ -3896,6 +3958,19 @@
         }
         $('.winner-more-tips').hide()
       }
+      // 招标代理机构
+      var agency = getAgencys()
+      if (agency.length >= agencyLimit) {
+        $('#addAgency').hide()
+        $('.agency-more-tips').show()
+      } else {
+        if (agency.length === 0) {
+          $('#addAgency').hide()
+        } else {
+          $('#addAgency').show()
+        }
+        $('.agency-more-tips').hide()
+      }
     })
   });
 

+ 24 - 3
src/web/templates/pc/orderDetail.html

@@ -289,6 +289,7 @@
             var subType = filter["subtype"];
             var buyer = filter["buyer"];
             var winner = filter["winner"];
+            var agency = filter["agency"];
             var selectType = filter["selectType"];
             if (!publishtime) {
                 publishtime = "全部";
@@ -432,6 +433,15 @@
             }else{
               buyerHtml = "-"
             }
+
+            var agencyHtml = "";
+            if (agency && agency.length > 0) {
+              for (var i = 0; i < agency.length; i++) {
+                agencyHtml += "<span>" + agency[i] + "</span>";
+              }
+            }else{
+              agencyHtml = "-"
+            }
             var winnerHtml = "";
             if (winner && winner.length > 0) {
                 for (var i = 0; i < winner.length; i++) {
@@ -440,6 +450,16 @@
             }else{
               winnerHtml = "-"
             }
+
+            var isHasAgency = agencyHtml !== '-'
+            var addAgencyHTML = "<div class=\"item clearfix\">" +
+              "<div class=\"l fl\">招标代理机构:</div>" +
+              "<div class=\"r fl\">" + agencyHtml + "</div>" +
+              "</div>"
+            if (!isHasAgency) {
+              addAgencyHTML = ''
+            }
+
             var filterHtml =
                 "<div class=\"inner\">" +
                 "<div class=\"item clearfix\">" +
@@ -479,9 +499,10 @@
                 "<div class=\"r fl\">" + buyerHtml + "</div>" +
                 "</div>" +
                 "<div class=\"item clearfix\">" +
-                "<div class=\"l fl\">中标单位:</div>" +
+                "<div class=\"l fl\">中标企业:</div>" +
                 "<div class=\"r fl\">" + winnerHtml + "</div>" +
                 "</div>" +
+                addAgencyHTML +
                 "</div>";
 
             $(".c-info").append($(filterHtml));
@@ -500,8 +521,8 @@
         var source_ ={{.T.o.source}}
         }catch(e){
 
-        } 
-        
+        }
+
         if (orderStatus === 0) {
             $("#status_wait_pay").show();
             $(".payOrder").show();

+ 134 - 3
src/web/templates/pc/supsearch.html

@@ -147,6 +147,9 @@
     var autoSwitchModel = false // 精准、模糊是否自动切换过
     var allCount = {{.T.total}}// 所有标讯总数(包含最高限制的免费用户500条、付费用户5000条)
     var notKeyTemp = {{.T.notkey}} // 排除词
+    var inputBuyerTemp = {{.T.buyer}} // 排除词
+    var inputWinnerTemp = {{.T.winner}} // 排除词
+    var inputProxyTemp = {{.T.agency}} // 排除词
     var addKeyTemp = {{.T.additionalWords}} // 排除词
     var searchModel = {{.T.searchMode}} // 搜索模式(精准、模糊)
     var searchGroup = {{.T.searchGroup}} // 搜索类型(全部、招标采购公告、超前项目)
@@ -164,9 +167,9 @@
       // console.log("是否有会员筛选权限 showVipScreen", {{.T.showVipScreen}})
       try {
         var oInput=document.getElementById("searchinput");
-        moveEnd(oInput) 
+        moveEnd(oInput)
       } catch (error) {
-        
+
       }
 
       $(".working").show();
@@ -593,6 +596,15 @@
       if (notKeyTemp) {
         searchInnerVue.notkeyTags = notKeyTemp.split(',')
       }
+      if (inputBuyerTemp) {
+        searchInnerVue.buyerTags = inputBuyerTemp.split(',')
+      }
+      if (inputWinnerTemp) {
+        searchInnerVue.winnerTags = inputWinnerTemp.split(',')
+      }
+      if (inputProxyTemp) {
+        searchInnerVue.proxyTags = inputProxyTemp.split(',')
+      }
       searchInnerVue.showAddKeyword = Boolean(addKeyTemp)
       searchInnerVue.keywordRadio = wordsModel
       searchInnerVue.keywordMult = Boolean(addKeyTemp)
@@ -742,6 +754,9 @@
             <input type="hidden" name="winnertel" value="{{.T.winnertel}}">
             <input type="hidden" name="selectType" value="{{.T.selectType}}">
             <input type="hidden" name="notkey" value="{{.T.notkey}}">
+            <input type="hidden" name="winner" value="{{.T.winner}}">
+            <input type="hidden" name="buyer" value="{{.T.buyer}}">
+            <input type="hidden" name="agency" value="{{.T.agency}}">
             <input type="hidden" name="fileExists" value="{{.T.fileExists}}">
             <input type="hidden" name="city" value="{{.T.city}}">
             {{if .T.bidField}}
@@ -1370,6 +1385,50 @@
                     </div>
                    </div>
                 </div>
+                <div class="two-filter three-filter clearfix nologin-hide"  v-show="vipState">
+                  <div class="select-common-card">
+                    <div class="selectNotkey select-common-inputs" id="selectBuyer_">
+                      <div class="valueBox">
+                        <span class="title">采购单位  </span><span class="hightlight num_" >${buyerTags.length || 0}</span><span class="value_ hightlight">/5</span>
+                      </div>
+                      <el-select ref="selectchoose" :placeholder="''" :value="''" :popper-append-to-body="false" class="select_common" popper-class="select_common_data select_left_dropdown">
+                        <div slot="empty" class="select_box notkeyBox">
+                          <div class="key_box clearfix">
+                            <keyword-tags-componentnew onClick="if(!vipState) return openVipDialog();" class="notkey-component" :before-change="onCommonInputBeforeChange('采购单位')" :disabled="!vipState" max-tip="采购单位个数已达上限" :max-length="30" :list="buyerTags" placeholder="输入采购单位名称关键词,可找到目标单位的招标项目" @change="onCommonInputChange('buyer')"></keyword-tags-componentnew>
+                          </div>
+                        </div>
+                      </el-select>
+                    </div>
+                  </div>
+                  <div class="select-common-card">
+                    <div class="selectNotkey select-common-inputs" id="selectWinner_">
+                      <div class="valueBox">
+                        <span class="title">中标企业  </span><span class="hightlight num_" >${winnerTags.length || 0}</span><span class="value_ hightlight">/5</span>
+                      </div>
+                      <el-select ref="selectchoose" :placeholder="''" :value="''" :popper-append-to-body="false" class="select_common" popper-class="select_common_data select_left_dropdown">
+                        <div slot="empty" class="select_box notkeyBox">
+                          <div class="key_box clearfix">
+                            <keyword-tags-componentnew onClick="if(!vipState) return openVipDialog();" class="notkey-component" :before-change="onCommonInputBeforeChange('中标企业')" :disabled="!vipState" max-tip="中标企业个数已达上限" :max-length="30"  :list="winnerTags" placeholder="输入中标企业名称关键词,可找到目标企业的中标项目" @change="onCommonInputChange('winner')"></keyword-tags-componentnew>
+                          </div>
+                        </div>
+                      </el-select>
+                    </div>
+                  </div>
+                  <div class="select-common-card">
+                    <div class="selectNotkey select-common-inputs" id="selectProxy_">
+                      <div class="valueBox">
+                        <span class="title">招标代理机构  </span><span class="hightlight num_" >${proxyTags.length || 0}</span><span class="value_ hightlight">/5</span>
+                      </div>
+                      <el-select ref="selectchoose" :placeholder="''" :value="''" :popper-append-to-body="false" class="select_common" popper-class="select_common_data select_right_dropdown">
+                        <div slot="empty" class="select_box notkeyBox">
+                          <div class="key_box clearfix">
+                            <keyword-tags-componentnew onClick="if(!vipState) return openVipDialog();" class="notkey-component" :before-change="onCommonInputBeforeChange('招标代理机构')" :disabled="!vipState" max-tip="代理机构个数已达上限" :max-length="30" :list="proxyTags" placeholder="输入代理机构名称关键词,可找到目标企业的代理项目" @change="onCommonInputChange('agency')"></keyword-tags-componentnew>
+                          </div>
+                        </div>
+                      </el-select>
+                    </div>
+                  </div>
+                </div>
                 <!-- 非VIP用户 -->
                 <div class="select-novip-box nologin-hide" onClick="if(!vipState) return openVipDialog();" v-show="!vipState">
                   <div class="select-novip-content">
@@ -1389,6 +1448,20 @@
                       <span class="span_tit">排除词  <span class="glod_"> 0/5</span></span>
                       <img src="{{Msg "seo" "cdn"}}/images/novip-down.png?v={{Msg "seo" "version"}}" alt="" class="novip-down">
                      </div>
+                     <div class="more-novip-content">
+                       <div class="item_select mr-16">
+                         <span class="span_tit">采购单位  <span class="glod_"> 0/5</span></span>
+                         <img src="{{Msg "seo" "cdn"}}/images/novip-down.png?v={{Msg "seo" "version"}}" alt="" class="novip-down">
+                       </div>
+                       <div class="item_select mr-16">
+                         <span class="span_tit">中标企业  <span class="glod_"> 0/5</span></span>
+                         <img src="{{Msg "seo" "cdn"}}/images/novip-down.png?v={{Msg "seo" "version"}}" alt="" class="novip-down">
+                       </div>
+                       <div class="item_select">
+                         <span class="span_tit">招标代理机构  <span class="glod_"> 0/5</span></span>
+                         <img src="{{Msg "seo" "cdn"}}/images/novip-down.png?v={{Msg "seo" "version"}}" alt="" class="novip-down">
+                       </div>
+                     </div>
                   </div>
                   <img class="icon-vip" src="{{Msg "seo" "cdn"}}/images/biddingSearch/VIP.png?v={{Msg "seo" "version"}}" alt="">
                 </div>
@@ -2045,6 +2118,9 @@
             <div class="save-value-bg" v-if="curFilter.winnerTel"><span>中标单位联系方式:</span>${curFilter.winnerTel}</div>
             <div class="save-value-bg" v-if="curFilter.notkey"><span>排除词:</span>${formatToSpace(curFilter.notkey)}</div>
           </div>
+          <div class="save-value-bg" v-if="curFilter.buyer"><span>采购单位:</span>${formatToSpace(curFilter.buyer)}</div>
+          <div class="save-value-bg" v-if="curFilter.winner"><span>中标企业:</span>${formatToSpace(curFilter.winner)}</div>
+          <div class="save-value-bg" v-if="curFilter.agency"><span>招标代理机构:</span>${formatToSpace(curFilter.agency)}</div>
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
@@ -2087,6 +2163,9 @@
                   <span v-if="item.winnertel == 'y'">中标单位联系方式:<em class="i-value">${formatContact(item.winnertel,'winnertel')}</em></span>
                   <span v-if="item.notkey">排除词:<em class="i-value">${formatToSpace(item.notkey)}</em></span>
                 </p>
+                <p class="f-l-c-item" v-if="item.buyer">采购单位:<em class="i-value">${formatToSpace(item.buyer)}</em></p>
+                <p class="f-l-c-item" v-if="item.winner">中标企业:<em class="i-value">${formatToSpace(item.winner)}</em></p>
+                <p class="f-l-c-item" v-if="item.agency">招标代理机构:<em class="i-value">${formatToSpace(item.agency)}</em></p>
               </div>
             </div>
           </el-collapse-transition>
@@ -3280,6 +3359,9 @@ function checkTagDisabled () {
           buyerTel: '',
           winnerTel: '',
           notkey: '',
+          buyer: '',
+          winner: '',
+          agency: '',
           fileExists: 0
         },
         filterData: [],
@@ -3318,6 +3400,9 @@ function checkTagDisabled () {
         showAddKeyword: false,
         keywordTags: [], // 附加词标签数组
         notkeyTags: [], // 排除词标签数组
+        buyerTags: [], // 采购单位标签数组
+        winnerTags: [], // 中标企业标签数组
+        proxyTags: [], // 代理机构词标签数组
         lastTime: null,
         vipStateVue:false,
         selectorlist:[{value:'0',label:'全部'},{value:'1',label:'有附件'},{value:'-1',label:'无附件'}],
@@ -4661,6 +4746,9 @@ function checkTagDisabled () {
           winnertel: $("#zbSeatchT [name='winnertel']").val(),
           // notkey: $(".not-key-input-group input").val().slice(0, 15),
           notkey: $("#zbSeatchT [name='notkey']").val(),
+          buyer: $("#zbSeatchT [name='buyer']").val(),
+          winner: $("#zbSeatchT [name='winner']").val(),
+          agency: $("#zbSeatchT [name='agency']").val(),
           fileExists: $("#zbSeatchT [name='fileExists']").val(),
           // area: $("#zbSeatchT [name='area']").val(), // P422省市县区版本不再单独存area、city,统一存为regionMap字段
           // city: $("#zbSeatchT [name='city']").val(),
@@ -4670,7 +4758,8 @@ function checkTagDisabled () {
           additionalWords: this.keywordTags.toString(), // p260增加 关键词:附加关键词(副:五组,每组最多15个字符)
           regionMap: obj.regionMap
         }
-        if (!val && !params.additionalWords && !params.industry) {
+        var hasOneKey = (searchInnerVue.buyerTags.length || searchInnerVue.winnerTags.length || searchInnerVue.proxyTags.length) > 0
+        if (!val && !params.additionalWords && !params.industry && !hasOneKey) {
           return toastFn('请先输入关键词', 3000)
         } else {
           if (this.filterCounts >= 10) {
@@ -4736,6 +4825,9 @@ function checkTagDisabled () {
           buyertel: $("#zbSeatchT [name='buyertel']").val(),
           winnertel: $("#zbSeatchT [name='winnertel']").val(),
           notkey: $("#zbSeatchT [name='notkey']").val(),
+          buyer: $("#zbSeatchT [name='buyer']").val(),
+          winner: $("#zbSeatchT [name='winner']").val(),
+          agency: $("#zbSeatchT [name='agency']").val(),
           fileExists: $("#zbSeatchT [name='fileExists']").val(),
           // area: $("#zbSeatchT [name='area']").val(), // P422省市县区版本不再单独存area、city,统一存为regionMap字段
           // city: $("#zbSeatchT [name='city']").val(),
@@ -4841,6 +4933,9 @@ function checkTagDisabled () {
         $("#zbSeatchT [name='area']").val('')
         $("#zbSeatchT [name='city']").val('')
         $("#zbSeatchT [name='notkey']").val('')
+        $("#zbSeatchT [name='buyer']").val('')
+        $("#zbSeatchT [name='winner']").val('')
+        $("#zbSeatchT [name='agency']").val('')
         if (storageType) {
           $('.searchSpace .search-list-checkbox').removeClass('checkbox-checked')
           var arr = storageType.split(',')
@@ -4898,6 +4993,9 @@ function checkTagDisabled () {
         // 排除词重置
         // $(".not-key-input-group input").val('')
         this.notkeyTags = []
+        this.buyerTags = []
+        this.winnerTags = []
+        this.proxyTags = []
         // 重置附件
         this.attachVal = '0'
         this.attachVal_cg = ''
@@ -4930,6 +5028,9 @@ function checkTagDisabled () {
         item.buyertel = vipState && item.buyertel ? item.buyertel : ''
         item.winnertel = vipState && item.winnertel ? item.winnertel : ''
         item.notkey = vipState && item.notkey ? item.notkey : ''
+        item.buyer = vipState && item.buyer ? item.buyer : ''
+        item.winner = vipState && item.winner ? item.winner : ''
+        item.agency = vipState && item.agency ? item.agency : ''
         $("#zbSeatchT [name='keywords']").val(item.searchvalue)
         // 顶部导航搜索模块联动
         $("#zbSeatchT [name='keywords']").trigger('input')
@@ -4943,6 +5044,9 @@ function checkTagDisabled () {
         $("#zbSeatchT [name='buyertel']").val(item.buyertel)
         $("#zbSeatchT [name='winnertel']").val(item.winnertel)
         $("#zbSeatchT [name='notkey']").val(item.notkey)
+        $("#zbSeatchT [name='buyer']").val(item.buyer)
+        $("#zbSeatchT [name='winner']").val(item.winner)
+        $("#zbSeatchT [name='agency']").val(item.agency)
         $("#zbSeatchT [name='fileExists']").val(item.fileExists)
         $("#zbSeatchT [name='area']").val(item.area || '')
         $("#zbSeatchT [name='city']").val(item.city || '')
@@ -5190,6 +5294,9 @@ function checkTagDisabled () {
         this.attachVal_cg = item.buyertel // 采购
         this.hasFilterDialog = false
         this.notkeyTags = item.notkey ? item.notkey.split(',') : []
+        this.buyerTags = item.buyer ? item.buyer.split(',') : []
+        this.winnerTags = item.winner ? item.winner.split(',') : []
+        this.proxyTags = item.agency ? item.agency.split(',') : []
         beforeSubmit('page-init-recovery');
       },
       // 删除筛选项
@@ -5268,6 +5375,9 @@ function checkTagDisabled () {
         temp.buyerTel = this.formatContact(item.buyertel,'buyertel')
         temp.winnerTel = this.formatContact(item.winnertel,'winnertel')
         temp.notkey = item.notkey
+        temp.buyer = item.buyer
+        temp.winner = item.winner
+        temp.agency = item.agency
         temp.fileExists = this.formatAttach(item.fileExists)
         temp.regionMap = this.formatRegion(item.regionMap)
         return temp
@@ -5604,6 +5714,16 @@ function checkTagDisabled () {
       onNotKeyChange: function (data) {
         $("#zbSeatchT [name='notkey']").val(this.notkeyTags.toString())
         beforeSubmit('filter-notkey')
+      },// 排除词添加emit事件
+      onCommonInputChange: function (name) {
+        var maps = {
+          buyer: this.buyerTags,
+          winner: this.winnerTags,
+          agency: this.proxyTags
+        }
+        var tags = maps[name] || []
+        $("#zbSeatchT [name='"+name+"']").val(tags.toString())
+        beforeSubmit('filter-commom-input')
       },
       // 点击排除词前置事件 非付费用户提示开通超级订阅
       onNotBeforeChange: function () {
@@ -5614,6 +5734,17 @@ function checkTagDisabled () {
           return true
         }
       },
+      // 点击通用输入前置事件 非付费用户提示开通超级订阅
+      onCommonInputBeforeChange: function (tip) {
+        return function () {
+          if (!vipState) {
+            openVipDialog(tip)
+            return false
+          } else {
+            return true
+          }
+        }
+      },
       // 免费用户点免费体验留资
       onFreeTaste: function () {
         vm.dialogTitle = '免费用户查看超过500条招标搜索结果'

+ 36 - 5
src/web/templates/weixin/dataExport/dataExport.html

@@ -360,11 +360,18 @@
                            <span id="buyer" class="content"></span>
                            <i class="iconfont icon-arrow"></i>
                         </a></li>
-                       <li class="list-item"><a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/winnerEdit')">
-                            <strong class="label">中标单位</strong>
+                        <li class="list-item"><a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/winnerEdit')">
+                            <strong class="label">中标企业</strong>
                            <span id="winner" class="content"></span>
                            <i class="iconfont icon-arrow"></i>
-                        </a>
+                          </a>
+                        </li>
+                        <li class="list-item">
+                          <a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/agencyEdit')">
+                            <strong class="label" style="width: 2.2rem;">招标代理机构</strong>
+                            <span id="agency" class="content"></span>
+                            <i class="iconfont icon-arrow"></i>
+                          </a>
                         </li>
                    </ul>
                </div>
@@ -566,6 +573,7 @@
             localStorage.removeItem('subTypes')
             localStorage.removeItem('buyer')
             localStorage.removeItem('winner')
+            localStorage.removeItem('agency')
             localStorage.setItem('index','-1')
             let val =res.data[0]
             if(val.publishtime){
@@ -679,6 +687,9 @@
         if(val.winner){
           localStorage.setItem('winner',val.winner)
         }
+        if(val.agency){
+          localStorage.setItem('agency',val.agency)
+        }
        }
        }
           sessionStorage.setItem('goScreen','2');
@@ -860,12 +871,18 @@
 	        }else{
 				localStorage.buyer = "";
 			}
-	        //中标单位
+	        //中标企业
 	        if(filter["winner"]!=null&&filter["winner"].length>0){
 				localStorage.winner = filter["winner"].join(",");
 	        }else{
 				localStorage.winner = "";
 			}
+
+      if ($.isArray(filter.agency) && filter.agency.length>0) {
+        localStorage.agency = filter.agency.join(",");
+      } else {
+        localStorage.agency = "";
+      }
 	        //时间
 	        if(filter["publishtime"]!=""){
 				var timeflag = true;
@@ -1013,7 +1030,7 @@
             $(".confirm").hide();
             $(".resetOne").css('display','flex');
         }
-        //中标单位
+        //中标企业
         if(localStorage.winner!==undefined && localStorage.winner!==""){
             var winner = localStorage.winner;
             var winners = winner.replace(/,/g," ");
@@ -1021,6 +1038,13 @@
             $(".confirm").hide();
             $(".resetOne").css('display','flex');
         }
+        if(localStorage.agency){
+            var agency = localStorage.agency;
+            var agencys = agency.replace(/,/g," ");
+            $("#agency").text(agencys);
+            $(".confirm").hide();
+            $(".resetOne").css('display','flex');
+        }
         //获取当前时间
         var nowDate = (function () {
             var date = new Date();
@@ -1297,6 +1321,7 @@
             var subType = "";
             var buyer = "";
             var winner = "";
+            var agency = "";
             var selectType = "";
             var date = getDate();
 			var comeinfrom = "";
@@ -1349,6 +1374,9 @@
             if(localStorage.winner!==undefined&&localStorage.winner!==""){
                 winner = localStorage.winner;
             }
+            if(localStorage.agency){
+                agency = localStorage.agency;
+            }
             if(localStorage.export_selectType!==undefined&&localStorage.export_selectType!==""){
                 // selectType = localStorage.export_selectType;  单选逻辑
                 // 多选
@@ -1433,6 +1461,7 @@
                     "subType":subType,
                     "buyer":buyer,
                     "winner":winner,
+                    "agency":agency,
                     "selectType":selectType,
                     "comeinfrom":comeinfrom,
                     "disWord":GetQueryString("disWord"),
@@ -1473,6 +1502,7 @@
             localStorage.removeItem("subTypes");
             localStorage.removeItem("buyer");
             localStorage.removeItem("winner");
+            localStorage.removeItem("agency");
             localStorage.removeItem("export_starttime");
             localStorage.removeItem("export_endtime");
             sessionStorage.removeItem("keyWord");
@@ -1485,6 +1515,7 @@
             $("#price").text("");
             $("#subType").text("");
             $("#winner").text("");
+            $("#agency").text("");
             $("#buyer").text("");
             $(".match").text("标题");
             //

+ 340 - 0
src/web/templates/weixin/dataExport/dataExport_agencyEdit.html

@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+	<meta charset="UTF-8">
+	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+	<meta http-equiv="X-UA-Compatible" content="ie=edge">
+	<title>招标代理机构</title>
+	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}4">
+	<link rel="stylesheet"href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}'/>
+	{{include "/common/weixin.html"}}
+	<script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+	<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
+	<script src="{{Msg "seo" "cdn"}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+	</head>
+	<style>
+		.addKeyBtn i {
+			font-size: 1rem;
+			color: #2cb7ca;
+		}
+		.addKeyBtn {
+			/*width: 100%;*/
+			position: fixed;
+			text-align: center;
+			bottom: 10%;
+			left: 45%;
+		}
+		.keyWord .enter .btn .save-btn {
+			float: right;
+		}
+		body{
+			background: rgba(245,244,249,1);
+		}
+    .content{
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      overflow-y: scroll;
+    }
+    .ent-more-tips {
+      display: none;
+      width: 100%;
+      padding: .14rem .32rem;
+      background: rgba(249, 242, 234, 1);
+      color: #FF9F40;
+      font-size: .26rem;
+      line-height: .4rem;
+      text-align: center;
+    }
+
+    .ent-more-tips>a {
+      color: #FF3A20;
+      text-decoration: underline;
+    }
+
+	</style>
+	<body>
+	<div class="keyWord">
+    <section class="content">
+      <div class="enter addkeyWord">
+        <input type="text" class="enterOne" placeholder="招标代理机构名称" />
+        <div class="btn fixed-bottom">
+          <button class="save-btn" disabled>确认</button>
+          <button class="close">取消</button>
+        </div>
+      </div>
+      <!-- 添加附加词显示列表 -->
+      <div class="showKeyWord">
+        <ul>
+
+        </ul>
+
+      </div>
+      <div class="association-list-box" style="display: none;">
+        <ul class="association-list">
+        </ul>
+      </div>
+    </section>
+    <div class="ent-more-tips">最多可添加{{Export.exportLimit.agencyLimit}}个招标代理机构,目前已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_entmore_customization" onclick="goPerfect()">申请数据定制导出></a></div>
+	</div>
+	<div class="addKeyBtn">
+		<i class="iconfont icon-tianjia"></i>
+	</div>
+	<script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
+	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+  <script>
+    var limit = {{Export.exportLimit}};
+    var agencyLimit = limit.agencyLimit || 100
+    console.log(limit);
+  </script>
+	<script>
+		initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
+		window.addEventListener('pageshow', function(e) {
+			// 通过persisted属性判断是否存在 BF Cache
+			if (e.persisted) {
+				location.reload();
+			}
+		});
+		(/iphone|ipod|ipad/i.test(navigator.appVersion)) && document.addEventListener('blur', (e) => {
+		    // 这里加了个类型判断,因为a等元素也会触发blur事件
+		    ['input', 'textarea'].includes(e.target.localName) && document.body.scrollIntoView(false)
+		}, true)
+
+		var agencyArr = [];
+		if(localStorage.agency !== "" && localStorage.agency !== undefined){
+			var agency = localStorage.agency.split(",");
+			agencyArr = agency;
+			var html = "";
+			for(var i in agency){
+				html +=
+						`<li>
+                        <div class="one">
+                            <div>
+                                <span>
+                                    <p class="key">${ agency[i] }</p>
+                                </span>
+                            </div>
+                            <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                        </div>
+                        <div class="modify">
+                            <textarea  name=""  rows="1"  placeholder="" maxlength="">${ agency[i] }</textarea>
+                            <button class="deleteKey">删除</button>
+                            <button class="ascertainKey">确定</button>
+                        </div>
+                    </li>`
+			}
+			$('.showKeyWord > ul').prepend(html);
+      if (agency.length >= agencyLimit) {
+        $('.addKeyBtn').hide()
+        $('.ent-more-tips').show()
+      } else {
+        $('.addKeyBtn').show()
+        $('.ent-more-tips').hide()
+      }
+		}
+		$(function(){
+
+			$('.knowBtn').on('click',function(){
+				$(".problemPop").hide()
+			})
+			$(".problem").on('click',function(){
+				$(".problemPop").css("display",'flex');
+			})
+
+			function hasWords () {
+				var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+				if(showKeyWordLength === 0){
+					$(".enter.addkeyWord").show();
+					$(".addKeyWord").hide();
+					$(".showKeyWord").hide();
+          $('.addKeyBtn').hide()
+				} else {
+					$(".enter.addkeyWord").hide();
+					$(".showKeyWord").show();
+					$(".addKeyWord").show();
+          if (showKeyWordLength >= agencyLimit) {
+            $('.addKeyBtn').hide()
+            $('.ent-more-tips').show()
+          } else {
+            $('.addKeyBtn').show()
+            $('.ent-more-tips').hide()
+          }
+				}
+			}
+			hasWords();
+
+			// 添加按钮
+			$(".addKeyBtn i").on('click',function(){
+				window.location.href="/front/wx_dataExport/agencyInput";
+			});
+
+			$('textarea').each(function(i,dom){
+				// console.log(i,dom)
+				dom.style.height = dom.scrollHeight +'px';
+			});
+			$("textarea").on("input", function() {
+				this.style.height = 'auto';
+				this.style.height = this.scrollHeight + "px";
+			});
+
+			// 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+			$('.addkeyWord input.enterOne').on('input', function() {
+
+				var buttonDOM = $(this).siblings().find('button')[0];
+				if ($(this).val().replace(/\s+/g,"").length >= 1) {
+					buttonDOM.style.opacity = 1;
+					buttonDOM.removeAttribute("disabled")
+				} else {
+					buttonDOM.style.opacity = .5;
+					buttonDOM.setAttribute("disabled", true)
+				}
+			});
+
+			var u = navigator.userAgent;
+			var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
+			var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
+			if(isAndroid){
+				//防止键盘把当前输入框给挡住
+			    $('input[type="text"],textarea').focus(function () {
+			        var target = this;
+			        setTimeout(function(){
+			            target.scrollIntoViewIfNeeded();
+			        },400);
+			    });
+			}
+
+			// 添加 按钮的点击事件
+			$('.addkeyWord .btn .save-btn').on('click', function(){
+				var keyWord = $('.addkeyWord input.enterOne').val();
+				keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+				if (keyWord.length > 50) {
+					// var s = keyWord.slice(0,49);
+					// $('.addkeyWord input.enterOne').val(s);
+
+					weui.toast('招标代理机构不能超过50字', {
+						duration: 2000,
+						className: 'text-overflow100',
+						callback: function(){}
+					});
+					return
+				}
+				agencyArr.push(keyWord);
+				localStorage.setItem("agency", agencyArr);
+				var html = `<li>
+							<div class="one">
+								<div>
+									<span>
+										<p class="key">${ keyWord }</p>
+									</span>
+								</div>
+								<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+							</div>
+							<div class="modify">
+								<textarea  name=""  rows="1"  placeholder="" maxlength="">${ keyWord }</textarea>
+								<button class="deleteKey">删除</button>
+								<button class="ascertainKey">确定</button>
+							</div>
+						</li>`;
+				$('.showKeyWord > ul').prepend(html);
+
+				// 隐藏
+				$(".enter.addkeyWord").hide();
+				$(".showKeyWord").show();
+				$(".addKeyWord").show();
+				$('.enter.addkeyWord > input').val('');
+				var buttonDOM = $('.enter.addkeyWord .btn button')[0];
+				buttonDOM.style.opacity = .5;
+				buttonDOM.setAttribute("disabled", true)
+        hasWords();
+			});
+
+			// 编辑
+			$(".showKeyWord").on('click', '.editKeyWord',function(e){
+				let oSpan = $(this).parent().siblings().children('textarea');
+				let val = $(oSpan).val();
+				$(this).parent().hide();
+				$(this).parent().siblings().show().parent().siblings().children('.modify').hide().siblings('.one').show()
+				$(oSpan).val('').focus().val(val);
+				$(".addKeyWord").hide();
+			});
+
+			// 编辑 删除
+			$('.showKeyWord').on('click', '.deleteKey', function(e) {
+				var agency = $(this).parent().prev().find('.key').text();
+				agencyArr.splice($.inArray(agency, agencyArr),1);
+				localStorage.agency = agencyArr.toString();
+				$(this).parents('li').remove();
+				$(".addKeyWord").show();
+				hasWords()
+				// console.log('删除附加词:',$(this).parent().find('span').text())
+			});
+			// 编辑 确定
+			$('.showKeyWord').on('click', '.ascertainKey', function(e) {
+				var keyWord = $(this).siblings('textarea').val();
+				var agency = $(this).parent().prev().find('.key').text();
+				keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+				if (keyWord.replace(/\s+/g,"").length < 1) {
+
+					weui.toast('招标代理机构不能为空', {
+						duration: 2000,
+						className: 'text-overflow100',
+						callback: function(){
+
+						}
+					});
+					return
+				}else if($(this).parent().find("textarea").val().length > 50){
+					// var s = $(this).parent().find("span").text().slice(0,49);
+					// $(this).parent().find("span").text(s);
+					weui.toast('招标代理机构不能超过50字', {
+						duration: 2000,
+						className: 'text-overflow100',
+						callback: function(){}
+					});
+					return
+				}else{
+					for(var i in agencyArr){
+						if(agency !== keyWord){
+							if(agencyArr[i] === keyWord){
+								weui.toast('招标代理机构重复了', {
+									duration: 2000,
+									className: 'text-overflow100',
+									callback: function(){}
+								});
+								return
+							}
+						}
+						if(agencyArr[i] === agency){
+							agencyArr[i] = keyWord;
+						}
+					}
+					localStorage.agency = agencyArr.toString();
+					$(this).parent().siblings().find('.key').text(keyWord);
+					$(this).parent().hide().siblings().show()
+				}
+				// $(".addKeyWord").show();
+        hasWords()
+			});
+
+			//去空格方法
+			String.prototype.trim = function(){
+				return this.replace(/(^\s*)|(\s*$)/g, ' ');
+			};
+
+			$(".close").on('click', function () {
+				history.back();
+			});
+
+		})
+
+	</script>
+	<script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
+	{{include "/common/baiducc.html"}}
+	</body>
+
+</html>

+ 137 - 0
src/web/templates/weixin/dataExport/dataExport_agencyInput.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>招标代理机构</title>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}4">
+    <link rel="stylesheet"href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/association.css?v={{Msg "seo" "version"}}'/>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    {{include "/common/weixin.html"}}
+    <script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
+    <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+    </head>
+    <style>
+        .keyWord .addKeyWord {
+            width: 100%;
+            position: fixed;
+            top: 100%;
+            text-align: center;
+        }
+        .keyWord .enter .btn .save-btn {
+            float: right;
+        }
+        body{
+            background: rgba(245,244,249,1);
+        }
+    </style>
+    <body>
+
+    <div class="keyWord">
+        <div class="enter addkeyWord">
+        <input type="text" class="enterOne" placeholder="招标代理机构名称" />
+        <div class="btn fixed-bottom">
+        <button class="save-btn" disabled>确认</button>
+        <button class="close">取消</button>
+    </div>
+    </div>
+
+    <!-- 添加附加词显示列表 -->
+    <div class="showKeyWord">
+        <ul>
+
+        </ul>
+
+        <div class="addKeyWord">
+        <i class="iconfont icon-tianjia"></i>
+        </div>
+
+        </div>
+        <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
+        </div>
+        </div>
+        <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+        initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
+        var agencyArr = [];
+        if(localStorage.agency !== "" && localStorage.agency !== undefined){
+            var agency = localStorage.agency.split(",");
+            agencyArr = agency;
+        }
+        $(function(){
+
+            $('.knowBtn').on('click',function(){
+                $(".problemPop").hide()
+            });
+            $(".problem").on('click',function(){
+                $(".problemPop").css("display",'flex');
+            });
+
+            // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+            $('.addkeyWord input.enterOne').on('input', function() {
+
+                var buttonDOM = $(this).siblings().find('button')[0];
+                if ($(this).val().replace(/\s+/g,"").length >= 1) {
+                    buttonDOM.style.opacity = 1;
+                    buttonDOM.removeAttribute("disabled")
+                } else {
+                    buttonDOM.style.opacity = .5;
+                    buttonDOM.setAttribute("disabled", true)
+                }
+            });
+
+            // 添加 按钮的点击事件
+            $('.addkeyWord .btn .save-btn').on('click', function(){
+                var keyWord = $('.addkeyWord input.enterOne').val();
+                keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
+                if (keyWord.length > 50) {
+                    // var s = keyWord.slice(0,49);
+                    // $('.addkeyWord input.enterOne').val(s);
+
+                    weui.toast('招标代理机构不能超过50字', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){}
+                    });
+                    return
+                }
+                for (var a in agencyArr){
+                    if (keyWord === agencyArr[a]){
+                        weui.toast('招标代理机构重复了', {
+                            duration: 2000,
+                            className: 'text-overflow100',
+                            callback: function(){}
+                        });
+                        return
+                    }
+                }
+                agencyArr.push(keyWord);
+                localStorage.setItem("agency", agencyArr);
+                history.back();
+            });
+
+            //去空格方法
+            String.prototype.trim = function(){
+                return this.replace(/(^\s*)|(\s*$)/g, ' ');
+            };
+
+            $(".close").on('click', function () {
+                history.back();
+            });
+        })
+
+    </script>
+     <script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
+	{{include "/common/baiducc.html"}}
+    </body>
+
+</html>

+ 17 - 1
src/web/templates/weixin/dataExport/dataExport_toOrderDetail.html

@@ -146,6 +146,7 @@
                 var subType = filter["subtype"];
                 var buyer = filter["buyer"];
                 var winner = filter["winner"];
+                var agency = filter["agency"];
                 var selectType = filter["selectType"];
                 if (!publishtime) {
                     publishtime = "全部";
@@ -327,6 +328,17 @@
                     winnerHtml += "<span>-</span>";
                 }
                 $(".winner").append(winnerHtml);
+
+                var agencyHtml = "";
+                if (agency && agency.length > 0) {
+                    for (var i = 0; i < agency.length; i++) {
+                        agencyHtml += "<span>" + agency[i] + "&nbsp</span>";
+                    }
+                    $('.agency').parent().show()
+                } else {
+                    agencyHtml += "<span>-</span>";
+                }
+                $(".agency").append(agencyHtml);
             }
             ;
 
@@ -429,7 +441,7 @@
 									</span>
                         </p>
                         <p class="item-list l-item">
-                            <span class="label">中标单位:</span>
+                            <span class="label">中标企业:</span>
                             <span class="item-list-parents winner value">
 									</span>
                         </p>
@@ -438,6 +450,10 @@
                             <span class="item-list-parents buyer value">
 									</span>
                         </p>
+                        <p class="item-list l-item" style="display: none;">
+                            <span class="label">招标代理机构:</span>
+                            <span class="item-list-parents agency value"></span>
+                        </p>
                     </div>
                 </div>
                 <div class=" bottom">

+ 7 - 7
src/web/templates/weixin/dataExport/dataExport_winnerEdit.html

@@ -5,7 +5,7 @@
 	<meta charset="UTF-8">
 	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
-	<title>中标单位</title>
+	<title>中标企业</title>
 	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
 	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
 	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
@@ -62,7 +62,7 @@
 	<div class="keyWord">
     <section class="content">
       <div class="enter addkeyWord">
-        <input type="text" class="enterOne" placeholder="中标单位名称" />
+        <input type="text" class="enterOne" placeholder="中标企业名称" />
         <div class="btn fixed-bottom">
           <button class="save-btn" disabled>确认</button>
           <button class="close">取消</button>
@@ -80,7 +80,7 @@
         </ul>
       </div>
     </section>
-    <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标单位,目前已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_entmore_customization" onclick="goPerfect()">申请数据定制导出></a></div>
+    <div class="ent-more-tips">最多可添加{{Export.exportLimit.winnerLimit}}个中标企业,目前已达上限,如需添加更多您可<a href="/weixin/frontPage/bigmember/free/perfect_info?source=wx_Dataself_entmore_customization" onclick="goPerfect()">申请数据定制导出></a></div>
 	</div>
 	<div class="addKeyBtn">
 		<i class="iconfont icon-tianjia"></i>
@@ -216,7 +216,7 @@
 					// var s = keyWord.slice(0,49);
 					// $('.addkeyWord input.enterOne').val(s);
 
-					weui.toast('中标单位不能超过50字', {
+					weui.toast('中标企业不能超过50字', {
 						duration: 2000,
 						className: 'text-overflow100',
 						callback: function(){}
@@ -280,7 +280,7 @@
 				keyWord = keyWord.replace(/(^\s*)|(\s*$)/g, "");
 				if (keyWord.replace(/\s+/g,"").length < 1) {
 
-					weui.toast('中标单位不能为空', {
+					weui.toast('中标企业不能为空', {
 						duration: 2000,
 						className: 'text-overflow100',
 						callback: function(){
@@ -291,7 +291,7 @@
 				}else if($(this).parent().find("textarea").val().length > 50){
 					// var s = $(this).parent().find("span").text().slice(0,49);
 					// $(this).parent().find("span").text(s);
-					weui.toast('中标单位不能超过50字', {
+					weui.toast('中标企业不能超过50字', {
 						duration: 2000,
 						className: 'text-overflow100',
 						callback: function(){}
@@ -301,7 +301,7 @@
 					for(var i in winnerArr){
 						if(winner !== keyWord){
 							if(winnerArr[i] === keyWord){
-								weui.toast('中标单位重复了', {
+								weui.toast('中标企业重复了', {
 									duration: 2000,
 									className: 'text-overflow100',
 									callback: function(){}

+ 4 - 4
src/web/templates/weixin/dataExport/dataExport_winnerInput.html

@@ -5,7 +5,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>中标单位</title>
+    <title>中标企业</title>
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
@@ -35,7 +35,7 @@
 
     <div class="keyWord">
         <div class="enter addkeyWord">
-        <input type="text" class="enterOne" placeholder="中标单位名称" />
+        <input type="text" class="enterOne" placeholder="中标企业名称" />
         <div class="btn fixed-bottom">
         <button class="save-btn" disabled>确认</button>
         <button class="close">取消</button>
@@ -97,7 +97,7 @@
                     // var s = keyWord.slice(0,49);
                     // $('.addkeyWord input.enterOne').val(s);
 
-                    weui.toast('中标单位不能超过50字', {
+                    weui.toast('中标企业不能超过50字', {
                         duration: 2000,
                         className: 'text-overflow100',
                         callback: function(){}
@@ -106,7 +106,7 @@
                 }
                 for (var a in winnerArr){
                     if (keyWord === winnerArr[a]){
-                        weui.toast('中标单位重复了', {
+                        weui.toast('中标企业重复了', {
                             duration: 2000,
                             className: 'text-overflow100',
                             callback: function(){}

Vissa filer visades inte eftersom för många filer har ändrats