yuelujie 6 сар өмнө
parent
commit
8e8938adf9
27 өөрчлөгдсөн 537 нэмэгдсэн , 137 устгасан
  1. 2 2
      src/go.mod
  2. 4 4
      src/go.sum
  3. 6 1
      src/jfw/front/dataExport.go
  4. 7 0
      src/jfw/front/front.go
  5. 1 1
      src/jfw/front/supsearch.go
  6. 3 0
      src/jfw/front/ws_dataExport.go
  7. 0 1
      src/jfw/modules/app/src/app/front/activity.go
  8. 3 0
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  9. 2 2
      src/jfw/modules/app/src/go.mod
  10. 4 4
      src/jfw/modules/app/src/go.sum
  11. 5 6
      src/jfw/modules/publicapply/src/detail/dao/baseInfo.go
  12. 18 0
      src/jfw/modules/publicapply/src/detail/dao/bidding.go
  13. 1 0
      src/jfw/modules/publicapply/src/detail/entity/entity.go
  14. 5 2
      src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go
  15. 3 0
      src/jfw/modules/subscribepay/src/entity/order.go
  16. 2 2
      src/jfw/modules/subscribepay/src/go.mod
  17. 4 4
      src/jfw/modules/subscribepay/src/go.sum
  18. 3 0
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  19. 5 0
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  20. 8 8
      src/jfw/modules/subscribepay/src/service/invoice.go
  21. 2 1
      src/jfw/modules/subscribepay/src/timetask/dataExportMail.go
  22. 2 1
      src/jfw/modules/weixin/src/config.json
  23. 113 10
      src/web/staticres/dataExport/css/conditions.css
  24. BIN
      src/web/staticres/dataExport/image/icon-close-img.png
  25. BIN
      src/web/staticres/dataExport/image/icon-edit-img.png
  26. 229 37
      src/web/staticres/dataExport/js/conditions_order.js
  27. 105 51
      src/web/templates/pc/dataExport_sieve.html

+ 2 - 2
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-20241218100930-3aa57dbda395
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.23.2
+	app.yhyue.com/moapp/jypkg v1.27.7
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.20
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0
@@ -25,7 +25,7 @@ require (
 	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/jyMicroservices v0.0.2 // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/BurntSushi/toml v1.2.0 // indirect

+ 4 - 4
src/go.sum

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20241218100930-3aa57dbda395/go.mod h1:XHNATN6t
 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.23.2 h1:FOjnWKd1GBZBwzqDd9q4H4X291lgGZugmoR5/rpKN3o=
-app.yhyue.com/moapp/jypkg v1.23.2/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
+app.yhyue.com/moapp/jypkg v1.27.7 h1:h6CmnaCju0X4iYXbTNwHanSWWVM3zCXLa07p0QFo3Fw=
+app.yhyue.com/moapp/jypkg v1.27.7/go.mod h1:7f9hBxeF9RTp6vhTMZ24k4VLsn7HJHyAXOx6qzA3xOw=
 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=
@@ -31,8 +31,8 @@ bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.
 bp.jydev.jianyu360.cn/BaseService/gateway v1.3.4/go.mod h1:BMLd/5wb3BIEGhnEgF9y1sJN9P5/Dw9kYsoiE9V8I9g=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2 h1:Qi8C7gZeR7+kjOtSl9ilR5HwbjCe8GO1RuotFb4+kFA=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2/go.mod h1:v8y7FCbkKEIRP4Ie9ZM8NtoRP+Fk4O3C1hnexNusYIQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843 h1:u+8k/T0D6EUjj9BhI5RJdRa+8v4FZbyZhaNcm66L6Vs=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec h1:oCO36pHkEHQa5+Z/DU83T5xT5NKptVbw5UVQSN6lJjw=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743/go.mod h1:1SQIPPL5Ya5BzQdByFKtTkXrXTWBv+PDqWIhNknLnZw=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419023723-0b32d4a41751/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=

+ 6 - 1
src/jfw/front/dataExport.go

@@ -296,12 +296,14 @@ func (d *DataExport) SieveData() {
 		//从500条数据中筛选字段最全五条
 		scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 		kws := scd.Keyword
+		tm := time.Now()
 		res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 		if res == nil || err != nil {
 			_res["error_msg"] = "无数据"
 			d.ServeJson(_res)
 			return
 		}
+		log.Println(fmt.Sprintf("id:%s 查询耗时:%s", _id, time.Now().Sub(tm)))
 		//格式化字段
 		res_screen := dataexport.ScreenData(res, dataType, 20, kws)
 		var EntArr = []string{}
@@ -315,6 +317,7 @@ func (d *DataExport) SieveData() {
 		}
 
 		list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
+		log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", _id, time.Now().Sub(tm)))
 		/*if msgCount > 20000 {
 			msgCount = 20000
 		}*/
@@ -779,15 +782,17 @@ func (d *DataExport) PreviewData(source, _id string) error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
+	tm := time.Now()
 	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		log.Println("PreviewData查询出错", res)
 		return d.Render("/pc/dataExport_noDataErr.html", &d.T)
 	}
+	log.Println(fmt.Sprintf("id:%s 查询耗时:%s", _id, time.Now().Sub(tm)))
 	//格式化字段
 	res_screen := dataexport.ScreenData(res, dataType, 20, kws)
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
-
+	log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", _id, time.Now().Sub(tm)))
 	d.T["data"] = subUrl(list, dataType)
 	d.T["dataType"] = dataType
 	d.T["ttf"] = public.GetFontVersion() + "_" + public.PC

+ 7 - 0
src/jfw/front/front.go

@@ -701,6 +701,13 @@ func (f *Front) SignOut() error {
 func (f *Front) GetLoginNum(prestr string) error {
 	var oid = f.GetString("oid")
 	var Rref = f.GetString("rref")
+	if prestr == "" || prestr == "null" {
+		prestr = "101"
+		log.Println("refer:", f.Request.Referer())
+	}
+	if Rref == "" {
+		Rref = f.Request.Referer()
+	}
 	f.SetSession("Rref", Rref)
 	shareid, shareidot := qrmanager.QrCodeManager.GetQRCode(oid, prestr, f.Session(), f.Request)
 

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

@@ -401,12 +401,12 @@ func (p *Pcsearch) PcSearchIndex(module string) error {
 			cooperateCode = cc.Value
 		}
 	}
+	p.T["logid"] = config.Seoconfig["jysslby"].(string)
 	p.T["cooperateCode"] = cooperateCode
 	//if !strings.Contains(p.Request.URL.String(), "useOld") {
 	return p.Render("/pc/search/index.html", &p.T)
 	//}
 	//sessVal := p.Session().GetMultiple()
-	//p.T["logid"] = config.Seoconfig["jysslby"].(string)
 	//pageSize, _ := p.GetInteger("pageSize")
 	//if pageSize == 0 {
 	//	pageSize = 50

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

@@ -210,14 +210,17 @@ func (w *WsDataExport) GetPreview() error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
+	tm := time.Now()
 	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		return w.Render("/pc/dataExport_noDataErr.html", &w.T)
 	}
+	log.Println(fmt.Sprintf("id:%s 查询耗时:%s", _id, time.Now().Sub(tm)))
 	msgCount := dataexport.GetDataExportSearchCountByScdId(public.MQFW, public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, _id)
 	//格式化字段
 	res_screen := dataexport.ScreenData(res, dataType, 20, kws)
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
+	log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", _id, time.Now().Sub(tm)))
 	//if msgCount > 20000 {
 	//	msgCount = 20000
 	//}

+ 0 - 1
src/jfw/modules/app/src/app/front/activity.go

@@ -78,7 +78,6 @@ func (s *Activity) Mini(args string) {
 	}
 	s.Render(config.Active.ActivateInfo.Url, &s.T)
 	return
-
 }
 
 // CheckSubscribe 是否关注

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

@@ -67,10 +67,12 @@ func (w *WsDataExport) GetPreview() error {
 	//从500条数据中筛选字段最全五条
 	scd := dataexport.GetSqlObjFromId(public.MQFW, _id)
 	kws := scd.Keyword
+	tm := time.Now()
 	res, err := dataexport.GetDataExportSearchResult(public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, scd, dataType, -1)
 	if res == nil || err != nil {
 		return w.Render("/pc/dataExport_noDataErr.html", &w.T)
 	}
+	log.Println(fmt.Sprintf("id:%s 查询耗时:%s", _id, time.Now().Sub(tm)))
 	msgCount := dataexport.GetDataExportSearchCountByScdId(public.MQFW, public.Mgo_Bidding, public.DbConf.Mongodb.Bidding.DbName, public.DbConf.Elasticsearch.Main.Address, _id)
 	//格式化字段
 	res_screen := dataexport.ScreenData(res, dataType, 20, kws)
@@ -84,6 +86,7 @@ func (w *WsDataExport) GetPreview() error {
 		}
 	}
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
+	log.Println(fmt.Sprintf("id:%s 格式划耗时:%s", _id, time.Now().Sub(tm)))
 	//if msgCount > 20000 {
 	//	msgCount = 20000
 	//}

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

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20241218100930-3aa57dbda395
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.23.2
+	app.yhyue.com/moapp/jypkg v1.27.7
 	bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20231226074509-942d80dc34eb
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
@@ -23,7 +23,7 @@ require (
 	app.yhyue.com/moapp/jyResourcesCenter v0.0.0-20231024011103-8a2aacdbbd3e // indirect
 	app.yhyue.com/moapp/message v0.0.0-20231204024949-8c7145bfc161 // indirect
 	bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2 // indirect
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843 // indirect
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec // indirect
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.1.3 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/BurntSushi/toml v1.2.0 // indirect

+ 4 - 4
src/jfw/modules/app/src/go.sum

@@ -22,8 +22,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20241218100930-3aa57dbda395/go.mod h1:XHNATN6t
 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.23.2 h1:FOjnWKd1GBZBwzqDd9q4H4X291lgGZugmoR5/rpKN3o=
-app.yhyue.com/moapp/jypkg v1.23.2/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
+app.yhyue.com/moapp/jypkg v1.27.7 h1:h6CmnaCju0X4iYXbTNwHanSWWVM3zCXLa07p0QFo3Fw=
+app.yhyue.com/moapp/jypkg v1.27.7/go.mod h1:7f9hBxeF9RTp6vhTMZ24k4VLsn7HJHyAXOx6qzA3xOw=
 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=
@@ -33,8 +33,8 @@ bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.
 bp.jydev.jianyu360.cn/BaseService/gateway v1.3.4/go.mod h1:BMLd/5wb3BIEGhnEgF9y1sJN9P5/Dw9kYsoiE9V8I9g=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2 h1:Qi8C7gZeR7+kjOtSl9ilR5HwbjCe8GO1RuotFb4+kFA=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2/go.mod h1:v8y7FCbkKEIRP4Ie9ZM8NtoRP+Fk4O3C1hnexNusYIQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843 h1:u+8k/T0D6EUjj9BhI5RJdRa+8v4FZbyZhaNcm66L6Vs=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240607062231-ae1d02891843/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec h1:oCO36pHkEHQa5+Z/DU83T5xT5NKptVbw5UVQSN6lJjw=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743/go.mod h1:1SQIPPL5Ya5BzQdByFKtTkXrXTWBv+PDqWIhNknLnZw=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419023723-0b32d4a41751/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=

+ 5 - 6
src/jfw/modules/publicapply/src/detail/dao/baseInfo.go

@@ -66,8 +66,8 @@ func (b *BaseInfo) BidBaseInfo() (bi *BidInfo, err error) {
 		CanRead:   false,
 		Topnet:    false,
 		BindPhone: false,
+		Next:      true, //是否有权限获取进阶信息
 	}
-	advancedBool := true //是否有权限获取进阶信息
 	resResp := config.Middleground.ResourceCenter.Haspowers(b.UserInfo.AccountId, b.UserInfo.EntAccountId, b.UserInfo.EntId, b.UserInfo.EntUserId)
 	if resResp != nil && len(resResp.Powers) > 0 {
 		for _, pv := range resResp.Powers {
@@ -76,15 +76,14 @@ func (b *BaseInfo) BidBaseInfo() (bi *BidInfo, err error) {
 				bi.Topnet = true
 			case "ygzc_cgxx": //阳光采购
 				bi.Purchase = true
-				advancedBool = false
 			case "bi_sj_yyszs": //运营商专版
 				bi.Operator = true
-				if b.PageType == "yyszb" {
-					advancedBool = false
-				}
 			}
 		}
 	}
+	//if b.PageType == "yyszb" { //运营商专版详情页
+	//	bi.Next = false
+	//}
 	//招标数据基本信息并发过滤
 	if dc.Config.RestrictionSwitch {
 		if err = rest.ReqCheck("baseInfo"); err != nil {
@@ -243,7 +242,7 @@ func (b *BaseInfo) BidBaseInfo() (bi *BidInfo, err error) {
 		return nil
 	}
 	err = BidInfoFormat()
-	if bi.CanRead && advancedBool && err == nil {
+	if bi.CanRead && bi.Next && err == nil {
 		//token
 		token := fmt.Sprintf("%s#%s#%s#%s#%s#%s", b.Id, b.FirstType, b.PageType, fmt.Sprintf("%d", time.Now().Unix()), b.UserInfo.UserId, common.If(bi.CanRead, detailKey, "").(string))
 		bi.Token = encrypt.SE.EncodeString(token)

+ 18 - 0
src/jfw/modules/publicapply/src/detail/dao/bidding.go

@@ -347,10 +347,18 @@ func (bi *BidInfo) BiddingDataFormat(obj map[string]interface{}, b *BaseInfo) {
 			if bi.BaseInfo.PublicType == "平台发布" && common.IntAll(obj["is_yg_new"]) != 1 {
 				isPurchase = false
 				bi.BaseInfo.InfoAttribute = "" //bidding 详情页
+<<<<<<< HEAD
 				bi.Purchase = isPurchase
 			}
 		}
 		if isPurchase { //阳光直采 且 是新网站
+=======
+				//bi.Purchase = isPurchase
+			}
+		}
+		if isPurchase { //阳光直采 且 是新网站
+			bi.Next = !isPurchase
+>>>>>>> master
 			bi.BaseInfo.PublicType = fmt.Sprintf("%s%s", dc.Config.PurchaseInfo.Name, bi.BaseInfo.PublicType)
 			if !bi.Purchase {
 				bi.Abstract.Default.Buyer = consts.NoPower
@@ -427,7 +435,14 @@ func (bi *BidInfo) BiddingDataFormat(obj map[string]interface{}, b *BaseInfo) {
 	//href="#"为竞品
 	href := common.ObjToString(obj["href"])
 	//运营商专版权限 且 运营商专版搜索入口
+<<<<<<< HEAD
 	if bi.Operator && b.PageType == "yyszb" {
+=======
+	if bi.Next {
+		bi.Next = !consts.FirstTypeCheck[b.PageType]
+	}
+	if consts.FirstTypeCheck[b.PageType] && bi.Operator {
+>>>>>>> master
 		bi.Detail.OriginalHref = href
 		if href != "" {
 			bi.Detail.OriginalShow = true
@@ -729,6 +744,7 @@ func DescriptionHandle(stype string, obj map[string]interface{}) string {
 		description = strings.Join(descriptionArr, ",")
 	}
 	return description
+<<<<<<< HEAD
 }
 
 // IsSubscribe 获取用户是否关注
@@ -742,4 +758,6 @@ func IsSubscribe(mgoId string) bool {
 		}
 	}
 	return false
+=======
+>>>>>>> master
 }

+ 1 - 0
src/jfw/modules/publicapply/src/detail/entity/entity.go

@@ -12,6 +12,7 @@ type BidInfo struct {
 	Purchase  bool                   `json:"purchase"`             //阳光直采-采购信息
 	BindPhone bool                   `json:"bindPhone"`            //是否绑定手机号
 	Operator  bool                   `json:"operator"`             //运营商专版
+	Next      bool                   `json:"next"`                 //
 }
 
 // 基本信息

+ 5 - 2
src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go

@@ -377,8 +377,8 @@ func (this *dataExportPackStruct) DoEntPackRepeatCheck(sess *httpsession.Session
 		exportLock.Unlock()
 		entLock.Lock()
 		//开始去重
-		_, newCount, _ := dataexport.GetEntDataExportCount(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch,
-			selectId, entIdInt, entUserId, true, middleGround.JyApiConfig.ApiList.EntDedupUrl, config.ExConf.MsgMaxCount)
+		_, newCount, err := dataexport.GetEntDataExportCountIdArr(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch,
+			selectId, entIdInt, entUserId, middleGround.JyApiConfig.ApiList.EntDedupUrl, config.ExConf.MsgMaxCount)
 		entLock.Unlock()
 		return newCount, err
 	}
@@ -392,10 +392,13 @@ func (this *dataExportPackStruct) DoPerPackRepeatCheck(userId string, isSenior b
 
 // GetExcelFile 数据包生成excel文件
 func GetExcelFile(selectId string, checkCount int, isSenior bool, success func(excelPath string, exportIds []string), fail func(error)) {
+	tm := time.Now()
 	list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch, selectId, qutil.If(isSenior, "2", "1").(string), checkCount)
+	log.Println(fmt.Sprintf("id:%s 查询耗时:%s", selectId, time.Now().Sub(tm)))
 	url := util.GetExcelFilePath(pay.GetOrderCode(selectId), checkCount)
 	if err == nil && list != nil && len(*list) > 0 {
 		list = dataexport.FormatExportData(util.MQFWENT, list, config.Config.WebDomain, "2")
+		log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", selectId, time.Now().Sub(tm)))
 		err = util.CreateDataExportExcelFile(list, isSenior, config.ExConf.ExcelPayedPath+url) //创建excel文件
 	}
 	if err == nil {

+ 3 - 0
src/jfw/modules/subscribepay/src/entity/order.go

@@ -318,10 +318,13 @@ func dataExportOrder(m map[string]interface{}, userId string) (*OrderInfo, strin
 	ordercode := pay.GetOrderCode(userId)
 	download_url := util.GetExcelFilePath(ordercode, data_count)
 	go func() {
+		tm := time.Now()
 		list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch, id, qu.If(data_spec == "高级字段包", "2", "1").(string), data_count)
+		log.Println(fmt.Sprintf("id:%s 查询耗时:%s", id, time.Now().Sub(tm)))
 		if err == nil && list != nil && len(*list) > 0 {
 			list = dataexport.FormatExportData(util.MQFWENT, list, config.Config.WebDomain, qu.If(data_spec == "高级字段包", "2", "1").(string))
 			err = util.CreateDataExportExcelFile(list, data_spec == "高级字段包", config.ExConf.ExcelReadyPath+download_url)
+			log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", id, time.Now().Sub(tm)))
 		}
 		if err != nil {
 			errMeg := fmt.Sprintf("数据导出生成订单异常\n用户id:%s\n订单号:%s\n异常信息:%v:", userId, ordercode, err)

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

@@ -5,9 +5,9 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240626030750-115a3c0929fb
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v1.26.5
+	app.yhyue.com/moapp/jypkg v1.27.7
 	bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2
-	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240805083653-598306c30969
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.18
 	github.com/ClickHouse/clickhouse-go/v2 v2.2.0

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

@@ -20,8 +20,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20240626030750-115a3c0929fb/go.mod h1:XHNATN6t
 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.26.5 h1:LbE1gROqhpvsc3R5Wz/2fXxP0jYN7XDfAJnh6HSoWF4=
-app.yhyue.com/moapp/jypkg v1.26.5/go.mod h1:FylaC4MJ4G36WndktgeZfc8jTq3uvBGWIwbk02xfdQI=
+app.yhyue.com/moapp/jypkg v1.27.7 h1:h6CmnaCju0X4iYXbTNwHanSWWVM3zCXLa07p0QFo3Fw=
+app.yhyue.com/moapp/jypkg v1.27.7/go.mod h1:7f9hBxeF9RTp6vhTMZ24k4VLsn7HJHyAXOx6qzA3xOw=
 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=
@@ -31,8 +31,8 @@ bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.
 bp.jydev.jianyu360.cn/BaseService/gateway v1.3.4/go.mod h1:BMLd/5wb3BIEGhnEgF9y1sJN9P5/Dw9kYsoiE9V8I9g=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2 h1:Qi8C7gZeR7+kjOtSl9ilR5HwbjCe8GO1RuotFb4+kFA=
 bp.jydev.jianyu360.cn/BaseService/jyMicroservices v0.0.2/go.mod h1:v8y7FCbkKEIRP4Ie9ZM8NtoRP+Fk4O3C1hnexNusYIQ=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240805083653-598306c30969 h1:zVSExa0Po9lD8XLhCkeP8aQ5PFp9h2eCcTERIpOMd9Y=
-bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20240805083653-598306c30969/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec h1:oCO36pHkEHQa5+Z/DU83T5xT5NKptVbw5UVQSN6lJjw=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20241213060113-ac41966a58ec/go.mod h1:rCCaOSWBYfQabf/yIvSVheSPtN2THnHeTl2J5/RrcuU=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743 h1:7IaukyEAbMvgEv3/TiHlw7lzWPoksE4tVa1ap16RC9Q=
 bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230911091604-2faa31032743/go.mod h1:1SQIPPL5Ya5BzQdByFKtTkXrXTWBv+PDqWIhNknLnZw=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=

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

@@ -166,10 +166,13 @@ func (p *DataExportPay) export_search() {
 		ordercode := pay.GetOrderCode(openId)
 		download_url := util.GetExcelFilePath(ordercode, data_count)
 		go func() {
+			tm := time.Now()
 			list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch, id, qutil.If(data_spec == "高级字段包", "2", "1").(string), data_count)
+			log.Println(fmt.Sprintf("id:%s 查询耗时:%s", id, time.Now().Sub(tm)))
 			if err == nil && list != nil && len(*list) > 0 {
 				list = dataexport.FormatExportData(util.MQFWENT, list, config.Config.WebDomain, qutil.If(data_spec == "高级字段包", "2", "1").(string))
 				err = util.CreateDataExportExcelFile(list, data_spec == "高级字段包", config.ExConf.ExcelReadyPath+download_url)
+				log.Println(fmt.Sprintf("id:%s 格式化耗时:%s", id, time.Now().Sub(tm)))
 			}
 			if err != nil {
 				errMeg := fmt.Sprintf("数据导出生成订单异常\n用户id:%s\n订单号:%s\n异常信息:%v:", userId, ordercode, err)

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

@@ -367,7 +367,9 @@ func (this *DataExportPack) Statistics() {
 		if filterId == "" {
 			return nil, fmt.Errorf("请求参数异常")
 		}
+		tm := time.Now()
 		selectCount := dataexport.GetDataExportSearchCountByScdId(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch, filterId)
+		log.Printf("%s Statistics filterId :%s 计数耗时 %v\n", userId, filterId, time.Now().Sub(tm))
 		if selectCount > config.ExConf.MsgMaxCount || selectCount == -1 {
 			selectCount = config.ExConf.MsgMaxCount
 		}
@@ -376,6 +378,7 @@ func (this *DataExportPack) Statistics() {
 		}
 		if entId := this.GetString("entId"); entId != "" {
 			deduct, err := entity.JyDataExportPack.DoEntPackRepeatCheck(this.Session(), userId, entId, filterId, selectCount)
+			log.Printf("%s Statistics filterId :%s 查询耗时 %v\n", userId, filterId, time.Now().Sub(tm))
 			if err != nil {
 				log.Printf("%s Statistics-DoEntPackRepeatCheck 查询导出id失败 %v\n", userId, err)
 				return nil, fmt.Errorf("去重查询失败")
@@ -386,11 +389,13 @@ func (this *DataExportPack) Statistics() {
 			}, nil
 		} else if packType := this.GetString("packType"); packType != "" {
 			ids, err := dataexport.GetDataExportIdArrByScdId(util.MQFW, config.Config.Elasticsearch, filterId, selectCount)
+			log.Printf("%s Statistics filterId :%s 查询耗时 %v\n", userId, filterId, time.Now().Sub(tm))
 			if err != nil {
 				log.Printf("%s Statistics 查询导出id失败 %v\n", userId, err)
 				return nil, fmt.Errorf("查询去重异常")
 			}
 			repeat, deduct, err := entity.JyDataExportPack.DoPerPackRepeatCheck(userId, packType == "senior", ids)
+			log.Printf("%s Statistics filterId :%s 去重耗时 %v\n", userId, filterId, time.Now().Sub(tm))
 			if err != nil {
 				log.Printf("%s Statistics-DoPerPackRepeatCheck 查询导出id失败 %v\n", userId, err)
 				return nil, fmt.Errorf("去重查询失败")

+ 8 - 8
src/jfw/modules/subscribepay/src/service/invoice.go

@@ -453,7 +453,7 @@ func (this *Invoice) ShowinvoiceList() {
 	}
 	invoices := ShowList(order_code)
 	if invoices != nil && len(invoices) > 0 {
-		isIos := util.IsMobileIOS(this.Request.UserAgent())
+		//isIos := util.IsMobileIOS(this.Request.UserAgent())
 		var invoiceData []map[string]interface{}
 		for _, data := range invoices {
 			//是否换过票
@@ -469,13 +469,13 @@ func (this *Invoice) ShowinvoiceList() {
 			data["changed"] = qutil.If(isJyInvoice || isChanged || isJyEntity || timeLimit, true, false)
 			//if url := qutil.InterfaceToStr(data["url"]); url != "" {
 			//ios 移动端
-			if !isIos {
-				data["url"] = qutil.If(data["source_url"] != nil && qutil.ObjToString(data["source_url"]) != "", data["source_url"], data["url"])
-				//国家税务局-增值税电子发票公共服务平台
-				//if strings.Contains(url, "tysl.beijing.chinatax") {
-				//	data["url"] = strings.ReplaceAll(url, "/preview.html?code=", "/web-reader/reader?file=")
-				//}
-			}
+			//if !isIos {
+			data["url"] = qutil.If(data["source_url"] != nil && qutil.ObjToString(data["source_url"]) != "", data["source_url"], data["url"])
+			//国家税务局-增值税电子发票公共服务平台
+			//if strings.Contains(url, "tysl.beijing.chinatax") {
+			//	data["url"] = strings.ReplaceAll(url, "/preview.html?code=", "/web-reader/reader?file=")
+			//}
+			//}
 			//}
 			isReopen := timeLimit
 			//var isReopen bool

+ 2 - 1
src/jfw/modules/subscribepay/src/timetask/dataExportMail.go

@@ -23,7 +23,8 @@ func SendDataExportMailForPayed() {
 			config.TimeTaskConfig.DataExportSendMailDuringMinute, DataExportSendMailDuringMinuteDefaultValue).(int)), SendDataExportMailForPayed)
 	}()
 
-	unServiceList := util.Mysql.Find("dataexport_order", map[string]interface{}{"product_type": "历史数据", "order_status": 1, "service_status": 0}, "download_url,user_mail,data_count,pay_time,order_code", "", -1, -1)
+	//unServiceList := util.Mysql.Find("dataexport_order", map[string]interface{}{"product_type": "历史数据", "order_status": 1, "service_status": 0}, "download_url,user_mail,data_count,pay_time,order_code", "", -1, -1)
+	unServiceList := util.Mysql.SelectBySql(`SELECT download_url,user_mail,data_count,pay_time,order_code from dataexport_order WHERE product_type='历史数据' and order_status = 1 and service_status = 0 and (refund_status = 0 or refund_status is null)`)
 	if unServiceList == nil || len(*unServiceList) == 0 {
 		log.Printf("SendDataExportMailForPayed not find Payed order")
 		return

+ 2 - 1
src/jfw/modules/weixin/src/config.json

@@ -158,7 +158,8 @@
     "14": true,
     "17": true,
     "18": true,
-    "19": true
+    "19": true,
+    "101": true
   },
   "namePrefix": "JY_%s",
   "userCenterApi": "https://web-zxl.jydev.jianyu360.com",

+ 113 - 10
src/web/staticres/dataExport/css/conditions.css

@@ -56,6 +56,12 @@ button.w100 {
   margin-left: 6px;
 }
 
+button.w132{
+  width: 132px;
+  height: 36px;
+  border-radius: 4px;
+}
+
 .conditions-box,
 .progress_,
 .dataExportFun,
@@ -461,20 +467,24 @@ input.sm {
 .add-w::after {
   content: attr(data-text);
   position: absolute;
-  right: 98px;
+  /* right: 98px; */
   font-size: 14px;
-  color: #888888;
+  right: unset!important;
+  left: 50%!important;
+  transform: translateX(-50%);
+  color:#686868;
 }
 
 .add-w::before {
-  content: "\e631";
+  content: '';
+  /* content: "\e631";
   position: absolute;
   color: #AAAAAA;
   left: 100px;
   font-family: "iconfont" !important;
   font-size: 16px;
   font-style: normal;
-  -webkit-font-smoothing: antialiased;
+  -webkit-font-smoothing: antialiased; */
 }
 
 .dialog {
@@ -654,7 +664,8 @@ input.sm {
 }
 
 #inputDel_1>.delete-close>i,
-#inputDel_2>.delete-close>i {
+#inputDel_2>.delete-close>i,
+#inputDel_3>.delete-close>i {
   right: 0;
   position: absolute;
   top: 0;
@@ -690,12 +701,43 @@ input.sm {
   margin-right: 8px;
   position: relative;
 }
+/* #inputDel_0 .delete-close .key-action{
+  display: block;
+  position: absolute;
+  top: 50%;
+  right: 10px;
+  transform: translateY(-50%);
+} */
+#inputDel_0 .delete-close .icon-edit-img {
+  /* right: 20px;
+  position: absolute;
+  top: 0; */
+  position: absolute;
+  top: 50%;
+  right: 32px;
+  transform: translateY(-50%);
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  padding: 0;
+  background: url(/dataExport/image/icon-edit-img.png) no-repeat center center;
+  background-size: contain;
+}
 
-#inputDel_0 .delete-close>i {
-  right: 0;
+#inputDel_0 .delete-close .icon-guanbi {
   position: absolute;
-  top: 0;
-  padding: 8px 15px;
+  top: 50%;
+  right: 10px;
+  transform: translateY(-50%);
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  padding: 0;
+  background: url(/dataExport/image/icon-close-img.png) no-repeat center center;
+  background-size: contain;
+}
+#inputDel_0 .delete-close .icon-guanbi::before{
+  content: '';
 }
 
 .text-box {
@@ -762,7 +804,7 @@ input.sm {
 
 .float-box button {
   margin-right: 15px !important;
-  margin-bottom: 14px;
+  /* margin-bottom: 14px; */
 }
 
 .date-confirm-button-placeholder {
@@ -1331,3 +1373,64 @@ body .loading_ p span {
 100% {
   transform: rotate(360deg); }
 }
+
+
+/* p514数据导出优化调整 */
+#keyInput {
+  width: 670px;
+}
+
+.new-box{
+  width: 100%;
+}
+
+.white{
+  background: #fff;
+}
+
+.bg-active{
+  padding: 16px;
+  background:#F7F9FC;
+  border-radius: 8px;
+}
+
+.new-action{
+  display: none;
+  margin-top: 12px;
+  text-align: left;
+}
+
+.new-action .new-confirm{
+  margin-right: 16px!important;
+  background: #2ABED1;
+  color: #fff;
+  font-size: 16px;
+  border: 1px solid #2ABED1;
+}
+
+.new-action .new-cancel{
+  background: #fff;
+  border: 1px solid #2ABED1;
+  color: #2ABED1;
+  font-size: 16px;
+}
+
+.new-box .add-input-w{
+  width: auto !important;
+}
+
+.new-box .add-w::before{
+  content: '';
+}
+.new-box .add-w::after{
+  right: unset!important;
+  left: 50%!important;
+  transform: translateX(-50%);
+  color:#686868;
+}
+.new-box .add-w,
+.new-box .add-input-w .r,
+.new-box .add-input-w .l,
+.new-box .sm {
+  width: 328px;
+}

BIN
src/web/staticres/dataExport/image/icon-close-img.png


BIN
src/web/staticres/dataExport/image/icon-edit-img.png


+ 229 - 37
src/web/staticres/dataExport/js/conditions_order.js

@@ -123,7 +123,10 @@ $(document).on('click','.delete-close>i',function () {
 
       window[arr].splice(index,1)
       keyAllArr.splice(index,1)
-        dom.remove()
+      var vKey = $(dom).attr('data-key')
+      dom.remove()
+      $('#inputDel_0 div[data-key="'+vKey+'"]').remove()
+      renderColumn()
     } else {
         window[arr].splice(index,1)
         var i = selectProvince.indexOf(dom.text());
@@ -138,9 +141,10 @@ $(document).on('click','.delete-close>i',function () {
     }
     //20181227
     if (arr && arr.indexOf("inputDel")>-1){
+      console.log(arr, 'arr', $("div[data-arr='"+arr+"']").length);
       if($("div[data-arr='"+arr+"']").length==0){
-          $("div[id='"+arr+"']").siblings(".user-input").find("input").show();
-          $("div[id='"+arr+"']").siblings(".add-input-w-").hide();
+          $("div[id='"+arr+"']").siblings(".new-box").children('.user-input').find("input").show();
+          $("div[id='"+arr+"']").siblings('.new-box').children(".add-input-w-").hide();
       }
     }
 })
@@ -245,7 +249,7 @@ function delAddBox(n) {
 // })
 /* 生成子标签 */
 function createCKey(title,arr,clazz) {
-  if(arr.length === 0) {
+  if(!arr || arr.length === 0) {
     return ''
   }
   var all = arr.map(function (value) {
@@ -254,14 +258,15 @@ function createCKey(title,arr,clazz) {
   return '<div class="text-box float-box '+clazz+'"><div class="title">'+title+':</div><div class="title-other float-box">'+all+'</div></div>'
 }
 /* 添加关键词标签 */
-function createKeyBox(t) {
-  var appArr = appendArr
-  var exArr = excludeArr
-  var key = t
+function createKeyBox(key, append, exclude, i) {
+  var appArr = append
+  var exArr = exclude
   var all = createCKey('关键词',[key],"key") + createCKey('附加词',appArr,"app") + createCKey('排除词',exArr,"ex")
-  var template = '<div data-index="'+keyAllArr.length+'" data-arr="inputDel_0" class="delete-close">'+all+' <i class="iconfont icon-guanbi"></i> </div>'
+  // var index = type === 'edit' ? i : keyAllArr.length
+  var template = '<div data-index="'+i+'" data-key="' + key +'" data-arr="inputDel_0" class="delete-close">'+all+' <span class="icon-edit-img" data-key="' + key +'" data-exclude="' + exArr +'" data-append="'+ appArr + '"></span><i class="iconfont icon-guanbi"></i></div>'
   return template
 }
+
 function fixLeft(){
     var one = $("#inputDel_0 .column:eq(0)")
     var two = $("#inputDel_0 .column:eq(1)")
@@ -308,6 +313,7 @@ function addDelInput(t,type) {
   var template = null
   var arr = box
   switch (type) {
+    // 关键词类型时弃用(绑定到确定按钮事件委托)
     case 0: {
       // 计算当前输入的关键词、附加词、排除词总数
       var inputVal = []
@@ -339,6 +345,8 @@ function addDelInput(t,type) {
       $(".add-input-w input.sm").remove()
       $(".add-input-w").css("display","none");
       $("#addKeyword").css("display","block");
+      $('.new-action').hide()
+      $('.new-box').removeClass('bg-active')
       setTimeout(function(){
           fixLeft()
       },80)
@@ -411,7 +419,6 @@ function addOtherInput(t,f) {
       inputVal.push($(this).val())
     }
   })
-  console.log(inputVal, 'inputVal');
   // inputVal为当前输入的排除词、附加词
   // 已存关键词、附加词、排除词数量和 + 1(当前输入的关键词)+ inputVal.length
   if (getTotal() + 1 + inputVal.length  >=  wordsLimit) {
@@ -444,6 +451,7 @@ function addOtherInput(t,f) {
         }
     })
   }
+  console.log('附加词:' + appendArr, '排除词:'+ excludeArr);
   $(t).before(input)
     $(input).focus();
 }
@@ -451,34 +459,33 @@ function addOtherInput(t,f) {
 var nowSpan = null
 var dataIndex = 0;
 var textBoxClass = "";
-$(document).on('click','#inputDel_0 .title-other>span',function (e) {
-    var par = $(this).parent().parent();
-    dataIndex = par.parent().attr("data-index");
-    if(par.hasClass("key")){
-        textBoxClass = "key";
-    }else if(par.hasClass("app")){
-        textBoxClass = "app";
-    }else if(par.hasClass("ex")){
-        textBoxClass = "ex";
-    }
+// $(document).on('click','#inputDel_0 .title-other>span',function (e) {
+//     var par = $(this).parent().parent();
+//     dataIndex = par.parent().attr("data-index");
+//     if(par.hasClass("key")){
+//         textBoxClass = "key";
+//     }else if(par.hasClass("app")){
+//         textBoxClass = "app";
+//     }else if(par.hasClass("ex")){
+//         textBoxClass = "ex";
+//     }
 
-  var xy = $(this).offset()
-  // console.log('--xy--', xy)
-  var x = xy.top + 30
-  var maxY = $(document).width() - 600
-  var y = maxY < xy.left ? maxY : xy.left
-  nowSpan = $(this)
-  // console.log('--$(this).offset()--', xy)
-  var text = $(this).text()
-  $('.edit-user-input').children('.up-icon').css({
-    left: xy.left - y + 'px'
-  })
-  $('.edit-user-input').css({
-    top: x + 'px',
-    left: y + 'px'
-  }).show().children('input').val(text)
-  // console.log('--text--', text)
-})
+//   var xy = $(this).offset()
+//   // console.log('--xy--', xy)
+//   var x = xy.top + 30
+//   var maxY = $(document).width() - 600
+//   var y = maxY < xy.left ? maxY : xy.left
+//   nowSpan = $(this)
+//   // console.log('--$(this).offset()--', xy)
+//   var text = $(this).text()
+//   $('.edit-user-input').children('.up-icon').css({
+//     left: xy.left - y + 'px'
+//   })
+//   $('.edit-user-input').css({
+//     top: x + 'px',
+//     left: y + 'px'
+//   }).show().children('input').val(text)
+// })
 /* 修改关键词标签文字 */
 $(".edit-user-input").click(function (e) {
   e.stopPropagation()
@@ -524,3 +531,188 @@ function editKeywordBox() {
 function resetAreaLT() {
     $("#area-del").parent().prev().css("padding-top","8px");
 }
+
+// 关键词编辑修改
+$(document).on('click','#inputDel_0 .icon-edit-img',function (e) {
+  $('.new-box').addClass('bg-active')
+  var key = $(this).attr('data-key')
+  var append = $(this).attr('data-append')
+  var exclude = $(this).attr('data-exclude')
+  console.log(append, exclude, key, 'ddd');
+  var index = $(this).parent().attr("data-index")
+  var container = $('.new-box.bg-active')
+  container.attr('data-index', index)
+  container.attr('data-type', 'edit')
+  // console.log(key, append, exclude, index);
+  $("#keyInput").show().val(key).next().show()
+  $('.new-action').show()
+  $('#addKeyword').hide()
+  $('.new-box').find('input.sm').remove()
+  $('.new-confirm').attr('data-key', key).attr('data-append', append).attr('data-exclude', exclude).attr('data-type', 'edit')
+  $(this).parent().attr('data-key', key)
+
+  if(append){
+    $('.new-box .add-input-w').show()
+    append = append.split(",")
+    append.forEach(function (value, index) {
+      addOtherInput('.new-box .l .add-w', true)
+      $('.new-box .l .sm:eq(' + index + ')').val(value)
+    })
+    appendArr = append
+  }
+  if(exclude){
+    $('.new-box.r.add-w').show()
+    exclude = exclude.split(",")
+    exclude.forEach(function (value, index) {
+      addOtherInput('.new-box .r .add-w', false)
+      $('.new-box .r .sm:eq(' + index + ')').val(value)
+    })
+    excludeArr = exclude
+  }
+
+})
+
+// 倒叙重绘关键词3列dom(一维数组转二维数组横向倒叙排列)
+function renderColumn() {
+  var indexArr = []
+  $('.column:eq(0) > div').each(function(index,el) {
+    indexArr.push($(this).attr('data-index'))
+  })
+  $('.column > div').hide()
+  var newArr = divideArrayIntoThreeParts(indexArr.sort(function(a, b){
+    return b - a
+  }))
+  newArr.forEach(function(v, index){
+    $('.column').css({'display': 'flex', 'flex-direction': 'column-reverse'})
+    v.forEach(function(vv){
+      $('.column:eq('+ index +') > div[data-index='+ vv +']').show()
+    })
+  })
+}
+
+// 关键词添加/编辑 确定操作(新布局调用老方法-微调)
+$('.new-box .new-confirm').click(function () {  
+  // var type = $(this).attr('data-type')
+  var d = document.createElement('div')
+  var text = $('#keyInput').val()
+  if(!text.trim()){
+      return;
+  }
+  $(d).html(text)
+  text = $(d).text()
+  text = text.replace(/(^\s*)|(\s*$)/g, "");
+  var box = 'inputDel_0'
+  var template = null
+  var arr = box
+  // 计算当前输入的关键词、附加词、排除词总数
+  var inputVal = []
+  var inputs = $('.add-input-w').find('.sm')
+  inputs.each(function(){
+    if ($(this).val()) {
+      inputVal.push($(this).val())
+    }
+  })
+  if (getTotal() + inputVal.length  >=  wordsLimit) {
+    $('.keywords-more-tips').show()
+    return
+  }
+
+  // start
+  // 通过确定按钮的data-key获取到当前编辑的关键词 在关键词数组中的索引 进行删除
+  var btnKeyAttr = $(this).attr('data-key')
+  if (btnKeyAttr) {
+    var index = window[arr].indexOf(btnKeyAttr)
+    window[arr].splice(index, 1)
+    keyAllArr.splice(index, 1)
+  }
+  // end
+
+  var tempArr = keyAllArr.map(function(v){return v.name})
+  if(tempArr.indexOf(text) === -1) {
+    keyAllArr.push({
+      name: text,
+      append: appendArr,
+      exclude: excludeArr
+    })
+  }
+  appendArr = []
+  excludeArr = []
+  $(".new-box input.sm").remove()
+  $(".add-input-w").css("display","none");
+  $("#addKeyword").css("display","block");
+  $('.new-action').hide()
+  $('.new-box').removeClass('bg-active')
+  setTimeout(function(){
+      fixLeft()
+  },80)
+  $('#keyInput').val('').hide()
+
+  var keyTemArr = window[arr]
+  if(!Array.isArray(keyTemArr)) {
+    window[arr] = []
+    keyTemArr = window[arr]
+  }
+  keyTemArr.push(text)
+
+  var nnTemplate = ''
+  for (var i = 0; i<keyTemArr.length;i++) {
+    var append = keyAllArr[i].append ? keyAllArr[i].append : []
+    var exclude = keyAllArr[i].exclude ? keyAllArr[i].exclude: []
+    nnTemplate += createKeyBox(keyTemArr[i], append, exclude, i)
+  }
+  
+  $('#inputDel_0 .column:eq(0)').html(nnTemplate)
+  $('#inputDel_0 .column:eq(1)').html(nnTemplate)
+  $('#inputDel_0 .column:eq(2)').html(nnTemplate)
+  // 重绘操作
+  renderColumn()
+})
+
+function divideArrayIntoThreeParts(arr) {
+  // 获取数组的长度
+  const length = arr.length;
+  // 计算每一份的长度
+  const partLength = Math.ceil(length / 3);
+  // 初始化一个二维数组用于存储结果
+  const result = [[], [], []];
+
+  // 遍历原始数组
+  for (let i = 0; i < length; i++) {
+    // 根据当前索引确定该元素应该放入二维数组的哪一部分
+    const partIndex = i % 3;
+    // 将元素放入对应的子数组中
+    result[partIndex].push(arr[i]);
+  }
+
+  // 返回结果
+  return result;
+}
+
+// 关键词添加/编辑 取消操作
+$('.new-box .new-cancel').click(function () {
+  var LArr =  [$("#inputDel_0 .column:eq(0)>div").length,$("#inputDel_0 .column:eq(1)>div").length,$("#inputDel_0 .column:eq(2)>div").length]
+  var length = sum(LArr)
+  $(".new-box input.sm").remove()
+  $(".add-input-w-").hide()
+  $(".add-input-w").hide()
+  $('.new-action').hide()
+  $('.new-box').removeClass('bg-active')
+  $('#keyInput').val('')
+
+  if (length > 0) {
+    $('#keyInput').hide()
+    $("#addKeyword").show();
+  } else {
+    $('#keyInput').show()
+    $("#addKeyword").hide();
+  }
+})
+
+// 数组求和
+function sum(arr){    
+  let number = 0;
+  for(var i = 0;i<arr.length;i++){
+    number += arr[i]; 
+  }
+  return number;
+}

+ 105 - 51
src/web/templates/pc/dataExport_sieve.html

@@ -167,7 +167,7 @@
         }
 
         .ss {
-            width: 324px;
+            width: 328px;
         }
     </style>
     <style>
@@ -889,33 +889,39 @@
                     <div class="column"></div>
                     <div class="column"></div>
                 </div>
-                <div class="user-input">
-                    <input class="w" type="text" placeholder="请输入关键词" id="keyInput" maxlength="20">
-                    <button style="display: none" class="sussecc w100" onclick="addDelInput(this,0)">确定</button>
-                </div>
-                <div class="add-input-w float-box" style="display: none;font-size:14px">
-                    <div class="l">
-                        <div class="add-w" onclick="addOtherInput(this,true)" data-text="添加附加词"></div>
-                    </div>
-                    <div class="r">
-                        <div class="add-w" onclick="addOtherInput(this,false)" data-text="添加排除词"></div>
-                    </div>
-                </div>
-                <div class="add-input-w- float-box" id="addKeyword" style="display: none;">
-                    <div class="l">
-                        <div class="add-w ss" onclick="addInput(this,0)" data-text="添加"></div>
-                    </div>
-                </div>
-                <div class="edit-user-input" style="display: none">
-                    <div class="up-icon"></div>
-                    <input class="sm" type="text" placeholder="请输入修改文字" maxlength="20" id="keywordEdit"
-                           style="width: 342px;">
-                    <button class="sussecc w100" onclick="editInput(this,true)" style="margin-right: 0px !important;">
-                        确定
-                    </button>
-                    <button class="w100" onclick="editInput(this,false)"
-                            style="background-color: #BFBFBF;color: white;margin-right: 0px !important;">删除
-                    </button>
+                <div class="new-box">
+                  <div class="user-input">
+                      <input class="w" type="text" placeholder="请输入关键词" id="keyInput" maxlength="20">
+                      <!-- <button style="display: none" class="sussecc w100" onclick="addDelInput(this,0)">确定</button> -->
+                  </div>
+                  <div class="add-input-w float-box" style="display: none;font-size:14px">
+                      <div class="l">
+                          <div class="white add-w" onclick="addOtherInput(this,true)" data-text="+添加附加词"></div>
+                      </div>
+                      <div class="r">
+                          <div class="white add-w" onclick="addOtherInput(this,false)" data-text="+添加排除词"></div>
+                      </div>
+                  </div>
+                  <div class="add-input-w- float-box" id="addKeyword" style="display: none;">
+                      <div class="l">
+                          <div class="white add-w ss" onclick="addInput(this,0)" data-text="+添加"></div>
+                      </div>
+                  </div>
+                  <div class="edit-user-input" style="display: none">
+                      <div class="up-icon"></div>
+                      <input class="sm" type="text" placeholder="请输入修改文字" maxlength="20" id="keywordEdit"
+                            style="width: 342px;">
+                      <button class="sussecc w100" onclick="editInput(this,true)" style="margin-right: 0px !important;">
+                          确定
+                      </button>
+                      <button class="w100" onclick="editInput(this,false)"
+                              style="background-color: #BFBFBF;color: white;margin-right: 0px !important;">删除
+                      </button>
+                  </div>
+                  <div class="new-action">
+                    <button type="button" class="w132 new-confirm">确定</button>
+                    <button type="button" class="w132 new-cancel">取消</button>
+                  </div>
                 </div>
                 <div class="data-more-tips keywords-more-tips">关键词已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_keywordmore_customization')">申请数据定制导出></a></div>
                 <div class="tro">
@@ -1020,7 +1026,7 @@
                 </div>
                 <div class="add-input-w- float-box" id="addBuyer" style="display: none;">
                     <div class="l">
-                        <div class="add-w ss" onclick="addInput(this,1)" data-text="添加"></div>
+                        <div class="add-w ss" onclick="addInput(this,1)" data-text="+添加"></div>
                     </div>
                 </div>
                 <div class="data-more-tips buyer-more-tips">最多可添加{{Export.exportLimit.buyerLimit}}个采购单位,目前已达上限,如需添加更多您可<a href="javascript:;" onclick="needSubmitHandle('pc_Dataself_buyermore_customization')">申请数据定制导出></a></div>
@@ -1042,7 +1048,7 @@
                 </div>
                 <div class="add-input-w- float-box" id="addWinner" style="display: none;">
                     <div class="l">
-                        <div class="add-w ss" onclick="addInput(this,2)" data-text="添加"></div>
+                        <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>
@@ -1063,7 +1069,7 @@
                 </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 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>
@@ -3210,19 +3216,29 @@
 
     var msecs = 500;
     $("#keyInput").focus(function () {
-        $(".add-input-w").slideDown(msecs);
         $("#addKeyword").css("display", "none");
+        if ($("#keyInput").val()) {
+          $('.new-box').addClass('bg-active')
+          $(".add-input-w").slideDown(msecs);
+        }
     }).blur(function () {
         if (!$("#keyInput").val()) {
             $(".add-input-w").slideUp(msecs);
+            $('.new-box').removeClass('bg-active')
         }
     });
 
     $("#keyInput").on('input', function () {
         if($(this).val().trim()) {
           $(this).next().show()
+          $('.new-box').addClass('bg-active')
+          $('.new-action').show()
+          $('.new-box .add-input-w').show()
         } else {
           $(this).next().hide()
+          $('.new-box').removeClass('bg-active')
+          $('.new-action').hide()
+          $('.new-box .add-input-w').hide()
         }
     })
 
@@ -3561,6 +3577,11 @@
             case 0: {
                 $("#keyInput").show();
                 $("#keyInput").focus();
+                $('.add-input-w').hide().find('input.sm').remove()
+                $('.new-box').removeAttr('data-type')
+                $('.new-confirm').removeAttr('data-key').removeAttr('data-append').removeAttr('data-exclude').removeAttr('data-type')
+                appendArr = []
+                excludeArr = []
                 break;
             }
             case 1: {
@@ -3785,26 +3806,59 @@
                         var arr = box;
                         appendArr = appendedArr;
                         excludeArr = excludedArr;
-                        var template = createKeyBox(keyword);
-                        var LArr = [$("#inputDel_0 .column:eq(0)>div").length, $("#inputDel_0 .column:eq(1)>div").length, $("#inputDel_0 .column:eq(2)>div").length];
-                        var tempI = LArr.indexOf(Math.min(LArr[0], LArr[1], LArr[2]));
-                        box += ' .column:eq(' + (tempI) + ')';
-                        var tempArr = keyAllArr.map(function (v) {
-                            return v.name
-                        });
-                        if (tempArr.indexOf(keyword) === -1) {
-                            keyAllArr.push({
-                                name: keyword,
-                                append: appendArr,
-                                exclude: excludeArr
-                            })
+                        // var template = createKeyBox(keyword);
+                        // var LArr = [$("#inputDel_0 .column:eq(0)>div").length, $("#inputDel_0 .column:eq(1)>div").length, $("#inputDel_0 .column:eq(2)>div").length];
+                        // var tempI = LArr.indexOf(Math.min(LArr[0], LArr[1], LArr[2]));
+                        // box += ' .column:eq(' + (tempI) + ')';
+                        // var tempArr = keyAllArr.map(function (v) {
+                        //     return v.name
+                        // });
+                        // if (tempArr.indexOf(keyword) === -1) {
+                        //     keyAllArr.push({
+                        //         name: keyword,
+                        //         append: appendArr,
+                        //         exclude: excludeArr
+                        //     })
+                        // }
+                        // appendArr = [];
+                        // excludeArr = [];
+                        // $(".add-input-w input.sm").remove();
+                        // $(".add-input-w").css("display", "none");
+                        // $("#addKeyword").css("display", "block");
+                        // addDelBox(keyword, '#' + box, arr, template);
+                        var tempArr = keyAllArr.map(function(v){return v.name})
+                        if(tempArr.indexOf(keyword) === -1) {
+                          keyAllArr.push({
+                            name: keyword,
+                            append: appendArr,
+                            exclude: excludeArr
+                          })
+                        }
+                        appendArr = []
+                        excludeArr = []
+                        $(".new-box input.sm").remove()
+                        $(".add-input-w").css("display","none");
+                        $("#addKeyword").css("display","block");
+                        $('.new-action').hide()
+                        $('.new-box').removeClass('bg-active')
+                        $('#keyInput').val('').hide()
+                        // tempArr = keyAllArr.map(function(v){return v.name})
+                        console.log(tempArr, 'tempArr');
+                        window[arr] = tempArr
+
+                        var nnTemplate = ''
+                        for (var i = 0; i<keyAllArr.length;i++) {
+                          var key = keyAllArr[i].name
+                          var append = keyAllArr[i].append ? keyAllArr[i].append : ''
+                          var exclude = keyAllArr[i].exclude ? keyAllArr[i].exclude: ''
+                          nnTemplate += createKeyBox(key, append, exclude, i)
                         }
-                        appendArr = [];
-                        excludeArr = [];
-                        $(".add-input-w input.sm").remove();
-                        $(".add-input-w").css("display", "none");
-                        $("#addKeyword").css("display", "block");
-                        addDelBox(keyword, '#' + box, arr, template);
+                        
+                        $('#inputDel_0 .column:eq(0)').html(nnTemplate)
+                        $('#inputDel_0 .column:eq(1)').html(nnTemplate)
+                        $('#inputDel_0 .column:eq(2)').html(nnTemplate)
+                        // 重绘操作
+                        renderColumn()
                     }
                 }